# HG changeset patch # User Thierry Florac # Date 1529073299 -7200 # Node ID 7d70896756f27c48f21a63e9b9a69520ceea3628 # Parent 00af28a2352dc1643ad77c217f34aca71ac5cf57 Added "is_interface" function to check if an object is an interface diff -r 00af28a2352d -r 7d70896756f2 src/pyams_utils/adapter.py --- a/src/pyams_utils/adapter.py Fri Jun 15 10:59:13 2018 +0200 +++ b/src/pyams_utils/adapter.py Fri Jun 15 16:34:59 2018 +0200 @@ -27,13 +27,11 @@ import venusian -from inspect import isclass - # import interfaces from zope.annotation.interfaces import IAnnotations # import packages -from pyams_utils.factory import get_object_factory +from pyams_utils.factory import get_object_factory, is_interface from pyams_utils.registry import get_current_registry from zope.interface import implementedBy, alsoProvides, Interface from zope.lifecycleevent import ObjectCreatedEvent @@ -160,7 +158,7 @@ elif factory is None: return None else: - if isclass(factory) and issubclass(factory, Interface): + if is_interface(factory): factory = get_object_factory(factory) assert factory is not None, "Missing object factory" adapter = annotations[key] = factory() diff -r 00af28a2352d -r 7d70896756f2 src/pyams_utils/factory.py --- a/src/pyams_utils/factory.py Fri Jun 15 10:59:13 2018 +0200 +++ b/src/pyams_utils/factory.py Fri Jun 15 16:34:59 2018 +0200 @@ -26,6 +26,7 @@ from pyams_utils.registry import get_global_registry from zope.component import adapter, queryAdapter from zope.interface import implementer, Interface +from zope.interface.interface import InterfaceClass @adapter(Interface) @@ -42,6 +43,11 @@ return self.factory() +def is_interface(object): + """Check if given object is an interface""" + return issubclass(object.__class__, InterfaceClass) + + def get_interface_name(iface): """Get interface full name""" return iface.__module__ + '.' + iface.__name__