[Checkins] SVN: Sandbox/cklinger/megrok.pagelet/trunk/ Initial import

Christian Klinger cklinger at novareto.de
Mon Feb 2 08:41:58 EST 2009


Log message for revision 95976:
  Initial import
  

Changed:
  A   Sandbox/cklinger/megrok.pagelet/trunk/CHANGES.txt
  A   Sandbox/cklinger/megrok.pagelet/trunk/README.txt
  A   Sandbox/cklinger/megrok.pagelet/trunk/bootstrap.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/buildout.cfg
  A   Sandbox/cklinger/megrok.pagelet/trunk/setup.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/__init__.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/__init__.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/directive.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/ftesting.zcml
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.zcml
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/__init__.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/context_layout.pt
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layer_layout.pt
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layout.pt
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/playout.pt
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_layout.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_layers.py
  A   Sandbox/cklinger/megrok.pagelet/trunk/versions.cfg

-=-
Added: Sandbox/cklinger/megrok.pagelet/trunk/CHANGES.txt
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/CHANGES.txt	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/CHANGES.txt	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1 @@
+01 TEST

Added: Sandbox/cklinger/megrok.pagelet/trunk/README.txt
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/README.txt	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/README.txt	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,2 @@
+MEGROK PAGELET
+==============

Added: Sandbox/cklinger/megrok.pagelet/trunk/bootstrap.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/bootstrap.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/bootstrap.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,77 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Bootstrap a buildout-based project
+
+Simply run this script in a directory containing a buildout.cfg.
+The script accepts buildout command-line options, so you can
+use the -c option to specify an alternate configuration file.
+
+$Id: bootstrap.py 90478 2008-08-27 22:44:46Z georgyberdyshev $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+is_jython = sys.platform.startswith('java')
+
+try:
+    import pkg_resources
+except ImportError:
+    ez = {}
+    exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py'
+                         ).read() in ez
+    ez['use_setuptools'](to_dir=tmpeggs, download_delay=0)
+
+    import pkg_resources
+
+if sys.platform == 'win32':
+    def quote(c):
+        if ' ' in c:
+            return '"%s"' % c # work around spawn lamosity on windows
+        else:
+            return c
+else:
+    def quote (c):
+        return c
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+ws  = pkg_resources.working_set
+
+if is_jython:
+    import subprocess
+    
+    assert subprocess.Popen([sys.executable] + ['-c', quote(cmd), '-mqNxd', 
+           quote(tmpeggs), 'zc.buildout'], 
+           env=dict(os.environ,
+               PYTHONPATH=
+               ws.find(pkg_resources.Requirement.parse('setuptools')).location
+               ),
+           ).wait() == 0
+
+else:
+    assert os.spawnle(
+        os.P_WAIT, sys.executable, quote (sys.executable),
+        '-c', quote (cmd), '-mqNxd', quote (tmpeggs), 'zc.buildout',
+        dict(os.environ,
+            PYTHONPATH=
+            ws.find(pkg_resources.Requirement.parse('setuptools')).location
+            ),
+        ) == 0
+
+ws.add_entry(tmpeggs)
+ws.require('zc.buildout')
+import zc.buildout.buildout
+zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap'])
+shutil.rmtree(tmpeggs)

Added: Sandbox/cklinger/megrok.pagelet/trunk/buildout.cfg
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/buildout.cfg	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/buildout.cfg	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,15 @@
+[buildout]
+develop = .
+parts = interpreter test
+extends = versions.cfg
+versions = versions
+
+[interpreter]
+recipe = zc.recipe.egg
+eggs = megrok.pagelet
+interpreter = python
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = megrok.pagelet
+defaults = ['--tests-pattern', '^f?tests$', '-v']

