[Checkins] SVN: z3c.ptcompat/trunk/src/z3c/ptcompat/ - Add 'pages' complex directive and if 'offering' is None, pass 'package_home' forward.

Sidnei da Silva sidnei at enfoldsystems.com
Sun Apr 12 22:25:29 EDT 2009


Log message for revision 99144:
  - Add 'pages' complex directive and if 'offering' is None, pass 'package_home' forward.

Changed:
  U   z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml
  U   z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py

-=-
Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml	2009-04-12 21:05:09 UTC (rev 99143)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/meta.zcml	2009-04-13 02:25:29 UTC (rev 99144)
@@ -13,6 +13,19 @@
 	handler=".zcml.page_directive"
 	/>
 
+    <meta:complexDirective
+        name="pages"
+        schema="zope.app.publisher.browser.metadirectives.IPagesDirective"
+        handler=".zcml.pages_directive"
+        >
+
+      <meta:subdirective
+          name="page"
+          schema="zope.app.publisher.browser.metadirectives.IPagesPageSubdirective"
+          />
+
+    </meta:complexDirective>
+
     <meta:directive
 	name="viewlet"
 	schema="zope.viewlet.metadirectives.IViewletDirective"

Modified: z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py
===================================================================
--- z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py	2009-04-12 21:05:09 UTC (rev 99143)
+++ z3c.ptcompat/trunk/src/z3c/ptcompat/zcml.py	2009-04-13 02:25:29 UTC (rev 99144)
@@ -1,3 +1,4 @@
+import os
 import sys
 from new import function
 
@@ -12,6 +13,10 @@
 from z3c.ptcompat import ViewPageTemplateFile
 from z3c.ptcompat import config
 
+def package_home(gdict):
+    filename = gdict["__file__"]
+    return os.path.dirname(filename)
+
 def clone_and_replace_globals(func, new_globals):
     func_globals = func.func_globals.copy()
     func_globals.update(new_globals)
@@ -28,6 +33,9 @@
     if offering is None:
         offering = sys._getframe(1).f_globals
 
+    if isinstance(offering, dict):
+        offering = package_home(offering)
+
     bases += (simpleviewclass.simple, )
 
     class_ = type("SimpleViewClass from %s" % src, bases,
@@ -44,6 +52,9 @@
     if offering is None:
         offering = sys._getframe(1).f_globals
 
+    if isinstance(offering, dict):
+        offering = package_home(offering)
+
     # Create the base class hierarchy
     bases += (viewlet.simple, viewlet.ViewletBase)
 
@@ -86,6 +97,12 @@
 
     return viewmeta.page(_context, name, *args, **kwargs)
 
+new_page_globals = dict(page=page_directive)
+class pages_directive(viewmeta.pages):
+
+    page = clone_and_replace_globals(viewmeta.pages.page.im_func,
+                                     new_page_globals)
+
 def viewlet_directive(_context, name, *args, **kwargs):
     class_ = kwargs.get('class_')
     template = kwargs.get('template')



More information about the Checkins mailing list