[Zope-Checkins] SVN: Products.Five/branches/philikon-local-components/component/ Take the original view class for the 'view' object. In order to find it, we

Philipp von Weitershausen philikon at philikon.de
Wed Mar 1 18:53:25 EST 2006


Log message for revision 65693:
  Take the original view class for the 'view' object. In order to find it, we
  look for it at the global level (which might not be enough in the future). For
  this to work we also need to remember its view name.
  

Changed:
  U   Products.Five/branches/philikon-local-components/component/browser.py
  U   Products.Five/branches/philikon-local-components/component/component.txt

-=-
Modified: Products.Five/branches/philikon-local-components/component/browser.py
===================================================================
--- Products.Five/branches/philikon-local-components/component/browser.py	2006-03-01 23:27:54 UTC (rev 65692)
+++ Products.Five/branches/philikon-local-components/component/browser.py	2006-03-01 23:53:24 UTC (rev 65693)
@@ -22,8 +22,8 @@
 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
 from Products.PageTemplates.Expressions import SecureModuleImporter
 
-from zope.interface import providedBy
-from zope.component import getMultiAdapter
+from zope.interface import Interface, providedBy
+from zope.component import getMultiAdapter, getGlobalSiteManager
 from zope.component.globalregistry import base
 from zope.component.persistentregistry import PersistentComponents
 from zope.publisher.interfaces.browser import IBrowserRequest
@@ -104,7 +104,8 @@
             if reg.name == viewname:
                 break
 
-        components.registerAdapter(viewFactory(viewzpt), required=reg.required,
+        view_factory = viewFactory(viewzpt, viewname)
+        components.registerAdapter(view_factory, required=reg.required,
                                    provided=reg.provided, name=viewname) #XXX info?
         return viewzpt
 
@@ -113,22 +114,30 @@
         #TODO use @@absolute_url view
         self.request.RESPONSE.redirect(viewzpt.absolute_url() + "/manage_workspace")
 
-def viewFactory(viewzpt):
+def viewFactory(viewzpt, viewname):
     def view(context, request):
-        return ZPTView(viewzpt, context, request)
+        return ZPTView(viewzpt, viewname, context, request)
     return view
 
 class ZPTView(BrowserView):
 
-    def __init__(self, viewzpt, context, request):
+    def __init__(self, viewzpt, viewname, context, request):
         self.viewzpt = viewzpt
+        self.viewname = viewname
         self.context = context
         self.request = request
 
+    def _findViewClass(self):
+        gsm = getGlobalSiteManager()
+        view = gsm.queryMultiAdapter((self.context, self.request), Interface,
+                                     name=self.viewname)
+        if view is not None:
+            return view
+        return self
+
     def _zptNamespace(self):
         root = aq_acquire(self.context, 'getPhysicalRoot')()
         here = aq_inner(self.context)
-        view = self #XXX get the "real" view class
         return {
             'template':  self.viewzpt,
             'nothing':   None,
@@ -136,7 +145,7 @@
             'here':      here,
             'context':   here,
             'container': here,
-            'view':      view,
+            'view':      self._findViewClass(),
             'root':      root,
             'modules':   SecureModuleImporter,
             }

Modified: Products.Five/branches/philikon-local-components/component/component.txt
===================================================================
--- Products.Five/branches/philikon-local-components/component/component.txt	2006-03-01 23:27:54 UTC (rev 65692)
+++ Products.Five/branches/philikon-local-components/component/component.txt	2006-03-01 23:53:24 UTC (rev 65693)
@@ -126,6 +126,7 @@
   ... view:      <tal:var replace="structure nocall:view" />
   ... modules:   <tal:var replace="structure modules" />
   ... options:   <tal:var replace="structure options" />
+  ... nothing:   <tal:var replace="structure nothing" />
   ... """, content_type=None)
 
 In order to be able to look up the customized view now, we need to
@@ -145,9 +146,10 @@
   root:      <Application at >
   template:  <ZopePageTemplate at customizetemplate.html>
   request:   <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>
-  view:      <Products.Five.component.browser.ZPTView object at ...>
+  view:      <Products.Five.metaclass.SimpleViewClass from .../Five/component/customizetemplate.pt object at ...>
   modules:   <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter instance at ...>
   options:   {'args': ()}
+  nothing:   
   <BLANKLINE>
 
 Clean up:



More information about the Zope-Checkins mailing list