--- a/src/pyams_utils/factory.py Wed Nov 20 19:26:23 2019 +0100
+++ b/src/pyams_utils/factory.py Fri Nov 22 18:51:37 2019 +0100
@@ -15,7 +15,7 @@
This module provides a decorator and a small set of functions to handle object factories.
Instead of directly using a class as an object factory, the object of this module is to
-let you create an object based on an interface. The first step is to create an object
+let you create an object based on an interface. The first step is to create an object
implementing this interface, and then to register it as a factory:
.. code-block:: python
@@ -23,9 +23,9 @@
@implementer(IMyInterface)
class MyClass(object):
'''Class implementing my interface'''
-
+
register_factory(IMyInterface, MyClass)
-
+
Factory registry can also be handle by a decorator called "factory_config":
.. code-block:: python
@@ -51,8 +51,6 @@
own implementation of any PyAMS interface handled by factories.
"""
-__docformat__ = 'restructuredtext'
-
import logging
import venusian
@@ -63,12 +61,16 @@
from pyams_utils.interfaces import IObjectFactory
from pyams_utils.registry import get_global_registry
-logger = logging.getLogger('PyAMS (utils)')
+
+__docformat__ = 'restructuredtext'
-def is_interface(object):
+LOGGER = logging.getLogger('PyAMS (utils)')
+
+
+def is_interface(obj):
"""Check if given object is an interface"""
- return issubclass(object.__class__, InterfaceClass)
+ return issubclass(obj.__class__, InterfaceClass)
def get_interface_name(iface):
@@ -78,7 +80,7 @@
@adapter(Interface)
@implementer(IObjectFactory)
-class ObjectFactoryAdapter(object):
+class ObjectFactoryAdapter:
"""Most basic object factory adapter"""
factory = None
@@ -87,7 +89,7 @@
self.context = context
def __call__(self):
- return self.factory()
+ return self.factory() # pylint: disable=not-callable
def register_factory(interface, klass, registry=None, name=''):
@@ -95,12 +97,13 @@
:param interface: the interface for which the factory is registered
:param klass: the object factory
- :param registry: the registry into which factory adapter should be registered; if None, the global
- registry is used
+ :param registry: the registry into which factory adapter should be registered; if None, the
+ global registry is used
:param name: custom name given to registered factory
"""
class Temp(ObjectFactoryAdapter):
+ """Object factory matching given interface"""
classImplements(klass, interface)
factory = klass
@@ -112,7 +115,7 @@
registry.registerAdapter(Temp, name=if_name)
-class factory_config(object):
+class factory_config: # pylint: disable=invalid-name,no-member
"""Class decorator to declare a default object factory"""
venusian = venusian
@@ -125,23 +128,24 @@
settings = self.__dict__.copy()
depth = settings.pop('_depth', 0)
- def callback(context, name, ob):
+ def callback(context, name, obj):
name = settings.get('name', '')
provided = settings.get('provided')
if not provided:
- raise TypeError("No provided interface(s) was given for registered factory %r" % ob)
+ raise TypeError("No provided interface(s) was given for registered factory %r" %
+ obj)
if not isinstance(provided, tuple):
provided = (provided,)
config = context.config.with_package(info.module)
for interface in provided:
if name:
- logger.debug("Registering factory {0} for interface {1} with name {2}".format(str(ob),
- str(interface),
- name))
+ LOGGER.debug("Registering factory %s for interface %s with name %s",
+ str(obj), str(interface), name)
else:
- logger.debug("Registering default factory {0} for interface {1}".format(str(ob), str(interface)))
- register_factory(interface, ob, config.registry, name)
+ LOGGER.debug("Registering default factory %s for interface %s",
+ str(obj), str(interface))
+ register_factory(interface, obj, config.registry, name)
info = self.venusian.attach(wrapped, callback, category='pyams_factory', depth=depth + 1)
if info.scope == 'class':