[Checkins] SVN: z3ext.controlpanel/trunk/ tests updated

Nikolay Kim fafhrd at datacom.kz
Wed May 14 06:05:04 EDT 2008


Log message for revision 86723:
  tests updated

Changed:
  U   z3ext.controlpanel/trunk/CHANGES.txt
  U   z3ext.controlpanel/trunk/setup.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/README.txt
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlet.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlettype.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/configure.zcml
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/ftesting.zcml
  D   z3ext.controlpanel/trunk/src/z3ext/controlpanel/i18n.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/interfaces.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/root.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/storage.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/tests.py
  U   z3ext.controlpanel/trunk/src/z3ext/controlpanel/zcml.py

-=-
Modified: z3ext.controlpanel/trunk/CHANGES.txt
===================================================================
--- z3ext.controlpanel/trunk/CHANGES.txt	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/CHANGES.txt	2008-05-14 10:05:02 UTC (rev 86723)
@@ -2,6 +2,14 @@
 CHANGES
 =======
 
+1.2.3 (2008-05-14)
+------------------
+
+- Replace 'autoinclude' with 'includeDependendcies'
+
+- Tests updated
+
+
 1.2.2 (2008-04-08)
 ------------------
 
@@ -73,4 +81,4 @@
 1.0.0 (2007-26-07)
 ------------------
 
-- Initial release.
+- Initial release

