[Checkins] SVN: megrok.menu/trunk/ Cleaning process : dependencies and tests have been cleared from all the unused packages AND updated to the most recent ZTK use.

Souheil CHELFOUH souheil at chelfouh.com
Sat Mar 6 13:13:02 EST 2010


Log message for revision 109713:
  Cleaning process : dependencies and tests have been cleared from all the unused packages AND updated to the most recent ZTK use.
  

Changed:
  U   megrok.menu/trunk/CHANGES.txt
  U   megrok.menu/trunk/buildout.cfg
  U   megrok.menu/trunk/setup.py
  U   megrok.menu/trunk/src/megrok/menu/__init__.py
  U   megrok.menu/trunk/src/megrok/menu/component.py
  U   megrok.menu/trunk/src/megrok/menu/grokker.py
  U   megrok.menu/trunk/src/megrok/menu/tests/__init__.py
  U   megrok.menu/trunk/src/megrok/menu/tests/test_functional.py
  U   megrok.menu/trunk/src/megrok/menu/tests/test_menu.py
  U   megrok.menu/trunk/src/megrok/menu/tests/test_order.py

-=-
Modified: megrok.menu/trunk/CHANGES.txt
===================================================================
--- megrok.menu/trunk/CHANGES.txt	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/CHANGES.txt	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,13 +1,25 @@
 Changelog
 =========
 
-0.4 (unreleased)
+0.4 (2010-03-06)
 ----------------
-* ...
 
+* Cleaned the tests module. Now, we only use the ZTK packages to test.
 
+* The dependencies have been cleared. We no longer depend on zope.app
+  packages.
+
+* Updated the security grokking in the menu items grokker. We don't
+  need the protect_getattr, as the view security grokker already does
+  it for us.
+
+* Fixed the dependencies in the package requires. All dependencies are
+  now clearly declared.
+
+
 0.3 (2009-11-02)
 ----------------
+
 * Added the support of the grokcore.viewlet 'order' directive to
   reorder the menu items and sub menus. This permits to have a
   baseclass defining the basic menu and to keep the ordering
@@ -15,7 +27,9 @@
   different arguments of the menuitem directive. That would allow more
   genericity and reusability. Note : this change is 100% backward
   compatible. Simply added tests to show the behavior. [trollfot]
+
 * Get rid of the grok dependency. Now depends only on grokcore.* packages
+
 * Updated the build process
 
 
@@ -23,9 +37,13 @@
 ----------------
 
 * Compatible with grok1.0a1
+
 * Add the SubMenuItem base class and it's grokker SubMenuItemGrokker
+
 * Add the `extra` parameter to the menuitem directive
+
 * Tests for added functionality
+
 * Remove version.cfg
 
 

Modified: megrok.menu/trunk/buildout.cfg
===================================================================
--- megrok.menu/trunk/buildout.cfg	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/buildout.cfg	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,7 +1,7 @@
 [buildout]
 develop = .
 parts = interpreter test
-extends = http://grok.zope.org/releaseinfo/grok-1.0a4.cfg
+extends = http://grok.zope.org/releaseinfo/grok-1.1rc1.cfg
 versions = versions
 
 [interpreter]
@@ -11,5 +11,5 @@
 
 [test]
 recipe = zc.recipe.testrunner
-eggs = megrok.menu
+eggs = megrok.menu [test]
 defaults = ['--tests-pattern', '^f?tests$', '-v']

Modified: megrok.menu/trunk/setup.py
===================================================================
--- megrok.menu/trunk/setup.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/setup.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,21 +1,17 @@
 from setuptools import setup, find_packages
 
-long_description = (open("README.txt").read()
-                    + '\n\n' +
-                    open("CHANGES.txt").read())
+long_description = (
+    open("README.txt").read() + '\n\n' + open("CHANGES.txt").read())
 
