[Twisted-Python] an easy twisted application question
phil at bubblehouse.org
Tue Nov 11 16:28:55 EST 2003
Okay, that answers another question I had, but I'm still not clear on how
to get at that service object from a couple of places.
For example, here's my Realm implementation:
__implements__ = portal.IRealm
def requestAvatar(self, avatarId, mind, *interfaces):
if pb.IPerspective in interfaces:
registry = ### how do i get this?
avatar = UserPerspective(mind, registry.get(avatarId))
return pb.IPerspective, avatar, avatar.logout
raise NotImplementedError("no interface")
what's the right way to get that service object?
this issue comes up again in my UserPerspective class, where i need to
access that registry object during perspective_xxx methods...
there is a part of me that just wants to use registry as a one-off class
with a class variable that returns the current instance, but i don't like
that part ;-).....
> Newly written programs should implement makeService() instead of
> updateApplication(). As a bonus, purely service-based programs can easily
> and cleanly do things like the above:
> from twisted.application import service
> class RegistryService(service.Service):
> def __init__(self):
> self.registry = registry.Registry()
> def makeService(config):
> s = RegistryService()
> anotherS = SomeotherService()
> anotherS.setServiceParent(s) # Or s.setServiceParent(anotherS)
> return s # or return anotherS
> `s' can be the parent service of other services, in which case it can be
> accessed simply by looking up the parent service, or it could be a child
> service of something else, in which case it would be accessed via a call
> getServiceNamed() on the appropriate parent.
> This avoids the need for globals and lets services/applications be more
> readily configurable alongside other services/applications (since neither
> will have global state that might interfer with the other).
More information about the Twisted-Python