[Checkins] SVN: five.megrok.menu/ initial import

Jean-Francois Roche jfroche at jfroche.be
Thu May 28 07:26:13 EDT 2009


Log message for revision 100505:
  initial import
  

Changed:
  A   five.megrok.menu/
  A   five.megrok.menu/branches/
  A   five.megrok.menu/tags/
  A   five.megrok.menu/trunk/
  A   five.megrok.menu/trunk/.installed.cfg
  A   five.megrok.menu/trunk/README.txt
  A   five.megrok.menu/trunk/bootstrap.py
  A   five.megrok.menu/trunk/buildout.cfg
  A   five.megrok.menu/trunk/docs/
  A   five.megrok.menu/trunk/docs/HISTORY.txt
  A   five.megrok.menu/trunk/five/
  A   five.megrok.menu/trunk/five/__init__.py
  A   five.megrok.menu/trunk/five/megrok/
  A   five.megrok.menu/trunk/five/megrok/__init__.py
  A   five.megrok.menu/trunk/five/megrok/menu/
  A   five.megrok.menu/trunk/five/megrok/menu/__init__.py
  A   five.megrok.menu/trunk/five/megrok/menu/component.py
  A   five.megrok.menu/trunk/five/megrok/menu/grokker.py
  A   five.megrok.menu/trunk/five/megrok/menu/meta.zcml
  A   five.megrok.menu/trunk/five/megrok/menu/testing.zcml
  A   five.megrok.menu/trunk/five/megrok/menu/tests/
  A   five.megrok.menu/trunk/five/megrok/menu/tests/__init__.py
  A   five.megrok.menu/trunk/five/megrok/menu/tests/menus/
  A   five.megrok.menu/trunk/five/megrok/menu/tests/menus/__init__.py
  A   five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py
  A   five.megrok.menu/trunk/five/megrok/menu/tests/test_all.py
  A   five.megrok.menu/trunk/setup.cfg
  A   five.megrok.menu/trunk/setup.py