+test_requires = []
+
 setup(name='megrok.menu',
-      version='0.4dev',
+      version='0.4',
       description="Grok extension to configure browser menus",
       long_description=long_description,
-      classifiers=['Programming Language :: Python',
-                   'Environment :: Web Environment',
-                   'Framework :: Zope3',
-                   'License :: OSI Approved :: Zope Public License',
-                   ],
       keywords='',
-      author='Philipp von Weitershausen',
-      author_email='philipp at weitershausen.de',
+      author='The Grok community',
+      author_email='grok-dev at zope.org',
       url='http://pypi.python.org/pypi/megrok.menu',
       license='ZPL',
       packages=find_packages('src'),
@@ -23,14 +19,30 @@
       namespace_packages=['megrok'],
       include_package_data=True,
       zip_safe=False,
+      extras_require={'test': [
+          'zope.component',
+          'zope.interface',
+          'zope.principalregistry',
+          'zope.security',
+          'zope.securitypolicy',
+          'zope.site',
+          'zope.testing',
+          ]},
       install_requires=[
-          'setuptools',
           'grokcore.component',
+          'grokcore.security',
           'grokcore.view',
           'grokcore.viewlet',
-          'grokcore.security',
+          'martian',
+          'setuptools',
+          'zope.browsermenu',
+          'zope.configuration',
+          'zope.publisher',
       ],
-      entry_points="""
-      # -*- Entry points: -*-
-      """,
+      classifiers=[
+          'Programming Language :: Python',
+          'Environment :: Web Environment',
+          'Framework :: Zope3',
+          'License :: OSI Approved :: Zope Public License',
+          ],
       )

Modified: megrok.menu/trunk/src/megrok/menu/__init__.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/__init__.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/__init__.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
 from megrok.menu.component import menuitem, Menu, SubMenuItem
 
 # Provide these directives here as well:
@@ -2 +4,2 @@
 from grokcore.component import name, title, description
+from grokcore.viewlet import order

Modified: megrok.menu/trunk/src/megrok/menu/component.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/component.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/component.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,11 +1,15 @@
+# -*- coding: utf-8 -*-
+
 import martian.util
 import grokcore.component
 from martian.error import GrokImportError
-from zope.app.publisher.browser.menu import BrowserMenu
+from zope.browsermenu.menu import BrowserMenu
 
+
 class Menu(BrowserMenu):
     pass
 
+
 class SubMenuItem(BrowserMenu):
     pass
 
@@ -22,4 +26,3 @@
                 "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)
-

Modified: megrok.menu/trunk/src/megrok/menu/grokker.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/grokker.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/grokker.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,24 +1,23 @@
+
+# -*- coding: utf-8 -*-
+
 import martian
-from martian.error import GrokError
+import megrok.menu
 
 import grokcore.view
 import grokcore.viewlet
 import grokcore.security
 import grokcore.component
 
-from grokcore.security.util import protect_getattr
 from grokcore.view.meta.views import ViewSecurityGrokker, default_view_name
-
+from martian.error import GrokError
+from zope.browsermenu.metaconfigure import (
+    menuDirective, menuItemDirective, subMenuItemDirective)
 from zope.configuration.exceptions import ConfigurationError
-from zope.app.publisher.browser.menumeta import menuDirective, \
-     menuItemDirective, subMenuItemDirective
-
-from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 from zope.publisher.interfaces.browser import IBrowserPage
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
 
-import megrok.menu
 
-
 class MenuGrokker(martian.ClassGrokker):
     martian.component(megrok.menu.Menu)
     martian.priority(1500)
@@ -76,15 +75,6 @@
             filter=filter, permission=permission, layer=layer,
             order=enforced_order, action='', extra=extra
             )
-
-        for method_name in IBrowserPage:
-            if method_name == '__call__':
-                continue
-            config.action(
-                discriminator=('protectMenuName', factory, method_name),
-                callable=protect_getattr,
-                args=(factory, method_name, permission),
-                )
         return True
 
 
@@ -96,6 +86,8 @@
     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.view.require, default="zope.View", name='permission')
 
     def execute(self, factory, config, permission, order, context=None,
                 layer=None, name=u'', menuitem=None, description=u'',
@@ -115,29 +107,9 @@
             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=enforced_order, extra=extra)
-
-        # 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:
-        ######
-        # This is no longer needed. protect_getattr function will take care.
-        #if permission is None:
-        #    permission = 'zope.Public'
-
-        for method_name in IBrowserPage:
-            if method_name == '__call__':
-                continue
-            config.action(
-                discriminator=('protectMenuName', factory, method_name),
-                callable=protect_getattr,
-                args=(factory, method_name, permission),
-                )
-
         return True

Modified: megrok.menu/trunk/src/megrok/menu/tests/__init__.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/tests/__init__.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/tests/__init__.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,8 +1,31 @@
-import os.path
-import megrok.menu
-from zope.app.testing.functional import ZCMLLayer
 
