[Repoze-dev] Repoze CVS: publisher.py
Tres Seaver
tseaver at agendaless.com
Wed Sep 12 23:27:23 UTC 2007
Update of /home/repoze/cvs/repoze.obob/repoze/obob
In directory laguna.palladion.com:/tmp/cvs-serv17082/repoze/obob
Modified Files:
publisher.py
Log Message:
- Add 'setup' / 'teardown' methods to traversal helper API.
Index: publisher.py
===================================================================
RCS file: /home/repoze/cvs/repoze.obob/repoze/obob/publisher.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- publisher.py 12 Sep 2007 22:51:30 -0000 1.8
+++ publisher.py 12 Sep 2007 23:27:21 -0000 1.9
@@ -12,6 +12,9 @@
def __init__(self, environ):
self.environ = environ
+ def setup(self):
+ pass
+
def path_elements(self):
return [x for x in self.environ['PATH_INFO'].split('/') if x.strip()]
@@ -32,9 +35,15 @@
result = [result]
return '200 OK', [('Content-Type', 'text/html')], result
+ def teardown(self):
+ pass
+
class ObobPublisher:
- """
+ """ repoze graph-traversal publisher.
+
+ o Plug points include a callable to find the root object for traversal,
+ plus one to return a traversal policy helper.
"""
def __init__(self,
get_root=None,
@@ -77,21 +86,25 @@
5. Map result onto WSGI 'start_response' + iteration.
"""
helper = self.helper_factory(environ)
- root = current = self.get_root(environ)
+ try:
+ helper.setup()
+ root = current = self.get_root(environ)
- for name in helper.path_elements():
- helper.before_traverse(current, name)
- current = helper.traverse(current, name)
+ for name in helper.path_elements():
+ helper.before_traverse(current, name)
+ current = helper.traverse(current, name)
- published = current
+ published = current
- helper.before_invoke(published)
- result = helper.invoke(published)
+ helper.before_invoke(published)
+ result = helper.invoke(published)
- status, headers, body_iter = helper.map_result(result)
+ status, headers, body_iter = helper.map_result(result)
- start_response(status, headers)
- return body_iter
+ start_response(status, headers)
+ return body_iter
+ finally:
+ helper.teardown()
def get_root(self, environ):
return self._default_root
@@ -100,7 +113,8 @@
return DefaultHelper(environ)
class _DefaultRoot:
-
+ """ Default root object, configured as a callable mapping.
+ """
def __init__(self, dispatchable):
self._dispatchable = dispatchable
@@ -131,10 +145,14 @@
)
def _resolve(dotted_or_ep):
+ """ Resolve a dotted name or setuptools entry point to a callable.
+ """
from pkg_resources import EntryPoint
return EntryPoint.parse('x=%s' % dotted_or_ep).load(False)
def make_obob(global_config, **kw):
+ """ WSGI application factory.
+ """
PREFIX = 'repoze.obob.'
dispatchable = {}
extras = {}
_______________________________________________
Repoze-dev mailing list
Repoze-dev at lists.repoze.org
http://lists.repoze.org/mailman/listinfo/repoze-dev
More information about the Repoze-dev
mailing list