Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Alternative model graph traverser for the repoze.bfg web framework which allows registering arbitrary adapters for the type or interface of model objects encountered during traversal.

Project description

An alternate implementation of the repoze.bfg.interfaces.ITraverserFactory (a “traverser”) which allows you to register an adapter factory for the type or interface(s) of objects encountered during traversal. This is a generalization of the repoze.bfg.traversalwrapper package which automatically wraps each traversed object into a location-aware proxy.

To enable this custom traverser factory, you need to add a dependency on repoze.bfg.traversaladapter to your application and replace the default traverser factory in the configure.zcml configuration file like this:

<adapter
    factory="repoze.bfg.traversaladapter.ModelGraphTraverser"
    provides="repoze.bfg.interfaces.ITraverserFactory"
    for="*"
    />

Given a simple factory for adapters for a model class mymodule.Foo defined in the module mymodule like this

def foo_factory(foo, parent, name):
    return FooAdapter(foo, parent, name)

you could then register foo_factory as a traversal adapter factory as follows:

<adapter
    factory="mymodule.foo_factory"
    provides="repoze.bfg.traversaladapter.ITraversalAdapterFactory"
    for="mymodule.Foo"
    />

If Foo was implementing the interface mymodule.IFoo, the following registration would also work:

<adapter
    factory="mymodule.foo_factory"
    provides="repoze.bfg.traversaladapter.ITraversalAdapterFactory"
    for="mymodule.IFoo"
    />

During traversal of your repoze.bfg application, each object of type Foo will then automatically be wrapped in a FooAdapter instance.

Note that the registered factory always gets the current model object, its parent and its name passed as arguments. If your FooAdapter class was set up to receive a Foo instance, a parent object, and a name string in its constructor like so

class FooAdapter(object):
    def __init__(self, foo, parent, name):
        self.foo = foo
        self.parent = parent
        self.name = name

you could register the adapter class itself as the adapter factory.

See the repoze.bfg.traversaladapter.tests.TraversalAdapterTests module for further examples.

Project details


Release history Release notifications

This version

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for repoze.bfg.traversaladapter, version 0.1
Filename, size File type Python version Upload date Hashes
Filename, size repoze.bfg.traversaladapter-0.1.tar.gz (5.9 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page