-ftesting_zcml = os.path.join(os.path.dirname(megrok.menu.__file__),
-                             'ftesting.zcml')
-FunctionalLayer = ZCMLLayer(ftesting_zcml, __name__, 'FunctionalLayer',
-                            allow_teardown=True)
+# -*- coding: utf-8 -*-
+
+import zope.component
+from zope.component.interfaces import IComponentLookup
+from zope.component.testlayer import ZCMLFileLayer
+from zope.interface import Interface
+from zope.site.folder import rootFolder
+from zope.site.site import LocalSiteManager, SiteManagerAdapter
+
+
+class MegrokMenuLayer(ZCMLFileLayer):
+
+    def setUp(self):
+        ZCMLFileLayer.setUp(self)
+
+        # Set up site manager adapter
+        zope.component.provideAdapter(
+            SiteManagerAdapter, (Interface,), IComponentLookup)
+
+        # Set up site
+        site = rootFolder()
+        site.setSiteManager(LocalSiteManager(site))
+        zope.component.hooks.setSite(site)
+
+        return site
+
+    def tearDown(self):
+        ZCMLFileLayer.tearDown(self)
+        zope.component.hooks.resetHooks()
+        zope.component.hooks.setSite()

Modified: megrok.menu/trunk/src/megrok/menu/tests/test_functional.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/tests/test_functional.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/tests/test_functional.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,16 +1,21 @@
 """
+
 Let's create a Mammoth object in the root folder so we can access
 views through the publisher:
 
-  >>> from zope.app.testing.functional import getRootFolder
-  >>> root = getRootFolder()
-  >>> root['manfred'] = Mammoth()
+  >>> from zope.component.hooks import getSite
+  >>> root = getSite()
+  >>> manfred = root['manfred'] = Mammoth()
 
 As an anonymous user, we only see the unprotected menu items:
 
-  >>> from zope.testbrowser.testing import Browser
-  >>> browser = Browser('http://localhost/manfred/showmenu')
-  >>> print browser.contents
+  >>> from zope.publisher.browser import TestRequest
+
+  >>> newInteraction(Participation(Principal('zope.anybody')))
+  >>> request = TestRequest()
+  
+  >>> page = getMultiAdapter((manfred, TestRequest()), name='showmenu')
+  >>> print page()  
   [{'action': '',
     'description': '',
     'extra': None,
@@ -41,9 +46,11 @@
 
 After logging in as a manager, we also see the protected one:
 
-  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
-  >>> browser.open('http://localhost/manfred/showmenu')
-  >>> print browser.contents
+  >>> endInteraction()
+  >>> newInteraction(Participation(Principal('zope.mgr')))
+
+  >>> page = getMultiAdapter((manfred, TestRequest()), name='showmenu')
+  >>> print page()
   [{'action': '',
     'description': '',
     'extra': None,
@@ -92,27 +99,32 @@
     'submenu': None,
     'title': 'Manage'}]
 
+   >>> endInteraction()
 """
+import megrok.menu
+
 from grokcore.component import Context, name, title, description
 from grokcore.view import View
 from grokcore.security import Permission, require
 
-import megrok.menu
-
 from pprint import pformat
-from zope.component import getUtility
-from zope.app.publisher.interfaces.browser import IBrowserMenu
+from zope.component import getUtility, getMultiAdapter
+from zope.browsermenu.interfaces import IBrowserMenu
+from zope.security.management import newInteraction, endInteraction
+from zope.security.testing import Principal, Participation
 
+
 class Mammoth(Context):
     pass
 
+
 class Actions(megrok.menu.Menu):
     name('actions')
     title('Actions')
     description('')
 
+
 # You can either refer to the menu class itself:
-
 class Index(View):
     title('View')
     megrok.menu.menuitem(Actions)
@@ -120,8 +132,8 @@
     def render(self):
         return 'index'
 
+
 # or you can refer to its identifier:
-
 class Edit(View):
     title('Edit')
     megrok.menu.menuitem('actions')
@@ -129,6 +141,7 @@
     def render(self):
         return 'edit'
 
+
 # also you can define sub-menus items
 class Options(megrok.menu.SubMenuItem):
     name('options')
@@ -137,6 +150,7 @@
 
     megrok.menu.menuitem('actions')
 
+
 class OptionOne(View):
     title('Option one')
     megrok.menu.menuitem('options')
@@ -144,12 +158,13 @@
     def render(self):
         return 'option one'
 
+
 # Here's a view that's protected by a permission. We expect the menu
 # item that we configure for it to have the same permission setting:
-
 class ManageStuff(Permission):
     name('my.ManageStuff')
 
+
 class Manage(View):
     require(ManageStuff)
     title('Manage')
@@ -158,6 +173,7 @@
     def render(self):
         return 'manage'
 
+
 #Sub menus item are also available to be protected using a permission
 class Setup(megrok.menu.SubMenuItem):
     require(ManageStuff)