-=-
Added: five.megrok.menu/trunk/.installed.cfg
===================================================================
--- five.megrok.menu/trunk/.installed.cfg	                        (rev 0)
+++ five.megrok.menu/trunk/.installed.cfg	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,72 @@
+[buildout]
+installed_develop_eggs = 
+parts = zope2 instance zopepy test
+
+[zope2]
+__buildout_installed__ = /svn/five.megrok.menu/parts/zope2
+__buildout_signature__ = plone.recipe.zope2install-3.0-py2.4.egg setuptools-0.6c9-py2.4.egg zc.buildout-1.2.1-py2.4.egg
+additional-fake-egg = %(__buildout_space_n__)szope.app.publisher
+executable = /svn/five.megrok.menu/bin/python
+fake-zope-eggs = true
+location = /svn/five.megrok.menu/parts/zope2
+recipe = plone.recipe.zope2install
+url = http://www.zope.org/Products/Zope/2.10.8/Zope-2.10.8-final.tgz
+
+[instance]
+__buildout_installed__ = /svn/five.megrok.menu/parts/instance
+__buildout_signature__ = plone.recipe.zope2instance-3.2-py2.4.egg zc.recipe.egg-1.2.2-py2.4.egg setuptools-0.6c9-py2.4.egg zc.buildout-1.2.1-py2.4.egg zc.buildout-1.2.1-py2.4.egg
+_b = /svn/five.megrok.menu/bin
+_d = /svn/five.megrok.menu/develop-eggs
+_e = /svn/five.megrok.menu/eggs
+bin-directory = /svn/five.megrok.menu/bin
+debug-mode = on
+develop-eggs-directory = /svn/five.megrok.menu/develop-eggs
+eggs = %(__buildout_space_n__)szope.component>=3.4,<3.5dev
+	five.megrok.menu
+eggs-directory = /svn/five.megrok.menu/eggs
+executable = /svn/five.megrok.menu/bin/python
+http-address = 8080
+location = /svn/five.megrok.menu/parts/instance
+products = 
+recipe = plone.recipe.zope2instance
+scripts = 
+user = admin:admin
+verbose-security = on
+zcml = five.megrok.menu-meta
+zope2-location = /svn/five.megrok.menu/parts/zope2
+
+[zopepy]
+__buildout_installed__ = /svn/five.megrok.menu/bin/zopepy
+__buildout_signature__ = zc.recipe.egg-1.2.2-py2.4.egg setuptools-0.6c9-py2.4.egg zc.buildout-1.2.1-py2.4.egg
+_b = /svn/five.megrok.menu/bin
+_d = /svn/five.megrok.menu/develop-eggs
+_e = /svn/five.megrok.menu/eggs
+bin-directory = /svn/five.megrok.menu/bin
+develop-eggs-directory = /svn/five.megrok.menu/develop-eggs
+eggs = %(__buildout_space_n__)szope.component>=3.4,<3.5dev
+	five.megrok.menu
+eggs-directory = /svn/five.megrok.menu/eggs
+executable = /svn/five.megrok.menu/bin/python
+extra-paths = /svn/five.megrok.menu/parts/zope2/lib/python
+interpreter = zopepy
+recipe = zc.recipe.egg
+scripts = zopepy
+
+[test]
+__buildout_installed__ = /svn/five.megrok.menu/parts/test
+	/svn/five.megrok.menu/bin/test
+__buildout_signature__ = zc.recipe.testrunner-1.2.0-py2.4.egg zc.recipe.egg-1.2.2-py2.4.egg setuptools-0.6c9-py2.4.egg zope.testing-3.7.4-py2.4.egg zc.buildout-1.2.1-py2.4.egg zope.interface-gzud3lTQCGaDSJ1OeacDhA==
+_b = /svn/five.megrok.menu/bin
+_d = /svn/five.megrok.menu/develop-eggs
+_e = /svn/five.megrok.menu/eggs
+bin-directory = /svn/five.megrok.menu/bin
+defaults = ['-m', 'five.megrok.menu', '--tests-pattern', '^f?tests$', '-v']
+develop-eggs-directory = /svn/five.megrok.menu/develop-eggs
+eggs = %(__buildout_space_n__)szope.component>=3.4,<3.5dev
+	five.megrok.menu
+eggs-directory = /svn/five.megrok.menu/eggs
+executable = /svn/five.megrok.menu/bin/python
+extra-paths = /svn/five.megrok.menu/parts/zope2/lib/python
+location = /svn/five.megrok.menu/parts/test
+recipe = zc.recipe.testrunner
+script = /svn/five.megrok.menu/bin/test

Added: five.megrok.menu/trunk/README.txt
===================================================================
--- five.megrok.menu/trunk/README.txt	                        (rev 0)
+++ five.megrok.menu/trunk/README.txt	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,8 @@
+Introduction
+============
+
+This package allows you to register browser menus and menu items for
+browser views in Grok.
+
+This package just take what has been written in megrok.menu and change a few lines
+to be able to use it in the Zope 2 world with five.grok

