[Checkins] SVN: grok/trunk/ merge -r 106040:106058 svn+ssh://svn.zope.org/repos/main/grok/branches/jw-viewsupport-mixin

Jan-Wijbrand Kolman janwijbrand at gmail.com
Fri Nov 27 05:55:16 EST 2009


Log message for revision 106060:
  merge -r 106040:106058 svn+ssh://svn.zope.org/repos/main/grok/branches/jw-viewsupport-mixin

Changed:
  U   grok/trunk/src/grok/components.py
  U   grok/trunk/src/grok/util.py
  U   grok/trunk/versions.cfg

-=-
Modified: grok/trunk/src/grok/components.py
===================================================================
--- grok/trunk/src/grok/components.py	2009-11-27 10:52:41 UTC (rev 106059)
+++ grok/trunk/src/grok/components.py	2009-11-27 10:55:15 UTC (rev 106060)
@@ -235,14 +235,9 @@
     """
     interface.implements(interfaces.IGrokView)
 
-    def application_url(self, name=None):
+    def application_url(self, name=None, data=None):
         """Return the URL of the nearest enclosing `grok.Application`."""
-        obj = self.context
-        while obj is not None:
-            if isinstance(obj, Application):
-                return self.url(obj, name)
-            obj = obj.__parent__
-        raise ValueError("No application found.")
+        return util.application_url(self.request, self.context, name, data)
 
     def flash(self, message, type='message'):
         """Send a short message to the user."""
@@ -284,7 +279,13 @@
     interface.implements(interfaces.IGrokForm)
 
 
-class XMLRPC(object):
+class ViewishViewSupport(grokcore.view.ViewSupport):
+
+    def application_url(self, name=None, data=None):
+        return util.application_url(self.request, self.context, name, data)
+
+
+class XMLRPC(ViewishViewSupport):
     """Base class for XML-RPC endpoints in Grok applications.
 
     When an application creates a subclass of `grok.XMLRPC`, it is
@@ -311,21 +312,16 @@
     """
 
 
-class REST(zope.location.Location):
+class REST(zope.location.Location, ViewishViewSupport):
     """Base class for REST views in Grok applications."""
     interface.implements(interfaces.IREST)
 
     def __init__(self, context, request):
         self.context = self.__parent__ = context
         self.request = request
-        self.body = request.bodyStream.getCacheStream().read()
 
-    @property
-    def response(self):
-        return self.request.response
 
-
-class JSON(BrowserPage):
+class JSON(BrowserPage, ViewishViewSupport):
     """Base class for JSON views in Grok applications."""
     interface.implements(interfaces.IGrokSecurityView)
 

Modified: grok/trunk/src/grok/util.py
===================================================================
--- grok/trunk/src/grok/util.py	2009-11-27 10:52:41 UTC (rev 106059)
+++ grok/trunk/src/grok/util.py	2009-11-27 10:55:15 UTC (rev 106060)
@@ -21,6 +21,7 @@
 from zope.exceptions.interfaces import DuplicationError
 from zope.security.checker import NamesChecker, defineChecker
 
+from grokcore.view.util import url
 from grokcore.security.util import check_permission
 
 
@@ -91,3 +92,12 @@
     grok.notify(grok.ApplicationInitializedEvent(application))
 
     return application
+
+
+def application_url(request, obj, name=None, data={}):
+    """Return the URL of the nearest enclosing `grok.Application`."""
+    while obj is not None:
+        if isinstance(obj, grok.Application):
+            return url(request, obj, name, data)
+        obj = obj.__parent__
+    raise ValueError("No application found.")

Modified: grok/trunk/versions.cfg
===================================================================
--- grok/trunk/versions.cfg	2009-11-27 10:52:41 UTC (rev 106059)
+++ grok/trunk/versions.cfg	2009-11-27 10:55:15 UTC (rev 106060)
@@ -6,7 +6,7 @@
 grokcore.security = 1.2
 grokcore.site = 1.1
 grokcore.startup = 0.4
-grokcore.view = 1.13a1
+grokcore.view = 1.13a2
 grokcore.viewlet = 1.3
 grokui.admin = 0.3.2
 martian = 0.11.1



More information about the checkins mailing list