@@ -167,6 +183,7 @@
 
     megrok.menu.menuitem('actions')
 
+
 class ConfigOption(View):
     title('Protected configuration')
     megrok.menu.menuitem('setup')
@@ -174,15 +191,15 @@
     def render(self):
         return 'Configuration'
 
+
 class ShowMenu(View):
-
     def render(self):
         menu = getUtility(IBrowserMenu, 'actions')
         return pformat(menu.getMenuItems(self.context, self.request))
 
+
 def test_suite():
     from zope.testing import doctest
-    from megrok.menu.tests import FunctionalLayer
     suite = doctest.DocTestSuite()
-    suite.layer = FunctionalLayer
+    suite.layer = megrok.menu.tests.MegrokMenuLayer(megrok.menu.tests)
     return suite

Modified: megrok.menu/trunk/src/megrok/menu/tests/test_menu.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/tests/test_menu.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/tests/test_menu.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,10 +1,14 @@
 """
-  >>> from zope.component import getUtility
-  >>> from zope.app.publisher.interfaces.browser import IBrowserMenu
-  >>> from zope.publisher.browser import TestRequest
+We log as anonymous::
 
+  >>> newInteraction(Participation(Principal('zope.anybody')))
+
 A menu is available as a named utility providing ``IBrowserMenu``.
 
+  >>> from zope.publisher.browser import TestRequest
+  >>> from zope.browsermenu.interfaces import IBrowserMenu
+  >>> from zope.component import getUtility
+
   >>> menu = getUtility(IBrowserMenu, 'tabs')
   >>> manfred = Mammoth()
   >>> request = TestRequest()
@@ -31,23 +35,29 @@
     'submenu': None,
     'title': 'View'}]
 
+  >>> endInteraction()
+
 """
 
+import megrok.menu
 from grokcore.component import Context, name, title, description
+from grokcore.security import Permission, require
 from grokcore.view import View
-from grokcore.security import Permission, require
-import megrok.menu
+from zope.security.management import newInteraction, endInteraction
+from zope.security.testing import Principal, Participation
 
+
 class Mammoth(Context):
     pass
 
+
 class Tabs(megrok.menu.Menu):
     name('tabs')
     title('Tabs')
     description('')
 
+
 # You can either refer to the menu class itself:
-
 class Index(View):
     title('View')
     megrok.menu.menuitem(Tabs)
@@ -55,8 +65,8 @@
     def render(self):
         return 'index'
 
+
 # or you can refer to its identifier:
-
 class Edit(View):
     title('Edit')
     megrok.menu.menuitem('tabs')
@@ -67,7 +77,6 @@
 
 def test_suite():
     from zope.testing import doctest
-    from megrok.menu.tests import FunctionalLayer
     suite = doctest.DocTestSuite()
-    suite.layer = FunctionalLayer
+    suite.layer = megrok.menu.tests.MegrokMenuLayer(megrok.menu.tests)
     return suite

Modified: megrok.menu/trunk/src/megrok/menu/tests/test_order.py
===================================================================
--- megrok.menu/trunk/src/megrok/menu/tests/test_order.py	2010-03-06 18:09:20 UTC (rev 109712)
+++ megrok.menu/trunk/src/megrok/menu/tests/test_order.py	2010-03-06 18:13:02 UTC (rev 109713)
@@ -1,8 +1,12 @@
 """
   >>> from zope.component import getUtility
-  >>> from zope.app.publisher.interfaces.browser import IBrowserMenu
+  >>> from zope.browsermenu.interfaces import IBrowserMenu
   >>> from zope.publisher.browser import TestRequest
 
+We log as anonymous::
+
+  >>> newInteraction(Participation(Principal('zope.anybody')))
+
 A menu is available as a named utility providing ``IBrowserMenu``.
 
   >>> menu = getUtility(IBrowserMenu, 'ordered')
@@ -45,10 +49,13 @@
     'submenu': None,
     'title': 'my third view'}]
 
+   >>> endInteraction()
+
 """
-
 import megrok.menu
 import grokcore.viewlet as grok
+from zope.security.management import newInteraction, endInteraction
+from zope.security.testing import Principal, Participation
 
 
 class Mammoth(grok.Context):
@@ -99,7 +106,6 @@
 
 def test_suite():
     from zope.testing import doctest
-    from megrok.menu.tests import FunctionalLayer
     suite = doctest.DocTestSuite()
-    suite.layer = FunctionalLayer
+    suite.layer = megrok.menu.tests.MegrokMenuLayer(megrok.menu.tests)
     return suite



More information about the checkins mailing list