[Zope-Checkins] CVS: Packages/App -
ApplicationManager.py:1.88.4.5.26.1
CacheManager.py:1.27.44.3.30.1 Common.py:1.20.74.1
DavLockManager.py:1.8.132.1 Extensions.py:1.21.12.2.30.1
Factory.py:1.27.64.1 FactoryDispatcher.py:1.21.132.1
Management.py:1.61.68.4.28.1 PersistentExtra.py:1.8.124.1
Product.py:1.63.2.3.30.1 ProductContext.py:1.43.56.1
ProductRegistry.py:1.15.68.1.30.1 Undo.py:1.32.44.1.34.1
special_dtml.py:1.25.12.1.30.1
Tres Seaver
tseaver at palladion.com
Sat May 28 20:42:10 EDT 2005
Update of /cvs-repository/Packages/App
In directory cvs.zope.org:/tmp/cvs-serv32028/lib/python/App
Modified Files:
Tag: tseaver-hasattr_geddon-branch
ApplicationManager.py CacheManager.py Common.py
DavLockManager.py Extensions.py Factory.py
FactoryDispatcher.py Management.py PersistentExtra.py
Product.py ProductContext.py ProductRegistry.py Undo.py
special_dtml.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/App/ApplicationManager.py 1.88.4.5 => 1.88.4.5.26.1 ===
--- Packages/App/ApplicationManager.py:1.88.4.5 Mon Mar 8 02:58:46 2004
+++ Packages/App/ApplicationManager.py Sat May 28 20:41:29 2005
@@ -29,6 +29,7 @@
from cStringIO import StringIO
from AccessControl import getSecurityManager
from zExceptions import Redirect
+from ZODB.utils import safe_hasattr
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from cgi import escape
import zLOG
@@ -191,7 +192,7 @@
pairs=[]
append=pairs.append
for ob, v in dict.items():
- if hasattr(ob, '__module__'):
+ if safe_hasattr(ob, '__module__'):
name='%s.%s' % (ob.__module__, ob.__name__)
else: name='%s' % ob.__name__
append((v, name))
@@ -283,7 +284,7 @@
manage_main._setName('manage_main')
def version_txt(self):
- if not hasattr(self, '_v_version_txt'):
+ if not safe_hasattr(self, '_v_version_txt'):
self._v_version_txt=version_txt()
return self._v_version_txt
@@ -342,7 +343,7 @@
#
# def __setstate__(self, v):
# ApplicationManager.inheritedAttribute('__setstate__')(self, v)
-# if not hasattr(self, 'Products'):
+# if not safe_hasattr(self, 'Products'):
# self.Products=ProductFolder()
@@ -510,7 +511,7 @@
l = []
for k,v in socket_map.items():
# this is only an approximation
- if hasattr(v, 'port'):
+ if safe_hasattr(v, 'port'):
type = str(getattr(v, '__class__', 'unknown'))
port = v.port
l.append((str(type), 'Port: %s' % port))
=== Packages/App/CacheManager.py 1.27.44.3 => 1.27.44.3.30.1 ===
--- Packages/App/CacheManager.py:1.27.44.3 Mon Nov 17 17:34:02 2003
+++ Packages/App/CacheManager.py Sat May 28 20:41:29 2005
@@ -18,6 +18,7 @@
import Globals, time, sys
from DateTime import DateTime
+from ZODB.utils import safe_hasattr
class CacheManager:
"""Cache management mix-in
@@ -230,7 +231,7 @@
def _getActivityMonitor(self):
db = self._p_jar.db()
- if not hasattr(db, 'getActivityMonitor'):
+ if not safe_hasattr(db, 'getActivityMonitor'):
return None
am = db.getActivityMonitor()
if am is None:
=== Packages/App/Common.py 1.20 => 1.20.74.1 ===
--- Packages/App/Common.py:1.20 Tue Feb 11 13:42:40 2003
+++ Packages/App/Common.py Sat May 28 20:41:29 2005
@@ -21,6 +21,7 @@
# Legacy API for this module; 3rd party code may use this.
from os.path import realpath
+from ZODB.utils import safe_hasattr
# These are needed because the various date formats below must
@@ -73,7 +74,7 @@
# Return the aq_base of an object.
return getattr(ob, 'aq_base', ob)
-def is_acquired(ob, hasattr=hasattr, aq_base=aq_base, absattr=absattr):
+def is_acquired(ob, hasattr=safe_hasattr, aq_base=aq_base, absattr=absattr):
# Return true if this object is not considered to be
# a direct subobject of its acquisition parent
# Used to prevent acquisition side-affects in FTP traversal
=== Packages/App/DavLockManager.py 1.8 => 1.8.132.1 ===
--- Packages/App/DavLockManager.py:1.8 Wed Aug 14 17:31:40 2002
+++ Packages/App/DavLockManager.py Sat May 28 20:41:29 2005
@@ -15,6 +15,7 @@
import OFS, Acquisition, Globals
from AccessControl import getSecurityManager, ClassSecurityInfo
+from ZODB.utils import safe_hasattr
from webdav.Lockable import wl_isLocked
class DavLockManager(OFS.SimpleItem.Item, Acquisition.Implicit):
@@ -78,7 +79,7 @@
if result is None:
result = []
base = Acquisition.aq_base(obj)
- if not hasattr(base, 'objectItems'):
+ if not safe_hasattr(base, 'objectItems'):
return result
try: items = obj.objectItems()
except: return result
@@ -88,7 +89,7 @@
if path: p = '%s/%s' % (path, id)
else: p = id
- dflag = hasattr(ob, '_p_changed') and (ob._p_changed == None)
+ dflag = safe_hasattr(ob, '_p_changed') and (ob._p_changed == None)
bs = Acquisition.aq_base(ob)
if wl_isLocked(ob):
li = []
@@ -98,7 +99,7 @@
'token':token})
addresult((p, li))
dflag = 0
- if hasattr(bs, 'objectItems'):
+ if safe_hasattr(bs, 'objectItems'):
self._findapply(ob, result, p)
if dflag: ob._p_deactivate()
=== Packages/App/Extensions.py 1.21.12.2 => 1.21.12.2.30.1 ===
--- Packages/App/Extensions.py:1.21.12.2 Mon Nov 17 17:34:02 2003
+++ Packages/App/Extensions.py Sat May 28 20:41:29 2005
@@ -20,6 +20,8 @@
import os, zlib, imp
import Products
from zExceptions import NotFound
+from ZODB.utils import safe_hasattr
+
path_split=os.path.split
path_join=os.path.join
exists=os.path.exists
@@ -171,7 +173,7 @@
if v == class_name: raise ValueError, (
'The class, %s, is not defined in file, %s' % (class_name, module))
- if not hasattr(c,'__bases__'): raise ValueError, (
+ if not safe_hasattr(c,'__bases__'): raise ValueError, (
'%s, is not a class' % class_name)
return c
=== Packages/App/Factory.py 1.27 => 1.27.64.1 ===
--- Packages/App/Factory.py:1.27 Wed May 14 10:43:44 2003
+++ Packages/App/Factory.py Sat May 28 20:41:29 2005
@@ -16,6 +16,7 @@
__version__='$Revision$'[11:-2]
import OFS.SimpleItem, Acquisition, Globals, AccessControl.Role
+from ZODB.utils import safe_hasattr
class Factory(
AccessControl.Role.RoleManager,
@@ -69,7 +70,7 @@
def manage_afterAdd(self, item, container):
import Product # local to avoid circular import
- if hasattr(self, 'aq_parent'):
+ if safe_hasattr(self, 'aq_parent'):
container=self.aq_parent
elif item is not self:
container=None
@@ -79,7 +80,7 @@
def manage_beforeDelete(self, item, container):
import Product # local to avoid circular import
- if hasattr(self, 'aq_parent'):
+ if safe_hasattr(self, 'aq_parent'):
container=self.aq_parent
elif item is not self:
container=None
=== Packages/App/FactoryDispatcher.py 1.21 => 1.21.132.1 ===
--- Packages/App/FactoryDispatcher.py:1.21 Wed Aug 14 17:31:40 2002
+++ Packages/App/FactoryDispatcher.py Sat May 28 20:41:29 2005
@@ -16,6 +16,7 @@
import Acquisition, sys, Products
from AccessControl.PermissionMapping import aqwrap
from AccessControl.Owned import UnownableOwner
+from ZODB.utils import safe_hasattr
class ProductDispatcher(Acquisition.Implicit):
" "
@@ -44,7 +45,7 @@
_owner=UnownableOwner
def __init__(self, product, dest, REQUEST=None):
- if hasattr(product,'aq_base'): product=product.aq_base
+ if safe_hasattr(product,'aq_base'): product=product.aq_base
self._product=product
self._d=dest
if REQUEST is not None:
@@ -74,7 +75,7 @@
def __getattr__(self, name):
p=self.__dict__['_product']
d=p.__dict__
- if hasattr(p,name) and d.has_key(name):
+ if safe_hasattr(p,name) and d.has_key(name):
m=d[name]
w=getattr(m, '_permissionMapper', None)
if w is not None:
=== Packages/App/Management.py 1.61.68.4 => 1.61.68.4.28.1 ===
--- Packages/App/Management.py:1.61.68.4 Thu Jan 8 18:33:45 2004
+++ Packages/App/Management.py Sat May 28 20:41:29 2005
@@ -20,6 +20,7 @@
from Dialogs import MessageDialog
from Globals import DTMLFile, HTMLFile
from zExceptions import Redirect
+from ZODB.utils import safe_hasattr
from AccessControl import getSecurityManager, Unauthorized
from cgi import escape
@@ -62,7 +63,7 @@
if validate(None, self, None, o):
result.append(d)
except:
- if not hasattr(o, '__roles__'):
+ if not safe_hasattr(o, '__roles__'):
result.append(d)
return result
=== Packages/App/PersistentExtra.py 1.8 => 1.8.124.1 ===
--- Packages/App/PersistentExtra.py:1.8 Wed Aug 14 17:31:40 2002
+++ Packages/App/PersistentExtra.py Sat May 28 20:41:29 2005
@@ -61,7 +61,8 @@
# BoboPOS 2 code:
jar=self._p_jar
if jar is None:
- if hasattr(self,'aq_parent') and hasattr(self.aq_parent, '_p_jar'):
+ if (safe_hasattr(self,'aq_parent')
+ and safe_hasattr(self.aq_parent, '_p_jar')):
jar=self.aq_parent._p_jar
if jar is None: return 0
if not jar.name: return 0
=== Packages/App/Product.py 1.63.2.3 => 1.63.2.3.30.1 ===
--- Packages/App/Product.py:1.63.2.3 Mon Nov 17 17:34:02 2003
+++ Packages/App/Product.py Sat May 28 20:41:29 2005
@@ -48,6 +48,7 @@
from Permission import PermissionManager
import RefreshFuncs
from App.config import getConfiguration
+from ZODB.utils import safe_hasattr
class ProductFolder(Folder):
@@ -292,7 +293,7 @@
Returns the ProductHelp object associated
with the Product.
"""
- if not hasattr(self, 'Help'):
+ if not safe_hasattr(self, 'Help'):
self._setObject('Help', ProductHelp('Help', self.id))
return self.Help
@@ -495,8 +496,10 @@
products=app.Control_Panel.Products
fver = ''
- if hasattr(productp, '__import_error__'): ie=productp.__import_error__
- else: ie=None
+ if safe_hasattr(productp, '__import_error__'):
+ ie=productp.__import_error__
+ else:
+ ie=None
# Retrieve version number from any suitable version.txt
for fname in ('version.txt', 'VERSION.txt', 'VERSION.TXT'):
@@ -514,7 +517,7 @@
if ihasattr(products,name):
old=getattr(products, name)
if ihasattr(old,'version') and old.version==fver:
- if hasattr(old, 'import_error_') and \
+ if safe_hasattr(old, 'import_error_') and \
old.import_error_==ie:
# Version hasn't changed. Don't reinitialize.
return old
@@ -588,7 +591,7 @@
return product
def ihasattr(o, name):
- return hasattr(o, name) and o.__dict__.has_key(name)
+ return safe_hasattr(o, name) and o.__dict__.has_key(name)
def doInstall():
=== Packages/App/ProductContext.py 1.43 => 1.43.56.1 ===
--- Packages/App/ProductContext.py:1.43 Fri May 2 18:01:34 2003
+++ Packages/App/ProductContext.py Sat May 28 20:41:29 2005
@@ -25,10 +25,13 @@
from types import ListType, TupleType
from Interface.Implements import instancesOfObjectImplements
from App.Product import doInstall
+from ZODB.utils import safe_hasattr
import ZClasses # to enable 'PC.registerBaseClass()'
-if not hasattr(Products, 'meta_types'): Products.meta_types=()
+if not hasattr(Products, 'meta_types'):
+ Products.meta_types=()
+
if not hasattr(Products, 'meta_classes'):
Products.meta_classes={}
Products.meta_class_info={}
@@ -166,7 +169,7 @@
fd = pack.__FactoryDispatcher__ = __FactoryDispatcher__
- if not hasattr(pack, '_m'): pack._m=fd.__dict__
+ if not safe_hasattr(pack, '_m'): pack._m=fd.__dict__
m=pack._m
if interfaces is _marker:
@@ -201,7 +204,7 @@
name=os.path.split(icon)[1]
icon=Globals.ImageFile(icon, self.__pack.__dict__)
icon.__roles__=None
- if not hasattr(OFS.misc_.misc_, pid):
+ if not safe_hasattr(OFS.misc_.misc_, pid):
setattr(OFS.misc_.misc_, pid, OFS.misc_.Misc_(pid, {}))
getattr(OFS.misc_.misc_, pid)[name]=icon
@@ -215,7 +218,8 @@
#
base_class=Z._zclass_
if meta_type is None:
- if hasattr(base_class, 'meta_type'): meta_type=base_class.meta_type
+ if safe_hasattr(base_class, 'meta_type'):
+ meta_type=base_class.meta_type
else: meta_type=base_class.__name__
module=base_class.__module__
=== Packages/App/ProductRegistry.py 1.15.68.1 => 1.15.68.1.30.1 ===
--- Packages/App/ProductRegistry.py:1.15.68.1 Mon Nov 17 17:34:03 2003
+++ Packages/App/ProductRegistry.py Sat May 28 20:41:29 2005
@@ -22,6 +22,7 @@
# ....what?
from OFS.Folder import Folder
+from ZODB.utils import safe_hasattr
class ProductRegistryMixin:
# This class implements a protocol for registering products that
@@ -116,7 +117,7 @@
# method. Until Jim has time to look into this, this aq_maybe method
# appears to be an effective work-around...
def aq_maybe(self, name):
- if hasattr(self, name):
+ if safe_hasattr(self, name):
return getattr(self, name)
return self.aq_acquire(name)
@@ -171,7 +172,7 @@
def _setProductRegistryData(self, name, v):
name='_product_%s' % name
- if hasattr(self, name):
+ if safe_hasattr(self, name):
return setattr(self, name, v)
else:
raise AttributeError, name
=== Packages/App/Undo.py 1.32.44.1 => 1.32.44.1.34.1 ===
--- Packages/App/Undo.py:1.32.44.1 Mon Jul 21 12:35:11 2003
+++ Packages/App/Undo.py Sat May 28 20:41:29 2005
@@ -21,6 +21,7 @@
from DateTime import DateTime
import Globals, ExtensionClass
from ZopeUndo.Prefix import Prefix
+from ZODB.utils import safe_hasattr
class UndoSupport(ExtensionClass.Base):
@@ -46,15 +47,15 @@
)
def get_request_var_or_attr(self, name, default):
- if hasattr(self, 'REQUEST'):
+ if safe_hasattr(self, 'REQUEST'):
REQUEST=self.REQUEST
if REQUEST.has_key(name): return REQUEST[name]
- if hasattr(self, name): v=getattr(self, name)
+ if safe_hasattr(self, name): v=getattr(self, name)
else: v=default
REQUEST[name]=v
return v
else:
- if hasattr(self, name): v=getattr(self, name)
+ if safe_hasattr(self, name): v=getattr(self, name)
else: v=default
return v
@@ -81,7 +82,7 @@
# by any member of a user folder in the place where the user
# is defined.
user = getSecurityManager().getUser()
- if hasattr(user, 'aq_parent'):
+ if safe_hasattr(user, 'aq_parent'):
path = '/'.join(user.aq_parent.getPhysicalPath()[1:-1])
else:
path=''
=== Packages/App/special_dtml.py 1.25.12.1 => 1.25.12.1.30.1 ===
--- Packages/App/special_dtml.py:1.25.12.1 Mon Nov 17 17:34:03 2003
+++ Packages/App/special_dtml.py Sat May 28 20:41:29 2005
@@ -15,6 +15,7 @@
from types import InstanceType
from zLOG import LOG,WARNING
from App.config import getConfiguration
+from ZODB.utils import safe_hasattr
class HTML(DocumentTemplate.HTML,Persistence.Persistent,):
"Persistent HTML Document Templates"
@@ -46,7 +47,7 @@
if mtime != self._v_last_read:
self.cook()
self._v_last_read=mtime
- elif not hasattr(self,'_v_cooked'):
+ elif not safe_hasattr(self,'_v_cooked'):
try: changed=self.__changed__()
except: changed=1
self.cook()
@@ -85,7 +86,7 @@
def _get__roles__(self):
imp = getattr(aq_parent(aq_inner(self)),
'%s__roles__' % self.__name__)
- if hasattr(imp, '__of__'):
+ if safe_hasattr(imp, '__of__'):
return imp.__of__(self)
return imp
@@ -143,7 +144,7 @@
# We're first, so get the REQUEST.
try:
req = self.aq_acquire('REQUEST')
- if hasattr(req, 'taintWrapper'):
+ if safe_hasattr(req, 'taintWrapper'):
req = req.taintWrapper()
except: pass
bound_data['REQUEST'] = req
More information about the Zope-Checkins
mailing list