[Checkins] SVN: Sandbox/philikon/megrok.menu/ Grok extension that configured menus and menu items.

Philipp von Weitershausen philikon at philikon.de
Fri Jul 11 09:14:48 EDT 2008


Log message for revision 88252:
  Grok extension that configured menus and menu items.
  

Changed:
  A   Sandbox/philikon/megrok.menu/
  A   Sandbox/philikon/megrok.menu/branches/
  A   Sandbox/philikon/megrok.menu/tags/
  A   Sandbox/philikon/megrok.menu/trunk/
  A   Sandbox/philikon/megrok.menu/trunk/buildout.cfg
  A   Sandbox/philikon/megrok.menu/trunk/setup.py
  A   Sandbox/philikon/megrok.menu/trunk/src/
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/__init__.py
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/__init__.py
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/component.py
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/grokker.py
  A   Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/meta.zcml
  A   Sandbox/philikon/megrok.menu/trunk/versions.cfg

-=-
Added: Sandbox/philikon/megrok.menu/trunk/buildout.cfg
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/buildout.cfg	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/buildout.cfg	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,15 @@
+[buildout]
+develop = .
+parts = interpreter test
+extends = versions.cfg
+versions = versions
+
+[interpreter]
+recipe = zc.recipe.egg
+eggs = megrok.menu
+interpreter = python
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = megrok.menu
+defaults = ['--tests-pattern', '^f?tests$', '-v']

Added: Sandbox/philikon/megrok.menu/trunk/setup.py
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/setup.py	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/setup.py	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,30 @@
+from setuptools import setup, find_packages
+
+setup(name='megrok.menu',
+      version='0.1',
+      description="Grok extension to configure browser menus",
+      # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[
+        "Programming Language :: Python",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        ],
+      keywords='',
+      author='Philipp von Weitershausen',
+      author_email='philipp at weitershausen.de',
+      url='http://pypi.python.org/pypi/megrok.menu',
+      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',
+          'grok',  # just for the ViewGrokker
+      ],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )


Property changes on: Sandbox/philikon/megrok.menu/trunk/setup.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/megrok.menu/trunk/src/megrok/__init__.py
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/src/megrok/__init__.py	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/src/megrok/__init__.py	2008-07-11 13:14:47 UTC (rev 88252)
@@ -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__)


Property changes on: Sandbox/philikon/megrok.menu/trunk/src/megrok/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/__init__.py
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/__init__.py	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/__init__.py	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,4 @@
+from megrok.menu.component import menuitem, Menu
+
+# Provide these directives here as well:
+from grokcore.component import name, title, description


