[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