[Checkins] SVN: z3c.macro/trunk/ Allow use of z3c.pt.

Malthe Borch mborch at gmail.com
Sat Sep 13 18:53:32 EDT 2008


Log message for revision 91132:
  Allow use of z3c.pt.

Changed:
  U   z3c.macro/trunk/CHANGES.txt
  U   z3c.macro/trunk/buildout.cfg
  U   z3c.macro/trunk/setup.py
  U   z3c.macro/trunk/src/z3c/macro/README.txt
  U   z3c.macro/trunk/src/z3c/macro/configure.zcml
  U   z3c.macro/trunk/src/z3c/macro/tales.py
  U   z3c.macro/trunk/src/z3c/macro/tests.py
  U   z3c.macro/trunk/src/z3c/macro/zcml.py
  U   z3c.macro/trunk/src/z3c/macro/zcml.txt

-=-
Modified: z3c.macro/trunk/CHANGES.txt
===================================================================
--- z3c.macro/trunk/CHANGES.txt	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/CHANGES.txt	2008-09-13 22:53:31 UTC (rev 91132)
@@ -2,6 +2,12 @@
 CHANGES
 =======
 
+after 1.1.0
+-----------
+
+- Allow use of ``z3c.pt`` using ``z3c.pt.compat`` compatibility later.
+
+
 1.1.0 (2007-11-01)
 ------------------
 

Modified: z3c.macro/trunk/buildout.cfg
===================================================================
--- z3c.macro/trunk/buildout.cfg	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/buildout.cfg	2008-09-13 22:53:31 UTC (rev 91132)
@@ -5,3 +5,8 @@
 [test]
 recipe = zc.recipe.testrunner
 eggs = z3c.macro [test]
+environment = test-environment
+
+[test-environment]
+Z3C_PT_DEBUG = False
+Z3C_PT_CACHE = False

Modified: z3c.macro/trunk/setup.py
===================================================================
--- z3c.macro/trunk/setup.py	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/setup.py	2008-09-13 22:53:31 UTC (rev 91132)
@@ -57,12 +57,13 @@
     namespace_packages = ['z3c'],
     extras_require = dict(
         test = ['z3c.template',
+                'z3c.pt',
+                'lxml>=2.1.1',
                 'zope.app.testing',
                 'zope.testing'],
         ),
     install_requires = [
         'setuptools',
-        'zope.app.pagetemplate',
         'zope.component',
         'zope.configuration',
         'zope.contentprovider',
@@ -71,6 +72,8 @@
         'zope.publisher',
         'zope.schema',
         'zope.tales',
+        'zope.app.pagetemplate',
+        'z3c.pt.compat',
         ],
     include_package_data = True,
     zip_safe = False,

Modified: z3c.macro/trunk/src/z3c/macro/README.txt
===================================================================
--- z3c.macro/trunk/src/z3c/macro/README.txt	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/src/z3c/macro/README.txt	2008-09-13 22:53:31 UTC (rev 91132)
@@ -37,7 +37,6 @@
 
 Let's define the macro factory
 
-  >>> from zope.app.pagetemplate import viewpagetemplatefile
   >>> from z3c.macro import interfaces
   >>> from z3c.macro import zcml
   >>> navigationMacro = zcml.MacroFactory(path, 'navigation', 'text/html')
@@ -83,7 +82,20 @@
 
 Let's now create a view using this page template:
 
