[Checkins] SVN: Sandbox/pcardune/z3c.viewlet/ saving some work I did a couple months ago to combine resources and viewlets in a single zcml declaration. Not sure if it will ever be fruitful.

Paul Carduner paulcarduner at gmail.com
Sun May 4 20:13:23 EDT 2008


Log message for revision 86432:
  saving some work I did a couple months ago to combine resources and viewlets in a single zcml declaration.  Not sure if it will ever be fruitful.

Changed:
  A   Sandbox/pcardune/z3c.viewlet/
  U   Sandbox/pcardune/z3c.viewlet/setup.py
  A   Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/meta.zcml
  U   Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/tests.py
  A   Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/viewlet.py
  A   Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.py
  A   Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.txt

-=-
Copied: Sandbox/pcardune/z3c.viewlet (from rev 84662, z3c.viewlet/trunk)

Modified: Sandbox/pcardune/z3c.viewlet/setup.py
===================================================================
--- z3c.viewlet/trunk/setup.py	2008-03-15 15:02:20 UTC (rev 84662)
+++ Sandbox/pcardune/z3c.viewlet/setup.py	2008-05-05 00:13:23 UTC (rev 86432)
@@ -52,9 +52,14 @@
       packages=find_packages('src'),
       package_dir = {'': 'src'},
       namespace_packages=['z3c'],
-      extras_require=dict(test=['zope.testing']),
+      extras_require=dict(
+          test=['zope.app.testing',
+                'zope.testing',
+                'zope.app.securitypolicy',
+                'zope.app.zcmlfiles']),
       install_requires=['setuptools',
-                        'zope.viewlet'],
+                        'zope.viewlet',
+                        'z3c.zrtresource'],
       include_package_data = True,
       zip_safe = False,
       )

Added: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/meta.zcml
===================================================================
--- Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/meta.zcml	                        (rev 0)
+++ Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/meta.zcml	2008-05-05 00:13:23 UTC (rev 86432)
@@ -0,0 +1,15 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:meta="http://namespaces.zope.org/meta">
+
+  <meta:directives namespace="http://namespaces.zope.org/z3c">
+
+    <meta:directive
+        name="zrt-resourceViewlet"
+        schema=".zcml.IZRTResourceViewletDirective"
+        handler=".zcml.zrtresourceViewlet"
+        />
+
+  </meta:directives>
+
+</configure>


Property changes on: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/meta.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/tests.py
===================================================================
--- z3c.viewlet/trunk/src/z3c/viewlet/tests.py	2008-03-15 15:02:20 UTC (rev 84662)
+++ Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/tests.py	2008-05-05 00:13:23 UTC (rev 86432)
@@ -26,6 +26,9 @@
         DocFileSuite('README.txt',
                      optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
                      ),
+        DocFileSuite('zcml.txt',
+                     optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+                     ),
         ))
 
 if __name__ == '__main__':

Added: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/viewlet.py
===================================================================
--- Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/viewlet.py	                        (rev 0)
+++ Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/viewlet.py	2008-05-05 00:13:23 UTC (rev 86432)
@@ -0,0 +1,20 @@
+import os.path
+
+from zope.viewlet.viewlet import ViewletBase
+from zope.viewlet.viewlet import CSSResourceViewletBase
+import zope.viewlet.viewlet
+from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
+
+
+class CSSViewlet(CSSResourceViewletBase, ViewletBase):
+
+    _index = ViewPageTemplateFile(os.path.join(os.path.dirname(zope.viewlet.viewlet.__file__),
+                                              'css_viewlet.pt'))
+    resource = ''
+
+    @property
+    def _path(self):
+        return self.resource
+
+    def index(self):
+        return self._index()