Added: Sandbox/cklinger/megrok.pagelet/trunk/setup.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/setup.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/setup.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,38 @@
+from setuptools import setup, find_packages
+
+long_description = (open("README.txt").read()
+                    + '\n\n' +
+                    open("CHANGES.txt").read())
+
+setup(name='megrok.pagelet',
+      version='0.1',
+      description="Grok extension to configure z3c.pagelets",
+      long_description=long_description,
+      # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=['Programming Language :: Python',
+                   'Environment :: Web Environment',
+                   'Framework :: Zope3',
+                   'License :: OSI Approved :: Zope Public License',
+                   ],
+      keywords='',
+      author='',
+      author_email='',
+      url='http://pypi.python.org/pypi/megrok.pagelet',
+      license='ZPL',
+      packages=find_packages('src'),
+      package_dir = {'': 'src'},
+      namespace_packages=['megrok'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'martian',
+          'grokcore.component',
+	  'z3c.template',
+	  'z3c.pagelet',
+          'grok',  # just for the ViewGrokker
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/__init__.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/__init__.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/__init__.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,6 @@
+# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages
+try:
+    __import__('pkg_resources').declare_namespace(__name__)
+except ImportError:
+    from pkgutil import extend_path
+    __path__ = extend_path(__path__, __name__)

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/__init__.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/__init__.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/__init__.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,3 @@
+from megrok.pagelet.component import LayoutView, Pagelet 
+from grokcore.component import name, title, description
+from megrok.pagelet.directive import layout, template 

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/component.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,68 @@
+import martian.util
+import grokcore.component 
+
+from zope import interface
+from zope import component
+from grokcore.view import View
+from grokcore.view import interfaces
+from martian.error import GrokImportError
+from zope.interface import implements
+from zope.component import getMultiAdapter
+from zope.publisher.browser import BrowserPage
+from z3c.template.interfaces import ILayoutTemplate
+from grokcore.view.interfaces import IGrokView
+
+class LayoutView(object):
+    pass
+
+
+class Pagelet(BrowserPage):
+    implements(interfaces.IGrokView)
+    template = None
+    layout = None
+
+    def __init__(self, context, request):
+        super(Pagelet, self).__init__(context, request)
+        self.__name__ = self.__view_name__
+        self.static = component.queryAdapter(
+            self.request,
+            interface.Interface,
+            name=self.module_info.package_dotted_name
+            )
+   
+    def update(self):
+        pass
+
+    def render(self):
+        # render content template
+        if self.template is None:
+            template = zope.component.getMultiAdapter(
+                (self, self.request), IContentTemplate)
+            return template(self)
+        return self.template()
+
+    def __call__(self):
+        """Calls update and returns the layout template which calls render."""
+        self.update()
+        if self.layout is None:
+            layout = component.getMultiAdapter(
+                (self.context, self.request), ILayoutTemplate)
+            return layout(self)
+        return self.layout()
+
+
+    def __getitem__(self, key):
+        # This is BBB code for Zope page templates only:
+        if not isinstance(self.template, PageTemplate):
+            raise AttributeError("View has no item %s" % key)
+
+        value = self.template._template.macros[key]
+        # When this deprecation is done with, this whole __getitem__ can
+        # be removed.
+        warnings.warn("Calling macros directly on the view is deprecated. "
+                      "Please use context/@@viewname/macros/macroname\n"
+                      "View %r, macro %s" % (self, key),
+                      DeprecationWarning, 1)
+        return value
+
+

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/directive.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/directive.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/directive.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,11 @@
+import martian
+
+class layout(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    default = u'megrok.pagelet.layout'
+
+class template(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+    default = u'megrok.pagelet.template'

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/ftesting.zcml
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/ftesting.zcml	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/ftesting.zcml	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,36 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="grok" />
+  <include package="grokcore.view" file="meta.zcml" />
+  <include package="megrok.pagelet" file="meta.zcml" />
+
+
+  <grok:grok package="megrok.pagelet.tests" />
+
+  <securityPolicy
+      component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy"
+      />
+
+  <unauthenticatedPrincipal
+      id="zope.anybody"
+      title="Unauthenticated User"
+      />
+  <grant
+      permission="zope.View"
+      principal="zope.anybody"
+      />
+
+  <principal
+      id="zope.mgr"
+      title="Manager"
+      login="mgr"
+      password="mgrpw"
+      />
+
+  <role id="zope.Manager" title="Site Manager" />
+  <grantAll role="zope.Manager" />
+  <grant role="zope.Manager" principal="zope.mgr" />
+
+</configure>

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,131 @@
+import grok
+import martian
+import zope.component
+import zope.interface
+
+import grokcore.view
+import megrok.pagelet
+import grokcore.component
+import zope.component.zcml
+
+from martian import util
+from zope import component
+from zope import interface
+from martian.error import GrokError
+
+from z3c.template.zcml import layoutTemplateDirective
+from z3c.template.interfaces import ILayoutTemplate
+from z3c.template.template import TemplateFactory
+from zope.publisher.interfaces.browser import IBrowserPage
+from grokcore.security.util import protect_getattr
+
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+
+def default_view_name(factory, module=None, **data):
+    return factory.__name__.lower()
+
+
+class PageletGrokker(martian.ClassGrokker):
+    martian.component(megrok.pagelet.Pagelet)
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.component.name, get_default=default_view_name)
+
+    def grok(self, name, factory, module_info, **kw):
+        # Need to store the module info object on the view class so that it
+        # can look up the 'static' resource directory.
+        factory.module_info = module_info
+        return super(PageletGrokker, self).grok(name, factory, module_info, **kw)
+
+    def execute(self, factory, config, context, layer, name, **kw):
+        # find templates
+        templates = factory.module_info.getAnnotation('grok.templates', None)
+        if templates is not None:
+            config.action(
+                discriminator=None,
+                callable=self.checkTemplates,
+                args=(templates, factory.module_info, factory)
+                )
+
+        # safety belt: make sure that the programmer didn't use
+        # @grok.require on any of the view's methods.
+        methods = util.methods_from_class(factory)
+        for method in methods:
+            if grokcore.security.require.bind().get(method) is not None:
+                raise GrokError('The @grok.require decorator is used for '
+                                'method %r in view %r. It may only be used '
+                                'for XML-RPC methods.'
+                                % (method.__name__, factory), factory)
+
+        # __view_name__ is needed to support IAbsoluteURL on views
+        factory.__view_name__ = name
+        adapts = (context, layer)
+
+        config.action(
+            discriminator=('adapter', adapts, interface.Interface, name),
+            callable=component.provideAdapter,
+            args=(factory, adapts, interface.Interface, name),
+            )
+        return True
+
+    def checkTemplates(self, templates, module_info, factory):
+
+        def has_render(factory):
+            render = getattr(factory, 'render', None)
+            base_method = getattr(render, 'base_method', False)
+            return render and not base_method
+
+        def has_no_render(factory):
+            return not getattr(factory, 'render', None)
+        templates.checkTemplates(module_info, factory, 'view',
+                                 has_render, has_no_render)
+
+
+
+class PageletSecurityGrokker(martian.ClassGrokker):
+    martian.component(megrok.pagelet.Pagelet)
+    martian.directive(grokcore.security.require, name='permission')
+
+    def execute(self, factory, config, permission, **kw):
+        for method_name in IBrowserPage:
+            config.action(
+                discriminator=('protectName', factory, method_name),
+                callable=protect_getattr,
+                args=(factory, method_name, permission),
+                )
+        return True
+
+
+class LayoutViewGrokker(martian.ClassGrokker):
+    """Code resuse for View, ContentProvider and Viewlet grokkers"""
+    martian.component(megrok.pagelet.LayoutView) 
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.component.name, get_default=default_view_name)
+    martian.directive(megrok.pagelet.layout)
+    martian.directive(megrok.pagelet.template)
+
+    def grok(self, name, factory, module_info, **kw):
+        # Need to store the module info object on the view class so that it
+        # can look up the 'static' resource directory.
+        factory.module_info = module_info
+        return super(LayoutViewGrokker, self).grok(name, factory, module_info, **kw)
+
+    def execute(self, factory, config, context, layer, name, layout, template, **kw):
+        # __view_name__ is needed to support IAbsoluteURL on views
+        factory.__view_name__ = name
+        adapts = (context, layer)
+	#from grokcore.component.directive import name
+        # Let´s register it only for the given grok.name
+	name = grokcore.component.directive.name.bind().get(self)
+	path = '/'.join(factory.module_info.path.split('/')[:-1])
+	template = "%s/%s" %(path, template)
+        layoutfactory = TemplateFactory(template, 'text/html')
+        config.action(
+            discriminator = ('layoutTemplate', context, layer, name),
+            callable = component.provideAdapter,
+            args = (layoutfactory, adapts, ILayoutTemplate, name)
+            )
+        return True
+

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.zcml
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.zcml	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/meta.zcml	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,12 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:meta="http://namespaces.zope.org/meta"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="grokcore.view" />
+  <include package="grokcore.view" file="meta.zcml"/>
+
+  <include package="grokcore.component" file="meta.zcml" />
+  <grok:grok package=".meta" />
+
+</configure>

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/__init__.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/__init__.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/__init__.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,8 @@
+import os.path
+import megrok.pagelet
+from zope.app.testing.functional import ZCMLLayer
+
+ftesting_zcml = os.path.join(os.path.dirname(megrok.pagelet.__file__),
+                             'ftesting.zcml')
+FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer',
+                            allow_teardown=True)

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/context_layout.pt
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/context_layout.pt	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/context_layout.pt	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1 @@
+<div> context layout </div>

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layer_layout.pt
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layer_layout.pt	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layer_layout.pt	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,7 @@
+<html>
+ <body>
+   <div class="layer_layout" tal:content="structure view/render">
+         here comes the content
+   </div>
+ </body>
+</html>

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layout.pt
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layout.pt	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/layout.pt	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1 @@
+<div> Layout </div>

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/playout.pt
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/playout.pt	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/templates/playout.pt	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,8 @@
+<html>
+ <body>
+   <div class="layout" tal:content="structure view/render">
+         here comes the content
+   </div>
+ </body>
+</html>
+

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_layout.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_layout.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_layout.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,68 @@
+"""
+  >>> from zope.component import getUtility
+  >>> from z3c.template.interfaces import ILayoutTemplate 
+  >>> from zope.publisher.browser import TestRequest
+  >>> manfred = Mammoth()
+  >>> from zope.interface import Interface
+  >>> from zope.component import getMultiAdapter
+  >>> request = TestRequest()
+  >>> layout = getMultiAdapter((manfred, request), ILayoutTemplate)
+  >>> "<div> Layout </div>" in str(layout._read_file()) 
+  True 
+
+  >>> view = getMultiAdapter((manfred, request), name='mylayoutview')
+  >>> print view()
+  <div> Layout </div>
+
+  >>> view = getMultiAdapter((manfred, request), name='mycontextlayoutview')
+  >>> print view()
+  <div> context layout </div>
+
+"""
+import grok
+import megrok.pagelet
+from zope.interface import Interface
+from zope.component import getMultiAdapter
+from z3c.template.interfaces import ILayoutTemplate
+
+class Mammoth(grok.Context):
+    pass
+
+class MyLayoutView(grok.View):
+    grok.context(Mammoth)
+    layout = None
+
+    def render(self):
+        if self.layout is None:
+            layout = getMultiAdapter(
+                  (self, self.request), ILayoutTemplate)
+            return layout(self)
+        return self.layout()
+
+
+class Layout(megrok.pagelet.LayoutView):
+    grok.context(Interface)
+    #grok.name('layout')
+    megrok.pagelet.template('templates/layout.pt')  
+
+class MyContextLayoutView(grok.View):
+    grok.context(Mammoth)
+    layout = None
+
+    def render(self):
+        if self.layout is None:
+            layout = getMultiAdapter(
+                  (self, self.request), ILayoutTemplate)
+            return layout(self)
+        return self.layout()
+
+class ContextLayout(megrok.pagelet.LayoutView):
+    grok.context(MyContextLayoutView)
+    megrok.pagelet.template('templates/context_layout.pt')
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.pagelet.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,42 @@
+"""
+  >>> from zope.component import getUtility
+  >>> from zope.publisher.browser import TestRequest
+  >>> from z3c.template.interfaces import ILayoutTemplate
+  >>> page = Page()
+  >>> from zope.interface import Interface
+  >>> from zope.component import getMultiAdapter
+  >>> request = TestRequest()
+  >>> view = getMultiAdapter((page, request), name="mypagelet")
+  >>> print view()
+  <html>
+   <body>
+     <div class="layout"><b> I am a MotherFucking  pagelet </b></div>
+   </body>
+  </html>
+"""
+import grok
+import megrok.pagelet
+from zope.interface import Interface
+from zope.component import getMultiAdapter
+
+class Page(grok.Context):
+    pass
+
+
+class MyPagelet(megrok.pagelet.Pagelet):
+    grok.context(Page)
+
+    def render(self):
+        return "<b> I am a MotherFucking  pagelet </b>"
+
+class MyLayout(megrok.pagelet.LayoutView):
+    grok.context(Page)
+    megrok.pagelet.template('templates/playout.pt')
+
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.pagelet.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite

Added: Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_layers.py
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_layers.py	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/src/megrok/pagelet/tests/test_pagelet_layers.py	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,73 @@
+"""
+  >>> from zope.app.testing.functional import getRootFolder
+  >>> getRootFolder()["manfred"] = Mammoth()
+
+  >>> from zope.testbrowser.testing import Browser
+  >>> browser = Browser()
+  >>> browser.handleErrors = False
+  >>> browser.open("http://localhost/++skin++Basic/manfred/@@myview")
+  >>> print browser.contents
+  <html>
+   <body>
+     <div class="layout"><b>Yeah</b></div> 
+   </body>
+  </html>
+
+
+  >>> browser.open("http://localhost/++skin++myskin/manfred/@@mynewview")
+  >>> print browser.contents
+  <html>
+   <body>
+     <div class="layer_layout"><b> This is the view in the Layer </b></div> 
+   </body>
+  </html>
+"""
+
+import grok
+import megrok.pagelet
+
+from zope.app.basicskin import IBasicSkin
+
+grok.layer(IBasicSkin)
+
+class MySkinLayer(grok.IBrowserRequest):
+    pass
+
+class MySkin(MySkinLayer):
+    grok.skin('myskin')
+
+class Mammoth(grok.Model):
+    pass
+
+class MyView(megrok.pagelet.Pagelet):
+    grok.context(Mammoth)
+
+    def render(self):
+	return "<b>Yeah</b>"
+
+class MyLayout(megrok.pagelet.LayoutView):
+    grok.context(Mammoth)
+    megrok.pagelet.template('templates/playout.pt')
+
+
+class MyNewView(megrok.pagelet.Pagelet):
+    grok.context(Mammoth)
+    grok.layer(MySkinLayer)
+
+    def render(self):
+        return "<b> This is the view in the Layer </b>"
+
+class MyLayerLayout(megrok.pagelet.LayoutView):
+    grok.context(Mammoth)
+    grok.layer(MySkinLayer)
+    megrok.pagelet.template('templates/layer_layout.pt')
+
+def test_suite():
+    from zope.testing import doctest
+    from megrok.pagelet.tests import FunctionalLayer
+    suite = doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS)
+    suite.layer = FunctionalLayer
+    return suite
+
+
+

