[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