-  >>> from zope.app.pagetemplate.simpleviewclass import SimpleViewClass
+  >>> from zope.publisher.browser import BrowserView
+  >>> class simple(BrowserView):
+  ...     def __getitem__(self, name):
+  ...         return self.index.macros[name]
+  ...
+  ...     def __call__(self, **kwargs):
+  ...         return self.index(**kwargs)
+
+  >>> from z3c.pt.compat import ViewPageTemplateFile  
+  >>> def SimpleViewClass(path, name=u''):
+  ...     return type(
+  ...         "SimpleViewClass", (simple,),
+  ...         {'index': ViewPageTemplateFile(path), '__name__': name})
+  
   >>> FirstPage = SimpleViewClass(path, name='first.html')
 
   >>> zope.component.provideAdapter(

Modified: z3c.macro/trunk/src/z3c/macro/configure.zcml
===================================================================
--- z3c.macro/trunk/src/z3c/macro/configure.zcml	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/src/z3c/macro/configure.zcml	2008-09-13 22:53:31 UTC (rev 91132)
@@ -10,4 +10,11 @@
       handler=".tales.MacroExpression"
       />
 
-</configure>
\ No newline at end of file
+  <configure zcml:condition="installed z3c.pt">
+    <utility
+       name="macro"
+       component=".tales.z3cpt_macro_expression"
+       />
+  </configure>
+    
+</configure>

Modified: z3c.macro/trunk/src/z3c/macro/tales.py
===================================================================
--- z3c.macro/trunk/src/z3c/macro/tales.py	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/src/z3c/macro/tales.py	2008-09-13 22:53:31 UTC (rev 91132)
@@ -16,12 +16,18 @@
 $Id$
 """
 __docformat__ = 'restructuredtext'
+
+import re
+
 import zope.component
 import zope.interface
 from zope.tales import expressions
 
 from z3c.macro import interfaces
 
+def get_macro_template(context, view, request, name):
+    return zope.component.getMultiAdapter(
+        (context, view, request), interface=interfaces.IMacroTemplate, name=name)
 
 class MacroExpression(expressions.StringExpr):
     """Collect named IMacroTemplate via a TAL namespace called ``macro``."""
@@ -33,6 +39,31 @@
         context = econtext.vars['context']
         request = econtext.vars['request']
         view = econtext.vars['view']
+        return get_macro_template(context, view, request, name)
+    
+try:
+    from z3c.pt.interfaces import IExpressionTranslation
+    from z3c.pt import types
+        
+    class Z3CPTMacroExpression(object):
+        """Collect named IMacroTemplate via a TAL namespace called ``macro``."""
 
-        return zope.component.getMultiAdapter((context, view, request),
-            interface=interfaces.IMacroTemplate, name=name)
+        zope.interface.implements(IExpressionTranslation)
+
+        macro_regex = re.compile(r'^[A-Za-z][A-Za-z0-9_-]*$')
+        symbol = '_get_macro_template'
+        
+        def validate(self, string):
+            if self.macro_regex.match(string) is None:
+                raise SyntaxError("%s is not a valid macro name." % string)
+
+        def translate(self, string):
+            value = types.value("%s(context, view, request, '%s')" % \
+                                (self.symbol, string))
+            value.symbol_mapping[self.symbol] = get_macro_template
+            return value
+
+    z3cpt = Z3CPTMacroExpression()
+    
+except ImportError:
+    pass

Modified: z3c.macro/trunk/src/z3c/macro/tests.py
===================================================================
--- z3c.macro/trunk/src/z3c/macro/tests.py	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/src/z3c/macro/tests.py	2008-09-13 22:53:31 UTC (rev 91132)
@@ -18,15 +18,24 @@
 __docformat__ = 'restructuredtext'
 
 import unittest
+import itertools
+
+from zope import component
 from zope.testing import doctest
 from zope.testing.doctestunit import DocFileSuite
 from zope.app.testing import setup
+from zope.configuration import xmlconfig
 
+import z3c.pt.compat
 
 def setUp(test):
     root = setup.placefulSetUp(site=True)
     test.globs['root'] = root
 
+def setUpZPT(test):
+    z3c.pt.compat.config.disable()
+    setUp(test)
+    
     from zope.app.pagetemplate import metaconfigure
     from z3c.macro import tales
     metaconfigure.registerType('macro', tales.MacroExpression)
@@ -36,21 +45,29 @@
     from zope.contentprovider import tales
     metaconfigure.registerType('provider', tales.TALESProviderExpression)
 
+def setUpZ3CPT(suite):
+    z3c.pt.compat.config.enable()
+    setUp(suite)
+    xmlconfig.XMLConfig('configure.zcml', z3c.pt)()
 
+    from z3c.macro import tales
+    component.provideUtility(
+        tales.z3cpt, name='macro')
+    
 def tearDown(test):
     setup.placefulTearDown()
 
-
 def test_suite():
-    return unittest.TestSuite((
+    tests = ((
         DocFileSuite('README.txt',
             setUp=setUp, tearDown=tearDown,
             optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
             ),
         DocFileSuite('zcml.txt', setUp=setUp, tearDown=tearDown,
             optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,),
-        ))
+        ) for setUp in (setUpZ3CPT, setUpZPT))
 
+    return unittest.TestSuite(itertools.chain(*tests))
 
 if __name__ == '__main__':
     unittest.main(defaultTest='test_suite')

Modified: z3c.macro/trunk/src/z3c/macro/zcml.py
===================================================================
--- z3c.macro/trunk/src/z3c/macro/zcml.py	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/src/z3c/macro/zcml.py	2008-09-13 22:53:31 UTC (rev 91132)
@@ -25,11 +25,10 @@
 from zope.component import zcml
 from zope.publisher.interfaces.browser import IBrowserView
 from zope.publisher.interfaces.browser import IDefaultBrowserLayer
-from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
 
+from z3c.pt import compat
 from z3c.macro import interfaces
 
-
 class IMacroDirective(zope.interface.Interface):
     """Parameters for the template directive."""
 
@@ -106,7 +105,7 @@
         self.contentType = contentType
 
     def __call__(self, context, view, request):
-        template = ViewPageTemplateFile(self.path, 
+        template = compat.ViewPageTemplateFile(self.path, 
             content_type=self.contentType)
         return template.macros[self.macro]
 

Modified: z3c.macro/trunk/src/z3c/macro/zcml.txt
===================================================================
--- z3c.macro/trunk/src/z3c/macro/zcml.txt	2008-09-13 22:38:34 UTC (rev 91131)
+++ z3c.macro/trunk/src/z3c/macro/zcml.txt	2008-09-13 22:53:31 UTC (rev 91132)
@@ -1,5 +1,5 @@
 ===============
-Macro directive
+macro directive
 ===============
 
 A macro directive can be used for register macros. Take a look at the
@@ -67,7 +67,29 @@
 
   >>> from z3c.macro import interfaces
   >>> view = View(content, request)
-  >>> zope.component.getMultiAdapter((content, view, request),
+
+  >>> macro = zope.component.queryMultiAdapter((content, view, request),
   ...     interface=interfaces.IMacroTemplate, name='title')
-  [('version', '1.6'), ('mode', 'html'), ('setPosition', (5, 4)),...
-  [(u'define-macro', u'title', 'metal')]))]...
+
+  >>> macro is not None
+  True
+
+  >>> import os, tempfile
+  >>> temp_dir = tempfile.mkdtemp()
+  >>> file = os.path.join(temp_dir, 'test.pt')
+  >>> open(file, 'w').write('''
+  ... <html>
+  ...   <body>
+  ...     <metal:macro use-macro="options/macro" />
+  ...   </body>
+  ... </html>
+  ... ''')
+
+  >>> from z3c.pt.compat import ViewPageTemplateFile, bind_template
+  >>> template = ViewPageTemplateFile(file)
+  >>> print bind_template(template, view)(macro=macro)
+  <html>
+    <body>
+      <title>Pagelet skin</title>
+    </body>
+  </html>



More information about the Checkins mailing list