Property changes on: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/__init__.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/component.py
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/component.py	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/component.py	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,18 @@
+import martian.util
+from zope.app.publisher.browser.menu import BrowserMenu
+
+class Menu(BrowserMenu):
+    pass
+
+class menuitem(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+
+    def factory(self, menu, icon=None, filter=None, order=0):
+        if martian.util.check_subclass(menu, Menu):
+            menu = grokcore.component.name.bind().get(menu)
+        if martian.util.not_unicode_or_ascii(menu):
+            raise GrokImportError(
+                "You can only pass unicode, ASCII, or a subclass "
+                "of megrok.menu.Menu to the '%s' directive." % self.name)
+        return (menu, icon, filter, order)


Property changes on: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/component.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/grokker.py
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/grokker.py	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/grokker.py	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,63 @@
+import martian
+import grokcore.component
+import megrok.menu
+from martian.error import GrokError
+from grok.meta import ViewGrokker, default_view_name
+from zope.component import queryUtility
+from zope.configuration.exceptions import ConfigurationError
+from zope.publisher.interfaces.browser import IBrowserPage
+from zope.app.publisher.interfaces.browser import IMenuItemType
+from zope.app.publisher.browser.menumeta import menuDirective, menuItemDirective
+from zope.app.security.protectclass import protectName
+
+class MenuGrokker(martian.ClassGrokker):
+    martian.component(megrok.menu.Menu)
+    martian.priority(1500)
+    martian.directive(grokcore.component.name, get_default=default_view_name)
+    martian.directive(grokcore.component.title, default=u'')
+    martian.directive(grokcore.component.description, default=u'')
+
+    def execute(self, factory, config, name, title, description, **kw):
+        menuDirective(config, id=name, class_=factory,
+                      title=title, description=description)
+        return True
+
+class MenuItemGrokker(ViewGrokker):
+    martian.directive(megrok.menu.menuitem)
+    martian.directive(grokcore.component.title, default=u'')
+    martian.directive(grokcore.component.description, default=u'')
+
+    def execute(self, factory, config, context, layer, name, permission,
+                menuitem, title, description, **kw):
+        if menuitem is None:
+            return False
+        menu_id, icon, filter, order = menuitem
+        try:
+            menu = config.resolve('zope.app.menus.'+menu_id)
+        except ConfigurationError, v:
+            raise GrokError("The %r menu could not be found.  Please use "
+                            "megrok.menu.Menu to register a menu first."
+                            % menu_id, factory)
+        menuItemDirective(config, menu=menu, for_=context, action=name,
+                          title=title, description=description, icon=icon,
+                          filter=filter, permission=permission, layer=layer,
+                          order=order)
+
+        # Menu items check whether the view that they refer to can be
+        # traversed to.  Unfortunately, views will end up being
+        # security proxied during that fake traversal.  For this to
+        # work then, we must define a checker not only for __call__
+        # but also for browserDefault and those other methods from
+        # IBrowserPage:
+        if permission is None:
+            permission = 'zope.Public'
+        for method_name in list(IBrowserPage):
+            if method_name == '__call__':
+                continue
+            config.action(
+                discriminator=('protectName', factory, method_name),
+                callable=protectName,
+                args=(factory, method_name, permission),
+                )
+
+        return True


Property changes on: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/grokker.py
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/meta.zcml
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/meta.zcml	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/meta.zcml	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,9 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:meta="http://namespaces.zope.org/meta"
+    xmlns:grok="http://namespaces.zope.org/grok">
+
+  <include package="grokcore.component" file="meta.zcml" />
+  <grok:grok package=".grokker" />
+
+</configure>


Property changes on: Sandbox/philikon/megrok.menu/trunk/src/megrok/menu/meta.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: Sandbox/philikon/megrok.menu/trunk/versions.cfg
===================================================================
--- Sandbox/philikon/megrok.menu/trunk/versions.cfg	                        (rev 0)
+++ Sandbox/philikon/megrok.menu/trunk/versions.cfg	2008-07-11 13:14:47 UTC (rev 88252)
@@ -0,0 +1,107 @@
+[versions]
+grok = 0.13
+ClientForm = 0.2.7
+Pygments = 0.8.1
+RestrictedPython = 3.4.2
+ZConfig = 2.5.1
+ZODB3 = 3.8
+docutils = 0.4
+martian = 0.10
+grokcore.component = 1.4
+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
+zdaemon = 2.0.1
+zodbcode = 3.4
+zope.annotation = 3.4
+zope.app.apidoc = 3.4.3
+zope.app.applicationcontrol = 3.4.1
+zope.app.appsetup = 3.4.1
+zope.app.authentication = 3.4.1
+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.3
+zope.app.content = 3.4
+zope.app.debug = 3.4
+zope.app.dependable = 3.4
+zope.app.error = 3.5.1
+zope.app.exception = 3.4.1
+zope.app.file = 3.4.2
+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.1
+zope.app.onlinehelp = 3.4.1
+zope.app.pagetemplate = 3.4
+zope.app.preference = 3.4.1
+zope.app.principalannotation = 3.4
+zope.app.publication = 3.4.3
+zope.app.publisher = 3.4.1
+zope.app.renderer = 3.4
+zope.app.rotterdam = 3.4.1
+zope.app.schema = 3.4
+zope.app.security = 3.4
+zope.app.securitypolicy = 3.4.6
+zope.app.server = 3.4
+zope.app.session = 3.5.1
+zope.app.skins = 3.4
+zope.app.testing = 3.4.1
+zope.app.tree = 3.4
+zope.app.twisted = 3.4
+zope.app.wsgi = 3.4
+zope.app.zapi = 3.4
+zope.app.zcmlfiles = 3.4.3
+zope.app.zopeappgenerations = 3.4
+zope.cachedescriptors = 3.4
+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
+zope.publisher = 3.4.2
+zope.schema = 3.4
+zope.security = 3.4
+zope.securitypolicy = 3.4
+zope.server = 3.4.1
+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.1
+zope.thread = 3.4
+zope.traversing = 3.4.0
+zope.viewlet = 3.4.2



More information about the Checkins mailing list