[Web-SIG] Using decorators to add objects in a thread-local store..

Etienne Robillard robillard.etienne at gmail.com
Mon Jul 14 22:09:18 CEST 2008



Hi all,

I'd like to have your input and comments on using decorators
functions for adding extra options to the request.environ object.

For instance, here's a decorator whichs adds a "scoped" session
object into request.environ:

def with_session(engine=None):
    """
    Decorator function for attaching a `Session` instance
    as a keyword argument in `request.environ`.
    """
    def decorator(view_func):
        def _wrapper(request, *args, **kwargs):
            scoped_session.set_session(engine)
            request.environ['_scoped_session'] = getattr(scoped_session, 'sessio
            return view_func(request, *args, **kwargs)
        return wraps(view_func)(_wrapper)
    return decorator

Then it can be used as follows:

@with_session(engine=engine):
def view_blog_list(request, *args, **kwargs):
    # get the local session object for this
    # request (thread-local)
    sess = request.environ['_scoped_session']
    # do stuff with the Session object here...
    ...

Is this a good approach, or can this be adapted to work
in multithreaded environments ?

For details, you can checkout the source code of notmm, which
holds the current implementation of the with_session decorator:

$ hg clone -r tip http://gthc.org/projects/notmm/repo/ notmm
For more details about notmm, please see here: http://gthc.org/projects/notmm/

Thanks and Regards,

Etienne  


More information about the Web-SIG mailing list