[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