[Zope-Checkins] CVS: Packages/AccessControl -
ImplPython.py:1.1.2.5.2.1 Implementation.py:1.1.2.7.26.1
Owned.py:1.19.46.4.26.1 Permission.py:1.10.134.1
PermissionMapping.py:1.13.70.1.30.1 Role.py:1.56.14.4.22.1
SimpleObjectPolicies.py:1.12.70.5.26.1 User.py:1.176.14.8.2.1
Tres Seaver
tseaver at palladion.com
Sat May 28 20:42:09 EDT 2005
Update of /cvs-repository/Packages/AccessControl
In directory cvs.zope.org:/tmp/cvs-serv32028/lib/python/AccessControl
Modified Files:
Tag: tseaver-hasattr_geddon-branch
ImplPython.py Implementation.py Owned.py Permission.py
PermissionMapping.py Role.py SimpleObjectPolicies.py User.py
Log Message:
- Removed all uses of the 'hasattr' builtin from the core, where
the object being tested derives (or might) from Persistent.
XXX: currently, this branch imports a 'safe_hasattr' from ZODB.utils,
which adds a dependency on ZODB for some packages; we probably
need a better location, and perhas a C implementation?
=== Packages/AccessControl/ImplPython.py 1.1.2.5 => 1.1.2.5.2.1 ===
--- Packages/AccessControl/ImplPython.py:1.1.2.5 Tue Feb 15 15:59:25 2005
+++ Packages/AccessControl/ImplPython.py Sat May 28 20:41:28 2005
@@ -22,6 +22,7 @@
from Acquisition import aq_acquire
from ExtensionClass import Base
from zLOG import LOG, PROBLEM
+from ZODB.utils import safe_hasattr
# This is used when a permission maps explicitly to no permission. We
# try and get this from cAccessControl first to make sure that if both
@@ -90,7 +91,7 @@
n = self._p
r = None
while 1:
- if hasattr(obj, n):
+ if safe_hasattr(obj, n):
roles = getattr(obj, n)
if roles is None:
=== Packages/AccessControl/Implementation.py 1.1.2.7 => 1.1.2.7.26.1 ===
--- Packages/AccessControl/Implementation.py:1.1.2.7 Tue Feb 3 15:30:06 2004
+++ Packages/AccessControl/Implementation.py Sat May 28 20:41:28 2005
@@ -24,6 +24,7 @@
module was introduced.
"""
+from ZODB.utils import safe_hasattr
def getImplementationName():
"""Return the name of the implementation currently being used."""
@@ -60,7 +61,7 @@
mod = sys.modules[modname]
for n in names:
setattr(mod, n, getattr(impl, n))
- if hasattr(mod, "initialize"):
+ if safe_hasattr(mod, "initialize"):
mod.initialize(impl)
from AccessControl.SecurityManager import setSecurityPolicy
=== Packages/AccessControl/Owned.py 1.19.46.4 => 1.19.46.4.26.1 ===
--- Packages/AccessControl/Owned.py:1.19.46.4 Fri Mar 12 11:58:29 2004
+++ Packages/AccessControl/Owned.py Sat May 28 20:41:28 2005
@@ -18,6 +18,7 @@
import Globals, urlparse, SpecialUsers, ExtensionClass
from AccessControl import getSecurityManager, Unauthorized
from Acquisition import aq_get, aq_parent, aq_base
+from ZODB.utils import safe_hasattr
UnownableOwner=[]
def ownableFilter(self):
@@ -55,7 +56,7 @@
return owner
d={'path': '/'.join(owner[0]), 'id': owner[1],
- 'explicit': hasattr(self, '_owner'),
+ 'explicit': safe_hasattr(self, '_owner'),
'userCanChangeOwnershipType':
getSecurityManager().checkPermission('Take ownership', self)
}
@@ -226,8 +227,8 @@
else: _owner=None
if (_owner is None and
- ((not hasattr(self, 'aq_parent')) or
- (not hasattr(self, 'getPhysicalRoot'))
+ ((not safe_hasattr(self, 'aq_parent')) or
+ (not safe_hasattr(self, 'getPhysicalRoot'))
)
):
# This is a special case. An object is
=== Packages/AccessControl/Permission.py 1.10 => 1.10.134.1 ===
--- Packages/AccessControl/Permission.py:1.10 Wed Aug 14 17:29:07 2002
+++ Packages/AccessControl/Permission.py Sat May 28 20:41:28 2005
@@ -17,6 +17,7 @@
__version__='$Revision$'[11:-2]
import string, Products, Globals
+from ZODB.utils import safe_hasattr
ListType=type([])
@@ -38,7 +39,7 @@
self.name=name
self._p='_'+string.translate(name,name_trans)+"_Permission"
self.data=data
- if hasattr(obj, 'aq_base'): obj=obj.aq_base
+ if safe_hasattr(obj, 'aq_base'): obj=obj.aq_base
self.obj=obj
self.default=default
@@ -49,21 +50,21 @@
# attributes that this permission represents.
obj=self.obj
name=self._p
- if hasattr(obj, name): return getattr(obj, name)
+ if safe_hasattr(obj, name): return getattr(obj, name)
roles=default
for name in self.data:
if name:
- if hasattr(obj, name):
+ if safe_hasattr(obj, name):
attr=getattr(obj, name)
- if hasattr(attr,'im_self'):
+ if safe_hasattr(attr,'im_self'):
attr=attr.im_self
- if hasattr(attr, '__dict__'):
+ if safe_hasattr(attr, '__dict__'):
attr=attr.__dict__
name=name+'__roles__'
if attr.has_key(name):
roles=attr[name]
break
- elif hasattr(obj, '__dict__'):
+ elif safe_hasattr(obj, '__dict__'):
attr=obj.__dict__
if attr.has_key('__roles__'):
roles=attr['__roles__']
@@ -86,7 +87,7 @@
obj=self.obj
if type(roles) is ListType and not roles:
- if hasattr(obj, self._p): delattr(obj, self._p)
+ if safe_hasattr(obj, self._p): delattr(obj, self._p)
else:
setattr(obj, self._p, roles)
@@ -134,6 +135,6 @@
Products.__ac_permissions__=(
Products.__ac_permissions__+((perm,(),default),))
mangled=pname(perm) # get mangled permission name
- if not hasattr(Globals.ApplicationDefaultPermissions, mangled):
+ if not safe_hasattr(Globals.ApplicationDefaultPermissions, mangled):
setattr(Globals.ApplicationDefaultPermissions,
mangled, default)
=== Packages/AccessControl/PermissionMapping.py 1.13.70.1 => 1.13.70.1.30.1 ===
--- Packages/AccessControl/PermissionMapping.py:1.13.70.1 Mon Nov 17 17:34:01 2003
+++ Packages/AccessControl/PermissionMapping.py Sat May 28 20:41:28 2005
@@ -21,6 +21,7 @@
from Permission import pname
from Owned import UnownableOwner
from Globals import InitializeClass
+from ZODB.utils import safe_hasattr
from cgi import escape
class RoleManager:
@@ -79,7 +80,7 @@
def _isBeingUsedAsAMethod(self, REQUEST =None, wannaBe=0):
try:
- if hasattr(self, 'aq_self'):
+ if safe_hasattr(self, 'aq_self'):
r=self.aq_acquire('_isBeingUsedAsAMethod_')
else:
r=self._isBeingUsedAsAMethod_
=== Packages/AccessControl/Role.py 1.56.14.4 => 1.56.14.4.22.1 ===
--- Packages/AccessControl/Role.py:1.56.14.4 Tue May 4 03:40:54 2004
+++ Packages/AccessControl/Role.py Sat May 28 20:41:28 2005
@@ -21,6 +21,7 @@
from Permission import Permission
from App.Common import aq_base
from cgi import escape
+from ZODB.utils import safe_hasattr
ListType=type([])
@@ -78,7 +79,7 @@
r=gather_permissions(self.__class__, [], d)
if all:
- if hasattr(self, '_subobject_permissions'):
+ if safe_hasattr(self, '_subobject_permissions'):
for p in self._subobject_permissions():
pname=p[0]
if not d.has_key(pname):
@@ -189,7 +190,7 @@
def manage_access(self, REQUEST, **kw):
"Return an interface for making permissions settings"
- if hasattr(self, '_isBeingUsedAsAMethod') and \
+ if safe_hasattr(self, '_isBeingUsedAsAMethod') and \
self._isBeingUsedAsAMethod():
return apply(self._method_manage_access,(), kw)
else:
@@ -391,13 +392,13 @@
for key, value in inst.items():
if key.find('__roles__') >= 0:
_add({'name': key, 'value': value, 'class': 0})
- if hasattr(value, '__roles__'):
+ if safe_hasattr(value, '__roles__'):
_add({'name': '%s.__roles__' % key, 'value': value.__roles__,
'class': 0})
for key, value in clas.items():
if key.find('__roles__') >= 0:
_add({'name': key, 'value': value, 'class' : 1})
- if hasattr(value, '__roles__'):
+ if safe_hasattr(value, '__roles__'):
_add({'name': '%s.__roles__' % key, 'value': value.__roles__,
'class': 1})
return data
@@ -409,12 +410,12 @@
dup =dict.has_key
x=0
while x < 100:
- if hasattr(obj, '__ac_roles__'):
+ if safe_hasattr(obj, '__ac_roles__'):
roles=obj.__ac_roles__
for role in roles:
if not dup(role):
dict[role]=1
- if not hasattr(obj, 'aq_parent'):
+ if not safe_hasattr(obj, 'aq_parent'):
break
obj=obj.aq_parent
x=x+1
@@ -525,7 +526,7 @@
except: return None
def classattr(cls, attr):
- if hasattr(cls, attr):
+ if safe_hasattr(cls, attr):
return getattr(cls, attr)
try: bases=cls.__bases__
except: bases=()
=== Packages/AccessControl/SimpleObjectPolicies.py 1.12.70.5 => 1.12.70.5.26.1 ===
--- Packages/AccessControl/SimpleObjectPolicies.py:1.12.70.5 Tue Jan 27 16:49:04 2004
+++ Packages/AccessControl/SimpleObjectPolicies.py Sat May 28 20:41:28 2005
@@ -44,6 +44,7 @@
_noroles = [] # this is imported from various places
+from ZODB.utils import safe_hasattr
import Record
# Allow access to unprotected attributes
@@ -78,7 +79,7 @@
restricted code. The argument Type must be a type."""
if type(Type) is not type:
raise ValueError, "%s is not a type" % `Type`
- if hasattr(Type, '__roles__'):
+ if safe_hasattr(Type, '__roles__'):
raise ValueError, "%s handles its own security" % `Type`
if not (isinstance(allowed, int) or isinstance(allowed, dict)):
raise ValueError, "The 'allowed' argument must be an int or dict."
=== Packages/AccessControl/User.py 1.176.14.8 => 1.176.14.8.2.1 ===
--- Packages/AccessControl/User.py:1.176.14.8 Fri Mar 18 08:17:31 2005
+++ Packages/AccessControl/User.py Sat May 28 20:41:28 2005
@@ -30,6 +30,7 @@
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
from AccessControl.ZopeSecurityPolicy import _noroles
+from ZODB.utils import safe_hasattr
ListType=type([])
@@ -101,7 +102,7 @@
if parent is not None:
object = parent
continue
- if hasattr(object, 'im_self'):
+ if safe_hasattr(object, 'im_self'):
object=object.im_self
object=getattr(object, 'aq_inner', object)
continue
@@ -129,7 +130,7 @@
def _shared_roles(self, parent):
r=[]
while 1:
- if hasattr(parent,'__roles__'):
+ if safe_hasattr(parent,'__roles__'):
roles=parent.__roles__
if roles is None: return 'Anonymous',
if 'Shared' in roles:
@@ -139,8 +140,8 @@
else:
try: return r+list(roles)
except: return r
- if hasattr(parent, 'aq_parent'):
- while hasattr(parent.aq_self,'aq_self'):
+ if safe_hasattr(parent, 'aq_parent'):
+ while safe_hasattr(parent.aq_self,'aq_self'):
parent=parent.aq_self
parent=parent.aq_parent
else: return r
@@ -156,11 +157,11 @@
if context is not None:
if object is None:
return 1
- if not hasattr(object, 'aq_inContextOf'):
- if hasattr(object, 'im_self'):
+ if not safe_hasattr(object, 'aq_inContextOf'):
+ if safe_hasattr(object, 'im_self'):
# This is a method. Grab its self.
object=object.im_self
- if not hasattr(object, 'aq_inContextOf'):
+ if not safe_hasattr(object, 'aq_inContextOf'):
# Object is not wrapped, so return false.
return 0
return object.aq_inContextOf(context, 1)
@@ -225,7 +226,7 @@
if parent is not None:
inner_obj = parent
continue
- if hasattr(inner_obj, 'im_self'):
+ if safe_hasattr(inner_obj, 'im_self'):
inner_obj=inner_obj.im_self
inner_obj=getattr(inner_obj, 'aq_inner', inner_obj)
continue
@@ -531,7 +532,7 @@
"""API method for creating a new user object. Note that not all
user folder implementations support dynamic creation of user
objects."""
- if hasattr(self, '_doAddUser'):
+ if safe_hasattr(self, '_doAddUser'):
return self._doAddUser(name, password, roles, domains, **kw)
raise NotImplementedError
@@ -539,14 +540,14 @@
"""API method for changing user object attributes. Note that not
all user folder implementations support changing of user object
attributes."""
- if hasattr(self, '_doChangeUser'):
+ if safe_hasattr(self, '_doChangeUser'):
return self._doChangeUser(name, password, roles, domains, **kw)
raise NotImplementedError
def userFolderDelUsers(self, names):
"""API method for deleting one or more user objects. Note that not
all user folder implementations support deletion of user objects."""
- if hasattr(self, '_doDelUsers'):
+ if safe_hasattr(self, '_doDelUsers'):
return self._doDelUsers(names)
raise NotImplementedError
@@ -744,7 +745,7 @@
if innerparent is not None:
# this is not a method, we needn't treat it specially
c = innerparent
- elif hasattr(v, 'im_self'):
+ elif safe_hasattr(v, 'im_self'):
# this is a method, we need to treat it specially
c = v.im_self
c = getattr(v, 'aq_inner', v)
@@ -971,7 +972,7 @@
def manage_afterAdd(self, item, container):
if item is self:
- if hasattr(self, 'aq_base'): self=self.aq_base
+ if safe_hasattr(self, 'aq_base'): self=self.aq_base
container.__allow_groups__=self
def __creatable_by_emergency_user__(self): return 1
More information about the Zope-Checkins
mailing list