Property changes on: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/viewlet.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.py
===================================================================
--- Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.py	                        (rev 0)
+++ Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.py	2008-05-05 00:13:23 UTC (rev 86432)
@@ -0,0 +1,33 @@
+from z3c.zrtresource.zcml import IZRTResourceDirective
+from z3c.zrtresource.zcml import zrtresource
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.interface import Interface
+from zope.publisher.interfaces.browser import IBrowserView
+from zope.viewlet.metadirectives import IViewletDirective
+from zope.viewlet.interfaces import IViewletManager
+from zope.viewlet.metaconfigure import viewletDirective
+
+class IZRTResourceViewletDirective(IViewletDirective, IZRTResourceDirective):
+    """A directive to register a new zrtresource and viewlet at the same time.
+
+    """
+
+
+def zrtresourceViewlet(_context, name, file,
+                       layer=IDefaultBrowserLayer,
+                       permission='zope.Public', for_=Interface,
+                       view=IBrowserView, manager=IViewletManager,
+                       class_=None, template=None, attribute='render',
+                       allowed_interface=None, allowed_attributes=None,
+                       **kwargs):
+
+    viewletDirective(_context, name, permission, for_=for_,
+                     layer=layer, view=view, manager=manager,
+                     class_=class_, template=template,
+                     attribute=attribute,
+                     allowed_interface=allowed_interface,
+                     allowed_attributes=allowed_attributes,
+                     resource=name, **kwargs)
+
+    zrtresource(_context, name, file, layer=layer,
+                permission=permission)


Property changes on: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.txt
===================================================================
--- Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.txt	                        (rev 0)
+++ Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.txt	2008-05-05 00:13:23 UTC (rev 86432)
@@ -0,0 +1,75 @@
+==========================
+Resource Viewlet directive
+==========================
+
+This shows how we can use the ``z3c:zrt-resourceViewlet`` directive to
+register both a resource and a corresponding viewlet for that
+resources.  This can really come in handy for css viewlets, javascript
+viewlets, and more.  First we must register the meta configuration.
+
+  >>> from zope.configuration import xmlconfig
+  >>> context = xmlconfig.string('''
+  ... <configure i18n_domain="zope">
+  ...   <include package="z3c.viewlet" file="meta.zcml" />
+  ... </configure>
+  ... ''')
+
+Now we will use the ``z3c:zrt-resourceViewlet`` directive:
+
+  >>> import tempfile
+  >>> cssfile = tempfile.mktemp('.css')
+  >>> open(cssfile, 'w').write('''\
+  ... /* zrt-replace: "../img1" "++resource++/img" */
+  ... h1 {
+  ...   color: red;
+  ...   background: url('../img1/mybackground.gif');
+  ... } 
+  ... ''')
+
+  >>> context = xmlconfig.string("""
+  ... <configure
+  ...    xmlns:z3c="http://namespaces.zope.org/z3c" i18n_domain="zope">
+  ...   <z3c:zrt-resourceViewlet
+  ...       name="test.css"
+  ...       file="%s"
+  ...       for="*"
+  ...       permission="zope.Public"
+  ...       class="z3c.viewlet.viewlet.CSSViewlet"
+  ...       />
+  ... </configure>
+  ... """ % cssfile, context=context)
+
+Now let's see if the resource adapter has been registered:
+
+  >>> import zope.component
+  >>> import zope.interface
+  >>> from zope.publisher.browser import TestRequest
+  >>> resource = zope.component.getAdapter(
+  ...     TestRequest(), zope.interface.Interface, name='test.css')
+
+And we can try running it
+
+  >>> print resource.GET()
+  h1 {
+    color: red;
+    background: url('++resource++/img/mybackground.gif');
+  }
+
+Now let's try and get the viewlet:
+
+  >>> from zope.publisher.browser import BrowserView
+  >>> from zope.viewlet.interfaces import IViewlet
+  >>> from zope.viewlet.manager import ViewletManagerBase
+  >>> context = object()
+  >>> request = TestRequest()
+  >>> view = BrowserView(context, request)
+  >>> manager = ViewletManagerBase(context, request, view)
+  >>> viewlet = zope.component.queryMultiAdapter(
+  ...     (context, request, view, manager), IViewlet,
+  ...      name='test.css')
+
+for some reason I get a TraversalError: ('No traversable adapter
+found', <zope.viewlet.metaconfigure.CSSViewlet object at 0x8e61f8c>)
+when calling the next statement.
+
+#  >>> print viewlet.render()
\ No newline at end of file


Property changes on: Sandbox/pcardune/z3c.viewlet/src/z3c/viewlet/zcml.txt
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the Checkins mailing list