[Twisted-Python] Questions regarding serviceCollection and Interfaces.
kgi
iacovou at gmail.com
Wed Jul 6 08:18:53 MDT 2005
On Tuesday 05 July 2005 16:50, Itamar Shtull-Trauring wrote:
> On Tue, 2005-07-05 at 15:16 +0300, kgi wrote:
> > I can't grok what this "means", especially in light of the fact that
> > there is "MultiService" below it that implements IServiceCollection.
>
> This is interface adaptation, see
> http://twistedmatrix.com/projects/core/documentation/howto/components.html
> for an expalantion.
Thanks for your answer, Itamar.
I've read the information at the link, and I think I've moved a few rungs up
the grokking ladder now. I had previously read the Zope Interface
introduction at:
http://svn.zope.org/Zope3/trunk/src/zope/interface/README.txt?view=markup
but this mostly just talks about the relationship between interfaces and
objects (i.e. lots of .providedBy() and implementedBy() examples), and
doesn't touch interface adaptation and components.
I do have one question arising from the Zope documentation, though. In the
link above, it says (abridged):
"""
class IFoo(zope.interface.Interface):
def bar(q, r=None):
"""bar blah blah"""
[...]
Note that `bar` doesn't take a `self` argument. Interfaces document
how an object is *used*. When calling instance methods, you don't
pass a `self` argument, so a `self` argument isn't included in the
interface signature.
"""
Yet all the examples I've seen in the Twisted documentation have interface
methods that contain "self" parameters; for example, from the link you sent
me:
from zope.interface import Interface
class IAmericanSocket(Interface):
def voltage(self):
"""Return the voltage produced by this socket object, as an integer.
"""
Is this simply a cosmetic thing (i.e. no code actually looks at the function
signature) or is the Zope Interface documentation out of date or wrong?
> > 3. What do I gain by using a serviceCollection over an application as the
> > serviceParent of a TCPServer? Come to think of it, what did I gain in
> > the first place with setServiceParent()?
>
> Services are setup as a tree; the application is the root of the tree.
> Services let you organize your code as pluggable self-contained parts
> that get startup and shutdown events. Of course, for a simple TCP server
> that doesn't give you much.
Got you, thanks.
> > In this case in the server I need a Protocol/TCPServer server to
> > handle the multiple clients, and a single Protocol/connectTCP
> > client for the upstream connection. However, it's not clear to me
> > how I would transfer the data from the lineReceived() method of the
> > server Protocol to the sendLine() method of the client Protocol,
> > since each Protocol can see its own Factory, but not the Factory of
> > the other Protocol.
>
> myServerFactory.clientFactory = myClientFactory
> # and now server Protocol instances can do self.factory.clientFactory
OK, so it's as simple as just boshing in a new attribute. I guess I had got so
hung up on not understanding the "service" stuff previously I was convinced
the right way to access other Factories was via the serviceCollection.
Again, thanks for your answer.
Ricky
P.S. I took so long in answering because I wanted to be able to answer
maintaining the original message threading information (I know some people
get really upset when you break threading), which eventually meant setting up
a separate postfix server just for outgoing gmail email.
If anyone has any information on either (1) getting a single postfix instance
to work with multiple relayhosts for multiple "identities", or (2)
configuring kmail to send directly to gmail over TLS, I'd love to hear how
you did it. I found lots of generic configuration info for kmail, but I
couldn't get kmail to manage it whatever I did.
More information about the Twisted-Python
mailing list