Index: lib/python/RestrictedPython/Utilities.py =================================================================== --- lib/python/RestrictedPython/Utilities.py (revision 4843) +++ lib/python/RestrictedPython/Utilities.py (working copy) @@ -82,3 +82,17 @@ return r utility_builtins['reorder'] = reorder + + +import __builtin__ +from Acquisition import aq_base + +def safe_hasattr(obj, attr): + """true, if *obj* has attribute *attr*.""" + return getattr(obj, attr, aq_base) is not aq_base +__builtin__.safe_hasattr = utility_builtins['safe_hasattr'] = safe_hasattr + +def hasattr_unacquired(obj, attr): + '''true, if *obj* has unacquired attribute *attr*.''' + return safe_hasattr(aq_base(obj), attr) +__builtin__.hasattr_unacquired = utility_builtins['hasattr_unacquired'] = hasattr_unacquired