From 4b71ec5204511797c36e8e33bc58c1b053b5f8f9 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Sun, 6 Jul 2008 01:51:42 +0000 Subject: [PATCH] Backport fix for LP#245649. --- doc/CHANGES.txt | 3 +++ lib/python/AccessControl/Permission.py | 3 ++- lib/python/AccessControl/Role.py | 3 ++- lib/python/OFS/ObjectManager.py | 3 ++- lib/python/Products/__init__.py | 7 ++++++- lib/python/ZClasses/Basic.py | 6 ++++-- 6 files changed, 19 insertions(+), 6 deletions(-) diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt index 750b653a49..994f1d66ea 100644 --- a/doc/CHANGES.txt +++ b/doc/CHANGES.txt @@ -8,6 +8,9 @@ Zope Changes Bugs fixed + - Launchpad #245649: the Products package is now a proper + "namespace package" under the rules specified by setuptools. + - Launchpad #239636: Ensure that HEAD requests lock an empty body for NotFound errors. diff --git a/lib/python/AccessControl/Permission.py b/lib/python/AccessControl/Permission.py index 9a2d32b06b..8f812197b9 100644 --- a/lib/python/AccessControl/Permission.py +++ b/lib/python/AccessControl/Permission.py @@ -129,8 +129,9 @@ def registerPermissions(permissions, defaultDefault=('Manager',)): else: perm, methods, default = setting _registeredPermissions[perm]=1 + Products_permissions = getattr(Products, '__ac_permissions__', ()) Products.__ac_permissions__=( - Products.__ac_permissions__+((perm,(),default),)) + Products_permissions + ((perm, (), default),)) mangled=pname(perm) # get mangled permission name if not hasattr(Globals.ApplicationDefaultPermissions, mangled): setattr(Globals.ApplicationDefaultPermissions, diff --git a/lib/python/AccessControl/Role.py b/lib/python/AccessControl/Role.py index 3abcaa8a11..31716d28af 100644 --- a/lib/python/AccessControl/Role.py +++ b/lib/python/AccessControl/Role.py @@ -532,7 +532,8 @@ def _setRoles(self, acl_type, acl_roles): def possible_permissions(self): d={} - for p in Products.__ac_permissions__: + Products_permissions = getattr(Products, '__ac_permissions__', ()) + for p in Products_permissions: d[p[0]]=1 for p in self.aq_acquire('_getProductRegistryData')('ac_permissions'): d[p[0]]=1 diff --git a/lib/python/OFS/ObjectManager.py b/lib/python/OFS/ObjectManager.py index 8c7bdf74c2..6f443fe5a2 100644 --- a/lib/python/OFS/ObjectManager.py +++ b/lib/python/OFS/ObjectManager.py @@ -236,7 +236,8 @@ def all_meta_types(self, interfaces=None): return meta_types def _subobject_permissions(self): - return (Products.__ac_permissions__+ + Products_permissions = getattr(Products, '__ac_permissions__', ()) + return (Products_permissions + self.aq_acquire('_getProductRegistryData')('ac_permissions') ) diff --git a/lib/python/Products/__init__.py b/lib/python/Products/__init__.py index 0e5babc602..6fad949723 100644 --- a/lib/python/Products/__init__.py +++ b/lib/python/Products/__init__.py @@ -10,4 +10,9 @@ # FOR A PARTICULAR PURPOSE # ############################################################################## -__ac_permissions__=() +# See http://peak.telecommunity.com/DevCenter/setuptools#namespace-packages +try: + __import__('pkg_resources').declare_namespace(__name__) +except ImportError: + from pkgutil import extend_path + __path__ = extend_path(__path__, __name__) diff --git a/lib/python/ZClasses/Basic.py b/lib/python/ZClasses/Basic.py index aae8153eec..99fbc7234e 100644 --- a/lib/python/ZClasses/Basic.py +++ b/lib/python/ZClasses/Basic.py @@ -189,9 +189,10 @@ class ZClassPermissionsSheet(OFS.PropertySheets.PropertySheet, manage=Globals.DTMLFile('dtml/classPermissions', globals()) def possible_permissions(self): + Products_permissions = getattr(Products, '__ac_permissions__', ()) r=map( lambda p: p[0], - Products.__ac_permissions__+ + Products_permissions + self.aq_acquire('_getProductRegistryData')('ac_permissions') ) r.sort() @@ -199,9 +200,10 @@ def possible_permissions(self): def manage_edit(self, selected=[], REQUEST=None): "Remove some permissions" + Products_permissions = getattr(Products, '__ac_permissions__', ()) r=[] for p in ( - Products.__ac_permissions__+ + Products_permissions + self.aq_acquire('_getProductRegistryData')('ac_permissions')): if p[0] in selected: r.append(p)