Added: five.megrok.menu/trunk/bootstrap.py
===================================================================
--- five.megrok.menu/trunk/bootstrap.py	                        (rev 0)
+++ five.megrok.menu/trunk/bootstrap.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,55 @@
+##############################################################################
+#
+# 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 85745 2008-04-26 08:49:56Z regebro $
+"""
+
+import os, shutil, sys, tempfile, urllib2
+
+tmpeggs = tempfile.mkdtemp()
+
+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
+
+cmd = 'from setuptools.command.easy_install import main; main()'
+if sys.platform == 'win32':
+    cmd = '"%s"' % cmd # work around spawn lamosity on windows
+
+ws = pkg_resources.working_set
+assert os.spawnle(
+    os.P_WAIT, sys.executable, sys.executable,
+    '-c', cmd, '-mqNxd', 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: five.megrok.menu/trunk/buildout.cfg
===================================================================
--- five.megrok.menu/trunk/buildout.cfg	                        (rev 0)
+++ five.megrok.menu/trunk/buildout.cfg	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,48 @@
+[buildout]
+parts =
+    zope2
+    instance
+    zopepy
+    test
+develop = .
+
+newest = false
+versions = versions
+
+[versions]
+zope.app.publisher = 3.5
+zope.authentication = 3.5
+zope.securitypolicy = 3.5
+
+[zope2]
+recipe = plone.recipe.zope2install
+url = http://www.zope.org/Products/Zope/2.10.8/Zope-2.10.8-final.tgz
+fake-zope-eggs = true
+additional-fake-egg =
+    zope.app.publisher
+
+[instance]
+recipe = plone.recipe.zope2instance
+zope2-location = ${zope2:location}
+user = admin:admin
+http-address = 8080
+debug-mode = on
+verbose-security = on
+eggs =
+    zope.component>=3.4,<3.5dev
+    five.megrok.menu
+zcml = five.megrok.menu-meta
+products =
+
+[zopepy]
+recipe = zc.recipe.egg
+eggs = ${instance:eggs}
+interpreter = zopepy
+extra-paths = ${zope2:location}/lib/python
+scripts = zopepy
+
+[test]
+recipe = zc.recipe.testrunner
+eggs = ${instance:eggs}
+extra-paths = ${zope2:location}/lib/python
+defaults = ['-m', 'five.megrok.menu', '--tests-pattern', '^f?tests$', '-v']

Added: five.megrok.menu/trunk/docs/HISTORY.txt
===================================================================
--- five.megrok.menu/trunk/docs/HISTORY.txt	                        (rev 0)
+++ five.megrok.menu/trunk/docs/HISTORY.txt	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,8 @@
+Changelog
+=========
+
+0.1 (2009-05-28)
+----------------
+
+* Initial release
+

Added: five.megrok.menu/trunk/five/__init__.py
===================================================================
--- five.megrok.menu/trunk/five/__init__.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/__init__.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -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: five.megrok.menu/trunk/five/megrok/__init__.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/__init__.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/__init__.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -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: five.megrok.menu/trunk/five/megrok/menu/__init__.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/__init__.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/__init__.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1 @@
+from five.megrok.menu.component import menuitem, Menu, SubMenuItem

Added: five.megrok.menu/trunk/five/megrok/menu/component.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/component.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/component.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,34 @@
+# -*- coding: utf-8 -*-
+"""
+five.megrok.menu
+
+Licensed under the ZPL license, see LICENCE.txt for more details.
+
+$Id: event.py 67630 2006-04-27 00:54:03Z jfroche $
+"""
+import martian.util
+import grokcore.component
+from martian.error import GrokImportError
+from zope.app.publisher.browser.menu import BrowserMenu
+
+
+class Menu(BrowserMenu):
+    pass
+
+
+class SubMenuItem(BrowserMenu):
+    pass
+
+
+class menuitem(martian.Directive):
+    scope = martian.CLASS
+    store = martian.ONCE
+
+    def factory(self, menu, icon=None, filter=None, order=0, extra=None):
+        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, extra)

Added: five.megrok.menu/trunk/five/megrok/menu/grokker.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/grokker.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/grokker.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+"""
+five.megrok.menu
+
+Licensed under the GPL license, see LICENCE.txt for more details.
+
+$Id: event.py 67630 2006-04-27 00:54:03Z jfroche $
+"""
+import martian
+from martian.error import GrokError
+
+import grokcore.component
+import grokcore.view
+from zope.security.checker import CheckerPublic
+from grokcore.view.meta.views import ViewSecurityGrokker, default_view_name
+
+from zope.configuration.exceptions import ConfigurationError
+from zope.app.publisher.browser.menumeta import menuDirective, \
+    menuItemDirective, subMenuItemDirective
+
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+import five.megrok.menu
+
+
+class MenuGrokker(martian.ClassGrokker):
+    martian.component(five.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 SubMenuItemGrokker(martian.ClassGrokker):
+    martian.component(five.megrok.menu.SubMenuItem)
+
+    # We want to do this after MenuGrokker.
+    martian.priority(1000)
+
+    martian.directive(grokcore.component.name, get_default=default_view_name)
+    martian.directive(grokcore.component.title, default=u'')
+    martian.directive(grokcore.component.description, default=u'')
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    martian.directive(grokcore.security.require, name='permission')
+
+    martian.directive(five.megrok.menu.menuitem)
+
+    def execute(self, factory, config, name, title, description, \
+                    menuitem=None, context=None, layer=None, permission=None):
+        menuDirective(config, id=name, class_=factory,
+                      title=title, description=description)
+
+        if menuitem is None:
+            return False
+
+        menu_id, icon, filter, order, extra = 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)
+        if permission is None:
+            permission = CheckerPublic
+
+        subMenuItemDirective(config, menu=menu, for_=context, submenu=name,
+                          title=title, description=description, icon=icon,
+                          filter=filter, permission=permission, layer=layer,
+                          order=order, action='', extra=extra)
+
+        return True
+
+
+class MenuItemGrokker(ViewSecurityGrokker):
+    martian.directive(five.megrok.menu.menuitem)
+    martian.directive(grokcore.component.context)
+    martian.directive(grokcore.view.layer, default=IDefaultBrowserLayer)
+    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, permission, context=None,
+                layer=None, name=u'', menuitem=None, description=u'',
+                title=u''):
+        if menuitem is None:
+            return False
+        menu_id, icon, filter, order, extra = 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)
+        if permission == None:
+            permission = CheckerPublic
+
+        menuItemDirective(config, menu=menu, for_=context, action=name,
+                          title=title, description=description, icon=icon,
+                          filter=filter, permission=permission, layer=layer,
+                          order=order, extra=extra)
+
+        return True

Added: five.megrok.menu/trunk/five/megrok/menu/meta.zcml
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/meta.zcml	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/meta.zcml	2009-05-28 11:26:13 UTC (rev 100505)
@@ -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>

Added: five.megrok.menu/trunk/five/megrok/menu/testing.zcml
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/testing.zcml	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/testing.zcml	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,7 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser="http://namespaces.zope.org/browser">
+
+  <include package="five.megrok.menu" file="meta.zcml" />
+
+</configure>

Added: five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/tests/menus/menus.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,74 @@
+"""
+  >>> grok.testing.grok(__name__)
+
+For menu configuration, we have to start a new interaction:
+
+  >>> from Products.Five.security import newInteraction
+  >>> newInteraction()
+
+  >>> from zope.component import getUtility, getUtilitiesFor
+  >>> from zope.app.publisher.interfaces.browser import IBrowserMenu
+  >>> from zope.publisher.browser import TestRequest
+
+A menu is available as a named utility providing ``IBrowserMenu``.
+
+  >>> menu = getUtility(IBrowserMenu, u'tabs')
+  >>> manfred = Mammoth()
+  >>> request = TestRequest()
+
+In order to retrieve the menu items, we need to pass in a context
+object and a request.  The menu then determines which menu items are
+available for this particular object and the principal that's attached
+to the request:
+
+  >>> from pprint import pprint
+  >>> pprint(menu.getMenuItems(manfred, request))
+  [{'action': 'edit',
+    'description': u'',
+    'extra': None,
+    'icon': None,
+    'selected': u'',
+    'submenu': None,
+    'title': 'Edit'},
+   {'action': 'index',
+    'description': u'',
+    'extra': None,
+    'icon': None,
+    'selected': u'',
+    'submenu': None,
+    'title': 'View'}]
+
+"""
+
+from grokcore.component import Context
+from five import grok
+from five.grok import testing
+from five.megrok import menu
+import grokcore.security
+
+class Mammoth(Context):
+    pass
+
+class Tabs(menu.Menu):
+    grok.name('tabs')
+    grok.title('Tabs')
+    grok.description('')
+
+# You can either refer to the menu class itself:
+# do not forget the security declaration
+
+class Index(grok.View):
+    grok.title('View')
+    menu.menuitem(Tabs)
+    def render(self):
+        return 'index'
+
+# or you can refer to its identifier:
+
+class Edit(grok.View):
+    grok.title('Edit')
+    menu.menuitem('tabs')
+    grokcore.security.require('zope2.Public')
+
+    def render(self):
+        return 'edit'

Added: five.megrok.menu/trunk/five/megrok/menu/tests/test_all.py
===================================================================
--- five.megrok.menu/trunk/five/megrok/menu/tests/test_all.py	                        (rev 0)
+++ five.megrok.menu/trunk/five/megrok/menu/tests/test_all.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,48 @@
+import unittest
+from pkg_resources import resource_listdir
+
+from zope.testing import doctest
+from zope.component import testing
+
+import Products.Five
+from Products.Five import zcml
+import five.megrok.menu
+
+
+def setUp(test=None):
+    testing.setUp(test)
+    zcml.load_config('meta.zcml', package=Products.Five)
+    zcml.load_config('configure.zcml', package=Products.Five)
+    zcml.load_config('testing.zcml', package=five.megrok.menu)
+
+
+def suiteFromPackage(name):
+    files = resource_listdir(__name__, name)
+    suite = unittest.TestSuite()
+    for filename in files:
+        if not filename.endswith('.py'):
+            continue
+        if filename.endswith('_fixture.py'):
+            continue
+        if filename == '__init__.py':
+            continue
+
+        dottedname = 'five.megrok.menu.tests.%s.%s' % (name, filename[:-3])
+        test = doctest.DocTestSuite(dottedname,
+                                    setUp=setUp,
+                                    tearDown=testing.tearDown,
+                                    optionflags=doctest.ELLIPSIS+
+                                                doctest.NORMALIZE_WHITESPACE)
+
+        suite.addTest(test)
+    return suite
+
+
+def test_suite():
+    suite = unittest.TestSuite()
+    for name in ['menus']:
+        suite.addTest(suiteFromPackage(name))
+    return suite
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')

Added: five.megrok.menu/trunk/setup.cfg
===================================================================
--- five.megrok.menu/trunk/setup.cfg	                        (rev 0)
+++ five.megrok.menu/trunk/setup.cfg	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,3 @@
+[egg_info]
+tag_build = dev
+tag_svn_revision = true

Added: five.megrok.menu/trunk/setup.py
===================================================================
--- five.megrok.menu/trunk/setup.py	                        (rev 0)
+++ five.megrok.menu/trunk/setup.py	2009-05-28 11:26:13 UTC (rev 100505)
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+from setuptools import setup, find_packages
+import os
+
+version = '0.1'
+
+setup(name='five.megrok.menu',
+      version=version,
+      description="Grok support for browser menu in zope 2",
+      long_description=open("README.txt").read() + "\n" +
+                       open(os.path.join("docs", "HISTORY.txt")).read(),
+      # Get more strings from http://www.python.org/pypi?%3Aaction=list_classifiers
+      classifiers=[
+        "Environment :: Web Environment",
+        "Intended Audience :: Developers",
+        "Programming Language :: Python",
+        "License :: OSI Approved :: Zope Public License",
+        "Topic :: Software Development :: Libraries :: Python Modules",
+        "Framework :: Zope2"],
+      keywords='',
+      author='Jean-François Roche',
+      author_email='jfroche at affinitic.be',
+      url='http://svn.zope.org/five.megrok.menu/trunk',
+      license='GPL',
+      packages=find_packages(exclude=['ez_setup']),
+      namespace_packages=['five', 'five.megrok'],
+      include_package_data=True,
+      zip_safe=False,
+      install_requires=[
+          'setuptools',
+          'five.grok'],
+      entry_points="""
+      # -*- Entry points: -*-
+      """,
+      )



More information about the Checkins mailing list