Modified: z3ext.controlpanel/trunk/setup.py
===================================================================
--- z3ext.controlpanel/trunk/setup.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/setup.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -53,6 +53,7 @@
       package_dir = {'':'src'},
       namespace_packages=['z3ext'],
       install_requires = ['setuptools',
+                          'ZODB3',
                           'zope.schema',
     		          'zope.interface',
                           'zope.component',

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/README.txt
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/README.txt	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/README.txt	2008-05-14 10:05:02 UTC (rev 86723)
@@ -7,27 +7,37 @@
 it stores all data in site annotation, in BTrees. so you can removeing 
 and add any configlet without problem with zodb.
 
-We need load zcml configuration
+We need load zcml configuration::
 
   >>> from zope.configuration import xmlconfig
-  >>> context = xmlconfig.string("""
-  ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext">
-  ...    <include package="z3ext.controlpanel" file="meta.zcml" />
-  ... </configure>""")
+  >>> import z3ext.controlpanel
+  >>> context = xmlconfig.file('meta.zcml', z3ext.controlpanel)
 
-  >>> from zope import interface, component
-  >>> from z3ext.controlpanel import tests, interfaces
+  >>> from zope import interface, component, schema
+  >>> from z3ext.controlpanel import interfaces
 
-We can register configlet with z3ext:configlet directive.
+We can register configlet with `z3ext:configlet` directive.
 
-Let's create simple configlet
+Let's create simple configlet. First we need define configlet schema:
 
+  >>> class ITestConfiglet1(interface.Interface):
+  ...     
+  ...     param1 = schema.TextLine(
+  ...         title = u'param1',
+  ...         default = u'default param1')
+  ...     
+  ...     param2 = schema.Int(
+  ...         title = u'param2',
+  ...         default = 10)
+
+Now configlet registration:
+
   >>> context = xmlconfig.string("""
   ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
   ...    i18n_domain="zope">
   ...   <z3ext:configlet
   ...	    name="configlet1"
-  ...      schema="z3ext.controlpanel.tests.ITestConfiglet1"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet1"
   ...      title="Test configlet1"
   ...      description="Test configlet1 description" />
   ... </configure>""", context)
@@ -44,18 +54,18 @@
   >>> cl.__description__ == 'Test configlet1 description'
   True
 
-As schema
+As schema utility
 
-  >>> cl1 = component.getUtility(tests.ITestConfiglet1)
+  >>> cl1 = component.getUtility(ITestConfiglet1)
   >>> cl is cl1
   True
 
   >>> cl.__schema__
-  <InterfaceClass z3ext.controlpanel.tests.ITestConfiglet1>
+  <InterfaceClass z3ext.controlpanel.README.ITestConfiglet1>
 
 We can't change __schema__ at runtime
 
-  >>> cl.__schema__ = tests.ITestConfiglet2
+  >>> cl.__schema__ = ITestConfiglet1
   Traceback (most recent call last):
   ...
   AttributeError: Can't set __schema__
@@ -64,7 +74,7 @@
 IConfiglet
 ----------
 
-Let's access the settings:
+Let's access configlet attributes:
 
   >>> cl.param1
   u'default param1'
@@ -109,6 +119,10 @@
 
   >>> cl.__name__
   u'configlet1'
+  
+  >>> from zope.traversing.api import getPath
+  >>> getPath(cl)
+  u'/settings/configlet1'
 
 
 Configlet security
@@ -116,17 +130,31 @@
 
 Read/Write access to configlet same as for <class> directive. By default
 all fields in IConfiglet interface and schema protected by 'z3ext.Configure'
-permission. We can define default permission by 'permission' attribute. 
+permission. We can define default permission in 'permission' attribute.
 We can use <require/> and <allow/> subdirectives inside <z3ext:configlet>
 directive.
 
+  >>> class ITestConfiglet2(interface.Interface):
+  ...     
+  ...     param1 = schema.TextLine(
+  ...         title = u'param1',
+  ...         default = u'default param1')
+  ...     
+  ...     param2 = schema.Int(
+  ...         title = u'param2',
+  ...         default = 10)
+  ...     
+  ...     param3 = schema.TextLine(
+  ...         title = u'param3',
+  ...         default = u'default param3')
+
   >>> xmlconfig.string("""
   ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
   ...    i18n_domain="zope">
   ...   <include package="z3ext.controlpanel" file="meta.zcml" />
   ...   <z3ext:configlet
   ...	    name="configlet2"
-  ...      schema="z3ext.controlpanel.tests.ITestConfiglet2"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet2"
   ...      title="Test configlet2"
   ...      permission="zope.Public">
   ...    <require />
@@ -142,7 +170,7 @@
   ...   <include package="z3ext.controlpanel" file="meta.zcml" />
   ...   <z3ext:configlet
   ...	    name="configlet2"
-  ...      schema="z3ext.controlpanel.tests.ITestConfiglet2"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet2"
   ...      title="Test configlet2"
   ...      permission="zope.Public">
   ...    <require attributes="param1" />
@@ -158,7 +186,7 @@
   ...   <include package="z3ext.controlpanel" file="meta.zcml" />
   ...   <z3ext:configlet
   ...	    name="configlet2"
-  ...      schema="z3ext.controlpanel.tests.ITestConfiglet2"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet2"
   ...      title="Test configlet2"
   ...      permission="zope.Public">
   ...    <require attributes="param1" permission="zope.Public" />
@@ -171,23 +199,25 @@
 Custom class implementation
 ---------------------------
 
-We can use custom configlet implementation, but it should subclass
-original Configlet class
+We can use custom configlet implementation
 
+  >>> class TestConfiglet1(object):
+  ...     pass
+
   >>> context = xmlconfig.string("""
   ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
   ...    i18n_domain="zope">
   ...   <include package="z3ext.controlpanel" file="meta.zcml" />
   ...   <z3ext:configlet
   ...	    name="configlet3"
-  ...      class="z3ext.controlpanel.tests.TestConfiglet1"
-  ...      schema="z3ext.controlpanel.tests.ITestConfiglet2"
+  ...      class="z3ext.controlpanel.README.TestConfiglet1"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet2"
   ...      title="Test configlet3">
   ...   </z3ext:configlet>
   ... </configure>""")
 
   >>> configlet = component.getUtility(interfaces.IConfiglet, 'configlet3')
-  >>> isinstance(configlet, tests.TestConfiglet1)
+  >>> isinstance(configlet, TestConfiglet1)
   True
 
 
@@ -211,17 +241,13 @@
   ...
   KeyError: 'configlet'
 
-  >>> def testConfiglet(configlet):
-  ...   return True
-
   >>> context = xmlconfig.string("""
   ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
   ...    i18n_domain="zope">
   ...   <include package="z3ext.controlpanel" file="meta.zcml" />
   ...   <z3ext:configlet
   ...	    name="configlet3.configlet"
-  ...      schema="z3ext.controlpanel.tests.ITestConfiglet1"
-  ...	    tests="z3ext.controlpanel.tests.testConfiglet1"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet1"
   ...      title="Test configlet4">
   ...   </z3ext:configlet>
   ... </configure>""", context)
@@ -237,7 +263,7 @@
 
   >>> configlet['configlet'].__id__
   u'configlet3.configlet'
-   
+
   >>> configlet.items()
   [(u'configlet', <z3ext.controlpanel.configlettype.Configlet<configlet3.configlet> ...)]
 
@@ -253,26 +279,32 @@
 
 We can check availability
 
+  >>> def testConfiglet1(configlet):
+  ...     return True
+
+  >>> def testConfiglet2(configlet):
+  ...     return False
+
   >>> c1 = configlet['configlet']
   >>> c1.isAvailable()
   True
 
-  >>> c1.__tests__ = (tests.testConfiglet2,)
+  >>> c1.__tests__ = (testConfiglet2,)
   >>> c1.isAvailable()
   False
 
 Avialability automaticly checks in parent configlet
 
-  >>> c1.__tests__ = (tests.testConfiglet1,)
+  >>> c1.__tests__ = (testConfiglet1,)
   >>> c1.isAvailable()
   True
 
-  >>> configlet.__tests__ = (tests.testConfiglet2,)
+  >>> configlet.__tests__ = (testConfiglet2,)
 
   >>> c1.isAvailable()
   False
 
-  >>> c1.__tests__ = (tests.testConfiglet1, False)
+  >>> c1.__tests__ = (testConfiglet1, testConfiglet2)
   >>> c1.isAvailable()
   False
 
@@ -280,7 +312,39 @@
   >>> len(configlet)
   0
 
+We can add custom availability checks in z3ext:configlet directory
 
+  >>> t = xmlconfig.string("""
+  ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
+  ...    i18n_domain="zope">
+  ...   <include package="z3ext.controlpanel" file="meta.zcml" />
+  ...   <z3ext:configlet
+  ...	   name="configlet"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet1"
+  ...      tests="z3ext.controlpanel.README.testConfiglet1"
+  ...      title="Test configlet">
+  ...   </z3ext:configlet>
+  ... </configure>""")
+
+It should be callable
+
+  >>> test = False
+  >>> t = xmlconfig.string("""
+  ... <configure xmlns:z3ext="http://namespaces.zope.org/z3ext"
+  ...    i18n_domain="zope">
+  ...   <include package="z3ext.controlpanel" file="meta.zcml" />
+  ...   <z3ext:configlet
+  ...	   name="configlet"
+  ...      schema="z3ext.controlpanel.README.ITestConfiglet1"
+  ...      tests="z3ext.controlpanel.README.test"
+  ...      title="Test configlet">
+  ...   </z3ext:configlet>
+  ... </configure>""")
+  Traceback (most recent call last):
+  ...
+  ZopeXMLConfigurationError: ...
+
+
 Root configlet
 --------------
 
@@ -298,5 +362,5 @@
  >>> root.__parent__ is getSite()
  True
 
- >>> tests.ITestConfiglet1.providedBy(root['configlet1'])
+ >>> ITestConfiglet1.providedBy(root['configlet1'])
  True

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlet.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlet.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlet.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -41,10 +41,7 @@
 
     def isAvailable(self):
         for test in self.__tests__:
-            if callable(test):
-                if not test(self):
-                    return False
-            elif not bool(test):
+            if not test(self):
                 return False
 
         if IConfiglet.providedBy(self.__parent__):

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlettype.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlettype.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/configlettype.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -18,7 +18,7 @@
 import sys
 from zope.schema import getFields
 
-from z3ext.controlpanel.i18n import _
+from z3ext.controlpanel.interfaces import _
 from z3ext.controlpanel.configlet import Configlet
 
 _marker = object()
@@ -159,7 +159,7 @@
     >>> ob.attr1 = u'value1'
     Traceback (most recent call last):
     ...
-    ValueError: ('attr1', 'field is readonly')
+    ValueError: ('attr1', u'Field is readonly')
 
     """
 

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/configure.zcml
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/configure.zcml	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/configure.zcml	2008-05-14 10:05:02 UTC (rev 86723)
@@ -3,7 +3,7 @@
    xmlns:z3ext="http://namespaces.zope.org/z3ext"
    i18n_domain="z3ext">
 
-  <autoinclude package="z3ext.controlpanel" />
+  <includeDependencies package="z3ext.controlpanel" />
 
   <permission
      id="z3ext.Configure"

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/ftesting.zcml
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/ftesting.zcml	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/ftesting.zcml	2008-05-14 10:05:02 UTC (rev 86723)
@@ -1,6 +1,6 @@
 <configure
    xmlns="http://namespaces.zope.org/zope"
-   i18n_domain="z3ext" package="z3ext.controlpanel">
+   i18n_domain="z3ext" package="z3ext">
 
   <!-- This file is the equivalent of site.zcml and it is -->
   <!-- used for functional testing setup -->
@@ -23,7 +23,6 @@
   <include package="z3ext.controlpanel" file="meta.zcml" />
   <include package="z3ext.controlpanel" />
   <include package="z3ext.controlpanel.browser.tests" />
-  <include package="z3ext.portalmessage" />
 
   <securityPolicy
       component="zope.securitypolicy.zopepolicy.ZopeSecurityPolicy" />

Deleted: z3ext.controlpanel/trunk/src/z3ext/controlpanel/i18n.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/i18n.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/i18n.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -1,19 +0,0 @@
-##############################################################################
-#
-# 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.
-#
-##############################################################################
-""" i18n
-
-$Id$
-"""
-from zope.i18nmessageid import MessageFactory
-_ = MessageFactory('z3ext')

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/interfaces.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/interfaces.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/interfaces.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -17,8 +17,11 @@
 """
 from zope import schema, interface
 from zope.location.interfaces import ILocation
+from zope.i18nmessageid import MessageFactory
 
+_ = MessageFactory('z3ext')
 
+
 class ICategory(interface.Interface):
     """ settings category """
 

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/root.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/root.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/root.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -23,9 +23,8 @@
 from zope.app.component.hooks import getSite
 from zope.app.component.interfaces import ISite
 
-from i18n import _
 from configlet import Configlet
-from interfaces import IConfiglet, IRootConfiglet, ICategory
+from interfaces import _, IConfiglet, IRootConfiglet, ICategory
 
 
 class RootConfiglet(Configlet):

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/storage.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/storage.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/storage.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -43,8 +43,10 @@
         return storage
 
     def __getitem__(self, name):
-        try:
-            return self._data[name]
-        except KeyError:
-            self._data[name] = OOBTree()
-            return self._data[name]
+        data = self._data.get(name)
+
+        if data is None:
+            data = OOBTree()
+            self._data[name] = data
+
+        return data

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/tests.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/tests.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/tests.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -23,57 +23,23 @@
 from z3ext.controlpanel.configlet import Configlet
 from z3ext.controlpanel.testing import setUpControlPanel
 
-def testConfiglet1(configlet):
-    return True
 
-def testConfiglet2(configlet):
-    return False
-
-
-class ITestConfiglet1(interface.Interface):
-    
-    param1 = schema.TextLine(
-        title = u'param1',
-        default = u'default param1')
-
-    param2 = schema.Int(
-        title = u'param2',
-        default = 10)
-
-
-class ITestConfiglet2(interface.Interface):
-
-    param1 = schema.TextLine(
-        title = u'param1',
-        default = u'default param1')
-
-    param2 = schema.Int(
-        title = u'param2',
-        default = 10)
-
-    param3 = schema.TextLine(
-        title = u'param3',
-        default = u'default param3')
-
-
-class TestConfiglet1(Configlet):
-    pass
-
-
-class TestConfiglet2(object):
-    pass
-
-
 def setUp(test):
     setup.placefulSetUp(True)
     setUpControlPanel()
+    setup.setUpTestAsModule(test, 'z3ext.controlpanel.README')
 
 
+def tearDown(test):
+    setup.placefulTearDown()
+    setup.tearDownTestAsModule(test)
+
+
 def test_suite():
     return unittest.TestSuite((
             doctest.DocFileSuite(
                 'README.txt',
-                setUp=setUp, tearDown=setup.placefulTearDown(),
+                setUp=setUp, tearDown=tearDown,
                 optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS),
             doctest.DocTestSuite(
                 'z3ext.controlpanel.configlettype',

Modified: z3ext.controlpanel/trunk/src/z3ext/controlpanel/zcml.py
===================================================================
--- z3ext.controlpanel/trunk/src/z3ext/controlpanel/zcml.py	2008-05-14 08:34:23 UTC (rev 86722)
+++ z3ext.controlpanel/trunk/src/z3ext/controlpanel/zcml.py	2008-05-14 10:05:02 UTC (rev 86723)
@@ -92,11 +92,15 @@
         ConfigletClass = ConfigletType(
             str(name), schema, class_, title, description)
 
+        for test in tests:
+            if not callable(test):
+                raise ConfigurationError("Test should be callable.")
+
         if permission == 'zope.Public':
             configlet = ConfigletClass(tuple(tests))
         else:
-            configlet = ConfigletClass(
-                (PermissionChecker(permission),) + tuple(tests))
+            configlet = ConfigletClass((
+                PermissionChecker(permission),) + tuple(tests))
 
         utility(_context, IConfiglet, configlet, name=name)
 



More information about the Checkins mailing list