Skip to main content

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 | RSS feed

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.

Source Distribution

repoze.bfg.traversaladapter-0.1.tar.gz (5.9 kB view details)

Uploaded Source

File details

Details for the file repoze.bfg.traversaladapter-0.1.tar.gz.

File metadata

File hashes

Hashes for repoze.bfg.traversaladapter-0.1.tar.gz
Algorithm Hash digest
SHA256 5b9d78f4aee64eae46424d26e3f55ef476a9f6f2924fd01602e569b428716f48
MD5 093c2fef4097d9145341f6895d29c79e
BLAKE2b-256 68f9ea3e67dcf4d0f10bf49c2a632d7eb649ca26fae6c6e5d3e5ca6d971be109

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page