Added: Sandbox/cklinger/megrok.pagelet/trunk/versions.cfg
===================================================================
--- Sandbox/cklinger/megrok.pagelet/trunk/versions.cfg	                        (rev 0)
+++ Sandbox/cklinger/megrok.pagelet/trunk/versions.cfg	2009-02-02 13:41:58 UTC (rev 95976)
@@ -0,0 +1,111 @@
+[versions]
+ClientForm = 0.2.9
+Pygments = 0.8.1
+RestrictedPython = 3.4.2
+ZConfig = 2.5.1
+ZODB3 = 3.8
+docutils = 0.4
+grokcore.component = 1.5.1
+grokcore.formlib = 1.1
+grokcore.security = 1.0
+grokcore.view = 1.2.1
+grokcore.viewlet = 1.0
+martian = 0.11
+mechanize = 0.1.7b
+pytz = 2007k
+simplejson = 1.7.1
+z3c.autoinclude = 0.2.2
+z3c.flashmessage = 1.0
+z3c.testsetup = 0.2.1
+zc.catalog = 1.2
+zc.recipe.testrunner = 1.0.0
+zdaemon = 2.0.2
+zodbcode = 3.4
+zope.annotation = 3.4.1
+zope.app.apidoc = 3.4.3
+zope.app.applicationcontrol = 3.4.3
+zope.app.appsetup = 3.4.1
+zope.app.authentication = 3.4.3
+zope.app.basicskin = 3.4
+zope.app.broken = 3.4
+zope.app.catalog = 3.5.1
+zope.app.component = 3.4.1
+zope.app.container = 3.5.6
+zope.app.content = 3.4
+zope.app.debug = 3.4.1
+zope.app.dependable = 3.4
+zope.app.error = 3.5.1
+zope.app.exception = 3.4.1
+zope.app.file = 3.4.4
+zope.app.folder = 3.4
+zope.app.form = 3.4.1
+zope.app.generations = 3.4.1
+zope.app.http = 3.4.1
+zope.app.i18n = 3.4.4
+zope.app.interface = 3.4
+zope.app.intid = 3.4.1
+zope.app.keyreference = 3.4.1
+zope.app.locales = 3.4.5
+zope.app.onlinehelp = 3.4.1
+zope.app.pagetemplate = 3.4.1
+zope.app.preference = 3.4.1
+zope.app.principalannotation = 3.4
+zope.app.publication = 3.4.3
+zope.app.publisher = 3.5.1
+zope.app.renderer = 3.4
+zope.app.rotterdam = 3.4.1
+zope.app.schema = 3.4
+zope.app.security = 3.5.2
+zope.app.securitypolicy = 3.4.6
+zope.app.server = 3.4.2
+zope.app.session = 3.5.1
+zope.app.skins = 3.4
+zope.app.testing = 3.4.3
+zope.app.tree = 3.4
+zope.app.twisted = 3.4.1
+zope.app.wsgi = 3.4.1
+zope.app.zapi = 3.4
+zope.app.zcmlfiles = 3.4.3
+zope.app.zopeappgenerations = 3.4
+zope.cachedescriptors = 3.4.1
+zope.component = 3.4
+zope.configuration = 3.4
+zope.contentprovider = 3.4
+zope.contenttype = 3.4
+zope.copypastemove = 3.4
+zope.datetime = 3.4
+zope.deferredimport = 3.4
+zope.deprecation = 3.4
+zope.dottedname = 3.4.2
+zope.dublincore = 3.4
+zope.error = 3.5.1
+zope.event = 3.4
+zope.exceptions = 3.4
+zope.filerepresentation = 3.4
+zope.formlib = 3.4
+zope.hookable = 3.4
+zope.i18n = 3.4
+zope.i18nmessageid = 3.4.3
+zope.index = 3.4.1
+zope.interface = 3.4.1
+zope.lifecycleevent = 3.4
+zope.location = 3.4
+zope.minmax = 1.1
+zope.modulealias = 3.4
+zope.pagetemplate = 3.4
+zope.proxy = 3.4.2
+zope.publisher = 3.4.6
+zope.schema = 3.4
+zope.security = 3.4.1
+zope.securitypolicy = 3.4.1
+zope.server = 3.4.3
+zope.session = 3.4.1
+zope.size = 3.4
+zope.structuredtext = 3.4
+zope.tal = 3.4.1
+zope.tales = 3.4
+zope.testbrowser = 3.4.2
+zope.testing = 3.5.4
+zope.thread = 3.4
+zope.traversing = 3.4.1
+zope.viewlet = 3.4.2



More information about the Checkins mailing list