[Repoze-dev] Repoze CVS: publisher.py

Tres Seaver tseaver at agendaless.com
Wed Sep 12 15:19:11 UTC 2007


Update of /home/repoze/cvs/repoze.obob/repoze/obob
In directory laguna.palladion.com:/tmp/cvs-serv16102/repoze/obob

Modified Files:
	publisher.py 
Log Message:
 - Turn private methods into defaults with override via Paste config.

Index: publisher.py
===================================================================
RCS file: /home/repoze/cvs/repoze.obob/repoze/obob/publisher.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- publisher.py	11 Sep 2007 01:19:50 -0000	1.1
+++ publisher.py	12 Sep 2007 15:19:09 -0000	1.2
@@ -2,9 +2,12 @@
 
     def __init__(self,
                  root=None,
+                 request_factory=None,
                  before_traverse=None,
                  traverse=None,
                  before_invoke=None,
+                 invoke=None,
+                 map_result=None,
                 ):
 
         if root is None:
@@ -14,6 +17,11 @@
         if not callable(root):
             raise ValueError("'root' not callable!")
 
+        if request_factory is not None:
+            if not callable(request_factory):
+                raise ValueError("'request_factory' not callable!")
+            self.request_factory = request_factory
+
         if before_traverse is not None:
             if not callable(before_traverse):
                 raise ValueError("'before_traverse' not callable!")
@@ -29,10 +37,20 @@
                 raise ValueError("'before_invoke' not callable!")
         self.before_invoke = before_invoke
 
+        if invoke is not None:
+            if not callable(invoke):
+                raise ValueError("'invoke' not callable!")
+            self.invoke = invoke
+
+        if map_result is not None:
+            if not callable(map_result):
+                raise ValueError("'map_result' not callable!")
+            self.map_result = map_result
+
     def __call__(self, environ, start_response):
         """ Application dispatch via graph traversal.
         
-        1. Convert environ into Zope-style request / response pair.
+        1. Convert WSGI environ into a request object.
 
         2. Get traversal root via self.root().
 
@@ -47,9 +65,9 @@
         5. Call the terminal ("published") object, applying request
            parameters.
 
-        6. Map result + response onto WSGI 'start_response' + iteration.
+        6. Map result + request onto WSGI 'start_response' + iteration.
         """
-        request, response = self._makeRequestResponse(environ)
+        request = self.request_factory(environ)
         root = current = self.root(request)
         def _noop(*args, **kw):
             pass
@@ -63,15 +81,25 @@
         published = request['PUBLISHED'] = current
         _bi(published, request)
 
-        result = self._apply(published, request)
+        result = self.invoke(published, request)
 
-        status, headers, body_iter = self._mapResult(request, response, result)
+        status, headers, body_iter = self._mapResult(request, result)
 
         start_response(status, headers)
 
         for chunk in body_iter:
             yield chunk
 
+    def request_factory(self, environ):
+        # Default implementation
+        return environ
+
     def traverse(self, current, name):
         # Default implementation
         return current[name]
+
+    def invoke(self, published, request):
+        return published(request)
+
+    def map_result(self, request, result):
+        return 200, {}, [result]

_______________________________________________
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