[Checkins] SVN: grok/branches/ksmith_mcweekly-layers/src/grok/
Added grok.layer directive,
works with normal zope3 skin/layer registrations
Kevin Smith
kevin at mcweekly.com
Fri Apr 13 15:08:04 EDT 2007
Log message for revision 74125:
Added grok.layer directive, works with normal zope3 skin/layer registrations
Changed:
U grok/branches/ksmith_mcweekly-layers/src/grok/__init__.py
U grok/branches/ksmith_mcweekly-layers/src/grok/directive.py
A grok/branches/ksmith_mcweekly-layers/src/grok/ftests/view/layer.py
U grok/branches/ksmith_mcweekly-layers/src/grok/meta.py
-=-
Modified: grok/branches/ksmith_mcweekly-layers/src/grok/__init__.py
===================================================================
--- grok/branches/ksmith_mcweekly-layers/src/grok/__init__.py 2007-04-13 18:58:18 UTC (rev 74124)
+++ grok/branches/ksmith_mcweekly-layers/src/grok/__init__.py 2007-04-13 19:08:03 UTC (rev 74125)
@@ -36,7 +36,7 @@
from grok.components import Application, Form, AddForm, EditForm, DisplayForm
from grok.directive import (context, name, template, templatedir, provides,
baseclass, global_utility, local_utility,
- define_permission, require)
+ define_permission, require, layer)
from grok._grok import do_grok as grok # Avoid name clash within _grok
from grok._grok import SubscribeDecorator as subscribe
from grok.error import GrokError, GrokImportError
Modified: grok/branches/ksmith_mcweekly-layers/src/grok/directive.py
===================================================================
--- grok/branches/ksmith_mcweekly-layers/src/grok/directive.py 2007-04-13 18:58:18 UTC (rev 74124)
+++ grok/branches/ksmith_mcweekly-layers/src/grok/directive.py 2007-04-13 19:08:03 UTC (rev 74125)
@@ -267,6 +267,8 @@
template = SingleTextDirective('grok.template', ClassDirectiveContext())
context = InterfaceOrClassDirective('grok.context',
ClassOrModuleDirectiveContext())
+layer = InterfaceDirective('grok.layer',
+ ClassOrModuleDirectiveContext())
templatedir = SingleTextDirective('grok.templatedir', ModuleDirectiveContext())
provides = InterfaceDirective('grok.provides', ClassDirectiveContext())
baseclass = MarkerDirective('grok.baseclass', ClassDirectiveContext())
Added: grok/branches/ksmith_mcweekly-layers/src/grok/ftests/view/layer.py
===================================================================
--- grok/branches/ksmith_mcweekly-layers/src/grok/ftests/view/layer.py 2007-04-13 18:58:18 UTC (rev 74124)
+++ grok/branches/ksmith_mcweekly-layers/src/grok/ftests/view/layer.py 2007-04-13 19:08:03 UTC (rev 74125)
@@ -0,0 +1,53 @@
+"""
+ >>> import grok
+ >>> from grok.ftests.view.layer import Mammoth
+ >>> grok.grok('grok.ftests.view.layer')
+ >>> getRootFolder()["manfred"] = Mammoth()
+
+ >>> from zope.testbrowser.testing import Browser
+ >>> browser = Browser()
+ >>> browser.handleErrors = False
+ >>> browser.open("http://localhost/++skin++Basic/manfred/@@cavedrawings")
+ >>> print browser.contents
+ <html>
+ <body>
+ <h1>Hello, world!</h1>
+ </body>
+ </html>
+
+ >>> browser.open("http://localhost/++skin++Rotterdam/manfred/@@cavedrawings")
+ Traceback (most recent call last):
+ ...
+ NotFound: Object: <grok.ftests.view.layer.Mammoth object at ...>, name: u'@@cavedrawings'
+ >>> browser.open("http://localhost/++skin++Rotterdam/manfred/@@moredrawings")
+ >>> print browser.contents
+ Pretty
+
+"""
+import grok
+from zope.app.basicskin import IBasicSkin
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.app.rotterdam import rotterdam
+
+grok.layer(IBasicSkin)
+
+
+class Mammoth(grok.Model):
+ pass
+
+class CaveDrawings(grok.View):
+ pass
+
+cavedrawings = grok.PageTemplate("""\
+<html>
+<body>
+<h1>Hello, world!</h1>
+</body>
+</html>
+""")
+
+class MoreDrawings(grok.View):
+ grok.layer(rotterdam)
+
+ def render(self):
+ return "Pretty"
Modified: grok/branches/ksmith_mcweekly-layers/src/grok/meta.py
===================================================================
--- grok/branches/ksmith_mcweekly-layers/src/grok/meta.py 2007-04-13 18:58:18 UTC (rev 74124)
+++ grok/branches/ksmith_mcweekly-layers/src/grok/meta.py 2007-04-13 19:08:03 UTC (rev 74125)
@@ -171,12 +171,16 @@
raise GrokError("View %r has no associated template or "
"'render' method." % factory, factory)
+ view_layer = util.class_annotation(factory, 'grok.layer',
+ None) or module_info.getAnnotation('grok.layer',
+ None) or IDefaultBrowserLayer
+
view_name = util.class_annotation(factory, 'grok.name',
factory_name)
# __view_name__ is needed to support IAbsoluteURL on views
factory.__view_name__ = view_name
component.provideAdapter(factory,
- adapts=(view_context, IDefaultBrowserLayer),
+ adapts=(view_context, view_layer),
provides=interface.Interface,
name=view_name)
More information about the Checkins
mailing list