[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