[Checkins] SVN: z3c.pt/trunk/ Added expression translator for 'provider:' pragma (see zope.contentprovider).
Malthe Borch
mborch at gmail.com
Sat Sep 13 19:23:34 EDT 2008
Log message for revision 91134:
Added expression translator for 'provider:' pragma (see zope.contentprovider).
Changed:
U z3c.pt/trunk/CHANGES.txt
U z3c.pt/trunk/setup.py
U z3c.pt/trunk/src/z3c/pt/configure.zcml
U z3c.pt/trunk/src/z3c/pt/expressions.py
U z3c.pt/trunk/src/z3c/pt/zpt.txt
-=-
Modified: z3c.pt/trunk/CHANGES.txt
===================================================================
--- z3c.pt/trunk/CHANGES.txt 2008-09-13 22:56:07 UTC (rev 91133)
+++ z3c.pt/trunk/CHANGES.txt 2008-09-13 23:23:33 UTC (rev 91134)
@@ -28,6 +28,10 @@
Features
+- Added expression translator "provider:" (which renders a content
+ provider as defined in the ``zope.contentprovider``
+ package). [malthe]
+
- Added template API to render macros. [malthe]
- Optimized template loader so only a single template is instantiated
Modified: z3c.pt/trunk/setup.py
===================================================================
--- z3c.pt/trunk/setup.py 2008-09-13 22:56:07 UTC (rev 91133)
+++ z3c.pt/trunk/setup.py 2008-09-13 23:23:33 UTC (rev 91134)
@@ -8,6 +8,7 @@
'zope.component',
'zope.i18n >= 3.5',
'zope.traversing',
+ 'zope.contentprovider',
]
if sys.version_info[:3] < (2,5,0):
Modified: z3c.pt/trunk/src/z3c/pt/configure.zcml
===================================================================
--- z3c.pt/trunk/src/z3c/pt/configure.zcml 2008-09-13 22:56:07 UTC (rev 91133)
+++ z3c.pt/trunk/src/z3c/pt/configure.zcml 2008-09-13 23:23:33 UTC (rev 91134)
@@ -12,6 +12,10 @@
name="path"
component=".expressions.path_translation" />
+ <utility
+ name="provider"
+ component=".expressions.provider_translation" />
+
<adapter
name="string"
factory=".expressions.StringTranslation" />
Modified: z3c.pt/trunk/src/z3c/pt/expressions.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/expressions.py 2008-09-13 22:56:07 UTC (rev 91133)
+++ z3c.pt/trunk/src/z3c/pt/expressions.py 2008-09-13 23:23:33 UTC (rev 91134)
@@ -2,6 +2,7 @@
import zope.component
from zope.traversing.adapters import traversePathElement
+from zope.contentprovider.interfaces import IContentProvider
import parser
import re
@@ -748,3 +749,28 @@
return value
path_translation = PathTranslation()
+
+def get_content_provider(context, request, view, name):
+ cp = zope.component.getMultiAdapter(
+ (context, request, view), IContentProvider, name=name)
+ cp.update()
+ return cp.render()
+
+class ProviderTranslation(object):
+ zope.interface.implements(interfaces.IExpressionTranslation)
+
+ provider_regex = re.compile(r'^[A-Za-z][A-Za-z0-9_-]*$')
+ symbol = '_get_content_provider'
+
+ def validate(self, string):
+ if self.provider_regex.match(string) is None:
+ raise SyntaxError(
+ "%s is not a valid content provider name." % string)
+
+ def translate(self, string):
+ value = types.value("%s(context, request, view, '%s')" % \
+ (self.symbol, string))
+ value.symbol_mapping[self.symbol] = get_content_provider
+ return value
+
+provider_translation = ProviderTranslation()
Modified: z3c.pt/trunk/src/z3c/pt/zpt.txt
===================================================================
--- z3c.pt/trunk/src/z3c/pt/zpt.txt 2008-09-13 22:56:07 UTC (rev 91133)
+++ z3c.pt/trunk/src/z3c/pt/zpt.txt 2008-09-13 23:23:33 UTC (rev 91134)
@@ -210,6 +210,48 @@
<img alt="Leonardo da Vinci; Musee du Louvre, 1503" title="Mona Lisa" />
</div>
+:: Using the "provider:" expression
+
+ >>> class Context(object): pass
+ >>> class Request(object): pass
+ >>> class View(object): pass
+
+This directive renders a content provider; let's define and register a
+content provider which allows us to verify the functionality of the
+expression.
+
+ >>> from zope.contentprovider.interfaces import IContentProvider
+ >>> from zope import component
+ >>> from zope import interface
+
+ >>> class DummyContentProvider(object):
+ ... component.adapts(Context, Request, View)
+ ... interface.implements(IContentProvider)
+ ...
+ ... def __init__(self, context, request, view):
+ ... self.context = context
+ ... self.request = request
+ ... self.view = view
+ ...
+ ... def update(self):
+ ... self.updated = True
+ ...
+ ... def render(self):
+ ... return type(self.context), type(self.request), \
+ ... type(self.view), self.updated
+
+ >>> component.provideAdapter(
+ ... DummyContentProvider, name="test")
+
+ >>> print render_zpt("""\
+ ... <div xmlns="http://www.w3.org/1999/xhtml"
+ ... xmlns:tal="http://xml.zope.org/namespaces/tal">
+ ... <span tal:replace="structure provider:test" />
+ ... </div>""", context=Context(), request=Request(), view=View())
+ <div>
+ (<class 'Context'>, <class 'Request'>, <class 'View'>, True)
+ </div>
+
:: Setting the default expression
>>> print render_zpt("""\
More information about the Checkins
mailing list