[Checkins] SVN: Sandbox/cklinger/megrok.pagelet/trunk/s Get rid of the PageletGrokker use instead groks ViewGrokker

Christian Klinger cklinger at novareto.de
Thu Mar 19 10:27:21 EDT 2009


Log message for revision 98272:
  Get rid of the PageletGrokker use instead groks ViewGrokker

Changed:
  U   Sandbox/cklinger/megrok.pagelet/trunk/setup.py
  U   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py
  U   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py
  D   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_renderer.py

-=-
Modified: Sandbox/cklinger/megrok.pagelet/trunk/setup.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/setup.py	2009-03-19 12:02:52 UTC (rev 98271)
+++ Sandbox/cklinger/megrok.pagelet/trunk/setup.py	2009-03-19 14:27:21 UTC (rev 98272)
@@ -30,7 +30,6 @@
 	  'interlude',
           'grokcore.component',
 	  'z3c.template',
-	  'z3c.pagelet',
           'grok',  # just for the ViewGrokker
       ],
       entry_points="""

Modified: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py	2009-03-19 12:02:52 UTC (rev 98271)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py	2009-03-19 14:27:21 UTC (rev 98272)
@@ -1,6 +1,5 @@
 import martian.util
 import grokcore.component 
-import z3c.flashmessage.interfaces
 
 from zope import interface
 from zope import component
@@ -10,67 +9,26 @@
 from martian.error import GrokImportError
 from zope.interface import implements
 from zope.component import getMultiAdapter
-from z3c.pagelet.interfaces import IPagelet
 from zope.publisher.browser import BrowserPage
 from z3c.template.interfaces import ILayoutTemplate
 from grokcore.view.interfaces import IGrokView
+import grok
 
+
 class Layout(object):
     """ A basic class for Layouts"""
     pass
 
-
-class Pagelet(BrowserPage):
-    implements(IGrokView, IPagelet)
-    template = None
+class Pagelet(grok.View):
+    """ This is the BaseClass for the Pagelets"""
+    grok.baseclass()
     layout = None
 
-    def __init__(self, context, request):
-        super(Pagelet, self).__init__(context, request)
-        self.__name__ = self.__view_name__
-        self.static = component.queryAdapter(
-            self.request,
-            interface.Interface,
-            name=self.module_info.package_dotted_name
-            )
- 
-    def application_url(self, name=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.")
-
-    def flash(self, message, type='message'):
-        """Send a short message to the user."""
-        # XXX this has no tests or documentation, anywhere
-        source = component.getUtility(
-            z3c.flashmessage.interfaces.IMessageSource, name='session')
-        source.send(message, type)
-
-
-    def default_namespace(self):
-        namespace = {}
-        namespace['context'] = self.context
-        namespace['request'] = self.request
-        namespace['static'] = self.static
-        namespace['view'] = self
-        return namespace
-
-    def namespace(self):
-        return {}
-  
-    def update(self):
-        pass
-
     def render(self):
-        # We don not work with IContentTemplate for now
-        # We use instead our grok.View behavior with the associated
-        # Templates
-        return self.template.render(self)
+        return self._render_template()
 
+    render.base_method = True
+
     def __call__(self):
         """Calls update and returns the layout template which calls render."""
         self.update()
@@ -80,30 +38,3 @@
             return layout(self)
         return self.layout()
 
-
-    def url(self, obj=None, name=None, data=None):
-        """Return string for the URL based on the obj and name. The data
-        argument is used to form a CGI query string.
-        """
-        if isinstance(obj, basestring):
-            if name is not None:
-                raise TypeError(
-                    'url() takes either obj argument, obj, string arguments, '
-                    'or string argument')
-            name = obj
-            obj = None
-
-        if name is None and obj is None:
-            # create URL to view itself
-            obj = self
-        elif name is not None and obj is None:
-            # create URL to view on context
-            obj = self.context
-
-        if data is None:
-            data = {}
-        else:
-            if not isinstance(data, dict):
-                raise TypeError('url() data argument must be a dict.')
-
-        return util.url(self.request, obj, name, data=data)	

Modified: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py	2009-03-19 12:02:52 UTC (rev 98271)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py	2009-03-19 14:27:21 UTC (rev 98272)
@@ -21,81 +21,10 @@
 
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 
-
 def default_view_name(factory, module=None, **data):
     return factory.__name__.lower()
 
 
-class PageletGrokker(martian.ClassGrokker):
-    martian.component(megrok.pagelet.Pagelet)
-    martian.directive(grokcore.component.context)
-    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
-    martian.directive(grokcore.component.name, get_default=default_view_name)
-
-    def grok(self, name, factory, module_info, **kw):
-        # Need to store the module info object on the view class so that it
-        # can look up the 'static' resource directory.
-        factory.module_info = module_info
-        return super(PageletGrokker, self).grok(name, factory, module_info, **kw)
-
-    def execute(self, factory, config, context, layer, name, **kw):
-        # find templates
-        templates = factory.module_info.getAnnotation('grok.templates', None)
-        if templates is not None:
-            config.action(
-                discriminator=None,
-                callable=self.checkTemplates,
-                args=(templates, factory.module_info, factory)
-                )
-
-        # safety belt: make sure that the programmer didn't use
-        # @grok.require on any of the view's methods.
-        methods = util.methods_from_class(factory)
-        for method in methods:
-            if grokcore.security.require.bind().get(method) is not None:
-                raise GrokError('The @grok.require decorator is used for '
-                                'method %r in view %r. It may only be used '
-                                'for XML-RPC methods.'
-                                % (method.__name__, factory), factory)
-
-        # __view_name__ is needed to support IAbsoluteURL on views
-        factory.__view_name__ = name
-        adapts = (context, layer)
-
-        config.action(
-            discriminator=('adapter', adapts, interface.Interface, name),
-            callable=component.provideAdapter,
-            args=(factory, adapts, interface.Interface, name),
-            )
-        return True
-
-    def checkTemplates(self, templates, module_info, factory):
-
-        def has_render(factory):
-            return factory.render != megrok.pagelet.component.Pagelet.render
-        def has_no_render(factory):
-            return not has_render(factory)
-
-
-        templates.checkTemplates(module_info, factory, 'view',
-                                 has_render, has_no_render)
-
-
-
-class PageletSecurityGrokker(martian.ClassGrokker):
-    martian.component(megrok.pagelet.Pagelet)
-    martian.directive(grokcore.security.require, name='permission')
-
-    def execute(self, factory, config, permission, **kw):
-        for method_name in IBrowserPage:
-            config.action(
-                discriminator=('protectName', factory, method_name),
-                callable=protect_getattr,
-                args=(factory, method_name, permission),
-                )
-        return True
-
-
 class LayoutViewGrokker(martian.ClassGrokker):
     """Code resuse for View, ContentProvider and Viewlet grokkers"""
     martian.component(megrok.pagelet.Layout) 
@@ -104,12 +33,14 @@
     martian.directive(grokcore.component.name, get_default=default_view_name)
     martian.directive(megrok.pagelet.template)
 
+
     def grok(self, name, factory, module_info, **kw):
         # Need to store the module info object on the view class so that it
         # can look up the 'static' resource directory.
         factory.module_info = module_info
         return super(LayoutViewGrokker, self).grok(name, factory, module_info, **kw)
 
+
     def execute(self, factory, config, context, layer, name, template, **kw):
         # __view_name__ is needed to support IAbsoluteURL on views
         factory.__view_name__ = name
@@ -126,4 +57,3 @@
             args = (layoutfactory, adapts, ILayoutTemplate, name)
             )
         return True
-

Deleted: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_renderer.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_renderer.py	2009-03-19 12:02:52 UTC (rev 98271)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_renderer.py	2009-03-19 14:27:21 UTC (rev 98272)
@@ -1,60 +0,0 @@
-"""
-  >>> from zope.component import getUtility
-  >>> from zope.publisher.browser import TestRequest
-  >>> from z3c.template.interfaces import ILayoutTemplate
-  >>> from zope.interface import Interface
-  >>> from zope.component import getMultiAdapter
-  >>> request = TestRequest()
-  >>> house = House()
-  >>> view = getMultiAdapter((house, request), name="myview")
-
-Now call the view.
-
-  >>> print view()
-    <html>
-       <body>
-         <div class="layout"><html> <body> <div class="layout"> <div class="content"> my template content </div> </div> </body> </html></div>
-       </body>
-    </html>
-
-"""
-import grok
-import megrok.pagelet
-from zope.interface import Interface
-from zope.component import getMultiAdapter
-from z3c.pagelet.provider import PageletRenderer
-from zope.contentprovider.interfaces import IContentProvider
-import z3c.pagelet.interfaces
-import zope.component
-import zope.interface
-import zope.publisher.interfaces.browser
-
-
-class House(grok.Context):
-    pass
-
-class MyView(megrok.pagelet.Pagelet):
-    grok.context(House)
-
-    def render(self):
-        return '<html> <body> <div class="layout"> <div class="content"> my template content </div> </div> </body> </html>'
-
-class HouseLayout(megrok.pagelet.Layout):
-    grok.context(House)
-    megrok.pagelet.template('templates/house.pt')
-
-class GPageletRenderer(grok.MultiAdapter, PageletRenderer):
-    grok.implements(IContentProvider)
-    grok.name('pagelet')
-    grok.adapts(zope.interface.Interface,
-                zope.publisher.interfaces.browser.IBrowserRequest,
-		z3c.pagelet.interfaces.IPagelet)
-    grok.provides(IContentProvider)
-
-def test_suite():
-    from zope.testing import doctest
-    from megrok.pagelet.tests import FunctionalLayer
-    import interlude
-    suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
-    suite.layer = FunctionalLayer
-    return suite



More information about the Checkins mailing list