[Checkins] SVN: z3ext.preferences/trunk/ Added 'for' field to
z3ext:preferenceGroup directive
Nikolay Kim
fafhrd at datacom.kz
Fri Apr 11 07:53:14 EDT 2008
Log message for revision 85236:
Added 'for' field to z3ext:preferenceGroup directive
Changed:
U z3ext.preferences/trunk/CHANGES.txt
U z3ext.preferences/trunk/setup.py
U z3ext.preferences/trunk/src/z3ext/preferences/README.txt
U z3ext.preferences/trunk/src/z3ext/preferences/configure.zcml
U z3ext.preferences/trunk/src/z3ext/preferences/interfaces.py
U z3ext.preferences/trunk/src/z3ext/preferences/preference.py
U z3ext.preferences/trunk/src/z3ext/preferences/root.py
U z3ext.preferences/trunk/src/z3ext/preferences/utils.py
U z3ext.preferences/trunk/src/z3ext/preferences/zcml.py
-=-
Modified: z3ext.preferences/trunk/CHANGES.txt
===================================================================
--- z3ext.preferences/trunk/CHANGES.txt 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/CHANGES.txt 2008-04-11 11:53:13 UTC (rev 85236)
@@ -2,6 +2,12 @@
CHANGES
=======
+1.1.0 (2008-04-11)
+------------------
+
+- Added 'for' field to z3ext:preferenceGroup directive
+
+
1.0.2 (2008-04-07)
------------------
Modified: z3ext.preferences/trunk/setup.py
===================================================================
--- z3ext.preferences/trunk/setup.py 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/setup.py 2008-04-11 11:53:13 UTC (rev 85236)
@@ -21,7 +21,7 @@
def read(*rnames):
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
-version='1.0.3dev'
+version='1.1.0dev'
setup(name = 'z3ext.preferences',
Modified: z3ext.preferences/trunk/src/z3ext/preferences/README.txt
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/README.txt 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/README.txt 2008-04-11 11:53:13 UTC (rev 85236)
@@ -379,7 +379,39 @@
>>> interfaces.IPreferenceCategory.providedBy(prefs['ZMISettings2']['Folder'])
False
+We can define preference group for principal type
+ >>> class IMyPrincipal(zope.interface.Interface):
+ ... pass
+
+Now let's register preference for for this type of principal
+
+ >>> context = xmlconfig.string('''
+ ... <configure
+ ... xmlns:z3ext="http://namespaces.zope.org/z3ext"
+ ... i18n_domain="test">
+ ...
+ ... <z3ext:preferenceGroup
+ ... id="ZMISettings2.Folder10"
+ ... for="z3ext.preferences.README.IMyPrincipal"
+ ... title="Folder Settings"
+ ... schema="z3ext.preferences.README.IFolderSettings" />
+ ...
+ ... </configure>''', context)
+
+ >>> p = component.getUtility(interfaces.IPreferenceGroup, 'ZMISettings2.Folder10')
+ >>> new_prefs = p.__bind__()
+ >>> new_prefs.isAvailable()
+ False
+
+Now let's mark our principal
+
+ >>> zope.interface.alsoProvides(principal, IMyPrincipal)
+ >>> new_prefs = p.__bind__()
+ >>> new_prefs.isAvailable()
+ True
+
+
Simple Python-Level Access
--------------------------
Modified: z3ext.preferences/trunk/src/z3ext/preferences/configure.zcml
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/configure.zcml 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/configure.zcml 2008-04-11 11:53:13 UTC (rev 85236)
@@ -51,6 +51,7 @@
description="These are all the preferences related to common portal settings."
provides="z3ext.preferences.interfaces.IPreferenceCategory" />
+ <!-- browser views -->
<include package=".browser" />
</configure>
Modified: z3ext.preferences/trunk/src/z3ext/preferences/interfaces.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/interfaces.py 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/interfaces.py 2008-04-11 11:53:13 UTC (rev 85236)
@@ -71,7 +71,10 @@
def remove(name):
""" remove subgroup name """
+ def __bind__(principal=None, parent=None):
+ """ bind preferences """
+
class IPreferenceCategory(interface.Interface):
"""A collection of preference groups.
@@ -90,5 +93,5 @@
class IRootPreferences(interface.Interface):
""" root preferences """
- def __bind__(parent=None, principal=None):
+ def __bind__(principal=None, parent=None):
""" bind preferences """
Modified: z3ext.preferences/trunk/src/z3ext/preferences/preference.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/preference.py 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/preference.py 2008-04-11 11:53:13 UTC (rev 85236)
@@ -44,7 +44,7 @@
self.__tests__ = tests
self.__subgroups__ = ()
- def __bind__(self, parent=None, principal=None):
+ def __bind__(self, principal=None, parent=None):
clone = self.__class__.__new__(self.__class__)
clone.__dict__.update(self.__dict__)
@@ -139,7 +139,7 @@
group = queryUtility(IPreferenceGroup, id, default)
if group is default:
return default
- return group.__bind__(self)
+ return group.__bind__(parent=self)
def items(self):
id = self.__id__
@@ -151,7 +151,7 @@
name = id + key
group = queryUtility(IPreferenceGroup, name)
if group is not None:
- items.append((name, group.__bind__(self)))
+ items.append((name, group.__bind__(parent=self)))
return items
def __getitem__(self, key):
@@ -175,7 +175,7 @@
name = id + key
group = queryUtility(IPreferenceGroup, name)
if group is not None:
- yield group.__bind__(self)
+ yield group.__bind__(parent=self)
def values(self):
return [group for id, group in self.items()]
Modified: z3ext.preferences/trunk/src/z3ext/preferences/root.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/root.py 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/root.py 2008-04-11 11:53:13 UTC (rev 85236)
@@ -42,8 +42,8 @@
return False
return True
- def __bind__(self, parent=None, principal=None):
- clone = super(PersonalPreferences, self).__bind__(parent, principal)
+ def __bind__(self, principal=None, parent=None):
+ clone = super(PersonalPreferences, self).__bind__(principal, parent)
rmanager = IPrincipalRoleManager(clone, None)
if rmanager is not None:
Modified: z3ext.preferences/trunk/src/z3ext/preferences/utils.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/utils.py 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/utils.py 2008-04-11 11:53:13 UTC (rev 85236)
@@ -30,3 +30,12 @@
def isMemberAwareGroup(group):
return IMemberAwareGroup.providedBy(group.__principal__)
+
+
+class PrincipalChecker(object):
+
+ def __init__(self, iface):
+ self.iface = iface
+
+ def __call__(self, group):
+ return self.iface.providedBy(group.__principal__)
Modified: z3ext.preferences/trunk/src/z3ext/preferences/zcml.py
===================================================================
--- z3ext.preferences/trunk/src/z3ext/preferences/zcml.py 2008-04-11 11:02:40 UTC (rev 85235)
+++ z3ext.preferences/trunk/src/z3ext/preferences/zcml.py 2008-04-11 11:53:13 UTC (rev 85236)
@@ -37,6 +37,7 @@
from interfaces import IPreferenceGroup
from preference import PreferenceGroup
from preferencetype import PreferenceType
+from utils import PrincipalChecker
class IPreferenceGroupDirective(interface.Interface):
@@ -49,6 +50,11 @@
be a valid path in the preferences tree.""",
required=True)
+ for_ = fields.GlobalInterface(
+ title=u"For",
+ description=u"Principal interface to use this preference for.",
+ required=False)
+
schema = fields.GlobalInterface(
title=u"Schema",
description=u"Schema of the preference group used defining the "
@@ -94,14 +100,18 @@
class PreferenceGroupDirective(object):
- def __init__(self, _context, id=None, schema=interface.Interface,
- title=u'', description=u'', category=False,
+ def __init__(self, _context, id, title,
+ for_=None, schema=interface.Interface,
+ description=u'', category=False,
class_=None, provides=[], permission=CheckerPublic,
tests=(), order = 9999):
Class = PreferenceType(str(id), schema, class_, title, description)
Class.order = order
+ if interface.interfaces.IInterface.providedBy(for_):
+ tests = tests + (PrincipalChecker(for_),)
+
group = Class(tests)
utility(_context, IPreferenceGroup, group, name=id)
@@ -114,7 +124,8 @@
self.require(_context, permission, interface=(IPreferenceGroup, schema))
self.require(_context, 'z3ext.ModifyPreference', set_schema=(schema,))
- self.require(_context, CheckerPublic, interface=(IEnumerableMapping,))
+ self.require(_context, CheckerPublic,
+ interface=(IEnumerableMapping,), attributes=('isAvailable',))
_context.action(
discriminator=('z3ext:preferences', group),
More information about the Checkins
mailing list