diff options
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 + |
