[Checkins] SVN: Grokstar/trunk/src/megrok.viewlet/ A rough and
ready viewlet proof of concept. Supports viewlets,
viewletmanagers, and
Lennart Regebro
regebro at gmail.com
Sun Mar 18 10:55:44 EDT 2007
Log message for revision 73312:
A rough and ready viewlet proof of concept. Supports viewlets, viewletmanagers, and
also a way to render them without being dependant on ZPT.
Changed:
A Grokstar/trunk/src/megrok.viewlet/
A Grokstar/trunk/src/megrok.viewlet/trunk/
A Grokstar/trunk/src/megrok.viewlet/trunk/src/
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/__init__.py
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/__init__.py
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/configure.zcml
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/interfaces.py
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/main_template.pt
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/meta.py
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/publication.py
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_default.pt
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_empty.pt
A Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlets.py
-=-
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/__init__.py
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/__init__.py 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/__init__.py 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,3 @@
+# make this directory a namespace package
+import pkg_resources
+pkg_resources.declare_namespace('megrok')
\ No newline at end of file
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/__init__.py
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/__init__.py 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/__init__.py 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1 @@
+# make this directory a namespace package
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/configure.zcml
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/configure.zcml 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/configure.zcml 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,17 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ xmlns:grok="http://namespaces.zope.org/grok"
+ i18n_domain="zope">
+
+ <grok:grok package="." />
+
+ <publisher
+ name="BROWSER"
+ factory=".publication.SkinnedBrowserFactory"
+ methods="GET POST HEAD"
+ mimetypes="*"
+ priority="12"
+ />
+
+</configure>
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/configure.zcml
___________________________________________________________________
Name: svn:keywords
+ Id
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/interfaces.py
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/interfaces.py 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/interfaces.py 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# Copyright (c) 2007 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.
+#
+##############################################################################
+"""Interfaces
+"""
+
+from zope.viewlet.interfaces import IViewletManager
+
+class ITitle(IViewletManager):
+ """Title of my page."""
+
+class IMainContent(IViewletManager):
+ """Main content of my page."""
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/interfaces.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/main_template.pt
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/main_template.pt 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/main_template.pt 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,10 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+ <head>
+ <title tal:content="python:managers['title'].render()">title</title>
+ </head>
+ <body>
+ <div class="left_column" tal:content="structure python:managers['main_content'].render()"/>
+
+ </body>
+</html>
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/main_template.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/meta.py
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/meta.py 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/meta.py 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,84 @@
+##############################################################################
+#
+# Copyright (c) 2007 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.
+#
+##############################################################################
+"""Interfaces
+"""
+from zope import component
+from zope.publisher.interfaces.browser import IBrowserView
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+from zope.viewlet.interfaces import IViewlet, IViewletManager
+from zope.viewlet.manager import ViewletManagerBase
+from zope.security.checker import NamesChecker, defineChecker
+
+import grok
+
+class ViewletManager(ViewletManagerBase, grok.Model):
+ template = None
+
+class ViewletManagerGrokker(grok.ClassGrokker):
+ component_class = ViewletManager
+
+ def register(self, context, name, factory, module_info, templates):
+ provides = grok.util.class_annotation(factory, 'grok.provides', None)
+ name = grok.util.class_annotation(factory, 'grok.name', name)
+ component.provideAdapter(factory,
+ adapts=(None, # TODO: Make configurable
+ IDefaultBrowserLayer, # TODO: Make configurable
+ IBrowserView),
+ provides=provides,
+ name=name)
+
+class Viewlet(grok.Model):
+
+ def __init__(self, context, request, view, manager):
+ self.context = context
+ self.request = request
+ self.view = view
+ self.manager = manager
+
+ def update(self):
+ pass
+
+class ViewletGrokker(grok.ClassGrokker):
+ component_class = Viewlet
+
+ def register(self, context, name, factory, module_info, templates):
+ # Try to set up permissions (copied from the View grokker)
+ permissions = grok.util.class_annotation(factory, 'grok.require', [])
+ if not permissions:
+ checker = NamesChecker(['render'])
+ elif len(permissions) > 1:
+ raise GrokError('grok.require was called multiple times in viewlet '
+ '%r. It may only be called once.' % factory,
+ factory)
+ elif permissions[0] == 'zope.Public':
+ checker = NamesChecker(['render'])
+ else:
+ perm = permissions[0]
+ if component.queryUtility(IPermission, name=perm) is None:
+ raise GrokError('Undefined permission %r in view %r. Use '
+ 'grok.define_permission first.'
+ % (perm, factory), factory)
+ checker = NamesChecker(['render'], permissions[0])
+
+ defineChecker(factory, checker)
+
+ manager = factory.viewlet_manager
+ component.provideAdapter(factory,
+ adapts=(None, # TODO: Make configurable
+ IDefaultBrowserLayer, # TODO: Make configurable
+ IBrowserView,
+ manager),
+ provides=IViewlet,
+ name=name)
+
\ No newline at end of file
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/meta.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/publication.py
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/publication.py 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/publication.py 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,51 @@
+##############################################################################
+#
+# Copyright (c) 2007 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.
+#
+##############################################################################
+"""Skinned Grok publication objects
+"""
+
+import zope.interface
+import zope.component
+from zope.app.publication.requestpublicationfactories import BrowserFactory
+from zope.security.checker import selectChecker
+
+from grok.publication import GrokBrowserPublication
+from grok.components import PageTemplateFile
+
+from interfaces import ITitle
+
+class SkinnedBrowserPublication(GrokBrowserPublication):
+
+ def callObject(self, request, ob):
+ if getattr(ob, 'context', None) is None:
+ return super(SkinnedBrowserPublication, self).callObject(request, ob)
+
+ checker = selectChecker(ob)
+ if checker is not None:
+ checker.check(ob, '__call__')
+
+ managers = dict(zope.component.getAdapters((ob.context, request, ob),
+ zope.interface.Interface))
+ for manager in managers.values():
+ manager.update()
+
+ # TODO: make template configurable (pick up from layer?)
+ template = PageTemplateFile('main_template.pt')
+ return template.pt_render({'managers': managers})
+
+
+class SkinnedBrowserFactory(BrowserFactory):
+
+ def __call__(self):
+ request, publication = super(SkinnedBrowserFactory, self).__call__()
+ return request, SkinnedBrowserPublication
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/publication.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_default.pt
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_default.pt 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_default.pt 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,5 @@
+<div class="viewlet_manager" tal:attributes="id options">
+ <div class="viewlet"
+ tal:repeat="viewlet options/viewlets"
+ tal:content="structure viewlet/render" />
+</div>
\ No newline at end of file
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_default.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_empty.pt
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_empty.pt 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_empty.pt 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,3 @@
+<tal:block
+ tal:repeat="viewlet options/viewlets"
+ tal:content="structure viewlet/render" />
\ No newline at end of file
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlet_manager_empty.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlets.py
===================================================================
--- Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlets.py 2007-03-18 14:01:18 UTC (rev 73311)
+++ Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlets.py 2007-03-18 14:55:43 UTC (rev 73312)
@@ -0,0 +1,53 @@
+##############################################################################
+#
+# Copyright (c) 2007 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.
+#
+##############################################################################
+"""Interfaces
+"""
+from zope import component
+from zope.interface import implements
+from zope.publisher.publish import mapply
+import grok
+
+import interfaces
+from meta import Viewlet, ViewletManager
+
+class TitleViewletManager(ViewletManager):
+ grok.name('title')
+ # Implements AND provides? Can I get rid of one?
+ implements(interfaces.ITitle)
+ grok.provides(interfaces.ITitle)
+
+
+class TitleViewlet(Viewlet):
+ # Should this be like grok.viewlet_manager(ILeftColumn) instead?
+ viewlet_manager = interfaces.ITitle
+
+ def render(self):
+ return getattr(self.context, 'title', u'')
+
+
+class ContentViewletManager(ViewletManager):
+ grok.name('main_content')
+ # Implements AND provides? Can I get rid of one?
+ implements(interfaces.IMainContent)
+ grok.provides(interfaces.IMainContent)
+
+
+class ContentViewlet(Viewlet):
+ viewlet_manager = interfaces.IMainContent
+
+ def render(self):
+ return mapply(self.view,
+ self.request.getPositionalArguments(),
+ self.request)
+
Property changes on: Grokstar/trunk/src/megrok.viewlet/trunk/src/megrok/viewlet/viewlets.py
___________________________________________________________________
Name: svn:keywords
+ Id
More information about the Checkins
mailing list