On Tue, Nov 11, 2003 at 02:03:39PM -0500, Phil Christensen wrote:
okay, so if i've got a tap with the following updateApplication method:
def updateApplication(app, config): app.registry = registry.Registry() ... ...
and i want to access that app.registry attribute from an arbitrary location, how do i do it?
i seem to remember hearing that there was only one instance of Application in a process, so does that mean that there's some (forgive the Java-speak) static method defined on the Application module that will get the current running instance?
The old way of doing this would be... from twisted.internet.app import theApplication theApplication.registry However, this bites. 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 to 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). Jp