diff options
| author | Chris McDonough <chrism@agendaless.com> | 2008-07-04 06:30:02 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2008-07-04 06:30:02 +0000 |
| commit | 612d7478492b8c96cb138b7ee6f9b1829d046fc8 (patch) | |
| tree | df5356c97b7fe9cc681553f156a9e4ddbb0a4b79 /repoze/bfg/zodb.py | |
| download | pyramid-612d7478492b8c96cb138b7ee6f9b1829d046fc8.tar.gz pyramid-612d7478492b8c96cb138b7ee6f9b1829d046fc8.tar.bz2 pyramid-612d7478492b8c96cb138b7ee6f9b1829d046fc8.zip | |
Start on bfg.
Diffstat (limited to 'repoze/bfg/zodb.py')
| -rw-r--r-- | repoze/bfg/zodb.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/repoze/bfg/zodb.py b/repoze/bfg/zodb.py new file mode 100644 index 000000000..976c687fb --- /dev/null +++ b/repoze/bfg/zodb.py @@ -0,0 +1,37 @@ +from zope.interface import implements + +from repoze.zodbconn.middleware import get_conn + +from repoze.bfg.interfaces import IPolicy + +class ZODBGetitemPolicy: + + implements(IPolicy) + + def __init__(self, dbname, prefix=()): + self.dbname = dbname + self.prefix = prefix + self.get_conn = get_conn + + def __call__(self, environ): + conn = self.get_conn(environ, self.dbname) + if conn is None: + raise ValueError('No such connection %s' % self.dbname) + + path = environ['PATH_INFO'].split('/') + path = list(self.prefix) + path + + ob = conn.open() + + name = '' + while path: + element = path.pop(0) + try: + ob = ob[element] + except KeyError: + if path: + name = path.pop(0) + break + + return ob, name, path + |
