[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