[Twisted-web] Remembering things in context from a Realm

Matt Goodall matt at pollenation.net
Tue Sep 28 08:04:06 MDT 2004


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 at pollenation.net
 /  \__/  \    t: +44 (0)113 2252500
 \__/  \__/
 /  \          Any views expressed are my own and do not necessarily
 \__/          reflect the views of my employer.




More information about the Twisted-web mailing list