[Checkins] SVN: grok/branches/sylvain-grokcore-viewlets/ Use grokcore.viewlet instead of default Viewlet support.
Sylvain Viollon
sylvain at infrae.com
Sun Nov 16 16:05:35 EST 2008
Log message for revision 93018:
Use grokcore.viewlet instead of default Viewlet support.
Changed:
U grok/branches/sylvain-grokcore-viewlets/setup.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/__init__.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/components.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/configure.zcml
U grok/branches/sylvain-grokcore-viewlets/src/grok/directive.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/interfaces.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/meta.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/meta.zcml
U grok/branches/sylvain-grokcore-viewlets/src/grok/testing.py
D grok/branches/sylvain-grokcore-viewlets/src/grok/tests/order/
U grok/branches/sylvain-grokcore-viewlets/src/grok/tests/test_grok.py
U grok/branches/sylvain-grokcore-viewlets/src/grok/util.py
U grok/branches/sylvain-grokcore-viewlets/versions.cfg
-=-
Modified: grok/branches/sylvain-grokcore-viewlets/setup.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/setup.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/setup.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -40,6 +40,7 @@
'grokcore.formlib',
'grokcore.security',
'grokcore.view',
+ 'grokcore.viewlet',
'simplejson',
'pytz',
'ZODB3',
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/__init__.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/__init__.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/__init__.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -39,6 +39,12 @@
from grokcore.view import url
from grokcore.view import path
+from grokcore.viewlet import Viewlet
+from grokcore.viewlet import ViewletManager
+from grokcore.viewlet import view
+from grokcore.viewlet import viewletmanager
+from grokcore.viewlet import order
+
from grokcore.formlib import action
from grokcore.formlib import AutoFields
from grokcore.formlib import Fields
@@ -69,10 +75,9 @@
from grok.components import Role
from grok.components import RESTProtocol, IRESTLayer
from grok.interfaces import IRESTSkinType
-from grok.components import ViewletManager, Viewlet
from grok.directive import (local_utility, permissions, site,
- viewletmanager, view, traversable, order)
+ traversable)
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/components.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/components.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/components.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -38,9 +38,6 @@
from zope.app.component.site import SiteManagerContainer
from zope.app.component.site import LocalSiteManager
-from zope.viewlet.manager import ViewletManagerBase
-from zope.viewlet.viewlet import ViewletBase
-
import grok
import z3c.flashmessage.interfaces
import martian.util
@@ -303,100 +300,3 @@
class RESTProtocol(object):
pass
-class ViewletManager(ViewletManagerBase):
- interface.implements(interfaces.IViewletManager)
-
- template = None
-
- def __init__(self, context, request, view):
- super(ViewletManager, self).__init__(context, request, view)
- self.context = context
- self.request = request
- self.view = view
- self.__name__ = self.__view_name__
- self.static = component.queryAdapter(
- self.request,
- interface.Interface,
- name=self.module_info.package_dotted_name
- )
-
- def sort(self, viewlets):
- """Sort the viewlets.
-
- ``viewlets`` is a list of tuples of the form (name, viewlet).
- """
- # In Grok, the default order of the viewlets is determined by
- # util.sort_components. util.sort_components() however expects
- # a list of just components, but sort() is supposed to deal
- # with a list of (name, viewlet) tuples.
- # To handle this situation we first store the name part on the
- # viewlet, then use util.sort_components() and then "unpack"
- # the name from the viewlet and recreate the list of (name,
- # viewlet) tuples, now in the correct order.
- s_viewlets = []
- for name, viewlet in viewlets:
- # Stuff away viewlet name so we can later retrieve it.
- # XXX We loose name information in case the same viewlet
- # is in the viewlets list twice, but with a different
- # name. Most probably this situation doesn't occur.
- viewlet.__viewlet_name__ = name
- s_viewlets.append(viewlet)
- s_viewlets = util.sort_components(s_viewlets)
- return [(viewlet.__viewlet_name__, viewlet) for viewlet in s_viewlets]
-
- def default_namespace(self):
- namespace = {}
- namespace['context'] = self.context
- namespace['request'] = self.request
- namespace['static'] = self.static
- namespace['view'] = self.view
- namespace['viewletmanager'] = self
- return namespace
-
- def namespace(self):
- return {}
-
- def render(self):
- """See zope.contentprovider.interfaces.IContentProvider"""
- # Now render the view
- if self.template:
- return self.template.render(self)
- else:
- return u'\n'.join([viewlet.render() for viewlet in self.viewlets])
-
-
-class Viewlet(ViewletBase):
- """Batteries included viewlet.
- """
-
- def __init__(self, context, request, view, manager):
- super(Viewlet, self).__init__(context, request, view, manager)
- self.context = context
- self.request = request
- self.view = view
- self.viewletmanager = manager
- self.__name__ = self.__view_name__
- self.static = component.queryAdapter(
- self.request,
- interface.Interface,
- name=self.module_info.package_dotted_name
- )
-
- def default_namespace(self):
- namespace = {}
- namespace['context'] = self.context
- namespace['request'] = self.request
- namespace['static'] = self.static
- namespace['view'] = self.view
- namespace['viewlet'] = self
- namespace['viewletmanager'] = self.manager
- return namespace
-
- def namespace(self):
- return {}
-
- def update(self):
- pass
-
- def render(self):
- return self.template.render(self)
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/configure.zcml
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/configure.zcml 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/configure.zcml 2008-11-16 21:05:35 UTC (rev 93018)
@@ -28,6 +28,7 @@
<include package="zope.app.session" />
<include package="grokcore.view" />
+ <include package="grokcore.viewlet" />
<include package="grokcore.formlib" />
<securityPolicy
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/directive.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/directive.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/directive.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -14,20 +14,13 @@
"""Grok directives.
"""
-import sys
import grok
from zope import interface
from zope.interface.interfaces import IInterface
-from zope.interface.interface import TAGGED_DATA
-from zope.publisher.interfaces.browser import IBrowserView
-
import martian
from martian import util
-from martian.error import GrokImportError, GrokError
-from martian.directive import StoreOnce, StoreMultipleTimes
-from grokcore.component.scan import UnambiguousComponentScope
-from grok import components
+from martian.error import GrokImportError
class local_utility(martian.Directive):
scope = martian.CLASS
@@ -110,18 +103,6 @@
def factory(self, *args):
return args
-class OneInterfaceOrClassOnClassOrModule(martian.Directive):
- """Convenience base class. Not for public use."""
- scope = martian.CLASS_OR_MODULE
- store = martian.ONCE
- validate = martian.validateInterfaceOrClass
-
-class viewletmanager(OneInterfaceOrClassOnClassOrModule):
- scope = UnambiguousComponentScope('viewletmanager')
-
-class view(OneInterfaceOrClassOnClassOrModule):
- default = IBrowserView
-
class traversable(martian.Directive):
scope = martian.CLASS
store = martian.DICT
@@ -131,13 +112,3 @@
name = attr
return (name, attr)
-class order(martian.Directive):
- scope = martian.CLASS
- store = martian.ONCE
- default = 0, 0
-
- _order = 0
-
- def factory(self, value=0):
- order._order += 1
- return value, order._order
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/interfaces.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/interfaces.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/interfaces.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -13,22 +13,19 @@
##############################################################################
"""Grok interfaces
"""
-from zope import interface, schema
-from zope.formlib.interfaces import reConstraint
+from zope import interface
from zope.interface.interfaces import IInterface
-from zope.viewlet.interfaces import IViewletManager as IViewletManagerBase
from zope.app.container.interfaces import IContainer as IContainerBase
+# Expose interfaces from grokcore.* packages as well:
import grokcore.component.interfaces
import grokcore.formlib.interfaces
import grokcore.security.interfaces
import grokcore.view.interfaces
+import grokcore.viewlet.interfaces
-# Expose interfaces from grokcore.* packages as well:
from grokcore.component.interfaces import IContext
from grokcore.component.interfaces import IGrokErrors
-from grokcore.view.interfaces import ITemplateFileFactory
-from grokcore.view.interfaces import ITemplate
class IGrokBaseClasses(grokcore.component.interfaces.IBaseClasses,
@@ -47,8 +44,6 @@
REST = interface.Attribute("Base class for REST views.")
Traverser = interface.Attribute("Base class for custom traversers.")
Indexes = interface.Attribute("Base class for catalog index definitions.")
- ViewletManager = interface.Attribute("Base class for viewletmanager.")
- Viewlet = interface.Attribute("Base class for viewlet.")
Role = interface.Attribute("Base class for roles.")
@@ -81,26 +76,8 @@
It can only be used inside grok.Indexes subclasses.
"""
- def order(value=None):
- """Control the ordering of components.
- If the value is specified, the order will be determined by sorting on
- it.
- If no value is specified, the order will be determined by definition
- order within the module.
- If the directive is absent, the order will be determined by class name.
- (unfortunately our preferred default behavior on absence which would
- be like grok.order() without argument is hard to implement in Python)
- Inter-module order is by dotted name of the module the
- components are in; unless an explicit argument is specified to
- ``grok.order()``, components are grouped by module.
-
- The function grok.util.sort_components can be used to sort
- components according to these rules.
- """
-
-
class IGrokEvents(interface.Interface):
IObjectCreatedEvent = interface.Attribute("")
@@ -134,8 +111,9 @@
class IGrokAPI(grokcore.security.interfaces.IGrokcoreSecurityAPI,
grokcore.view.interfaces.IGrokcoreViewAPI,
+ grokcore.viewlet.interfaces.IGrokcoreViewletAPI,
grokcore.formlib.interfaces.IGrokcoreFormlibAPI,
- IGrokBaseClasses, IGrokDirectives,
+ IGrokBaseClasses, IGrokDirectives,
IGrokEvents, IGrokErrors):
# BBB this is deprecated
@@ -229,6 +207,3 @@
"""A Grok container.
"""
-class IViewletManager(IViewletManagerBase):
- """The Grok viewlet manager.
- """
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/meta.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/meta.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/meta.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -21,7 +21,6 @@
from zope.publisher.interfaces.http import IHTTPRequest
from zope.publisher.interfaces.xmlrpc import IXMLRPCRequest
-from zope.viewlet.interfaces import IViewletManager, IViewlet
from zope.securitypolicy.interfaces import IRole
from zope.securitypolicy.rolepermission import rolePermissionManager
@@ -47,9 +46,7 @@
from grok import components
from grok.util import make_checker
from grok.interfaces import IRESTSkinType
-from grok.interfaces import IViewletManager as IGrokViewletManager
-from grokcore.component.scan import determine_module_component
from grokcore.security.meta import PermissionGrokker
from grokcore.view.meta.views import (
@@ -67,18 +64,6 @@
return factory.__module__ + '.' + factory.__name__
-class ViewletManagerContextGrokker(martian.GlobalGrokker):
-
- martian.priority(1001)
-
- def grok(self, name, module, module_info, config, **kw):
- viewletmanager = determine_module_component(module_info,
- grok.viewletmanager,
- IGrokViewletManager)
- grok.viewletmanager.set(module, viewletmanager)
- return True
-
-
class XMLRPCGrokker(martian.MethodGrokker):
martian.component(grok.XMLRPC)
martian.directive(grok.context)
@@ -438,100 +423,3 @@
args=(name, layer, IRESTSkinType)
)
return True
-
-class ViewletManagerGrokker(martian.ClassGrokker):
- martian.component(grok.ViewletManager)
- martian.directive(grok.context)
- martian.directive(grok.layer, default=IDefaultBrowserLayer)
- martian.directive(grok.view)
- martian.directive(grok.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(ViewletManagerGrokker, self).grok(
- name, factory, module_info, **kw)
-
- def execute(self, factory, config, context, layer, view, name, **kw):
- # This will be used to support __name__ on the viewlet manager
- factory.__view_name__ = name
-
- # 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)
- )
-
- config.action(
- discriminator = ('viewletManager', context, layer, view, name),
- callable = component.provideAdapter,
- args = (factory, (context, layer, view), IViewletManager, name)
- )
- return True
-
- def checkTemplates(self, templates, module_info, factory):
- def has_render(factory):
- return factory.render != grok.components.ViewletManager.render
- def has_no_render(factory):
- # always has a render method
- return False
- templates.checkTemplates(module_info, factory, 'viewlet manager',
- has_render, has_no_render)
-
-class ViewletGrokker(martian.ClassGrokker):
- martian.component(grok.Viewlet)
- martian.directive(grok.context)
- martian.directive(grok.layer, default=IDefaultBrowserLayer)
- martian.directive(grok.view)
- martian.directive(grok.viewletmanager)
- martian.directive(grok.name, get_default=default_view_name)
- martian.directive(grok.require, name='permission')
-
- 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(ViewletGrokker, self).grok(
- name, factory, module_info, **kw)
-
- def execute(self, factory, config,
- context, layer, view, viewletmanager, name, permission, **kw):
- # This will be used to support __name__ on the viewlet
- factory.__view_name__ = name
-
- # 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)
- )
-
- config.action(
- discriminator = ('viewlet', context, layer,
- view, viewletmanager, name),
- callable = component.provideAdapter,
- args = (factory, (context, layer, view, viewletmanager),
- IViewlet, name)
- )
-
- config.action(
- discriminator=('protectName', factory, '__call__'),
- callable=make_checker,
- args=(factory, factory, permission, ['update', 'render']),
- )
-
- return True
-
- def checkTemplates(self, templates, module_info, factory):
- def has_render(factory):
- return factory.render != grok.components.Viewlet.render
- def has_no_render(factory):
- return not has_render(factory)
- templates.checkTemplates(module_info, factory, 'viewlet',
- has_render, has_no_render)
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/meta.zcml
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/meta.zcml 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/meta.zcml 2008-11-16 21:05:35 UTC (rev 93018)
@@ -10,6 +10,7 @@
<include package="grokcore.formlib" file="meta.zcml" />
<include package="grokcore.security" file="meta.zcml" />
<include package="grokcore.view" file="meta.zcml" />
+ <include package="grokcore.viewlet" file="meta.zcml" />
<grok:grok package=".meta" />
</configure>
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/testing.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/testing.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/testing.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -45,6 +45,7 @@
zcml.do_grok('grokcore.security.meta', config)
zcml.do_grok('grokcore.view.meta', config)
zcml.do_grok('grokcore.view.templatereg', config)
+ zcml.do_grok('grokcore.viewlet.meta', config)
zcml.do_grok('grokcore.formlib.meta', config)
zcml.do_grok('grok.meta', config)
zcml.do_grok(module_name, config)
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/tests/test_grok.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/tests/test_grok.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/tests/test_grok.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -46,7 +46,7 @@
'zcml', 'utility', 'xmlrpc', 'json', 'container',
'traversal', 'grokker', 'directive',
'baseclass', 'annotation', 'application',
- 'viewlet', 'testsetup', 'conflict', 'order']:
+ 'viewlet', 'testsetup', 'conflict']:
suite.addTest(suiteFromPackage(name))
return suite
Modified: grok/branches/sylvain-grokcore-viewlets/src/grok/util.py
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/src/grok/util.py 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/src/grok/util.py 2008-11-16 21:05:35 UTC (rev 93018)
@@ -13,7 +13,6 @@
##############################################################################
"""Grok utility functions.
"""
-import grok
import zope.location.location
from zope import interface
from zope.security.checker import NamesChecker, defineChecker
@@ -57,14 +56,3 @@
# Add the new skin.
ifaces.append(skin)
interface.directlyProvides(request, *ifaces)
-
-def _sort_key(component):
- # If components have a grok.order directive, sort by that.
- explicit_order, implicit_order = grok.order.bind().get(component)
- return (explicit_order,
- component.__module__,
- implicit_order,
- component.__class__.__name__)
-
-def sort_components(components):
- return sorted(components, key=_sort_key)
Modified: grok/branches/sylvain-grokcore-viewlets/versions.cfg
===================================================================
--- grok/branches/sylvain-grokcore-viewlets/versions.cfg 2008-11-16 20:24:36 UTC (rev 93017)
+++ grok/branches/sylvain-grokcore-viewlets/versions.cfg 2008-11-16 21:05:35 UTC (rev 93018)
@@ -9,6 +9,7 @@
grokcore.formlib = 1.0
grokcore.security = 1.0
grokcore.view = 1.2
+grokcore.viewlet = 1.0
martian = 0.11
mechanize = 0.1.7b
pytz = 2007k
More information about the Checkins
mailing list