On Tue, 2004-09-28 at 14:48, Donovan Preston wrote:
On Sep 28, 2004, at 12:41 AM, Alex Levy wrote:
I have a Realm class that does something akin to the following:
class MyRealm: def requestAvatar(self, id, mind, *interfaces): if IResource is in interfaces: user = figureOutWhoTheUserIs(id) resource = getResourceForUser(user) resource.remember(user, ICurrentUser) return (IResource, resource, lambda:None)
...and this doesn't seem to be working with the ubiquitous context. _Should_ it work, or do I need a new way to do something like this?
Help is appreciated; I'm trying hard to get back in the loop. :/
You are going to have to put user as an attribute on resource, then remember it in the context in an overridden locateChild.
Or, you can create a IResource wrapper that is used like this from requestAvatar: return (IResource, RememberWrapper(resource, user), lambda:None) and looks like this (untested): class RememberWrapper: __implements__ = inevow.IResource, def __init__(self, resource, user): self.resource = resource self.user = user def locateChild(self, ctx, segments): ctx.remember(self.user, ICurrentUser) return self.resource, segments def renderHTTP(self, ctx): ctx.remember(self.user, ICurrentUser) return self.resource.renderHTTP(ctx) This avoids setting attributes on the resource which means you can reuse a single *real* resource object if that makes sense to your application. Hope this helps. Cheers, Matt -- __ / \__ Matt Goodall, Pollenation Internet Ltd \__/ \ w: http://www.pollenation.net __/ \__/ e: matt@pollenation.net / \__/ \ t: +44 (0)113 2252500 \__/ \__/ / \ Any views expressed are my own and do not necessarily \__/ reflect the views of my employer.