[Checkins] SVN: lovely.zetup/trunk/ - made the publication request factory more generic (to accept jsonrpc requests)

Juergen Kartnaller juergen at kartnaller.at
Fri Nov 14 09:02:25 EST 2008


Log message for revision 92922:
  - made the publication request factory more generic (to accept jsonrpc requests)
  

Changed:
  U   lovely.zetup/trunk/CHANGES.txt
  U   lovely.zetup/trunk/setup.py
  U   lovely.zetup/trunk/src/lovely/zetup/app.py
  U   lovely.zetup/trunk/src/lovely/zetup/factory.py

-=-
Modified: lovely.zetup/trunk/CHANGES.txt
===================================================================
--- lovely.zetup/trunk/CHANGES.txt	2008-11-14 13:04:30 UTC (rev 92921)
+++ lovely.zetup/trunk/CHANGES.txt	2008-11-14 14:02:24 UTC (rev 92922)
@@ -2,6 +2,11 @@
 Changes in lovely.zetup
 =======================
 
+2008/11/14 0.1.0a1
+==================
+
+- made the publication request factory more generic (to accept jsonrpc requests)
+
 0.0.1a1
 =======
 

Modified: lovely.zetup/trunk/setup.py
===================================================================
--- lovely.zetup/trunk/setup.py	2008-11-14 13:04:30 UTC (rev 92921)
+++ lovely.zetup/trunk/setup.py	2008-11-14 14:02:24 UTC (rev 92922)
@@ -3,7 +3,7 @@
 
 setup(
     name="lovely.zetup",
-    version="0.0.1a1",
+    version="0.1.0a1",
     zip_safe = False,
     include_package_data = True,
     packages = find_packages('src'),

Modified: lovely.zetup/trunk/src/lovely/zetup/app.py
===================================================================
--- lovely.zetup/trunk/src/lovely/zetup/app.py	2008-11-14 13:04:30 UTC (rev 92921)
+++ lovely.zetup/trunk/src/lovely/zetup/app.py	2008-11-14 14:02:24 UTC (rev 92922)
@@ -16,17 +16,21 @@
 """
 __docformat__ = 'restructuredtext'
 
+import xmlrpclib
+
+from zope import interface
+
+import zope.publisher.xmlrpc
 from zope.app.wsgi import WSGIPublisherApplication
 from zope.app.publication.interfaces import IPublicationRequestFactory
 from zope.publisher.browser import BrowserRequest
+from zope.app.publication.httpfactory import chooseClasses
 from publication import NoZODBPublication
-from zope import interface
 from zope.publisher.interfaces.browser import IBrowserRequest
 from zope.publisher.browser import setDefaultSkin
 from zope.publisher.publish import publish
-import zope.publisher.xmlrpc
-import xmlrpclib
 
+
 class XMLRPCRequest(zope.publisher.xmlrpc.XMLRPCRequest):
 
     def processInputs(self):
@@ -46,21 +50,24 @@
     interface.implements(IPublicationRequestFactory)
 
     def __init__(self):
+
         """See `zope.app.publication.interfaces.IPublicationRequestFactory`"""
         self._publication_cache = {}
         self._publication = NoZODBPublication()
 
     def __call__(self, input_stream, env):
+
         """See
         `zope.app.publication.interfaces.IPublicationRequestFactory`"""
         method = env.get('REQUEST_METHOD', 'GET').upper()
-        contentType = env.get('CONTENT_TYPE', '')
-        if method=='POST' and contentType == 'text/xml':
-            klass = XMLRPCRequest
-        else:
-            klass = BrowserRequest
-        request = klass(input_stream, env)
-        request.setPublication(self._publication)
+        requestClass, publicationClass = chooseClasses(method, env)
+        request = requestClass(input_stream, env)
+        # we must hack the publication's getApplication method because it uses
+        # ZODB.
+        publication = publicationClass(None)
+        publication.getApplication = self._publication.getApplication
+        publication._app = self._publication._app
+        request.setPublication(publication)
         if IBrowserRequest.providedBy(request):
             # only browser requests have skins
             setDefaultSkin(request)

Modified: lovely.zetup/trunk/src/lovely/zetup/factory.py
===================================================================
--- lovely.zetup/trunk/src/lovely/zetup/factory.py	2008-11-14 13:04:30 UTC (rev 92921)
+++ lovely.zetup/trunk/src/lovely/zetup/factory.py	2008-11-14 14:02:24 UTC (rev 92922)
@@ -51,8 +51,6 @@
     ...
     RuntimeError: There is already another config running '.../testing.py'
     """
-    if logging in ("0", "no", "false", "off"):
-        logging = False
     if cfg is None:
         raise ValueError, "Missing config path %r" % cfg
     global _app, _configPath
@@ -65,6 +63,7 @@
     _configPath = cfgFile
     if _app is not None:
         return _app
+    logging = logging not in ("0", "no", "false", "off")
     cfg = Config(cfgFile, withLogging=logging)
     component.provideUtility(cfg)
     _app = Application()



More information about the Checkins mailing list