[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