[Zope-Checkins] CVS: Packages/Interface -
Implements.py:1.4.12.1.32.1 Verify.py:1.4.94.1
_InterfaceClass.py:1.6.132.1
Tres Seaver
tseaver at palladion.com
Sat May 28 20:42:11 EDT 2005
Update of /cvs-repository/Packages/Interface
In directory cvs.zope.org:/tmp/cvs-serv32028/lib/python/Interface
Modified Files:
Tag: tseaver-hasattr_geddon-branch
Implements.py Verify.py _InterfaceClass.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/Interface/Implements.py 1.4.12.1 => 1.4.12.1.32.1 ===
--- Packages/Interface/Implements.py:1.4.12.1 Mon Oct 20 17:41:31 2003
+++ Packages/Interface/Implements.py Sat May 28 20:41:30 2005
@@ -22,6 +22,7 @@
from Verify import verifyClass
from _InterfaceClass import Interface as InterfaceClass
from types import TupleType, ClassType, StringType
+from ZODB.utils import safe_hasattr
# Special value indicating the object supports
# what its class supports.
@@ -34,9 +35,9 @@
def getImplements(object):
t = type(object)
if t in ClassTypes:
- if hasattr(object, '__class_implements__'):
+ if safe_hasattr(object, '__class_implements__'):
return object.__class_implements__
- elif hasattr(object, '__implements__'):
+ elif safe_hasattr(object, '__implements__'):
return object.__implements__
return _typeImplements.get(t, None)
=== Packages/Interface/Verify.py 1.4 => 1.4.94.1 ===
--- Packages/Interface/Verify.py:1.4 Mon Nov 11 14:53:16 2002
+++ Packages/Interface/Verify.py Sat May 28 20:41:30 2005
@@ -16,6 +16,7 @@
from Exceptions import BrokenMethodImplementation
from types import FunctionType
from Method import fromMethod, fromFunction
+from ZODB.utils import safe_hasattr
from _object import MethodTypes
def _verify(iface, candidate, tentative=0, vtype=None):
@@ -45,7 +46,7 @@
raise DoesNotImplement(iface)
for n, d in iface.namesAndDescriptions(1):
- if not hasattr(candidate, n):
+ if not safe_hasattr(candidate, n):
raise BrokenImplementation(iface, n)
attr = getattr(candidate, n)
=== Packages/Interface/_InterfaceClass.py 1.6 => 1.6.132.1 ===
--- Packages/Interface/_InterfaceClass.py:1.6 Wed Aug 14 17:35:32 2002
+++ Packages/Interface/_InterfaceClass.py Sat May 28 20:41:30 2005
@@ -23,6 +23,7 @@
from Attribute import Attribute
from types import FunctionType
import Exceptions
+from ZODB.utils import safe_hasattr
from _Element import Element
from _object import isInstance
@@ -177,7 +178,8 @@
def deferred(self):
"""Return a defered class corresponding to the interface
"""
- if hasattr(self, "_deferred"): return self._deferred
+ if safe_hasattr(self, "_deferred"):
+ return self._deferred
klass={}
exec "class %s: pass" % self.__name__ in klass
More information about the Zope-Checkins
mailing list