From 8e78f937c87ab4a454552c3a6629235c7d5c5462 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 14 Apr 2015 20:14:17 +0300
Subject: [PATCH 01/73] Incrementing version to 0.7.6

---
 VERSION | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/VERSION b/VERSION
index 8bd6ba8c..c0062185 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.7.5
+0.7.6

From 463f219307d95723fce10bae93b2e5167767ee19 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 14 Apr 2015 20:18:25 +0300
Subject: [PATCH 02/73] Changing description

---
 docs/index.rst | 2 +-
 setup.py       | 6 ++----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/docs/index.rst b/docs/index.rst
index f472cb2f..d1f9d13f 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,7 +1,7 @@
 Objects
 =======
 
-Dependency management tool for Python projects.
+Dependency injector for Python projects.
 
 +---------------------------------------+-------------------------------------------------------------------+
 | *PyPi*                                | .. image:: https://pypip.in/version/Objects/badge.svg             |
diff --git a/setup.py b/setup.py
index a000fa98..9bd3f607 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ from setuptools import setup
 from setuptools import Command
 
 
-SHORT_DESCRIPTION = 'Dependency management tool for Python projects'
+SHORT_DESCRIPTION = 'Dependency injector for Python projects'
 
 
 # Getting description.
@@ -47,8 +47,6 @@ class PublishCommand(Command):
         self.run_command('upload')
         os.system('git tag -a {0} -m \'version {0}\''.format(version))
         os.system('git push --tags')
-
-
 setup(name='Objects',
       version=version,
       description=SHORT_DESCRIPTION,
@@ -69,9 +67,9 @@ setup(name='Objects',
           'Dependency management',
           'Dependency injection',
           'Dependency injection container',
+          'Dependency injector',
           'DI',
           'DIC',
-          'Dependency injector',
           'Inversion of Control',
           'Inversion of Control container',
           'IoC',

From b0720cfc2caf5548c499b8ae5ef70aa92b0a6f70 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 14 Apr 2015 23:17:53 +0300
Subject: [PATCH 03/73] moving @override and @inject decorators to decorators
 module

---
 docs/index.rst                                |   1 +
 docs/providers.rst                            | 242 ++++++++++++++++++
 examples/concept.py                           |   3 +-
 examples/override.py                          |   3 +-
 examples/readme/inject_decorator.py           |   3 +-
 examples/readme/overriding_catalog.py         |   3 +-
 examples/readme/providers.py                  |   7 +-
 examples/readme2/instance_providers.py        |  24 ++
 .../instance_providers_with_injections.py}    |   4 +-
 .../overriding_providers.py}                  |   0
 examples/readme2/static_providers.py          |  19 ++
 objects/__init__.py                           |   9 +-
 objects/catalog.py                            |   9 -
 objects/decorators.py                         |  34 +++
 objects/injections.py                         |  23 --
 tests/test_catalog.py                         |  14 -
 tests/test_decorators.py                      | 114 +++++++++
 tests/test_injections.py                      |  77 ------
 18 files changed, 453 insertions(+), 136 deletions(-)
 create mode 100644 docs/providers.rst
 create mode 100644 examples/readme2/instance_providers.py
 rename examples/{readme/injections.py => readme2/instance_providers_with_injections.py} (89%)
 rename examples/{readme/overriding_provider.py => readme2/overriding_providers.py} (100%)
 create mode 100644 examples/readme2/static_providers.py
 create mode 100644 objects/decorators.py
 create mode 100644 tests/test_decorators.py

diff --git a/docs/index.rst b/docs/index.rst
index d1f9d13f..c58ae813 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -38,6 +38,7 @@ Contents
 
     introduction
     installation
+    providers
     entities
     advanced_usage
     examples
diff --git a/docs/providers.rst b/docs/providers.rst
new file mode 100644
index 00000000..94ee9066
--- /dev/null
+++ b/docs/providers.rst
@@ -0,0 +1,242 @@
+Providers
+=========
+
+Providers are strategies of accessing objects.
+
+All providers are callable. They describe how particular objects will be
+provided.
+
+
+Instance providers & Injections
+-------------------------------
+
+*Instance* providers are providers that deal with object's creation and
+initialization.
+
+There are few *Instance* providers:
+
+    - ``NewInstance`` provider creates new instance of specified class on every
+      call.
+    - ``Singleton`` provider creates new instance of specified class on first
+      call and returns same instance on every next call.
+
+.. code-block:: python
+
+    """`NewInstance` and `Singleton` providers example."""
+
+    from objects.providers import NewInstance
+    from objects.providers import Singleton
+
+
+    # NewInstance provider creates new instance of specified class on every call.
+    new_object = NewInstance(object)
+
+    object_1 = new_object()
+    object_2 = new_object()
+
+    assert object_1 is not object_2
+    assert isinstance(object_1, object) and isinstance(object_2, object)
+
+    # Singleton provider creates new instance of specified class on first call
+    # and returns same instance on every next call.
+    single_object = Singleton(object)
+
+    single_object_1 = single_object()
+    single_object_2 = single_object()
+
+    assert single_object_1 is single_object_2
+    assert isinstance(object_1, object) and isinstance(object_2, object)
+
+
+Objects can take dependencies in various forms. Some objects take init
+arguments, other are using attributes or methods to be initialized. It affects
+how such objects need to be created and initialized, and that is the place
+where **Injections** need to be used.
+
+In terms of computer science, **Injection** of dependency is a way how
+dependency can be coupled with dependent object.
+
+In terms of **Objects**, **Injection** is an instruction how to provide
+dependency for the particular object.
+
+Every Python object could be an injection's value. Special case is an **Objects**
+provider as an injection's value. In such case, injection value is a result of
+injectable provider call (every time injection is done).
+
+There are several types of injections. Below is a description of how they are
+used by instance providers:
+
+    - ``KwArg`` - is injected in object's ``__init__()`` method in time of
+      object's initialization via keyword argument.
+    - ``Attribute`` - is injected into object's attribute (not class attribute)
+      after object's initialization.
+    - ``Method`` - is injected into object method's call after objects
+      initialization.
+
+Example:
+
+.. code-block:: python
+
+    """`NewInstance` and `Singleton` providers with injections example."""
+
+    import sqlite3
+
+    from objects.providers import Singleton
+    from objects.providers import NewInstance
+
+    from objects.injections import KwArg
+    from objects.injections import Attribute
+
+
+    class ObjectA(object):
+
+        """ObjectA has dependency on database."""
+
+        def __init__(self, database):
+            """Initializer.
+
+            Database dependency need to be injected via init arg."""
+            self.database = database
+
+        def get_one(self):
+            """Select one from database and return it."""
+            return self.database.execute('SELECT 1').fetchone()[0]
+
+
+    # Database and `ObjectA` providers.
+    database = Singleton(sqlite3.Connection,
+                         KwArg('database', ':memory:'),
+                         KwArg('timeout', 30),
+                         KwArg('detect_types', True),
+                         KwArg('isolation_level', 'EXCLUSIVE'),
+                         Attribute('row_factory', sqlite3.Row))
+
+    object_a = NewInstance(ObjectA,
+                           KwArg('database', database))
+
+    # Creating several `ObjectA` instances.
+    object_a_1 = object_a()
+    object_a_2 = object_a()
+
+    # Making some asserts.
+    assert object_a_1 is not object_a_2
+    assert object_a_1.database is object_a_2.database is database()
+    assert object_a_1.get_one() == object_a_2.get_one() == 1
+
+Static providers
+----------------
+
+Static providers are family of providers that returns its values "as is".
+There are four of static providers: ``Class``, ``Object``, ``Function`` and
+``Value``. All of them has the same behaviour, but usage of anyone is
+predicted by readability and providable object's type.
+
+.. code-block:: python
+
+    """Static providers example."""
+
+    from objects.providers import Class
+    from objects.providers import Object
+    from objects.providers import Function
+    from objects.providers import Value
+
+
+    cls_provider = Class(object)
+    assert cls_provider() is object
+
+    object_provider = Object(object())
+    assert isinstance(object_provider(), object)
+
+    function_provider = Function(len)
+    assert function_provider() is len
+
+    value_provider = Value(123)
+    assert value_provider() == 123
+
+Callable provider
+-----------------
+
+External dependency provider
+----------------------------
+
+Config provider
+---------------
+
+Providers delegation
+--------------------
+
+Overriding of providers
+-----------------------
+
+Any provider can be overridden by another provider.
+
+Example:
+
+.. code-block:: python
+
+    """Provider overriding example."""
+
+    import sqlite3
+
+    from objects.providers import Singleton
+    from objects.providers import NewInstance
+
+    from objects.injections import KwArg
+    from objects.injections import Attribute
+
+
+    class ObjectA(object):
+
+        """ObjectA has dependency on database."""
+
+        def __init__(self, database):
+            """Initializer.
+
+            Database dependency need to be injected via init arg."""
+            self.database = database
+
+        def get_one(self):
+            """Select one from database and return it."""
+            return self.database.execute('SELECT 1')
+
+
+    class ObjectAMock(ObjectA):
+
+        """Mock of ObjectA.
+
+        Has no dependency on database.
+        """
+
+        def __init__(self):
+            """Initializer."""
+
+        def get_one(self):
+            """Select one from database and return it.
+
+            Mock makes no database queries and always returns two instead of one.
+            """
+            return 2
+
+
+    # Database and `ObjectA` providers.
+    database = Singleton(sqlite3.Connection,
+                         KwArg('database', ':memory:'),
+                         KwArg('timeout', 30),
+                         KwArg('detect_types', True),
+                         KwArg('isolation_level', 'EXCLUSIVE'),
+                         Attribute('row_factory', sqlite3.Row))
+
+    object_a = NewInstance(ObjectA,
+                           KwArg('database', database))
+
+
+    # Overriding `ObjectA` provider with `ObjectAMock` provider.
+    object_a.override(NewInstance(ObjectAMock))
+
+    # Creating several `ObjectA` instances.
+    object_a_1 = object_a()
+    object_a_2 = object_a()
+
+    # Making some asserts.
+    assert object_a_1 is not object_a_2
+    assert object_a_1.get_one() == object_a_2.get_one() == 2
diff --git a/examples/concept.py b/examples/concept.py
index 6d934b48..75fe2c98 100644
--- a/examples/concept.py
+++ b/examples/concept.py
@@ -7,7 +7,8 @@ from objects.providers import NewInstance
 
 from objects.injections import KwArg
 from objects.injections import Attribute
-from objects.injections import inject
+
+from objects.decorators import inject
 
 import sqlite3
 
diff --git a/examples/override.py b/examples/override.py
index 6cffbab8..98f1c91b 100644
--- a/examples/override.py
+++ b/examples/override.py
@@ -1,7 +1,6 @@
 """Override example."""
 
 from objects.catalog import AbstractCatalog
-from objects.catalog import override
 
 from objects.providers import Singleton
 from objects.providers import NewInstance
@@ -9,6 +8,8 @@ from objects.providers import NewInstance
 from objects.injections import KwArg
 from objects.injections import Attribute
 
+from objects.decorators import override
+
 import sqlite3
 
 
diff --git a/examples/readme/inject_decorator.py b/examples/readme/inject_decorator.py
index 702f2727..6bfd3c7f 100644
--- a/examples/readme/inject_decorator.py
+++ b/examples/readme/inject_decorator.py
@@ -1,9 +1,8 @@
 """`@inject` decorator example."""
 
 from objects.providers import NewInstance
-
 from objects.injections import KwArg
-from objects.injections import inject
+from objects.decorators import inject
 
 
 new_object = NewInstance(object)
diff --git a/examples/readme/overriding_catalog.py b/examples/readme/overriding_catalog.py
index 657def1a..d05e4ac0 100644
--- a/examples/readme/overriding_catalog.py
+++ b/examples/readme/overriding_catalog.py
@@ -3,7 +3,6 @@
 import sqlite3
 
 from objects.catalog import AbstractCatalog
-from objects.catalog import override
 
 from objects.providers import Singleton
 from objects.providers import NewInstance
@@ -11,6 +10,8 @@ from objects.providers import NewInstance
 from objects.injections import KwArg
 from objects.injections import Attribute
 
+from objects.decorators import override
+
 
 class ObjectA(object):
 
diff --git a/examples/readme/providers.py b/examples/readme/providers.py
index ce662c38..1d0dff6f 100644
--- a/examples/readme/providers.py
+++ b/examples/readme/providers.py
@@ -4,8 +4,7 @@ from objects.providers import NewInstance
 from objects.providers import Singleton
 
 
-# NewInstance provider will create new instance of specified class
-# on every call.
+# NewInstance provider creates new instance of specified class on every call.
 new_object = NewInstance(object)
 
 object_1 = new_object()
@@ -13,8 +12,8 @@ object_2 = new_object()
 
 assert object_1 is not object_2
 
-# Singleton provider will create new instance of specified class on first call,
-# and return same instance on every next call.
+# Singleton provider creates new instance of specified class on first call
+# and returns same instance on every next call.
 single_object = Singleton(object)
 
 single_object_1 = single_object()
diff --git a/examples/readme2/instance_providers.py b/examples/readme2/instance_providers.py
new file mode 100644
index 00000000..d18783e6
--- /dev/null
+++ b/examples/readme2/instance_providers.py
@@ -0,0 +1,24 @@
+"""`NewInstance` and `Singleton` providers example."""
+
+from objects.providers import NewInstance
+from objects.providers import Singleton
+
+
+# NewInstance provider creates new instance of specified class on every call.
+new_object = NewInstance(object)
+
+object_1 = new_object()
+object_2 = new_object()
+
+assert object_1 is not object_2
+assert isinstance(object_1, object) and isinstance(object_2, object)
+
+# Singleton provider creates new instance of specified class on first call
+# and returns same instance on every next call.
+single_object = Singleton(object)
+
+single_object_1 = single_object()
+single_object_2 = single_object()
+
+assert single_object_1 is single_object_2
+assert isinstance(object_1, object) and isinstance(object_2, object)
diff --git a/examples/readme/injections.py b/examples/readme2/instance_providers_with_injections.py
similarity index 89%
rename from examples/readme/injections.py
rename to examples/readme2/instance_providers_with_injections.py
index 52590a7e..ba20793f 100644
--- a/examples/readme/injections.py
+++ b/examples/readme2/instance_providers_with_injections.py
@@ -1,4 +1,4 @@
-"""`KwArg` and `Attribute` injections example."""
+"""`NewInstance` and `Singleton` providers with injections example."""
 
 import sqlite3
 
@@ -41,5 +41,5 @@ object_a_2 = object_a()
 
 # Making some asserts.
 assert object_a_1 is not object_a_2
-assert object_a_1.database is object_a_2.database
+assert object_a_1.database is object_a_2.database is database()
 assert object_a_1.get_one() == object_a_2.get_one() == 1
diff --git a/examples/readme/overriding_provider.py b/examples/readme2/overriding_providers.py
similarity index 100%
rename from examples/readme/overriding_provider.py
rename to examples/readme2/overriding_providers.py
diff --git a/examples/readme2/static_providers.py b/examples/readme2/static_providers.py
new file mode 100644
index 00000000..7664d59b
--- /dev/null
+++ b/examples/readme2/static_providers.py
@@ -0,0 +1,19 @@
+"""Static providers example."""
+
+from objects.providers import Class
+from objects.providers import Object
+from objects.providers import Function
+from objects.providers import Value
+
+
+cls_provider = Class(object)
+assert cls_provider() is object
+
+object_provider = Object(object())
+assert isinstance(object_provider(), object)
+
+function_provider = Function(len)
+assert function_provider() is len
+
+value_provider = Value(123)
+assert value_provider() == 123
diff --git a/objects/__init__.py b/objects/__init__.py
index b6d6d6bb..f5921f20 100644
--- a/objects/__init__.py
+++ b/objects/__init__.py
@@ -4,7 +4,6 @@ Dependency management tool for Python projects.
 """
 
 from .catalog import AbstractCatalog
-from .catalog import override
 
 from .providers import Provider
 from .providers import Delegate
@@ -22,11 +21,13 @@ from .injections import KwArg
 from .injections import Attribute
 from .injections import Method
 
+from .decorators import override
+from .decorators import inject
+
 from .errors import Error
 
 
 __all__ = ('AbstractCatalog',
-           'override',
 
            # Providers
            'Provider',
@@ -46,5 +47,9 @@ __all__ = ('AbstractCatalog',
            'Attribute',
            'Method',
 
+           # Decorators
+           'override',
+           'inject',
+
            # Errors
            'Error')
diff --git a/objects/catalog.py b/objects/catalog.py
index 81d12bcf..c69346d0 100644
--- a/objects/catalog.py
+++ b/objects/catalog.py
@@ -47,12 +47,3 @@ class AbstractCatalog(object):
         for name, provider in overridden:
             overridden_provider = getattr(cls, name)
             overridden_provider.override(provider)
-
-
-def override(catalog):
-    """Catalog overriding decorator."""
-    def decorator(overriding_catalog):
-        """Overriding decorator."""
-        catalog.override(overriding_catalog)
-        return overriding_catalog
-    return decorator
diff --git a/objects/decorators.py b/objects/decorators.py
new file mode 100644
index 00000000..0113ae05
--- /dev/null
+++ b/objects/decorators.py
@@ -0,0 +1,34 @@
+"""Decorators module."""
+
+from six import wraps
+
+from .utils import ensure_is_injection
+
+
+def override(catalog):
+    """Catalog overriding decorator."""
+    def decorator(overriding_catalog):
+        """Overriding decorator."""
+        catalog.override(overriding_catalog)
+        return overriding_catalog
+    return decorator
+
+
+def inject(injection):
+    """Inject decorator.
+
+    :type injection: Injection
+    :return: (callable) -> (callable)
+    """
+    injection = ensure_is_injection(injection)
+
+    def decorator(callback):
+        """Decorator."""
+        @wraps(callback)
+        def decorated(*args, **kwargs):
+            """Decorated."""
+            if injection.name not in kwargs:
+                kwargs[injection.name] = injection.value
+            return callback(*args, **kwargs)
+        return decorated
+    return decorator
diff --git a/objects/injections.py b/objects/injections.py
index 99245e88..c574071b 100644
--- a/objects/injections.py
+++ b/objects/injections.py
@@ -1,9 +1,6 @@
 """Injections module."""
 
-from six import wraps
-
 from .utils import is_provider
-from .utils import ensure_is_injection
 
 
 class Injection(object):
@@ -45,23 +42,3 @@ class Method(Injection):
     """Method injection."""
 
     __IS_OBJECTS_METHOD_INJECTION__ = True
-
-
-def inject(injection):
-    """Inject decorator.
-
-    :type injection: Injection
-    :return: (callable) -> (callable)
-    """
-    injection = ensure_is_injection(injection)
-
-    def decorator(callback):
-        """Decorator."""
-        @wraps(callback)
-        def decorated(*args, **kwargs):
-            """Decorated."""
-            if injection.name not in kwargs:
-                kwargs[injection.name] = injection.value
-            return callback(*args, **kwargs)
-        return decorated
-    return decorator
diff --git a/tests/test_catalog.py b/tests/test_catalog.py
index 065e56f5..cc0baf8b 100644
--- a/tests/test_catalog.py
+++ b/tests/test_catalog.py
@@ -3,7 +3,6 @@
 import unittest2 as unittest
 
 from objects.catalog import AbstractCatalog
-from objects.catalog import override
 
 from objects.providers import Object
 from objects.providers import Value
@@ -50,16 +49,3 @@ class CatalogTests(unittest.TestCase):
         """Test getting of all catalog providers of specific type."""
         self.assertTrue(len(self.Catalog.all_providers(Object)) == 2)
         self.assertTrue(len(self.Catalog.all_providers(Value)) == 0)
-
-    def test_overriding(self):
-        """Test catalog overriding with another catalog."""
-        @override(self.Catalog)
-        class OverridingCatalog(self.Catalog):
-
-            """Overriding catalog."""
-
-            obj = Value(1)
-            another_obj = Value(2)
-
-        self.assertEqual(self.Catalog.obj(), 1)
-        self.assertEqual(self.Catalog.another_obj(), 2)
diff --git a/tests/test_decorators.py b/tests/test_decorators.py
new file mode 100644
index 00000000..c6ce5f42
--- /dev/null
+++ b/tests/test_decorators.py
@@ -0,0 +1,114 @@
+"""Objects decorators unittests."""
+
+import unittest2 as unittest
+
+from objects.decorators import override
+from objects.decorators import inject
+
+from objects.catalog import AbstractCatalog
+
+from objects.providers import NewInstance
+from objects.providers import Object
+from objects.providers import Value
+
+from objects.injections import KwArg
+
+from objects.errors import Error
+
+
+class OverrideTests(unittest.TestCase):
+
+    """Override decorator test cases."""
+
+    class Catalog(AbstractCatalog):
+
+        """Test catalog."""
+
+        obj = Object(object())
+        another_obj = Object(object())
+
+    def test_overriding(self):
+        """Test catalog overriding with another catalog."""
+        @override(self.Catalog)
+        class OverridingCatalog(self.Catalog):
+
+            """Overriding catalog."""
+
+            obj = Value(1)
+            another_obj = Value(2)
+
+        self.assertEqual(self.Catalog.obj(), 1)
+        self.assertEqual(self.Catalog.another_obj(), 2)
+
+class InjectTests(unittest.TestCase):
+
+    """Inject decorator test cases."""
+
+    def test_decorated(self):
+        """Test `inject()` decorated callback."""
+        provider1 = NewInstance(object)
+        provider2 = NewInstance(list)
+
+        @inject(KwArg('a', provider1))
+        @inject(KwArg('b', provider2))
+        def test(a, b):
+            return a, b
+
+        a1, b1 = test()
+        a2, b2 = test()
+
+        self.assertIsInstance(a1, object)
+        self.assertIsInstance(a2, object)
+        self.assertIsNot(a1, a2)
+
+        self.assertIsInstance(b1, list)
+        self.assertIsInstance(b2, list)
+        self.assertIsNot(b1, b2)
+
+    def test_decorated_kwargs_priority(self):
+        """Test `inject()` decorated callback kwargs priority."""
+        provider1 = NewInstance(object)
+        provider2 = NewInstance(list)
+        object_a = object()
+
+        @inject(KwArg('a', provider1))
+        @inject(KwArg('b', provider2))
+        def test(a, b):
+            return a, b
+
+        a1, b1 = test(a=object_a)
+        a2, b2 = test(a=object_a)
+
+        self.assertIsInstance(a1, object)
+        self.assertIsInstance(a2, object)
+        self.assertIs(a1, object_a)
+        self.assertIs(a2, object_a)
+
+        self.assertIsInstance(b1, list)
+        self.assertIsInstance(b2, list)
+        self.assertIsNot(b1, b2)
+
+    def test_decorated_with_args(self):
+        """Test `inject()` decorated callback with args."""
+        provider = NewInstance(list)
+        object_a = object()
+
+        @inject(KwArg('b', provider))
+        def test(a, b):
+            return a, b
+
+        a1, b1 = test(object_a)
+        a2, b2 = test(object_a)
+
+        self.assertIsInstance(a1, object)
+        self.assertIsInstance(a2, object)
+        self.assertIs(a1, object_a)
+        self.assertIs(a2, object_a)
+
+        self.assertIsInstance(b1, list)
+        self.assertIsInstance(b2, list)
+        self.assertIsNot(b1, b2)
+
+    def test_decorate_with_not_injection(self):
+        """Test `inject()` decorator with not an injection instance."""
+        self.assertRaises(Error, inject, object)
diff --git a/tests/test_injections.py b/tests/test_injections.py
index b4d5ff3c..b9612e1a 100644
--- a/tests/test_injections.py
+++ b/tests/test_injections.py
@@ -6,12 +6,9 @@ from objects.injections import Injection
 from objects.injections import KwArg
 from objects.injections import Attribute
 from objects.injections import Method
-from objects.injections import inject
 
 from objects.providers import NewInstance
 
-from objects.providers import Error
-
 
 class InjectionTests(unittest.TestCase):
 
@@ -65,77 +62,3 @@ class MethodTests(unittest.TestCase):
         injection = Method('some_arg_name', 'some_value')
         self.assertEqual(injection.name, 'some_arg_name')
         self.assertEqual(injection.injectable, 'some_value')
-
-
-class InjectTests(unittest.TestCase):
-
-    """Inject decorator test cases."""
-
-    def test_decorated(self):
-        """Test `inject()` decorated callback."""
-        provider1 = NewInstance(object)
-        provider2 = NewInstance(list)
-
-        @inject(KwArg('a', provider1))
-        @inject(KwArg('b', provider2))
-        def test(a, b):
-            return a, b
-
-        a1, b1 = test()
-        a2, b2 = test()
-
-        self.assertIsInstance(a1, object)
-        self.assertIsInstance(a2, object)
-        self.assertIsNot(a1, a2)
-
-        self.assertIsInstance(b1, list)
-        self.assertIsInstance(b2, list)
-        self.assertIsNot(b1, b2)
-
-    def test_decorated_kwargs_priority(self):
-        """Test `inject()` decorated callback kwargs priority."""
-        provider1 = NewInstance(object)
-        provider2 = NewInstance(list)
-        object_a = object()
-
-        @inject(KwArg('a', provider1))
-        @inject(KwArg('b', provider2))
-        def test(a, b):
-            return a, b
-
-        a1, b1 = test(a=object_a)
-        a2, b2 = test(a=object_a)
-
-        self.assertIsInstance(a1, object)
-        self.assertIsInstance(a2, object)
-        self.assertIs(a1, object_a)
-        self.assertIs(a2, object_a)
-
-        self.assertIsInstance(b1, list)
-        self.assertIsInstance(b2, list)
-        self.assertIsNot(b1, b2)
-
-    def test_decorated_with_args(self):
-        """Test `inject()` decorated callback with args."""
-        provider = NewInstance(list)
-        object_a = object()
-
-        @inject(KwArg('b', provider))
-        def test(a, b):
-            return a, b
-
-        a1, b1 = test(object_a)
-        a2, b2 = test(object_a)
-
-        self.assertIsInstance(a1, object)
-        self.assertIsInstance(a2, object)
-        self.assertIs(a1, object_a)
-        self.assertIs(a2, object_a)
-
-        self.assertIsInstance(b1, list)
-        self.assertIsInstance(b2, list)
-        self.assertIsNot(b1, b2)
-
-    def test_decorate_with_not_injection(self):
-        """Test `inject()` decorator with not an injection instance."""
-        self.assertRaises(Error, inject, object)

From be302793e1a4a811a584c830ec8bef0b557732b6 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 14 Apr 2015 23:20:24 +0300
Subject: [PATCH 04/73] Updating version to 0.8.0

---
 VERSION | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/VERSION b/VERSION
index c0062185..a3df0a69 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.7.6
+0.8.0

From 219932d9cc5ca7886d79476bdce085904eeab377 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 14 Apr 2015 23:56:46 +0300
Subject: [PATCH 05/73] Adding docs on callale provider

---
 docs/providers.rst                    | 35 ++++++++++++++++++++++
 examples/callable_provider.py         | 42 ---------------------------
 examples/readme2/callable_provider.py | 26 +++++++++++++++++
 3 files changed, 61 insertions(+), 42 deletions(-)
 delete mode 100644 examples/callable_provider.py
 create mode 100644 examples/readme2/callable_provider.py

diff --git a/docs/providers.rst b/docs/providers.rst
index 94ee9066..3f2c49c6 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -156,6 +156,41 @@ predicted by readability and providable object's type.
 Callable provider
 -----------------
 
+``Callable`` provider is a provider that decorates particular callable with
+some injections. Every call of this provider returns result of call of initial
+callable.
+
+ Example:
+
+ .. code-block:: python
+
+    """`Callable` provider examples."""
+
+    from objects.providers import Callable
+    from objects.providers import Singleton
+
+    from objects.injections import KwArg
+
+    import sqlite3
+
+
+    def some_function(arg, database):
+        """Example function that has input arg and dependency on database."""
+        return database.execute('SELECT @1', [arg]).fetchone()[0]
+
+
+    # Database and `ObjectA` providers.
+    database = Singleton(sqlite3.Connection,
+                         KwArg('database', ':memory:'))
+
+    some_function = Callable(some_function,
+                             KwArg('database', database))
+
+    # Some asserts.
+    assert some_function(1) == 1
+    assert some_function(2) == 2
+    assert some_function(2231) == 2231
+
 External dependency provider
 ----------------------------
 
diff --git a/examples/callable_provider.py b/examples/callable_provider.py
deleted file mode 100644
index feef362c..00000000
--- a/examples/callable_provider.py
+++ /dev/null
@@ -1,42 +0,0 @@
-"""Callable provider examples."""
-
-from objects.catalog import AbstractCatalog
-
-from objects.providers import Singleton
-from objects.providers import Callable
-
-from objects.injections import KwArg
-from objects.injections import Attribute
-
-import sqlite3
-
-
-def consuming_function(arg, db):
-    """Example function that has input arg and dependency on database."""
-    return arg, db
-
-
-class Catalog(AbstractCatalog):
-
-    """Catalog of objects providers."""
-
-    database = Singleton(sqlite3.Connection,
-                         KwArg('database', ':memory:'),
-                         Attribute('row_factory', sqlite3.Row))
-    """:type: (objects.Provider) -> sqlite3.Connection"""
-
-    consuming_function = Callable(consuming_function,
-                                  KwArg('db', database))
-    """:type: (objects.Provider) -> consuming_function"""
-
-
-# Some calls.
-arg1, db1 = Catalog.consuming_function(1)
-arg2, db2 = Catalog.consuming_function(2)
-arg3, db3 = Catalog.consuming_function(3)
-
-# Some asserts.
-assert db1 is db2 is db3
-assert arg1 == 1
-assert arg2 == 2
-assert arg3 == 3
diff --git a/examples/readme2/callable_provider.py b/examples/readme2/callable_provider.py
new file mode 100644
index 00000000..cca90cb3
--- /dev/null
+++ b/examples/readme2/callable_provider.py
@@ -0,0 +1,26 @@
+"""`Callable` provider examples."""
+
+from objects.providers import Callable
+from objects.providers import Singleton
+
+from objects.injections import KwArg
+
+import sqlite3
+
+
+def some_function(arg, database):
+    """Example function that has input arg and dependency on database."""
+    return database.execute('SELECT @1', [arg]).fetchone()[0]
+
+
+# Database and `ObjectA` providers.
+database = Singleton(sqlite3.Connection,
+                     KwArg('database', ':memory:'))
+
+some_function = Callable(some_function,
+                         KwArg('database', database))
+
+# Some asserts.
+assert some_function(1) == 1
+assert some_function(2) == 2
+assert some_function(2231) == 2231

From 8ee9378dda8b524749342fddf5336ab428db63bb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Sat, 18 Apr 2015 22:45:51 +0300
Subject: [PATCH 06/73] docs update

---
 README.rst              | 12 ++++++------
 docs/advanced_usage.rst |  4 ++--
 docs/entities.rst       |  8 ++++----
 docs/examples.rst       |  2 +-
 docs/feedback.rst       |  2 +-
 docs/installation.rst   |  4 ++--
 docs/introduction.rst   |  4 ++--
 docs/providers.rst      | 12 +++++++-----
 8 files changed, 25 insertions(+), 23 deletions(-)

diff --git a/README.rst b/README.rst
index 138c1834..43cd7f7a 100644
--- a/README.rst
+++ b/README.rst
@@ -42,21 +42,21 @@ source systems, frameworks, libraries and some turnkey functionality.
 When application goes bigger, its amount of objects and their dependencies
 also increased extremely fast and became hard to maintain.
 
-**Objects** is designed to be developer's friendly tool for managing objects
-and their dependencies in formal, pretty way. Main idea of **Objects** is to
+*Objects* is designed to be developer's friendly tool for managing objects
+and their dependencies in formal, pretty way. Main idea of *Objects* is to
 keep dependencies under control.
 
 Installation
 ------------
 
-**Objects** library is available on PyPi_::
+*Objects* library is available on PyPi_::
 
     pip install objects
 
 Documentation
 -------------
 
-**Objects** documentation is hosted on ReadTheDocs:
+*Objects* documentation is hosted on ReadTheDocs:
 
 - `Stable version`_
 - `Latest version`_
@@ -137,7 +137,7 @@ Examples
 
     example()
 
-You can get more **Objects** examples in ``/examples`` directory on
+You can get more *Objects* examples in ``/examples`` directory on
 GitHub:
 
     https://github.com/rmk135/objects
@@ -147,7 +147,7 @@ Feedback
 --------
 
 Feel free to post questions, bugs, feature requests, proposals etc. on
-**Objects**  GitHub Issues:
+*Objects*  GitHub Issues:
 
     https://github.com/rmk135/objects/issues
 
diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst
index 7161bb62..22ae9f1b 100644
--- a/docs/advanced_usage.rst
+++ b/docs/advanced_usage.rst
@@ -1,13 +1,13 @@
 Advanced usage
 ==============
 
-Below you can find some variants of advanced usage of **Objects**.
+Below you can find some variants of advanced usage of *Objects*.
 
 @inject decorator
 -----------------
 
 ``@inject`` decorator could be used for patching any callable with injection.
-Any Python object will be injected *as is*, except **Objects** providers,
+Any Python object will be injected *as is*, except *Objects* providers,
 that will be called to provide injectable value.
 
 .. code-block:: python
diff --git a/docs/entities.rst b/docs/entities.rst
index 7bb31c88..654d0b63 100644
--- a/docs/entities.rst
+++ b/docs/entities.rst
@@ -1,7 +1,7 @@
 Entities
 ========
 
-Current section describes main **Objects** entities and their interaction.
+Current section describes main *Objects* entities and their interaction.
 
 Providers
 ---------
@@ -45,10 +45,10 @@ dependencies of objects.
 
 Objects can take dependencies in various forms. Some objects take init
 arguments, other are using attributes or methods to be initialized. Injection,
-in terms of **Objects**, is an instruction how to provide dependency for the
+in terms of *Objects*, is an instruction how to provide dependency for the
 particular object.
 
-Every Python object could be an injection's value. Special case is a **Objects**
+Every Python object could be an injection's value. Special case is a *Objects*
 provider as an injection's value. In such case, injection value is a result of
 injectable provider call (every time injection is done).
 
@@ -107,7 +107,7 @@ Catalogs
 
 Catalogs are named set of providers.
 
-**Objects** catalogs can be used for grouping of providers by some
+*Objects* catalogs can be used for grouping of providers by some
 kind of rules. In example below, there are two catalogs:
 ``Resources`` and ``Models``.
 
diff --git a/docs/examples.rst b/docs/examples.rst
index 5b2b4fa2..9cd3a619 100644
--- a/docs/examples.rst
+++ b/docs/examples.rst
@@ -1,7 +1,7 @@
 Examples
 ========
 
-You can get more **Objects** examples in ``/examples`` directory on
+You can get more *Objects* examples in ``/examples`` directory on
 GitHub:
 
     https://github.com/rmk135/objects
diff --git a/docs/feedback.rst b/docs/feedback.rst
index df25c405..b34ebda2 100644
--- a/docs/feedback.rst
+++ b/docs/feedback.rst
@@ -2,7 +2,7 @@ Feedback
 ========
 
 Feel free to post questions, bugs, feature requests, proposals etc. on
-**Objects**  GitHub Issues:
+*Objects*  GitHub Issues:
 
     https://github.com/rmk135/objects/issues
 
diff --git a/docs/installation.rst b/docs/installation.rst
index 046009bf..84b34c15 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -1,7 +1,7 @@
 Installation
 ============
 
-Latest stable version of **Objects** library can be installed from PyPi_::
+Latest stable version of *Objects* library can be installed from PyPi_::
 
     pip install objects
 
@@ -9,7 +9,7 @@ Sources can be cloned from GitHub_::
 
     git clone https://github.com/rmk135/objects.git
 
-All **Objects** releases can be found on GitHub: https://github.com/rmk135/objects/releases
+All *Objects* releases can be found on GitHub: https://github.com/rmk135/objects/releases
 
 .. _PyPi: https://pypi.python.org/pypi/Objects
 .. _GitHub: https://github.com/rmk135/objects
diff --git a/docs/introduction.rst b/docs/introduction.rst
index a60cd478..0197eed0 100644
--- a/docs/introduction.rst
+++ b/docs/introduction.rst
@@ -11,6 +11,6 @@ source systems, frameworks, libraries and some turnkey functionality.
 When application goes bigger, its amount of objects and their dependencies
 also increased extremely fast and became hard to maintain.
 
-**Objects** is designed to be developer's friendly tool for managing objects
-and their dependencies in formal, pretty way. Main idea of **Objects** is to
+*Objects* is designed to be developer's friendly tool for managing objects
+and their dependencies in formal, pretty way. Main idea of *Objects* is to
 keep dependencies under control.
diff --git a/docs/providers.rst b/docs/providers.rst
index 3f2c49c6..0ac2108b 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -51,15 +51,15 @@ There are few *Instance* providers:
 Objects can take dependencies in various forms. Some objects take init
 arguments, other are using attributes or methods to be initialized. It affects
 how such objects need to be created and initialized, and that is the place
-where **Injections** need to be used.
+where *Injections* need to be used.
 
-In terms of computer science, **Injection** of dependency is a way how
+In terms of computer science, *Injection* of dependency is a way how
 dependency can be coupled with dependent object.
 
-In terms of **Objects**, **Injection** is an instruction how to provide
+In terms of *Objects*, *Injection* is an instruction how to provide
 dependency for the particular object.
 
-Every Python object could be an injection's value. Special case is an **Objects**
+Every Python object could be an injection's value. Special case is an *Objects*
 provider as an injection's value. In such case, injection value is a result of
 injectable provider call (every time injection is done).
 
@@ -126,7 +126,7 @@ Example:
 Static providers
 ----------------
 
-Static providers are family of providers that returns its values "as is".
+Static providers are family of providers that return their values "as is".
 There are four of static providers: ``Class``, ``Object``, ``Function`` and
 ``Value``. All of them has the same behaviour, but usage of anyone is
 predicted by readability and providable object's type.
@@ -194,6 +194,8 @@ callable.
 External dependency provider
 ----------------------------
 
+``ExternalDependency`` provider can be useful for 
+
 Config provider
 ---------------
 

From 1d6951ed709ba25937c2d72a12730077e5bf4ae0 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 22 Apr 2015 16:51:44 +0300
Subject: [PATCH 07/73] Few words about external dependencies provider

---
 docs/providers.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/providers.rst b/docs/providers.rst
index 0ac2108b..53b1ef21 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -194,7 +194,7 @@ callable.
 External dependency provider
 ----------------------------
 
-``ExternalDependency`` provider can be useful for 
+``ExternalDependency`` provider can be useful for
 
 Config provider
 ---------------

From ca4db90ce341e808407dad4dea45553867c525b8 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 22 Apr 2015 19:04:19 +0300
Subject: [PATCH 08/73] Updating version to 0.7.6

---
 VERSION | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/VERSION b/VERSION
index a3df0a69..c0062185 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.8.0
+0.7.6

From fab6a5c6104e752469fcb6a96ae3581257e644dc Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 23 Apr 2015 13:15:10 +0300
Subject: [PATCH 09/73] Adding external dependency provider description and
 examples renaming

---
 docs/providers.rst                            | 42 ++++++++++++++-----
 ...able_provider.py => callable_providers.py} |  2 +-
 .../external_dependency_providers.py}         |  2 +-
 examples/readme2/overriding_providers.py      |  2 +-
 4 files changed, 35 insertions(+), 13 deletions(-)
 rename examples/readme2/{callable_provider.py => callable_providers.py} (94%)
 rename examples/{external_dependency.py => readme2/external_dependency_providers.py} (97%)

diff --git a/docs/providers.rst b/docs/providers.rst
index 53b1ef21..164ae7c4 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -20,6 +20,8 @@ There are few *Instance* providers:
     - ``Singleton`` provider creates new instance of specified class on first
       call and returns same instance on every next call.
 
+Example:
+
 .. code-block:: python
 
     """`NewInstance` and `Singleton` providers example."""
@@ -131,6 +133,8 @@ There are four of static providers: ``Class``, ``Object``, ``Function`` and
 ``Value``. All of them has the same behaviour, but usage of anyone is
 predicted by readability and providable object's type.
 
+Example:
+
 .. code-block:: python
 
     """Static providers example."""
@@ -153,18 +157,18 @@ predicted by readability and providable object's type.
     value_provider = Value(123)
     assert value_provider() == 123
 
-Callable provider
------------------
+Callable providers
+------------------
 
 ``Callable`` provider is a provider that decorates particular callable with
 some injections. Every call of this provider returns result of call of initial
 callable.
 
- Example:
+Example:
 
  .. code-block:: python
 
-    """`Callable` provider examples."""
+    """`Callable` providers examples."""
 
     from objects.providers import Callable
     from objects.providers import Singleton
@@ -191,13 +195,31 @@ callable.
     assert some_function(2) == 2
     assert some_function(2231) == 2231
 
-External dependency provider
-----------------------------
 
-``ExternalDependency`` provider can be useful for
+External dependency providers
+-----------------------------
 
-Config provider
----------------
+``ExternalDependency`` provider can be useful for development of self-sufficient
+libraries / modules / applications, that has required external dependencies.
+
+For example, you have created self-sufficient library / module / application,
+that has dependency on *SQLAlchemy*. Second step you want to do is to make this
+software component to be easy reusable by wide amount of developers and to be
+easily integrated into many applications. It may be good idea, to move all
+external dependencies (like *SQLAlchemy*) to the top level and make them to be
+injected on your software component's initialization. It will make third party
+developers feel themselves more free about integration of yours component in
+their applications because of they would be able to find right place / right
+way for doing this in their application's architectures.
+
+Example:
+
+.. code-block:: python
+
+    import this
+
+Config providers
+----------------
 
 Providers delegation
 --------------------
@@ -211,7 +233,7 @@ Example:
 
 .. code-block:: python
 
-    """Provider overriding example."""
+    """Providers overriding example."""
 
     import sqlite3
 
diff --git a/examples/readme2/callable_provider.py b/examples/readme2/callable_providers.py
similarity index 94%
rename from examples/readme2/callable_provider.py
rename to examples/readme2/callable_providers.py
index cca90cb3..97015bb9 100644
--- a/examples/readme2/callable_provider.py
+++ b/examples/readme2/callable_providers.py
@@ -1,4 +1,4 @@
-"""`Callable` provider examples."""
+"""`Callable` providers examples."""
 
 from objects.providers import Callable
 from objects.providers import Singleton
diff --git a/examples/external_dependency.py b/examples/readme2/external_dependency_providers.py
similarity index 97%
rename from examples/external_dependency.py
rename to examples/readme2/external_dependency_providers.py
index 5c921f0f..30ee4640 100644
--- a/examples/external_dependency.py
+++ b/examples/readme2/external_dependency_providers.py
@@ -1,4 +1,4 @@
-"""External dependency example."""
+"""External dependency providers example."""
 
 from objects.catalog import AbstractCatalog
 
diff --git a/examples/readme2/overriding_providers.py b/examples/readme2/overriding_providers.py
index 41ff0fe3..8edf09f5 100644
--- a/examples/readme2/overriding_providers.py
+++ b/examples/readme2/overriding_providers.py
@@ -1,4 +1,4 @@
-"""Provider overriding example."""
+"""Providers overriding example."""
 
 import sqlite3
 

From 227ddbd3789b45f410b39a581617ed64b200e8ee Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 24 Apr 2015 11:59:10 +0300
Subject: [PATCH 10/73] Finilizing of external dependecy provider documentation

---
 docs/providers.rst                            | 79 ++++++++++++++++---
 .../readme2/external_dependency_providers.py  | 69 +++++++---------
 2 files changed, 95 insertions(+), 53 deletions(-)

diff --git a/docs/providers.rst b/docs/providers.rst
index 164ae7c4..d987bf96 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -199,24 +199,81 @@ Example:
 External dependency providers
 -----------------------------
 
-``ExternalDependency`` provider can be useful for development of self-sufficient
-libraries / modules / applications, that has required external dependencies.
+``ExternalDependency`` provider can be useful for development of
+self-sufficient libraries / modules / applications, that has required external
+dependencies.
 
 For example, you have created self-sufficient library / module / application,
-that has dependency on *SQLAlchemy*. Second step you want to do is to make this
-software component to be easy reusable by wide amount of developers and to be
-easily integrated into many applications. It may be good idea, to move all
-external dependencies (like *SQLAlchemy*) to the top level and make them to be
-injected on your software component's initialization. It will make third party
-developers feel themselves more free about integration of yours component in
-their applications because of they would be able to find right place / right
-way for doing this in their application's architectures.
+that has dependency on *database connection*.
+
+Second step you want to do is to make this software component to be easy
+reusable by wide amount of developers and to be easily integrated into many
+applications.
+
+It may be good idea, to move all external dependencies (like
+*dabase connection*)  to the top level and make them to be injected on your
+software component's initialization. It will make third party developers feel
+themselves free about integration of yours component in their applications,
+because of they would be able to find right place / right way for doing this
+in their application's architectures.
+
+On the other side,
+you can be sure, that your external dependency will be satisfied by appropriate
+instance.
 
 Example:
 
 .. code-block:: python
 
-    import this
+    """External dependency providers example."""
+
+    import sqlite3
+
+    from objects.providers import Singleton
+    from objects.providers import NewInstance
+    from objects.providers import ExternalDependency
+
+    from objects.injections import KwArg
+    from objects.injections import Attribute
+
+
+    class ObjectA(object):
+
+        """ObjectA has dependency on database."""
+
+        def __init__(self, database):
+            """Initializer.
+
+            Database dependency need to be injected via init arg."""
+            self.database = database
+
+        def get_one(self):
+            """Select one from database and return it."""
+            return self.database.execute('SELECT 1').fetchone()[0]
+
+
+    # Database and `ObjectA` providers.
+    database = ExternalDependency(instance_of=sqlite3.Connection)
+
+    object_a = NewInstance(ObjectA,
+                           KwArg('database', database))
+
+    # Satisfaction of external dependency.
+    database.override(Singleton(sqlite3.Connection,
+                                KwArg('database', ':memory:'),
+                                KwArg('timeout', 30),
+                                KwArg('detect_types', True),
+                                KwArg('isolation_level', 'EXCLUSIVE'),
+                                Attribute('row_factory', sqlite3.Row)))
+
+    # Creating several `ObjectA` instances.
+    object_a_1 = object_a()
+    object_a_2 = object_a()
+
+    # Making some asserts.
+    assert object_a_1 is not object_a_2
+    assert object_a_1.database is object_a_2.database is database()
+
 
 Config providers
 ----------------
diff --git a/examples/readme2/external_dependency_providers.py b/examples/readme2/external_dependency_providers.py
index 30ee4640..ad2c5533 100644
--- a/examples/readme2/external_dependency_providers.py
+++ b/examples/readme2/external_dependency_providers.py
@@ -1,6 +1,6 @@
 """External dependency providers example."""
 
-from objects.catalog import AbstractCatalog
+import sqlite3
 
 from objects.providers import Singleton
 from objects.providers import NewInstance
@@ -9,55 +9,40 @@ from objects.providers import ExternalDependency
 from objects.injections import KwArg
 from objects.injections import Attribute
 
-import sqlite3
-
 
 class ObjectA(object):
 
-    """Example class ObjectA, that has dependency on database."""
+    """ObjectA has dependency on database."""
 
-    def __init__(self, db):
-        """Initializer."""
-        self.db = db
+    def __init__(self, database):
+        """Initializer.
+
+        Database dependency need to be injected via init arg."""
+        self.database = database
+
+    def get_one(self):
+        """Select one from database and return it."""
+        return self.database.execute('SELECT 1').fetchone()[0]
 
 
-class ObjectB(object):
-
-    """Example class ObjectB, that has dependencies on ObjectA and database."""
-
-    def __init__(self, a, db):
-        """Initializer."""
-        self.a = a
-        self.db = db
-
-
-class Catalog(AbstractCatalog):
-
-    """Catalog of objects providers."""
-
-    database = ExternalDependency(instance_of=sqlite3.Connection)
-    """:type: (objects.Provider) -> sqlite3.Connection"""
-
-    object_a = NewInstance(ObjectA,
-                           KwArg('db', database))
-    """:type: (objects.Provider) -> ObjectA"""
-
-    object_b = NewInstance(ObjectB,
-                           KwArg('a', object_a),
-                           KwArg('db', database))
-    """:type: (objects.Provider) -> ObjectB"""
+# Database and `ObjectA` providers.
+database = ExternalDependency(instance_of=sqlite3.Connection)
 
+object_a = NewInstance(ObjectA,
+                       KwArg('database', database))
 
 # Satisfaction of external dependency.
-Catalog.database.override(Singleton(sqlite3.Connection,
-                                    KwArg('database', ':memory:'),
-                                    Attribute('row_factory', sqlite3.Row)))
+database.override(Singleton(sqlite3.Connection,
+                            KwArg('database', ':memory:'),
+                            KwArg('timeout', 30),
+                            KwArg('detect_types', True),
+                            KwArg('isolation_level', 'EXCLUSIVE'),
+                            Attribute('row_factory', sqlite3.Row)))
 
-# Catalog static provides.
-a1, a2 = Catalog.object_a(), Catalog.object_a()
-b1, b2 = Catalog.object_b(), Catalog.object_b()
+# Creating several `ObjectA` instances.
+object_a_1 = object_a()
+object_a_2 = object_a()
 
-# Some asserts.
-assert a1 is not a2
-assert b1 is not b2
-assert a1.db is a2.db is b1.db is b2.db is Catalog.database()
+# Making some asserts.
+assert object_a_1 is not object_a_2
+assert object_a_1.database is object_a_2.database is database()

From c646e3933a0b6f7f9ce2750a6e10abd21e8de375 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 8 May 2015 18:44:44 +0300
Subject: [PATCH 11/73] adding blank sections

---
 docs/catalogs.rst   | 2 ++
 docs/decorators.rst | 8 ++++++++
 docs/index.rst      | 4 ++--
 3 files changed, 12 insertions(+), 2 deletions(-)
 create mode 100644 docs/catalogs.rst
 create mode 100644 docs/decorators.rst

diff --git a/docs/catalogs.rst b/docs/catalogs.rst
new file mode 100644
index 00000000..20124eaf
--- /dev/null
+++ b/docs/catalogs.rst
@@ -0,0 +1,2 @@
+Catalogs
+========
diff --git a/docs/decorators.rst b/docs/decorators.rst
new file mode 100644
index 00000000..edaf9a27
--- /dev/null
+++ b/docs/decorators.rst
@@ -0,0 +1,8 @@
+Decorators
+==========
+
+@inject decorator
+-----------------
+
+@override decorator
+-------------------
diff --git a/docs/index.rst b/docs/index.rst
index c58ae813..83c03f87 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -39,7 +39,7 @@ Contents
     introduction
     installation
     providers
-    entities
-    advanced_usage
+    catalogs
+    decorators
     examples
     feedback

From c6eabb726ceb970c89b737da6f6cc3d95b27ea6d Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 12 May 2015 16:18:37 +0300
Subject: [PATCH 12/73] Updating introduction section

---
 README.rst            | 38 ++++++++++++++++++++++++++++----------
 docs/index.rst        |  2 +-
 docs/introduction.rst | 38 +++++++++++++++++++++++++++++---------
 setup.py              |  2 +-
 4 files changed, 59 insertions(+), 21 deletions(-)

diff --git a/README.rst b/README.rst
index 43cd7f7a..497b8259 100644
--- a/README.rst
+++ b/README.rst
@@ -1,7 +1,7 @@
 Objects
 =======
 
-Dependency management tool for Python projects
+Dependency injection framework for Python projects.
 
 +---------------------------------------+-------------------------------------------------------------------+
 | *PyPi*                                | .. image:: https://pypip.in/version/Objects/badge.svg             |
@@ -32,19 +32,33 @@ Dependency management tool for Python projects
 Introduction
 ------------
 
-Python ecosystem consists of a big amount of various classes, functions and
-objects that could be used for applications development. Each of them has its
-own role.
+Python ecosystem consists of a big amount of various libraries that contain
+different classes and functions that could be used for applications
+development. Each of them has its own role.
 
 Modern Python applications are mostly the composition of well-known open
-source systems, frameworks, libraries and some turnkey functionality.
+source systems / frameworks / libraries and some turnkey functionality.
 
-When application goes bigger, its amount of objects and their dependencies
-also increased extremely fast and became hard to maintain.
+When application goes bigger, its complexity and SLOC_ are also increased.
+Being driven by SOLID_ (for example), developers often start to split
+application's sources into not so big classes, functions and modules. It
+always helps, but there is another problem on the horizon.
 
-*Objects* is designed to be developer's friendly tool for managing objects
-and their dependencies in formal, pretty way. Main idea of *Objects* is to
-keep dependencies under control.
+It sounds like "I have so many classes and functions! They are great, now I can
+understand each of them, but it is so hard to see the whole picture! How are
+they linked with each other? What dependencies does this class have?". And
+this is a key question: "What dependencies do certain class / function have?".
+To resolve this issues developers have to go inside with IoC_ principles and
+implementation patterns.
+
+One of such IoC_ implementation patterns is called `dependency injection`_.
+
+*Objects* is a dependency injection framework for Python projects.
+
+It was designed to be developer's friendly tool for managing any kind of
+Python objects and their dependencies in formal, pretty way.
+
+Main idea of *Objects* is to keep dependencies under control.
 
 Installation
 ------------
@@ -157,3 +171,7 @@ Your feedback is quite important!
 .. _PyPi: https://pypi.python.org/pypi/Objects
 .. _Stable version: http://objects.readthedocs.org/en/stable/
 .. _Latest version: http://objects.readthedocs.org/en/latest/
+.. _SLOC: http://en.wikipedia.org/wiki/Source_lines_of_code
+.. _SOLID: http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29
+.. _IoC: http://en.wikipedia.org/wiki/Inversion_of_control
+.. _dependency injection: http://en.wikipedia.org/wiki/Dependency_injection
diff --git a/docs/index.rst b/docs/index.rst
index 83c03f87..9bed770b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -1,7 +1,7 @@
 Objects
 =======
 
-Dependency injector for Python projects.
+Dependency injection framework for Python projects.
 
 +---------------------------------------+-------------------------------------------------------------------+
 | *PyPi*                                | .. image:: https://pypip.in/version/Objects/badge.svg             |
diff --git a/docs/introduction.rst b/docs/introduction.rst
index 0197eed0..f1428465 100644
--- a/docs/introduction.rst
+++ b/docs/introduction.rst
@@ -1,16 +1,36 @@
 Introduction
 ============
 
-Python ecosystem consists of a big amount of various classes, functions and
-objects that could be used for applications development. Each of them has its
-own role.
+Python ecosystem consists of a big amount of various libraries that contain
+different classes and functions that could be used for applications
+development. Each of them has its own role.
 
 Modern Python applications are mostly the composition of well-known open
-source systems, frameworks, libraries and some turnkey functionality.
+source systems / frameworks / libraries and some turnkey functionality.
 
-When application goes bigger, its amount of objects and their dependencies
-also increased extremely fast and became hard to maintain.
+When application goes bigger, its complexity and SLOC_ are also increased.
+Being driven by SOLID_ (for example), developers often start to split
+application's sources into not so big classes, functions and modules. It
+always helps, but there is another problem on the horizon.
 
-*Objects* is designed to be developer's friendly tool for managing objects
-and their dependencies in formal, pretty way. Main idea of *Objects* is to
-keep dependencies under control.
+It sounds like "I have so many classes and functions! They are great, now I can
+understand each of them, but it is so hard to see the whole picture! How are
+they linked with each other? What dependencies does this class have?". And
+this is a key question: "What dependencies do certain class / function have?".
+To resolve this issues developers have to go inside with IoC_ principles and
+implementation patterns.
+
+One of such IoC_ implementation patterns is called `dependency injection`_.
+
+*Objects* is a dependency injection framework for Python projects.
+
+It was designed to be developer's friendly tool for managing any kind of
+Python objects and their dependencies in formal, pretty way.
+
+Main idea of *Objects* is to keep dependencies under control.
+
+
+.. _SLOC: http://en.wikipedia.org/wiki/Source_lines_of_code
+.. _SOLID: http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29
+.. _IoC: http://en.wikipedia.org/wiki/Inversion_of_control
+.. _dependency injection: http://en.wikipedia.org/wiki/Dependency_injection
diff --git a/setup.py b/setup.py
index 9bd3f607..ca1de764 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ from setuptools import setup
 from setuptools import Command
 
 
-SHORT_DESCRIPTION = 'Dependency injector for Python projects'
+SHORT_DESCRIPTION = 'Dependency injection framework for Python projects'
 
 
 # Getting description.

From 446a659bc80baf3dbb951ed13a8da4fffae66b4f Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 12 May 2015 16:41:57 +0300
Subject: [PATCH 13/73] Updating installation docs

---
 docs/installation.rst | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/docs/installation.rst b/docs/installation.rst
index 84b34c15..008bdaf5 100644
--- a/docs/installation.rst
+++ b/docs/installation.rst
@@ -1,11 +1,15 @@
 Installation
 ============
 
-Latest stable version of *Objects* library can be installed from PyPi_::
+Latest stable version of *Objects* framework can be installed from PyPi_:
+
+.. code-block:: bash
 
     pip install objects
 
-Sources can be cloned from GitHub_::
+Sources can be cloned from GitHub_:
+
+.. code-block:: bash
 
     git clone https://github.com/rmk135/objects.git
 

From 9d48044ea3f7805b2477ea5cb3d9dd87f9fdfd04 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 13 May 2015 18:46:46 +0300
Subject: [PATCH 14/73] Correcing typo in providers docs

---
 docs/providers.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/providers.rst b/docs/providers.rst
index d987bf96..6ad64030 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -211,7 +211,7 @@ reusable by wide amount of developers and to be easily integrated into many
 applications.
 
 It may be good idea, to move all external dependencies (like
-*dabase connection*)  to the top level and make them to be injected on your
+*database connection*)  to the top level and make them to be injected on your
 software component's initialization. It will make third party developers feel
 themselves free about integration of yours component in their applications,
 because of they would be able to find right place / right way for doing this

From 405c579f7e75e86a850b88c9f93b3e02f88e2d70 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 14 May 2015 11:21:04 +0300
Subject: [PATCH 15/73] Adding some drafts of @inject decorator docs

---
 docs/decorators.rst                  | 43 ++++++++++++++++++++
 docs/providers.rst                   | 10 ++++-
 examples/readme2/inject_decorator.py | 61 ++++++++++++++++++++++++++++
 3 files changed, 112 insertions(+), 2 deletions(-)
 create mode 100644 examples/readme2/inject_decorator.py

diff --git a/docs/decorators.rst b/docs/decorators.rst
index edaf9a27..5023260a 100644
--- a/docs/decorators.rst
+++ b/docs/decorators.rst
@@ -1,8 +1,51 @@
 Decorators
 ==========
 
+Current section of *Objects* documentation describes several useful decorators.
+
 @inject decorator
 -----------------
 
+``@inject`` decorator can be used for making *inline* dependency injections.
+It *patches* decorated callable in such way that dependency injection will be
+done before every call of decorated callable.
+
+``@inject`` decorator takes only argument that is supposed to be an
+``objects.injections.Injection`` instance.
+
+Any Python object will be injected *as is*, except *Objects* providers,
+that will be called to provide injectable value.
+
+Below is an example of how Flask's view could be patched using ``@inject``
+decorator:
+
+.. code-block:: python
+
+    """`@inject` decorator example."""
+
+    from objects.providers import NewInstance
+
+    from objects.injections import KwArg
+    from objects.injections import inject
+
+
+    new_object = NewInstance(object)
+
+
+    @inject(KwArg('object_a', new_object))
+    @inject(KwArg('some_setting', 1334))
+    def example_callback(object_a, some_setting):
+        """This function has dependencies on object a and b.
+
+        Dependencies are injected using `@inject` decorator.
+        """
+        assert isinstance(object_a, object)
+        assert some_setting == 1334
+
+
+    example_callback()
+    example_callback()
+
+
 @override decorator
 -------------------
diff --git a/docs/providers.rst b/docs/providers.rst
index 6ad64030..01b06752 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -10,6 +10,9 @@ provided.
 Instance providers & Injections
 -------------------------------
 
+Providers
+~~~~~~~~~
+
 *Instance* providers are providers that deal with object's creation and
 initialization.
 
@@ -50,16 +53,19 @@ Example:
     assert isinstance(object_1, object) and isinstance(object_2, object)
 
 
+Injections
+~~~~~~~~~~
+
 Objects can take dependencies in various forms. Some objects take init
 arguments, other are using attributes or methods to be initialized. It affects
 how such objects need to be created and initialized, and that is the place
 where *Injections* need to be used.
 
-In terms of computer science, *Injection* of dependency is a way how
+In terms of computer science, *Injection of dependency* is a way how
 dependency can be coupled with dependent object.
 
 In terms of *Objects*, *Injection* is an instruction how to provide
-dependency for the particular object.
+dependency for the particular provider.
 
 Every Python object could be an injection's value. Special case is an *Objects*
 provider as an injection's value. In such case, injection value is a result of
diff --git a/examples/readme2/inject_decorator.py b/examples/readme2/inject_decorator.py
new file mode 100644
index 00000000..fe91234c
--- /dev/null
+++ b/examples/readme2/inject_decorator.py
@@ -0,0 +1,61 @@
+"""`@inject` decorator example.
+
+Flask is required to make this example work.
+"""
+
+import sqlite3
+
+from flask import Flask
+
+from objects.providers import NewInstance
+from objects.providers import Singleton
+from objects.injections import KwArg
+from objects.injections import Attribute
+from objects.decorators import inject
+
+
+class ObjectA(object):
+
+    """ObjectA has dependency on database."""
+
+    def __init__(self, database):
+        """Initializer.
+
+        Database dependency need to be injected via init arg."""
+        self.database = database
+
+    def get_one(self):
+        """Select one from database and return it."""
+        return self.database.execute('SELECT 1').fetchone()[0]
+
+
+# Database and `ObjectA` providers.
+database = Singleton(sqlite3.Connection,
+                     KwArg('database', ':memory:'),
+                     KwArg('timeout', 30),
+                     KwArg('detect_types', True),
+                     KwArg('isolation_level', 'EXCLUSIVE'),
+                     Attribute('row_factory', sqlite3.Row))
+
+object_a = NewInstance(ObjectA,
+                       KwArg('database', database))
+
+
+# Flask application.
+app = Flask(__name__)
+
+
+# Flask view with inject decorator.
+@app.route('/')
+@inject(KwArg('database', database))
+@inject(KwArg('object_a', object_a))
+def hello(database):
+    one = database.execute('SELECT 1').fetchone()[0]
+    return 'Query returned {0}, db connection {1}'.format(one, database)
+
+
+if __name__ == '__main__':
+    app.run()
+
+# Example output of "GET / HTTP/1.1" is:
+# Query returned 1, db connection <sqlite3.Connection object at 0x1057e4030>

From c824eae5663394f454c6422000e7704f2bce571f Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 14 May 2015 11:35:41 +0300
Subject: [PATCH 16/73] Renaming NewInstance provider to Factory provider

---
 objects/__init__.py      |  4 ++--
 objects/providers.py     | 29 ++++++++++++++++--------
 tests/test_decorators.py | 13 ++++++-----
 tests/test_injections.py |  4 ++--
 tests/test_providers.py  | 48 ++++++++++++++++++++--------------------
 5 files changed, 55 insertions(+), 43 deletions(-)

diff --git a/objects/__init__.py b/objects/__init__.py
index f5921f20..4b9e34d3 100644
--- a/objects/__init__.py
+++ b/objects/__init__.py
@@ -7,7 +7,7 @@ from .catalog import AbstractCatalog
 
 from .providers import Provider
 from .providers import Delegate
-from .providers import NewInstance
+from .providers import Factory
 from .providers import Singleton
 from .providers import ExternalDependency
 from .providers import Class
@@ -32,7 +32,7 @@ __all__ = ('AbstractCatalog',
            # Providers
            'Provider',
            'Delegate',
-           'NewInstance',
+           'Factory',
            'Singleton',
            'ExternalDependency',
            'Class',
diff --git a/objects/providers.py b/objects/providers.py
index a40471a8..a69d1f05 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -69,11 +69,11 @@ class Delegate(Provider):
         return self.delegated
 
 
-class NewInstance(Provider):
+class Factory(Provider):
 
-    """New instance provider.
+    """Factory provider.
 
-    New instance providers will create and return new instance on every call.
+    Factory providers will create and return new instance on every call.
     """
 
     __slots__ = ('provides', 'kwargs', 'attributes', 'methods')
@@ -81,7 +81,7 @@ class NewInstance(Provider):
     def __init__(self, provides, *injections):
         """Initializer."""
         if not isinstance(provides, class_types):
-            raise Error('NewInstance provider expects to get class, ' +
+            raise Error('Factory provider expects to get class, ' +
                         'got {0} instead'.format(str(provides)))
         self.provides = provides
         self.kwargs = tuple((injection
@@ -93,7 +93,7 @@ class NewInstance(Provider):
         self.methods = tuple((injection
                               for injection in injections
                               if is_method_injection(injection)))
-        super(NewInstance, self).__init__()
+        super(Factory, self).__init__()
 
     def __call__(self, *args, **kwargs):
         """Return provided instance."""
@@ -114,24 +114,35 @@ class NewInstance(Provider):
         return instance
 
 
-class Singleton(NewInstance):
+class NewInstance(Factory):
+
+    """NewInstance provider.
+
+    It is synonym of Factory provider. NewInstance provider is considered to
+    be deprecated, but will be able to use for further backward
+    compatibility.
+    """
+
+
+class Singleton(Provider):
 
     """Singleton provider.
 
     Singleton provider will create instance once and return it on every call.
     """
 
-    __slots__ = ('instance',)
+    __slots__ = ('instance', 'factory')
 
     def __init__(self, *args, **kwargs):
         """Initializer."""
         self.instance = None
-        super(Singleton, self).__init__(*args, **kwargs)
+        self.factory = Factory(*args, **kwargs)
+        super(Singleton, self).__init__()
 
     def __call__(self, *args, **kwargs):
         """Return provided instance."""
         if not self.instance:
-            self.instance = super(Singleton, self).__call__(*args, **kwargs)
+            self.instance = self.factory(*args, **kwargs)
         return self.instance
 
     def reset(self):
diff --git a/tests/test_decorators.py b/tests/test_decorators.py
index c6ce5f42..1f3dbbb8 100644
--- a/tests/test_decorators.py
+++ b/tests/test_decorators.py
@@ -7,7 +7,7 @@ from objects.decorators import inject
 
 from objects.catalog import AbstractCatalog
 
-from objects.providers import NewInstance
+from objects.providers import Factory
 from objects.providers import Object
 from objects.providers import Value
 
@@ -40,14 +40,15 @@ class OverrideTests(unittest.TestCase):
         self.assertEqual(self.Catalog.obj(), 1)
         self.assertEqual(self.Catalog.another_obj(), 2)
 
+
 class InjectTests(unittest.TestCase):
 
     """Inject decorator test cases."""
 
     def test_decorated(self):
         """Test `inject()` decorated callback."""
-        provider1 = NewInstance(object)
-        provider2 = NewInstance(list)
+        provider1 = Factory(object)
+        provider2 = Factory(list)
 
         @inject(KwArg('a', provider1))
         @inject(KwArg('b', provider2))
@@ -67,8 +68,8 @@ class InjectTests(unittest.TestCase):
 
     def test_decorated_kwargs_priority(self):
         """Test `inject()` decorated callback kwargs priority."""
-        provider1 = NewInstance(object)
-        provider2 = NewInstance(list)
+        provider1 = Factory(object)
+        provider2 = Factory(list)
         object_a = object()
 
         @inject(KwArg('a', provider1))
@@ -90,7 +91,7 @@ class InjectTests(unittest.TestCase):
 
     def test_decorated_with_args(self):
         """Test `inject()` decorated callback with args."""
-        provider = NewInstance(list)
+        provider = Factory(list)
         object_a = object()
 
         @inject(KwArg('b', provider))
diff --git a/tests/test_injections.py b/tests/test_injections.py
index b9612e1a..aa682ecd 100644
--- a/tests/test_injections.py
+++ b/tests/test_injections.py
@@ -7,7 +7,7 @@ from objects.injections import KwArg
 from objects.injections import Attribute
 from objects.injections import Method
 
-from objects.providers import NewInstance
+from objects.providers import Factory
 
 
 class InjectionTests(unittest.TestCase):
@@ -27,7 +27,7 @@ class InjectionTests(unittest.TestCase):
 
     def test_value_with_provider_injectable(self):
         """Test Injection value property with provider."""
-        injection = Injection('some_arg_name', NewInstance(object))
+        injection = Injection('some_arg_name', Factory(object))
         self.assertIsInstance(injection.value, object)
 
 
diff --git a/tests/test_providers.py b/tests/test_providers.py
index 85ac1cba..0dc37ee7 100644
--- a/tests/test_providers.py
+++ b/tests/test_providers.py
@@ -4,7 +4,7 @@ import unittest2 as unittest
 
 from objects.providers import Provider
 from objects.providers import Delegate
-from objects.providers import NewInstance
+from objects.providers import Factory
 from objects.providers import Singleton
 from objects.providers import ExternalDependency
 from objects.providers import Class
@@ -130,13 +130,13 @@ class DelegateTests(unittest.TestCase):
         self.assertIs(delegated2, self.delegated)
 
 
-class NewInstanceTests(unittest.TestCase):
+class FactoryTests(unittest.TestCase):
 
-    """NewInstance test cases."""
+    """Factory test cases."""
 
     class Example(object):
 
-        """Example class for NewInstance provider tests."""
+        """Example class for Factory provider tests."""
 
         def __init__(self, init_arg1=None, init_arg2=None):
             """Initializer.
@@ -164,15 +164,15 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_is_provider(self):
         """Test `is_provider` check."""
-        self.assertTrue(is_provider(NewInstance(self.Example)))
+        self.assertTrue(is_provider(Factory(self.Example)))
 
     def test_init_with_not_class(self):
         """Test creation of provider with not a class."""
-        self.assertRaises(Error, NewInstance, 123)
+        self.assertRaises(Error, Factory, 123)
 
     def test_call(self):
         """Test creation of new instances."""
-        provider = NewInstance(self.Example)
+        provider = Factory(self.Example)
         instance1 = provider()
         instance2 = provider()
 
@@ -182,9 +182,9 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_call_with_init_args(self):
         """Test creation of new instances with init args injections."""
-        provider = NewInstance(self.Example,
-                               KwArg('init_arg1', 'i1'),
-                               KwArg('init_arg2', 'i2'))
+        provider = Factory(self.Example,
+                           KwArg('init_arg1', 'i1'),
+                           KwArg('init_arg2', 'i2'))
 
         instance1 = provider()
         instance2 = provider()
@@ -201,9 +201,9 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_call_with_attributes(self):
         """Test creation of new instances with attribute injections."""
-        provider = NewInstance(self.Example,
-                               Attribute('attribute1', 'a1'),
-                               Attribute('attribute2', 'a2'))
+        provider = Factory(self.Example,
+                           Attribute('attribute1', 'a1'),
+                           Attribute('attribute2', 'a2'))
 
         instance1 = provider()
         instance2 = provider()
@@ -220,9 +220,9 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_call_with_methods(self):
         """Test creation of new instances with method injections."""
-        provider = NewInstance(self.Example,
-                               Method('method1', 'm1'),
-                               Method('method2', 'm2'))
+        provider = Factory(self.Example,
+                           Method('method1', 'm1'),
+                           Method('method2', 'm2'))
 
         instance1 = provider()
         instance2 = provider()
@@ -239,7 +239,7 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_call_with_context_args(self):
         """Test creation of new instances with context args."""
-        provider = NewInstance(self.Example)
+        provider = Factory(self.Example)
         instance = provider(11, 22)
 
         self.assertEqual(instance.init_arg1, 11)
@@ -247,8 +247,8 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_call_with_context_kwargs(self):
         """Test creation of new instances with context kwargs."""
-        provider = NewInstance(self.Example,
-                               KwArg('init_arg1', 1))
+        provider = Factory(self.Example,
+                           KwArg('init_arg1', 1))
 
         instance1 = provider(init_arg2=22)
         self.assertEqual(instance1.init_arg1, 1)
@@ -260,9 +260,9 @@ class NewInstanceTests(unittest.TestCase):
 
     def test_call_overridden(self):
         """Test creation of new instances on overridden provider."""
-        provider = NewInstance(self.Example)
-        overriding_provider1 = NewInstance(dict)
-        overriding_provider2 = NewInstance(list)
+        provider = Factory(self.Example)
+        overriding_provider1 = Factory(dict)
+        overriding_provider2 = Factory(list)
 
         provider.override(overriding_provider1)
         provider.override(overriding_provider2)
@@ -323,12 +323,12 @@ class ExternalDependencyTests(unittest.TestCase):
 
     def test_call_overridden(self):
         """Test call of overridden external dependency."""
-        self.provider.override(NewInstance(list))
+        self.provider.override(Factory(list))
         self.assertIsInstance(self.provider(), list)
 
     def test_call_overridden_but_not_instance_of(self):
         """Test call of overridden external dependency, but not instance of."""
-        self.provider.override(NewInstance(dict))
+        self.provider.override(Factory(dict))
         self.assertRaises(Error, self.provider)
 
     def test_call_not_overridden(self):

From 0dd2884262298a30053b4e38c78c06c2285e7dbb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 14 May 2015 11:38:56 +0300
Subject: [PATCH 17/73] Refactoring of examples according to NewInstance
 provider to Factory provider renaming

---
 examples/readme2/external_dependency_providers.py    | 10 +++++-----
 examples/readme2/inject_decorator.py                 |  8 ++++----
 examples/readme2/instance_providers.py               |  8 ++++----
 .../readme2/instance_providers_with_injections.py    | 12 ++++++------
 examples/readme2/overriding_providers.py             | 12 ++++++------
 5 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/examples/readme2/external_dependency_providers.py b/examples/readme2/external_dependency_providers.py
index ad2c5533..f920b814 100644
--- a/examples/readme2/external_dependency_providers.py
+++ b/examples/readme2/external_dependency_providers.py
@@ -3,7 +3,7 @@
 import sqlite3
 
 from objects.providers import Singleton
-from objects.providers import NewInstance
+from objects.providers import Factory
 from objects.providers import ExternalDependency
 
 from objects.injections import KwArg
@@ -28,8 +28,8 @@ class ObjectA(object):
 # Database and `ObjectA` providers.
 database = ExternalDependency(instance_of=sqlite3.Connection)
 
-object_a = NewInstance(ObjectA,
-                       KwArg('database', database))
+object_a_factory = Factory(ObjectA,
+                           KwArg('database', database))
 
 # Satisfaction of external dependency.
 database.override(Singleton(sqlite3.Connection,
@@ -40,8 +40,8 @@ database.override(Singleton(sqlite3.Connection,
                             Attribute('row_factory', sqlite3.Row)))
 
 # Creating several `ObjectA` instances.
-object_a_1 = object_a()
-object_a_2 = object_a()
+object_a_1 = object_a_factory()
+object_a_2 = object_a_factory()
 
 # Making some asserts.
 assert object_a_1 is not object_a_2
diff --git a/examples/readme2/inject_decorator.py b/examples/readme2/inject_decorator.py
index fe91234c..fe04e639 100644
--- a/examples/readme2/inject_decorator.py
+++ b/examples/readme2/inject_decorator.py
@@ -7,7 +7,7 @@ import sqlite3
 
 from flask import Flask
 
-from objects.providers import NewInstance
+from objects.providers import Factory
 from objects.providers import Singleton
 from objects.injections import KwArg
 from objects.injections import Attribute
@@ -37,8 +37,8 @@ database = Singleton(sqlite3.Connection,
                      KwArg('isolation_level', 'EXCLUSIVE'),
                      Attribute('row_factory', sqlite3.Row))
 
-object_a = NewInstance(ObjectA,
-                       KwArg('database', database))
+object_a_factory = Factory(ObjectA,
+                           KwArg('database', database))
 
 
 # Flask application.
@@ -48,7 +48,7 @@ app = Flask(__name__)
 # Flask view with inject decorator.
 @app.route('/')
 @inject(KwArg('database', database))
-@inject(KwArg('object_a', object_a))
+@inject(KwArg('object_a', object_a_factory))
 def hello(database):
     one = database.execute('SELECT 1').fetchone()[0]
     return 'Query returned {0}, db connection {1}'.format(one, database)
diff --git a/examples/readme2/instance_providers.py b/examples/readme2/instance_providers.py
index d18783e6..7e3e7734 100644
--- a/examples/readme2/instance_providers.py
+++ b/examples/readme2/instance_providers.py
@@ -1,11 +1,11 @@
-"""`NewInstance` and `Singleton` providers example."""
+"""`Factory` and `Singleton` providers example."""
 
-from objects.providers import NewInstance
+from objects.providers import Factory
 from objects.providers import Singleton
 
 
-# NewInstance provider creates new instance of specified class on every call.
-new_object = NewInstance(object)
+# Factory provider creates new instance of specified class on every call.
+new_object = Factory(object)
 
 object_1 = new_object()
 object_2 = new_object()
diff --git a/examples/readme2/instance_providers_with_injections.py b/examples/readme2/instance_providers_with_injections.py
index ba20793f..45d25859 100644
--- a/examples/readme2/instance_providers_with_injections.py
+++ b/examples/readme2/instance_providers_with_injections.py
@@ -1,9 +1,9 @@
-"""`NewInstance` and `Singleton` providers with injections example."""
+"""`Factory` and `Singleton` providers with injections example."""
 
 import sqlite3
 
 from objects.providers import Singleton
-from objects.providers import NewInstance
+from objects.providers import Factory
 
 from objects.injections import KwArg
 from objects.injections import Attribute
@@ -32,12 +32,12 @@ database = Singleton(sqlite3.Connection,
                      KwArg('isolation_level', 'EXCLUSIVE'),
                      Attribute('row_factory', sqlite3.Row))
 
-object_a = NewInstance(ObjectA,
-                       KwArg('database', database))
+object_a_factory = Factory(ObjectA,
+                           KwArg('database', database))
 
 # Creating several `ObjectA` instances.
-object_a_1 = object_a()
-object_a_2 = object_a()
+object_a_1 = object_a_factory()
+object_a_2 = object_a_factory()
 
 # Making some asserts.
 assert object_a_1 is not object_a_2
diff --git a/examples/readme2/overriding_providers.py b/examples/readme2/overriding_providers.py
index 8edf09f5..38361df7 100644
--- a/examples/readme2/overriding_providers.py
+++ b/examples/readme2/overriding_providers.py
@@ -2,8 +2,8 @@
 
 import sqlite3
 
+from objects.providers import Factory
 from objects.providers import Singleton
-from objects.providers import NewInstance
 
 from objects.injections import KwArg
 from objects.injections import Attribute
@@ -50,16 +50,16 @@ database = Singleton(sqlite3.Connection,
                      KwArg('isolation_level', 'EXCLUSIVE'),
                      Attribute('row_factory', sqlite3.Row))
 
-object_a = NewInstance(ObjectA,
-                       KwArg('database', database))
+object_a_factory = Factory(ObjectA,
+                           KwArg('database', database))
 
 
 # Overriding `ObjectA` provider with `ObjectAMock` provider.
-object_a.override(NewInstance(ObjectAMock))
+object_a_factory.override(Factory(ObjectAMock))
 
 # Creating several `ObjectA` instances.
-object_a_1 = object_a()
-object_a_2 = object_a()
+object_a_1 = object_a_factory()
+object_a_2 = object_a_factory()
 
 # Making some asserts.
 assert object_a_1 is not object_a_2

From a5337b2fc83c848e1ad5e4b50629451bb7a97343 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 14 May 2015 11:59:47 +0300
Subject: [PATCH 18/73] Last modifications on NewInstance to Factory provider
 renaming

---
 README.rst           | 23 ++++++++++----------
 docs/providers.rst   | 50 ++++++++++++++++++++++++--------------------
 examples/concept.py  | 21 +++++++++----------
 objects/providers.py |  2 +-
 4 files changed, 50 insertions(+), 46 deletions(-)

diff --git a/README.rst b/README.rst
index 497b8259..99e33eda 100644
--- a/README.rst
+++ b/README.rst
@@ -84,12 +84,12 @@ Examples
 
     from objects.catalog import AbstractCatalog
 
+    from objects.providers import Factory
     from objects.providers import Singleton
-    from objects.providers import NewInstance
 
     from objects.injections import KwArg
     from objects.injections import Attribute
-    from objects.injections import inject
+    from objects.decorators import inject
 
     import sqlite3
 
@@ -122,19 +122,19 @@ Examples
                              Attribute('row_factory', sqlite3.Row))
         """:type: (objects.Provider) -> sqlite3.Connection"""
 
-        object_a = NewInstance(ObjectA,
-                               KwArg('db', database))
+        object_a_factory = Factory(ObjectA,
+                                   KwArg('db', database))
         """:type: (objects.Provider) -> ObjectA"""
 
-        object_b = NewInstance(ObjectB,
-                               KwArg('a', object_a),
-                               KwArg('db', database))
+        object_b_factory = Factory(ObjectB,
+                                   KwArg('a', object_a_factory),
+                                   KwArg('db', database))
         """:type: (objects.Provider) -> ObjectB"""
 
 
     # Catalog static provides.
-    a1, a2 = Catalog.object_a(), Catalog.object_a()
-    b1, b2 = Catalog.object_b(), Catalog.object_b()
+    a1, a2 = Catalog.object_a_factory(), Catalog.object_a_factory()
+    b1, b2 = Catalog.object_b_factory(), Catalog.object_b_factory()
 
     assert a1 is not a2
     assert b1 is not b2
@@ -142,8 +142,8 @@ Examples
 
 
     # Example of inline injections.
-    @inject(KwArg('a', Catalog.object_a))
-    @inject(KwArg('b', Catalog.object_b))
+    @inject(KwArg('a', Catalog.object_a_factory))
+    @inject(KwArg('b', Catalog.object_b_factory))
     @inject(KwArg('database', Catalog.database))
     def example(a, b, database):
         assert a.db is b.db is database is Catalog.database()
@@ -151,6 +151,7 @@ Examples
 
     example()
 
+
 You can get more *Objects* examples in ``/examples`` directory on
 GitHub:
 
diff --git a/docs/providers.rst b/docs/providers.rst
index 01b06752..6e755c5d 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -18,7 +18,7 @@ initialization.
 
 There are few *Instance* providers:
 
-    - ``NewInstance`` provider creates new instance of specified class on every
+    - ``Factory`` provider creates new instance of specified class on every
       call.
     - ``Singleton`` provider creates new instance of specified class on first
       call and returns same instance on every next call.
@@ -27,14 +27,14 @@ Example:
 
 .. code-block:: python
 
-    """`NewInstance` and `Singleton` providers example."""
+    """`Factory` and `Singleton` providers example."""
 
-    from objects.providers import NewInstance
+    from objects.providers import Factory
     from objects.providers import Singleton
 
 
-    # NewInstance provider creates new instance of specified class on every call.
-    new_object = NewInstance(object)
+    # Factory provider creates new instance of specified class on every call.
+    new_object = Factory(object)
 
     object_1 = new_object()
     object_2 = new_object()
@@ -85,12 +85,12 @@ Example:
 
 .. code-block:: python
 
-    """`NewInstance` and `Singleton` providers with injections example."""
+    """`Factory` and `Singleton` providers with injections example."""
 
     import sqlite3
 
     from objects.providers import Singleton
-    from objects.providers import NewInstance
+    from objects.providers import Factory
 
     from objects.injections import KwArg
     from objects.injections import Attribute
@@ -119,18 +119,19 @@ Example:
                          KwArg('isolation_level', 'EXCLUSIVE'),
                          Attribute('row_factory', sqlite3.Row))
 
-    object_a = NewInstance(ObjectA,
-                           KwArg('database', database))
+    object_a_factory = Factory(ObjectA,
+                               KwArg('database', database))
 
     # Creating several `ObjectA` instances.
-    object_a_1 = object_a()
-    object_a_2 = object_a()
+    object_a_1 = object_a_factory()
+    object_a_2 = object_a_factory()
 
     # Making some asserts.
     assert object_a_1 is not object_a_2
     assert object_a_1.database is object_a_2.database is database()
     assert object_a_1.get_one() == object_a_2.get_one() == 1
 
+
 Static providers
 ----------------
 
@@ -163,6 +164,7 @@ Example:
     value_provider = Value(123)
     assert value_provider() == 123
 
+
 Callable providers
 ------------------
 
@@ -172,7 +174,7 @@ callable.
 
 Example:
 
- .. code-block:: python
+.. code-block:: python
 
     """`Callable` providers examples."""
 
@@ -236,7 +238,7 @@ Example:
     import sqlite3
 
     from objects.providers import Singleton
-    from objects.providers import NewInstance
+    from objects.providers import Factory
     from objects.providers import ExternalDependency
 
     from objects.injections import KwArg
@@ -261,8 +263,8 @@ Example:
     # Database and `ObjectA` providers.
     database = ExternalDependency(instance_of=sqlite3.Connection)
 
-    object_a = NewInstance(ObjectA,
-                           KwArg('database', database))
+    object_a_factory = Factory(ObjectA,
+                               KwArg('database', database))
 
     # Satisfaction of external dependency.
     database.override(Singleton(sqlite3.Connection,
@@ -273,14 +275,15 @@ Example:
                                 Attribute('row_factory', sqlite3.Row)))
 
     # Creating several `ObjectA` instances.
-    object_a_1 = object_a()
-    object_a_2 = object_a()
+    object_a_1 = object_a_factory()
+    object_a_2 = object_a_factory()
 
     # Making some asserts.
     assert object_a_1 is not object_a_2
     assert object_a_1.database is object_a_2.database is database()
 
 
+
 Config providers
 ----------------
 
@@ -300,8 +303,8 @@ Example:
 
     import sqlite3
 
+    from objects.providers import Factory
     from objects.providers import Singleton
-    from objects.providers import NewInstance
 
     from objects.injections import KwArg
     from objects.injections import Attribute
@@ -348,17 +351,18 @@ Example:
                          KwArg('isolation_level', 'EXCLUSIVE'),
                          Attribute('row_factory', sqlite3.Row))
 
-    object_a = NewInstance(ObjectA,
-                           KwArg('database', database))
+    object_a_factory = Factory(ObjectA,
+                               KwArg('database', database))
 
 
     # Overriding `ObjectA` provider with `ObjectAMock` provider.
-    object_a.override(NewInstance(ObjectAMock))
+    object_a_factory.override(Factory(ObjectAMock))
 
     # Creating several `ObjectA` instances.
-    object_a_1 = object_a()
-    object_a_2 = object_a()
+    object_a_1 = object_a_factory()
+    object_a_2 = object_a_factory()
 
     # Making some asserts.
     assert object_a_1 is not object_a_2
     assert object_a_1.get_one() == object_a_2.get_one() == 2
+
diff --git a/examples/concept.py b/examples/concept.py
index 75fe2c98..3a7b1feb 100644
--- a/examples/concept.py
+++ b/examples/concept.py
@@ -2,12 +2,11 @@
 
 from objects.catalog import AbstractCatalog
 
+from objects.providers import Factory
 from objects.providers import Singleton
-from objects.providers import NewInstance
 
 from objects.injections import KwArg
 from objects.injections import Attribute
-
 from objects.decorators import inject
 
 import sqlite3
@@ -41,19 +40,19 @@ class Catalog(AbstractCatalog):
                          Attribute('row_factory', sqlite3.Row))
     """:type: (objects.Provider) -> sqlite3.Connection"""
 
-    object_a = NewInstance(ObjectA,
-                           KwArg('db', database))
+    object_a_factory = Factory(ObjectA,
+                               KwArg('db', database))
     """:type: (objects.Provider) -> ObjectA"""
 
-    object_b = NewInstance(ObjectB,
-                           KwArg('a', object_a),
-                           KwArg('db', database))
+    object_b_factory = Factory(ObjectB,
+                               KwArg('a', object_a_factory),
+                               KwArg('db', database))
     """:type: (objects.Provider) -> ObjectB"""
 
 
 # Catalog static provides.
-a1, a2 = Catalog.object_a(), Catalog.object_a()
-b1, b2 = Catalog.object_b(), Catalog.object_b()
+a1, a2 = Catalog.object_a_factory(), Catalog.object_a_factory()
+b1, b2 = Catalog.object_b_factory(), Catalog.object_b_factory()
 
 assert a1 is not a2
 assert b1 is not b2
@@ -61,8 +60,8 @@ assert a1.db is a2.db is b1.db is b2.db is Catalog.database()
 
 
 # Example of inline injections.
-@inject(KwArg('a', Catalog.object_a))
-@inject(KwArg('b', Catalog.object_b))
+@inject(KwArg('a', Catalog.object_a_factory))
+@inject(KwArg('b', Catalog.object_b_factory))
 @inject(KwArg('database', Catalog.database))
 def example(a, b, database):
     assert a.db is b.db is database is Catalog.database()
diff --git a/objects/providers.py b/objects/providers.py
index a69d1f05..71f40087 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -73,7 +73,7 @@ class Factory(Provider):
 
     """Factory provider.
 
-    Factory providers will create and return new instance on every call.
+    Factory provider creates new instance of specified class on every call.
     """
 
     __slots__ = ('provides', 'kwargs', 'attributes', 'methods')

From 05b65f432cb14fc405d43def319db4cd6c8eb2b9 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 15 May 2015 17:44:20 +0300
Subject: [PATCH 19/73] Updating instance providers example

---
 docs/providers.rst                     | 7 ++++---
 examples/readme2/instance_providers.py | 6 +++---
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/docs/providers.rst b/docs/providers.rst
index 6e755c5d..89775790 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -34,10 +34,10 @@ Example:
 
 
     # Factory provider creates new instance of specified class on every call.
-    new_object = Factory(object)
+    object_factory = Factory(object)
 
-    object_1 = new_object()
-    object_2 = new_object()
+    object_1 = object_factory()
+    object_2 = object_factory()
 
     assert object_1 is not object_2
     assert isinstance(object_1, object) and isinstance(object_2, object)
@@ -53,6 +53,7 @@ Example:
     assert isinstance(object_1, object) and isinstance(object_2, object)
 
 
+
 Injections
 ~~~~~~~~~~
 
diff --git a/examples/readme2/instance_providers.py b/examples/readme2/instance_providers.py
index 7e3e7734..1be9acb2 100644
--- a/examples/readme2/instance_providers.py
+++ b/examples/readme2/instance_providers.py
@@ -5,10 +5,10 @@ from objects.providers import Singleton
 
 
 # Factory provider creates new instance of specified class on every call.
-new_object = Factory(object)
+object_factory = Factory(object)
 
-object_1 = new_object()
-object_2 = new_object()
+object_1 = object_factory()
+object_2 = object_factory()
 
 assert object_1 is not object_2
 assert isinstance(object_1, object) and isinstance(object_2, object)

From f67343c45c638b9ba68720ae0c4f34b31d028ae7 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Sat, 16 May 2015 22:01:03 +0300
Subject: [PATCH 20/73] Refactoring of @inject decorator

---
 objects/decorators.py | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/objects/decorators.py b/objects/decorators.py
index 0113ae05..1846b3ae 100644
--- a/objects/decorators.py
+++ b/objects/decorators.py
@@ -15,7 +15,7 @@ def override(catalog):
 
 
 def inject(injection):
-    """Inject decorator.
+    """Dependency injection decorator.
 
     :type injection: Injection
     :return: (callable) -> (callable)
@@ -23,12 +23,19 @@ def inject(injection):
     injection = ensure_is_injection(injection)
 
     def decorator(callback):
-        """Decorator."""
+        """Dependency injection decorator."""
+        if hasattr(callback, '__injections__'):
+            callback.__injections__ += (injection,)
+
         @wraps(callback)
         def decorated(*args, **kwargs):
-            """Decorated."""
-            if injection.name not in kwargs:
-                kwargs[injection.name] = injection.value
+            """Decorated with dependency injection callback."""
+            for injection in getattr(decorated, '__injections__'):
+                if injection.name not in kwargs:
+                    kwargs[injection.name] = injection.value
             return callback(*args, **kwargs)
+
+        setattr(decorated, '__injections__', (injection,))
+
         return decorated
     return decorator

From b055a86c92c29338178854a07587d8913321f53b Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Mon, 25 May 2015 10:45:52 +0300
Subject: [PATCH 21/73] Improving of Providers extending

---
 objects/providers.py | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/objects/providers.py b/objects/providers.py
index 71f40087..a8fd9ea9 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -23,6 +23,17 @@ class Provider(object):
 
     def __call__(self, *args, **kwargs):
         """Return provided instance."""
+        if self.overridden:
+            return self.last_overriding(*args, **kwargs)
+        return self.__provide__(*args, **kwargs)
+
+    def __provide__(self, *args, **kwargs):
+        """Providing strategy implementation.
+
+        Abstract protected method that implements providing strategy of
+        particular provider. Current method is called every time when not
+        overridden provider is called. Need to be overridden in subclasses.
+        """
         raise NotImplementedError()
 
     def delegate(self):
@@ -64,7 +75,7 @@ class Delegate(Provider):
         self.delegated = ensure_is_provider(delegated)
         super(Delegate, self).__init__()
 
-    def __call__(self):
+    def __provide__(self, *args, **kwargs):
         """Return provided instance."""
         return self.delegated
 
@@ -95,11 +106,8 @@ class Factory(Provider):
                               if is_method_injection(injection)))
         super(Factory, self).__init__()
 
-    def __call__(self, *args, **kwargs):
+    def __provide__(self, *args, **kwargs):
         """Return provided instance."""
-        if self.overridden:
-            return self.last_overriding(*args, **kwargs)
-
         init_kwargs = dict(((injection.name, injection.value)
                             for injection in self.kwargs))
         init_kwargs.update(kwargs)
@@ -139,7 +147,7 @@ class Singleton(Provider):
         self.factory = Factory(*args, **kwargs)
         super(Singleton, self).__init__()
 
-    def __call__(self, *args, **kwargs):
+    def __provide__(self, *args, **kwargs):
         """Return provided instance."""
         if not self.instance:
             self.instance = self.factory(*args, **kwargs)
@@ -197,10 +205,8 @@ class _StaticProvider(Provider):
         self.provides = provides
         super(_StaticProvider, self).__init__()
 
-    def __call__(self):
+    def __provide__(self, *args, **kwargs):
         """Return provided instance."""
-        if self.overridden:
-            return self.last_overriding()
         return self.provides
 
 
@@ -244,11 +250,8 @@ class Callable(Provider):
                                  if is_kwarg_injection(injection)))
         super(Callable, self).__init__()
 
-    def __call__(self, *args, **kwargs):
+    def __provide__(self, *args, **kwargs):
         """Return provided instance."""
-        if self.overridden:
-            return self.last_overriding()
-
         injections = dict(((injection.name, injection.value)
                            for injection in self.injections))
         injections.update(kwargs)
@@ -274,7 +277,7 @@ class Config(Provider):
         self.value = value
         super(Config, self).__init__()
 
-    def __call__(self, paths=None):
+    def __provide__(self, paths=None):
         """Return provided instance."""
         value = self.value
         if paths:
@@ -311,7 +314,7 @@ class _ChildConfig(Provider):
         self.root_config = root_config
         super(_ChildConfig, self).__init__()
 
-    def __call__(self, *args, **kwargs):
+    def __provide__(self, *args, **kwargs):
         """Return provided instance."""
         return self.root_config(self.parents)
 

From 5b76551790bf31c465b81c132807e161bc2275e6 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 27 May 2015 19:00:41 +0300
Subject: [PATCH 22/73] Working copy of docs

---
 docs/index.rst                                |  1 +
 docs/injections.rst                           | 37 +++++++++
 docs/providers.rst                            | 75 ++++++++++++++++++-
 examples/readme2/factory_providers.py         | 13 ++++
 .../readme2/factory_providers_init_args.py    | 34 +++++++++
 5 files changed, 158 insertions(+), 2 deletions(-)
 create mode 100644 docs/injections.rst
 create mode 100644 examples/readme2/factory_providers.py
 create mode 100644 examples/readme2/factory_providers_init_args.py

diff --git a/docs/index.rst b/docs/index.rst
index 9bed770b..ad7a2c2b 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -39,6 +39,7 @@ Contents
     introduction
     installation
     providers
+    injections
     catalogs
     decorators
     examples
diff --git a/docs/injections.rst b/docs/injections.rst
new file mode 100644
index 00000000..c9104855
--- /dev/null
+++ b/docs/injections.rst
@@ -0,0 +1,37 @@
+Injections
+==========
+
+Injections are *Objects* entities that are used for specification of dependency
+injection types.
+
+Different functions, classes and objects can take dependency injections in
+various forms. Some of them take dependencies like keyword arguments during
+call time, other require setting of attributes or calling of specialized
+methods for doing dependency injections.
+
+So, when you are doing dependency injection you need to specify its type and
+that is the place where *Injections* need to be used.
+
+Some key points of *Objects* injections:
+
+    - Every *Objects* injection always takes injectable value as an
+      ``injectable`` param. Every Python object could be an injectable.
+    - Every *Objects* injection always has ``value`` property that returns
+      injection's injectable. ``value`` property is calculated every time it is
+      accessed. Every Python object, except of *Objects* providers, that was
+      provided as and ``injectable`` will be returned by ``value`` property
+      *"as is"*. *Objects* providers will be called every time during ``value``
+      accessing and result of such calls will be returned.
+    - Every *Objects* *Injection* can have additional params that are needed
+      for doing particular type of injection.
+
+There are several types of *Injections*:
+
+    - ``KwArg`` - is used for making keyword argument injections for any kind
+      of callables (functions, methods, objects instantiation and so on). Takes
+      keyword argument name as string and injectable.
+    - ``Attribute`` - is used for making injections by setting of injection's
+      value to a particular attribute. Takes attribute name as string and
+      injectable.
+    - ``Method`` - is used for making injections by calling of method with
+      injectable value. Takes method name as string and injectable.
diff --git a/docs/providers.rst b/docs/providers.rst
index 89775790..e6609c3c 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -3,10 +3,77 @@ Providers
 
 Providers are strategies of accessing objects.
 
-All providers are callable. They describe how particular objects will be
-provided.
+All providers are callable. They describe how particular objects are provided.
 
 
+Factory providers
+-----------------
+
+``Factory`` provider creates new instance of specified class on every call.
+
+Nothing could be better than brief example:
+
+.. code-block:: python
+
+    """`Factory` providers example."""
+
+    from objects.providers import Factory
+
+
+    # Factory provider creates new instance of specified class on every call.
+    object_factory = Factory(object)
+
+    object_1 = object_factory()
+    object_2 = object_factory()
+
+    assert object_1 is not object_2
+    assert isinstance(object_1, object) and isinstance(object_2, object)
+
+Factory providers and injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Objects can take dependencies in different forms. Some objects take init
+arguments, other are using attributes setting or method calls to be
+initialized. It affects how such objects need to be created and initialized,
+and that is the place where ``objects.injections`` need to be used.
+
+``Factory`` provider takes various number of positional arguments, that define
+what kind of dependency injections need to be done.
+
+All of those instructions are defined in ``objects.injections`` module and are
+subclasses of ``objects.injections.Injection``. There  are several types of
+injections that are used by ``Factory`` provider:
+
+    - ``KwArg`` - injection is done by passing injectable value in object's
+      ``__init__()`` method in time of object's creation via keyword argument.
+      Takes keyword name of ``__init__()`` argument and injectable value.
+    - ``Attribute`` - injection is done by setting specified attribute with
+      injectable value right after object's creation. Takes attribute name and
+      injectable value.
+    - ``Method`` - injection is done by calling of specified method with
+      injectable value right after object's creation and attribute injections
+      are done. Takes method name and injectable value.
+
+All ``Injection``'s injectable values are provided *"as is"*, except of
+providers. Providers will be called every time, when injection needs to be
+done.
+
+Factory providers and __init__ injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    - KwArg example.
+    - Context args priority example.
+
+Factory providers and attribute injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    - Attributes example.
+
+Factory providers and method injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    - Method example.
+
 Instance providers & Injections
 -------------------------------
 
@@ -367,3 +434,7 @@ Example:
     assert object_a_1 is not object_a_2
     assert object_a_1.get_one() == object_a_2.get_one() == 2
 
+
+
+
+.. _Constructor injection: http://en.wikipedia.org/wiki/Dependency_injection#Constructor_injection
diff --git a/examples/readme2/factory_providers.py b/examples/readme2/factory_providers.py
new file mode 100644
index 00000000..e4a87ba5
--- /dev/null
+++ b/examples/readme2/factory_providers.py
@@ -0,0 +1,13 @@
+"""`Factory` providers example."""
+
+from objects.providers import Factory
+
+
+# Factory provider creates new instance of specified class on every call.
+object_factory = Factory(object)
+
+object_1 = object_factory()
+object_2 = object_factory()
+
+assert object_1 is not object_2
+assert isinstance(object_1, object) and isinstance(object_2, object)
diff --git a/examples/readme2/factory_providers_init_args.py b/examples/readme2/factory_providers_init_args.py
new file mode 100644
index 00000000..3430877a
--- /dev/null
+++ b/examples/readme2/factory_providers_init_args.py
@@ -0,0 +1,34 @@
+"""`Factory` providers with constructor injections example."""
+
+from objects.providers import Factory
+from objects.injections import KwArg
+
+
+class ObjectA(object):
+
+    """ObjectA has few dependencies that need to provided as init args."""
+
+    def __init__(self, object_b, object_c):
+        """Initializer."""
+        self.object_b = object_b
+        self.object_c = object_c
+
+
+# Creating of dependencies.
+object_b = object()
+object_c = object()
+
+# Creating ObjectA factory.
+object_a_factory = Factory(ObjectA,
+                           KwArg('object_b', object_b),
+                           KwArg('object_c', object_c))
+
+
+object_a_1 = object_a_factory()  # Same as ObjectA(object_b, object_c)
+object_a_2 = object_a_factory()  # Same as ObjectA(object_b, object_c)
+
+assert object_a_1 is not object_a_2
+assert isinstance(object_a_1, ObjectA)
+assert isinstance(object_a_2, ObjectA)
+assert object_a_1.object_b is object_a_2.object_b is object_b
+assert object_a_1.object_c is object_a_2.object_c is object_c

From d9952d5d857885c6eabe9e0619c2b0cd9a76a53f Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 3 Jun 2015 15:50:13 +0300
Subject: [PATCH 23/73] Factory docs update

---
 docs/providers.rst                            | 67 ++++++++++++++++++-
 examples/delegate.py                          |  6 +-
 .../readme2/factory_providers_init_args.py    | 34 ----------
 .../factory_providers_init_injections.py      | 45 +++++++++++++
 4 files changed, 113 insertions(+), 39 deletions(-)
 delete mode 100644 examples/readme2/factory_providers_init_args.py
 create mode 100644 examples/readme2/factory_providers_init_injections.py

diff --git a/docs/providers.rst b/docs/providers.rst
index e6609c3c..8607a76f 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -58,11 +58,74 @@ All ``Injection``'s injectable values are provided *"as is"*, except of
 providers. Providers will be called every time, when injection needs to be
 done.
 
+
 Factory providers and __init__ injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    - KwArg example.
-    - Context args priority example.
+Example below shows how to create ``Factory`` of particular class with several
+``__init__`` keyword argument injections which injectable values are also
+provided by another factories:
+
+.. code-block:: python
+
+    """`Factory` providers with init injections example."""
+
+    from objects.providers import Factory
+    from objects.injections import KwArg
+
+
+    class A(object):
+
+        """Example class A.
+
+        Class A has dependencies on class B and class C objects, that have to be
+        provided as init arguments.
+        """
+
+        def __init__(self, object_b, object_c):
+            self.object_b = object_b
+            self.object_c = object_c
+            super(A, self).__init__()
+
+
+    class B(object):
+
+        """Example class B."""
+
+
+    class C(object):
+
+        """Example class C."""
+
+
+    # A, B, C factories:
+    c_factory = Factory(C)
+    b_factory = Factory(B)
+    a_factory = Factory(A,
+                        KwArg('object_b', b_factory),
+                        KwArg('object_c', c_factory))
+
+    # Creating several A objects:
+    object_a_1 = a_factory()  # Same as: A(object_b=B(), object_c=C())
+    object_a_2 = a_factory()  # Same as: A(object_b=B(), object_c=C())
+
+    # Making some asserts:
+    assert object_a_1 is not object_a_2
+    assert object_a_1.object_b is not object_a_2.object_b
+    assert object_a_1.object_c is not object_a_2.object_c
+
+
+Need to make examples for:
+
+    - Several KwArgs usage. +
+    - Factory depends on another factory. +
+
+    - KwArg usage with not provider injectable value.
+
+    - Context positional arguments usage with KwArgs.
+    - Context keyword arguments priority on KwArgs.
+
+    - Context keyword arguments usage with KwArgs ???
 
 Factory providers and attribute injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/examples/delegate.py b/examples/delegate.py
index df4a9068..b54debc6 100644
--- a/examples/delegate.py
+++ b/examples/delegate.py
@@ -2,8 +2,8 @@
 
 from objects.catalog import AbstractCatalog
 
+from objects.providers import Factory
 from objects.providers import Singleton
-from objects.providers import NewInstance
 
 from objects.injections import KwArg
 from objects.injections import Attribute
@@ -38,8 +38,8 @@ class Catalog(AbstractCatalog):
                          Attribute('row_factory', sqlite3.Row))
     """:type: (objects.Provider) -> sqlite3.Connection"""
 
-    object_a = NewInstance(ObjectA,
-                           KwArg('db', database))
+    object_a = Factory(ObjectA,
+                       KwArg('db', database))
     """:type: (objects.Provider) -> ObjectA"""
 
     object_b = Singleton(ObjectB,
diff --git a/examples/readme2/factory_providers_init_args.py b/examples/readme2/factory_providers_init_args.py
deleted file mode 100644
index 3430877a..00000000
--- a/examples/readme2/factory_providers_init_args.py
+++ /dev/null
@@ -1,34 +0,0 @@
-"""`Factory` providers with constructor injections example."""
-
-from objects.providers import Factory
-from objects.injections import KwArg
-
-
-class ObjectA(object):
-
-    """ObjectA has few dependencies that need to provided as init args."""
-
-    def __init__(self, object_b, object_c):
-        """Initializer."""
-        self.object_b = object_b
-        self.object_c = object_c
-
-
-# Creating of dependencies.
-object_b = object()
-object_c = object()
-
-# Creating ObjectA factory.
-object_a_factory = Factory(ObjectA,
-                           KwArg('object_b', object_b),
-                           KwArg('object_c', object_c))
-
-
-object_a_1 = object_a_factory()  # Same as ObjectA(object_b, object_c)
-object_a_2 = object_a_factory()  # Same as ObjectA(object_b, object_c)
-
-assert object_a_1 is not object_a_2
-assert isinstance(object_a_1, ObjectA)
-assert isinstance(object_a_2, ObjectA)
-assert object_a_1.object_b is object_a_2.object_b is object_b
-assert object_a_1.object_c is object_a_2.object_c is object_c
diff --git a/examples/readme2/factory_providers_init_injections.py b/examples/readme2/factory_providers_init_injections.py
new file mode 100644
index 00000000..1a0abadb
--- /dev/null
+++ b/examples/readme2/factory_providers_init_injections.py
@@ -0,0 +1,45 @@
+"""`Factory` providers with init injections example."""
+
+from objects.providers import Factory
+from objects.injections import KwArg
+
+
+class A(object):
+
+    """Example class A.
+
+    Class A has dependencies on class B and class C objects, that have to be
+    provided as init arguments.
+    """
+
+    def __init__(self, object_b, object_c):
+        self.object_b = object_b
+        self.object_c = object_c
+        super(A, self).__init__()
+
+
+class B(object):
+
+    """Example class B."""
+
+
+class C(object):
+
+    """Example class C."""
+
+
+# A, B, C factories:
+c_factory = Factory(C)
+b_factory = Factory(B)
+a_factory = Factory(A,
+                    KwArg('object_b', b_factory),
+                    KwArg('object_c', c_factory))
+
+# Creating several A objects:
+object_a_1 = a_factory()  # Same as: A(object_b=B(), object_c=C())
+object_a_2 = a_factory()  # Same as: A(object_b=B(), object_c=C())
+
+# Making some asserts:
+assert object_a_1 is not object_a_2
+assert object_a_1.object_b is not object_a_2.object_b
+assert object_a_1.object_c is not object_a_2.object_c

From 2e8f59115fccca747845e7be9e723a3ae0cf06cc Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 5 Jun 2015 11:29:36 +0300
Subject: [PATCH 24/73] Complete of Factory docs, new Factory examples

---
 docs/providers.rst                            | 137 +++++++++++++-----
 examples/providers/factory.py                 |  18 +++
 .../factory_init_context_injections.py        |  52 +++++++
 examples/providers/factory_init_injections.py |  53 +++++++
 examples/readme2/factory_providers.py         |  13 --
 .../factory_providers_init_injections.py      |  45 ------
 6 files changed, 224 insertions(+), 94 deletions(-)
 create mode 100644 examples/providers/factory.py
 create mode 100644 examples/providers/factory_init_context_injections.py
 create mode 100644 examples/providers/factory_init_injections.py
 delete mode 100644 examples/readme2/factory_providers.py
 delete mode 100644 examples/readme2/factory_providers_init_injections.py

diff --git a/docs/providers.rst b/docs/providers.rst
index 8607a76f..d8b59e6d 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -20,14 +20,21 @@ Nothing could be better than brief example:
     from objects.providers import Factory
 
 
+    class User(object):
+
+        """Example class User."""
+
+
     # Factory provider creates new instance of specified class on every call.
-    object_factory = Factory(object)
+    users_factory = Factory(User)
+
+    user1 = users_factory()
+    user2 = users_factory()
+
+    assert user1 is not user2
+    assert isinstance(user1, User) and isinstance(user2, User)
 
-    object_1 = object_factory()
-    object_2 = object_factory()
 
-    assert object_1 is not object_2
-    assert isinstance(object_1, object) and isinstance(object_2, object)
 
 Factory providers and injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -74,58 +81,116 @@ provided by another factories:
     from objects.injections import KwArg
 
 
-    class A(object):
+    class User(object):
 
-        """Example class A.
+        """Example class User.
 
-        Class A has dependencies on class B and class C objects, that have to be
-        provided as init arguments.
+        Class User has dependencies on class Photo and class CreditCard objects,
+        that have to be provided as init arguments.
         """
 
-        def __init__(self, object_b, object_c):
-            self.object_b = object_b
-            self.object_c = object_c
-            super(A, self).__init__()
+        def __init__(self, main_photo, credit_card):
+            """Initializer.
+
+            :param main_photo: Photo
+            :param credit_card: CreditCard
+            :return:
+            """
+            self.main_photo = main_photo
+            self.credit_card = credit_card
+            super(User, self).__init__()
 
 
-    class B(object):
+    class Photo(object):
 
-        """Example class B."""
+        """Example class Photo."""
 
 
-    class C(object):
+    class CreditCard(object):
 
-        """Example class C."""
+        """Example class CreditCard."""
 
 
-    # A, B, C factories:
-    c_factory = Factory(C)
-    b_factory = Factory(B)
-    a_factory = Factory(A,
-                        KwArg('object_b', b_factory),
-                        KwArg('object_c', c_factory))
+    # User, Photo and CreditCard factories:
+    credit_cards_factory = Factory(CreditCard)
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            KwArg('main_photo', photos_factory),
+                            KwArg('credit_card', credit_cards_factory))
 
-    # Creating several A objects:
-    object_a_1 = a_factory()  # Same as: A(object_b=B(), object_c=C())
-    object_a_2 = a_factory()  # Same as: A(object_b=B(), object_c=C())
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: User(main_photo=Photo(),
+                             #               credit_card=CreditCard())
+    user2 = users_factory()  # Same as: User(main_photo=Photo(),
+                             #               credit_card=CreditCard())
 
     # Making some asserts:
-    assert object_a_1 is not object_a_2
-    assert object_a_1.object_b is not object_a_2.object_b
-    assert object_a_1.object_c is not object_a_2.object_c
+    assert user1 is not user2
+    assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
 
 
-Need to make examples for:
+Next example shows how ``Factory`` provider deals with positional and keyword
+``__init__`` context arguments. In few words, ``Factory`` provider fully
+passes positional context arguments to class's ``__init__`` method, but
+keyword context arguments have priority on ``KwArg`` injections (this could be
+useful for testing). So, please, follow the example below:
 
-    - Several KwArgs usage. +
-    - Factory depends on another factory. +
+.. code-block:: python
 
-    - KwArg usage with not provider injectable value.
+    """`Factory` providers with init injections and context arguments example."""
 
-    - Context positional arguments usage with KwArgs.
-    - Context keyword arguments priority on KwArgs.
+    from objects.providers import Factory
+    from objects.injections import KwArg
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self, id, main_photo):
+            """Initializer.
+
+            :param id: int
+            :param main_photo: Photo
+            :return:
+            """
+            self.id = id
+            self.main_photo = main_photo
+            super(User, self).__init__()
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    # User and Photo factories:
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            KwArg('main_photo', photos_factory))
+
+    # Creating several User objects:
+    user1 = users_factory(1)  # Same as: User(1, main_photo=Photo())
+    user2 = users_factory(2)  # Same as: User(1, main_photo=Photo())
+
+    # Making some asserts:
+    assert user1.id == 1
+    assert user2.id == 2
+    assert user1 is not user2
+    assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user2.main_photo, Photo)
+    assert user1.main_photo is not user2.main_photo
+
+    # Context keyword arguments have priority on KwArg injections priority:
+    photo_mock = Photo()
+
+    user3 = users_factory(3, main_photo=photo_mock)
+
+    assert user3.id == 3
+    assert user3 not in (user2, user1)
+    assert user3.main_photo is photo_mock
 
-    - Context keyword arguments usage with KwArgs ???
 
 Factory providers and attribute injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/examples/providers/factory.py b/examples/providers/factory.py
new file mode 100644
index 00000000..63dbbff8
--- /dev/null
+++ b/examples/providers/factory.py
@@ -0,0 +1,18 @@
+"""`Factory` providers example."""
+
+from objects.providers import Factory
+
+
+class User(object):
+
+    """Example class User."""
+
+
+# Factory provider creates new instance of specified class on every call.
+users_factory = Factory(User)
+
+user1 = users_factory()
+user2 = users_factory()
+
+assert user1 is not user2
+assert isinstance(user1, User) and isinstance(user2, User)
diff --git a/examples/providers/factory_init_context_injections.py b/examples/providers/factory_init_context_injections.py
new file mode 100644
index 00000000..870ce656
--- /dev/null
+++ b/examples/providers/factory_init_context_injections.py
@@ -0,0 +1,52 @@
+"""`Factory` providers with init injections and context arguments example."""
+
+from objects.providers import Factory
+from objects.injections import KwArg
+
+
+class User(object):
+
+    """Example class User."""
+
+    def __init__(self, id, main_photo):
+        """Initializer.
+
+        :param id: int
+        :param main_photo: Photo
+        :return:
+        """
+        self.id = id
+        self.main_photo = main_photo
+        super(User, self).__init__()
+
+
+class Photo(object):
+
+    """Example class Photo."""
+
+
+# User and Photo factories:
+photos_factory = Factory(Photo)
+users_factory = Factory(User,
+                        KwArg('main_photo', photos_factory))
+
+# Creating several User objects:
+user1 = users_factory(1)  # Same as: User(1, main_photo=Photo())
+user2 = users_factory(2)  # Same as: User(1, main_photo=Photo())
+
+# Making some asserts:
+assert user1.id == 1
+assert user2.id == 2
+assert user1 is not user2
+assert isinstance(user1.main_photo, Photo)
+assert isinstance(user2.main_photo, Photo)
+assert user1.main_photo is not user2.main_photo
+
+# Context keyword arguments have priority on KwArg injections priority:
+photo_mock = Photo()
+
+user3 = users_factory(3, main_photo=photo_mock)
+
+assert user3.id == 3
+assert user3 not in (user2, user1)
+assert user3.main_photo is photo_mock
diff --git a/examples/providers/factory_init_injections.py b/examples/providers/factory_init_injections.py
new file mode 100644
index 00000000..9bccb0ec
--- /dev/null
+++ b/examples/providers/factory_init_injections.py
@@ -0,0 +1,53 @@
+"""`Factory` providers with init injections example."""
+
+from objects.providers import Factory
+from objects.injections import KwArg
+
+
+class User(object):
+
+    """Example class User.
+
+    Class User has dependencies on class Photo and class CreditCard objects,
+    that have to be provided as init arguments.
+    """
+
+    def __init__(self, main_photo, credit_card):
+        """Initializer.
+
+        :param main_photo: Photo
+        :param credit_card: CreditCard
+        :return:
+        """
+        self.main_photo = main_photo
+        self.credit_card = credit_card
+        super(User, self).__init__()
+
+
+class Photo(object):
+
+    """Example class Photo."""
+
+
+class CreditCard(object):
+
+    """Example class CreditCard."""
+
+
+# User, Photo and CreditCard factories:
+credit_cards_factory = Factory(CreditCard)
+photos_factory = Factory(Photo)
+users_factory = Factory(User,
+                        KwArg('main_photo', photos_factory),
+                        KwArg('credit_card', credit_cards_factory))
+
+# Creating several User objects:
+user1 = users_factory()  # Same as: User(main_photo=Photo(),
+                         #               credit_card=CreditCard())
+user2 = users_factory()  # Same as: User(main_photo=Photo(),
+                         #               credit_card=CreditCard())
+
+# Making some asserts:
+assert user1 is not user2
+assert user1.main_photo is not user2.main_photo
+assert user1.credit_card is not user2.credit_card
diff --git a/examples/readme2/factory_providers.py b/examples/readme2/factory_providers.py
deleted file mode 100644
index e4a87ba5..00000000
--- a/examples/readme2/factory_providers.py
+++ /dev/null
@@ -1,13 +0,0 @@
-"""`Factory` providers example."""
-
-from objects.providers import Factory
-
-
-# Factory provider creates new instance of specified class on every call.
-object_factory = Factory(object)
-
-object_1 = object_factory()
-object_2 = object_factory()
-
-assert object_1 is not object_2
-assert isinstance(object_1, object) and isinstance(object_2, object)
diff --git a/examples/readme2/factory_providers_init_injections.py b/examples/readme2/factory_providers_init_injections.py
deleted file mode 100644
index 1a0abadb..00000000
--- a/examples/readme2/factory_providers_init_injections.py
+++ /dev/null
@@ -1,45 +0,0 @@
-"""`Factory` providers with init injections example."""
-
-from objects.providers import Factory
-from objects.injections import KwArg
-
-
-class A(object):
-
-    """Example class A.
-
-    Class A has dependencies on class B and class C objects, that have to be
-    provided as init arguments.
-    """
-
-    def __init__(self, object_b, object_c):
-        self.object_b = object_b
-        self.object_c = object_c
-        super(A, self).__init__()
-
-
-class B(object):
-
-    """Example class B."""
-
-
-class C(object):
-
-    """Example class C."""
-
-
-# A, B, C factories:
-c_factory = Factory(C)
-b_factory = Factory(B)
-a_factory = Factory(A,
-                    KwArg('object_b', b_factory),
-                    KwArg('object_c', c_factory))
-
-# Creating several A objects:
-object_a_1 = a_factory()  # Same as: A(object_b=B(), object_c=C())
-object_a_2 = a_factory()  # Same as: A(object_b=B(), object_c=C())
-
-# Making some asserts:
-assert object_a_1 is not object_a_2
-assert object_a_1.object_b is not object_a_2.object_b
-assert object_a_1.object_c is not object_a_2.object_c

From 776bbc7dde734e3097e3049035ccab0187ccdaa9 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 5 Jun 2015 11:39:01 +0300
Subject: [PATCH 25/73] small fixes for Factory docs and examples

---
 docs/providers.rst                                    | 2 +-
 examples/providers/factory_init_context_injections.py | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/providers.rst b/docs/providers.rst
index d8b59e6d..75e46a2d 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -172,7 +172,7 @@ useful for testing). So, please, follow the example below:
 
     # Creating several User objects:
     user1 = users_factory(1)  # Same as: User(1, main_photo=Photo())
-    user2 = users_factory(2)  # Same as: User(1, main_photo=Photo())
+    user2 = users_factory(2)  # Same as: User(2, main_photo=Photo())
 
     # Making some asserts:
     assert user1.id == 1
diff --git a/examples/providers/factory_init_context_injections.py b/examples/providers/factory_init_context_injections.py
index 870ce656..8349c877 100644
--- a/examples/providers/factory_init_context_injections.py
+++ b/examples/providers/factory_init_context_injections.py
@@ -32,7 +32,7 @@ users_factory = Factory(User,
 
 # Creating several User objects:
 user1 = users_factory(1)  # Same as: User(1, main_photo=Photo())
-user2 = users_factory(2)  # Same as: User(1, main_photo=Photo())
+user2 = users_factory(2)  # Same as: User(2, main_photo=Photo())
 
 # Making some asserts:
 assert user1.id == 1

From 7c1c32db80365662dd7e5757fcf63a5eb006e691 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 5 Jun 2015 12:28:12 +0300
Subject: [PATCH 26/73] Updating Factory docs and examples

---
 docs/providers.rst                            | 152 ++++++++++--------
 .../factory_init_context_injections.py        |  52 ------
 examples/providers/factory_init_injections.py |  34 ++--
 .../factory_init_injections_and_contexts.py   |  79 +++++++++
 4 files changed, 175 insertions(+), 142 deletions(-)
 delete mode 100644 examples/providers/factory_init_context_injections.py
 create mode 100644 examples/providers/factory_init_injections_and_contexts.py

diff --git a/docs/providers.rst b/docs/providers.rst
index 75e46a2d..84f96890 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -35,7 +35,6 @@ Nothing could be better than brief example:
     assert isinstance(user1, User) and isinstance(user2, User)
 
 
-
 Factory providers and injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -69,7 +68,7 @@ done.
 Factory providers and __init__ injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Example below shows how to create ``Factory`` of particular class with several
+Example below shows how to create ``Factory`` of particular class with
 ``__init__`` keyword argument injections which injectable values are also
 provided by another factories:
 
@@ -83,19 +82,78 @@ provided by another factories:
 
     class User(object):
 
-        """Example class User.
+        """Example class User."""
 
-        Class User has dependencies on class Photo and class CreditCard objects,
-        that have to be provided as init arguments.
-        """
-
-        def __init__(self, main_photo, credit_card):
+        def __init__(self, main_photo):
             """Initializer.
 
+            :param main_photo: Photo
+            :return:
+            """
+            self.main_photo = main_photo
+            super(User, self).__init__()
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    # User and Photo factories:
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            KwArg('main_photo', photos_factory))
+
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: User(main_photo=Photo())
+    user2 = users_factory()  # Same as: User(main_photo=Photo())
+
+    # Making some asserts:
+    assert isinstance(user1, User)
+    assert isinstance(user1.main_photo, Photo)
+
+    assert isinstance(user2, User)
+    assert isinstance(user2.main_photo, Photo)
+
+    assert user1 is not user2
+    assert user1.main_photo is not user2.main_photo
+
+
+Next example shows how ``Factory`` provider deals with positional and keyword
+``__init__`` context arguments. In few words, ``Factory`` provider fully
+passes positional context arguments to class's ``__init__`` method, but
+keyword context arguments have priority on ``KwArg`` injections (this could be
+useful for testing). So, please, follow the example below:
+
+.. code-block:: python
+
+    """`Factory` providers with init injections and context arguments example."""
+
+    from objects.providers import Factory
+    from objects.injections import KwArg
+
+
+    class User(object):
+
+        """Example class User.
+
+        Class User has to be provided with user id.
+
+        Also Class User has dependencies on class Photo and class CreditCard
+        objects.
+
+        All of the dependencies have to be provided like __init__ arguments.
+        """
+
+        def __init__(self, id, main_photo, credit_card):
+            """Initializer.
+
+            :param id: int
             :param main_photo: Photo
             :param credit_card: CreditCard
             :return:
             """
+            self.id = id
             self.main_photo = main_photo
             self.credit_card = credit_card
             super(User, self).__init__()
@@ -119,77 +177,35 @@ provided by another factories:
                             KwArg('credit_card', credit_cards_factory))
 
     # Creating several User objects:
-    user1 = users_factory()  # Same as: User(main_photo=Photo(),
-                             #               credit_card=CreditCard())
-    user2 = users_factory()  # Same as: User(main_photo=Photo(),
-                             #               credit_card=CreditCard())
-
-    # Making some asserts:
-    assert user1 is not user2
-    assert user1.main_photo is not user2.main_photo
-    assert user1.credit_card is not user2.credit_card
-
-
-Next example shows how ``Factory`` provider deals with positional and keyword
-``__init__`` context arguments. In few words, ``Factory`` provider fully
-passes positional context arguments to class's ``__init__`` method, but
-keyword context arguments have priority on ``KwArg`` injections (this could be
-useful for testing). So, please, follow the example below:
-
-.. code-block:: python
-
-    """`Factory` providers with init injections and context arguments example."""
-
-    from objects.providers import Factory
-    from objects.injections import KwArg
-
-
-    class User(object):
-
-        """Example class User."""
-
-        def __init__(self, id, main_photo):
-            """Initializer.
-
-            :param id: int
-            :param main_photo: Photo
-            :return:
-            """
-            self.id = id
-            self.main_photo = main_photo
-            super(User, self).__init__()
-
-
-    class Photo(object):
-
-        """Example class Photo."""
-
-
-    # User and Photo factories:
-    photos_factory = Factory(Photo)
-    users_factory = Factory(User,
-                            KwArg('main_photo', photos_factory))
-
-    # Creating several User objects:
-    user1 = users_factory(1)  # Same as: User(1, main_photo=Photo())
-    user2 = users_factory(2)  # Same as: User(2, main_photo=Photo())
+    user1 = users_factory(1)  # Same as: User(1,
+                              #               main_photo=Photo(),
+                              #               credit_card=CreditCard())
+    user2 = users_factory(2)  # Same as: User(2,
+                              #               main_photo=Photo(),
+                              #               credit_card=CreditCard())
 
     # Making some asserts:
     assert user1.id == 1
-    assert user2.id == 2
-    assert user1 is not user2
     assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user1.credit_card, CreditCard)
+
+    assert user2.id == 2
     assert isinstance(user2.main_photo, Photo)
+    assert isinstance(user2.credit_card, CreditCard)
+
     assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
 
     # Context keyword arguments have priority on KwArg injections priority:
-    photo_mock = Photo()
+    main_photo_mock = Photo()
+    credit_card_mock = CreditCard()
 
-    user3 = users_factory(3, main_photo=photo_mock)
+    user3 = users_factory(3, main_photo=main_photo_mock,
+                          credit_card=credit_card_mock)
 
     assert user3.id == 3
-    assert user3 not in (user2, user1)
-    assert user3.main_photo is photo_mock
+    assert user3.main_photo is main_photo_mock
+    assert user3.credit_card is credit_card_mock
 
 
 Factory providers and attribute injections
diff --git a/examples/providers/factory_init_context_injections.py b/examples/providers/factory_init_context_injections.py
deleted file mode 100644
index 8349c877..00000000
--- a/examples/providers/factory_init_context_injections.py
+++ /dev/null
@@ -1,52 +0,0 @@
-"""`Factory` providers with init injections and context arguments example."""
-
-from objects.providers import Factory
-from objects.injections import KwArg
-
-
-class User(object):
-
-    """Example class User."""
-
-    def __init__(self, id, main_photo):
-        """Initializer.
-
-        :param id: int
-        :param main_photo: Photo
-        :return:
-        """
-        self.id = id
-        self.main_photo = main_photo
-        super(User, self).__init__()
-
-
-class Photo(object):
-
-    """Example class Photo."""
-
-
-# User and Photo factories:
-photos_factory = Factory(Photo)
-users_factory = Factory(User,
-                        KwArg('main_photo', photos_factory))
-
-# Creating several User objects:
-user1 = users_factory(1)  # Same as: User(1, main_photo=Photo())
-user2 = users_factory(2)  # Same as: User(2, main_photo=Photo())
-
-# Making some asserts:
-assert user1.id == 1
-assert user2.id == 2
-assert user1 is not user2
-assert isinstance(user1.main_photo, Photo)
-assert isinstance(user2.main_photo, Photo)
-assert user1.main_photo is not user2.main_photo
-
-# Context keyword arguments have priority on KwArg injections priority:
-photo_mock = Photo()
-
-user3 = users_factory(3, main_photo=photo_mock)
-
-assert user3.id == 3
-assert user3 not in (user2, user1)
-assert user3.main_photo is photo_mock
diff --git a/examples/providers/factory_init_injections.py b/examples/providers/factory_init_injections.py
index 9bccb0ec..02d79998 100644
--- a/examples/providers/factory_init_injections.py
+++ b/examples/providers/factory_init_injections.py
@@ -6,21 +6,15 @@ from objects.injections import KwArg
 
 class User(object):
 
-    """Example class User.
+    """Example class User."""
 
-    Class User has dependencies on class Photo and class CreditCard objects,
-    that have to be provided as init arguments.
-    """
-
-    def __init__(self, main_photo, credit_card):
+    def __init__(self, main_photo):
         """Initializer.
 
         :param main_photo: Photo
-        :param credit_card: CreditCard
         :return:
         """
         self.main_photo = main_photo
-        self.credit_card = credit_card
         super(User, self).__init__()
 
 
@@ -29,25 +23,21 @@ class Photo(object):
     """Example class Photo."""
 
 
-class CreditCard(object):
-
-    """Example class CreditCard."""
-
-
-# User, Photo and CreditCard factories:
-credit_cards_factory = Factory(CreditCard)
+# User and Photo factories:
 photos_factory = Factory(Photo)
 users_factory = Factory(User,
-                        KwArg('main_photo', photos_factory),
-                        KwArg('credit_card', credit_cards_factory))
+                        KwArg('main_photo', photos_factory))
 
 # Creating several User objects:
-user1 = users_factory()  # Same as: User(main_photo=Photo(),
-                         #               credit_card=CreditCard())
-user2 = users_factory()  # Same as: User(main_photo=Photo(),
-                         #               credit_card=CreditCard())
+user1 = users_factory()  # Same as: User(main_photo=Photo())
+user2 = users_factory()  # Same as: User(main_photo=Photo())
 
 # Making some asserts:
+assert isinstance(user1, User)
+assert isinstance(user1.main_photo, Photo)
+
+assert isinstance(user2, User)
+assert isinstance(user2.main_photo, Photo)
+
 assert user1 is not user2
 assert user1.main_photo is not user2.main_photo
-assert user1.credit_card is not user2.credit_card
diff --git a/examples/providers/factory_init_injections_and_contexts.py b/examples/providers/factory_init_injections_and_contexts.py
new file mode 100644
index 00000000..de78273a
--- /dev/null
+++ b/examples/providers/factory_init_injections_and_contexts.py
@@ -0,0 +1,79 @@
+"""`Factory` providers with init injections and context arguments example."""
+
+from objects.providers import Factory
+from objects.injections import KwArg
+
+
+class User(object):
+
+    """Example class User.
+
+    Class User has to be provided with user id.
+
+    Also Class User has dependencies on class Photo and class CreditCard
+    objects.
+
+    All of the dependencies have to be provided like __init__ arguments.
+    """
+
+    def __init__(self, id, main_photo, credit_card):
+        """Initializer.
+
+        :param id: int
+        :param main_photo: Photo
+        :param credit_card: CreditCard
+        :return:
+        """
+        self.id = id
+        self.main_photo = main_photo
+        self.credit_card = credit_card
+        super(User, self).__init__()
+
+
+class Photo(object):
+
+    """Example class Photo."""
+
+
+class CreditCard(object):
+
+    """Example class CreditCard."""
+
+
+# User, Photo and CreditCard factories:
+credit_cards_factory = Factory(CreditCard)
+photos_factory = Factory(Photo)
+users_factory = Factory(User,
+                        KwArg('main_photo', photos_factory),
+                        KwArg('credit_card', credit_cards_factory))
+
+# Creating several User objects:
+user1 = users_factory(1)  # Same as: User(1,
+                          #               main_photo=Photo(),
+                          #               credit_card=CreditCard())
+user2 = users_factory(2)  # Same as: User(2,
+                          #               main_photo=Photo(),
+                          #               credit_card=CreditCard())
+
+# Making some asserts:
+assert user1.id == 1
+assert isinstance(user1.main_photo, Photo)
+assert isinstance(user1.credit_card, CreditCard)
+
+assert user2.id == 2
+assert isinstance(user2.main_photo, Photo)
+assert isinstance(user2.credit_card, CreditCard)
+
+assert user1.main_photo is not user2.main_photo
+assert user1.credit_card is not user2.credit_card
+
+# Context keyword arguments have priority on KwArg injections priority:
+main_photo_mock = Photo()
+credit_card_mock = CreditCard()
+
+user3 = users_factory(3, main_photo=main_photo_mock,
+                      credit_card=credit_card_mock)
+
+assert user3.id == 3
+assert user3.main_photo is main_photo_mock
+assert user3.credit_card is credit_card_mock

From bb7cfcc124d6d33215d8319cf05c2a59aca5adcd Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Mon, 8 Jun 2015 11:33:27 +0300
Subject: [PATCH 27/73] Finishing of Factory provider docs

---
 docs/images/factory_attribute_injections.png  | Bin 0 -> 6366 bytes
 docs/images/factory_init_injections.png       | Bin 0 -> 4112 bytes
 .../factory_init_injections_and_contexts.png  | Bin 0 -> 7370 bytes
 docs/images/factory_method_injections.png     | Bin 0 -> 8747 bytes
 docs/providers.rst                            | 158 ++++++++++++++++--
 .../providers/factory_attribute_injections.py |  52 ++++++
 examples/providers/factory_init_injections.py |   4 +-
 .../factory_init_injections_and_contexts.py   |  12 +-
 .../providers/factory_method_injections.py    |  60 +++++++
 9 files changed, 268 insertions(+), 18 deletions(-)
 create mode 100644 docs/images/factory_attribute_injections.png
 create mode 100644 docs/images/factory_init_injections.png
 create mode 100644 docs/images/factory_init_injections_and_contexts.png
 create mode 100644 docs/images/factory_method_injections.png
 create mode 100644 examples/providers/factory_attribute_injections.py
 create mode 100644 examples/providers/factory_method_injections.py

diff --git a/docs/images/factory_attribute_injections.png b/docs/images/factory_attribute_injections.png
new file mode 100644
index 0000000000000000000000000000000000000000..29b982510cae00ed543e0e8555e80537c7fc305e
GIT binary patch
literal 6366
zcmdT}c{r5syGJQYmO?@*^|fcsE=gHJl668e_N-%yFpMpQvQ`*dh(Zj;G7RRm7P5^k
z#yWOcX3SV8gro28oIlPVzw0{Z`km`K=lt<p&-*O*=egheeeV1IT=)Ct;R8K37Je2w
zIyyG}d)lUSbPNC;9sPBt;|aQxwwhXhIu|V?Ejs$hk8(>$+v72VgQ1=_-BDCRcjNJh
z`RP3?A3C}V8GjnRzVFMV;|ETCZ7p;77&%jY0CUqP(pmK_>LRB~xnI+%$2#*{Xa^pa
zBc3u=rRmh}@*5@LMr9{Vi;*gBS*ma7Up-mFtsolhUEy^z{QYWI%IU+;@x+knPC|L6
zBi{dCYZi1sot<Xxo%RN)Mg;Gj(t~lT`&sqk8^Y4j6q$(#8v1x59VH@hz*QtRJd%32
z1ZJw+p|qg*JRGKKH-E_bMdZ>FI2xbwGL#<RsOLdaG4b#0bUb;PhDeJ_hu^^Pqp?O-
z8Al7!N4$CKqs!w_ISR~nGqvkn{xb(2N4EeFJU%P`@Z7qR2>rbKcB?R;W=*k0G~qk|
z(*_JvhhAW7{TK~4!PvB)qtw;~ff)OprmU?`t#~J@&riBQghh@Q*kfpyfR#~jA8KMo
zd5vNE;9>9F5V>!tWVbKg5=>4n!&IxE#tmxPxq2$Tnl34Lk13B@ja~K|{e3M%T>)J`
zW|A2V$C*Wd;zM;SQ#$6#124&N{m{>#bv|@1TZJ})<Z3W4IxOXpzC`)~&Q1$Wa`F=x
z=v<P8W?!@S=x<ckA-|wE30yX5BVVAIleULzB!?T<_H#7tzk@V&!7W%tyfe8fg(Y!n
zj+0C>KZ`mJaK^@mx@8}BqB}2Im=xzKiJCZesKbbfa`yKHCr-80B*}leJP-_zVA1?3
zqS?SkT>ET$fLI@kmu{8c6YCb0FqO27rw-tU*8o+)Q9QziFmwBbfl{$Dr6|{X*A7me
zT07|>2>7hb9lC1L2P-h!(xZ{)=lg^`zu=8h;`LjN#S?9tJzPuP3~TlAkT8~vwWMiZ
zkx+Ko{_QSeWao_i_tcmEqe-;w>?7TT?YWt%#ycm_wR?QRW0~>^7lup-3J1GxH^!=L
z1=fOFdgq(FdU&oEo-|v`vGK_zaNimg=Rkv~?1P_@o6MAKKFlOnc6f)S=4Q|&KyUl~
z*Dek&4hn%pn{2G%5f4R}l}V;oy(+eHZZtj^>dELYJs5jR;R?xD1f+dkyU{o2%q1N@
zOo;V9y>^C(w;V1ipvv=tu_WkY-oulWio&(k#>0h+aHFx0MxKif91;4@3|2vIw?^S9
zJ&y<>&>9-EW+G^V#c~9LQug)z)IIMIn`t?B5Eb}E0PbN^y4X9DcTdHZ0={(?@aM3Z
zclQ)EAGu$cZsz&T)%j`?(u{2S#=a_GzUqhpE?}lN<Lok>nw{2u3k|@tmrfCp<zs&H
z!^YD+ILPR5WB?3rKE+eol26D8Rjf)DoHB27>hCUhW0m3I&FmoR!V7w?9o*w0I$Tt;
zs9P~KOTS3CX_6;UIFZdv3H=^b*Ark=_}xlMuZYr;k(|VhU9C62?7V}E4B_lryli16
z(<-h?ku9F-A>a5^<@SN!GD8otuP~FD{(W%=Pjs>i<ZBJQ3iQre%xA7f6!o+>;4RcK
zi#B69MWartnHTGT>M8V2b?YN2nzRE1_!xN}Jv|yjB{(*mhP8etKMD6AjrAoHA`#it
zyJ<JEl`?#ObH4Hk<|kwoQ5&=J)W~eF&7K|IMeQ(b-t)Y~MaW3F^XSdK1oN2^=qIkc
z1oNd%)A$ZF=MFAunv7Jg-0Pw4IbOZir2f#Qn(TXH^j$G1qkZ?C1hB>QL>`-Fi#k)6
zEcM)7+*4<E8$OzexeK@tso~bWrs8!qccj1PG3O+2|Av8H4-ijExgm%*?=QC?&XON*
ztoU^?&yx|i8=vvgQKIVZ0K&N76Pqj$L7C%NP|69D@v_AN;h=U_YRDIlHiQv6SBDvH
z7EMcs=)|0(=5tdN>!Z&LPaBC7Jpy^844N`b0m7DqbyApe9vr=Fff1vJ8LUGFQLZKo
z#H88!d{BSxNkF{yp8zfFQxDTiU+a@Ryvsc};F>^Km@=_SZ|v>Ag!<oAFJabqa8G&9
z;Mq|dxP}R+3Q|n)kU|Hj16mK#%!iO^8|>7TbdaQJQhN*P()Fd9>KY%S#GzDr{<f{q
z^{&PF<TDgF&r#=NvCbZ<-~Qt^9JN9F5H7X8Q)dz}&u(X;aG>{dvI_+pUZ)lfy~|vS
zY9kH>0##!@%#+LbHIn-ga-4!uk5fVvpi8Vk<#%YCi#pPFpp>)|DhWT&Pj9nfv!1e{
z9WV~69&Y8b>0n$%M3SG|%Vx7@un^c@gUO<*rxXd2-c?!cBkrO6sU}Mq{hYq4f^Kv6
zyW&=O{hm@L8=Ah{E}Wp~l3%>=*x#>E`?O4oQEOVLY@(6A<f{19ocy6}g&gZXwVdkt
zOl28Adc^)GhumnB-wcqcr(MkIc}Y%-+3NwCrJ-xcJ7}X_ZALDa111@AcRizKGWgRA
z&y@OFu)XeR)m?J9?cn0VvG&Y1zq4$EPXG-wNG`mGdP3K$FV7BqaNKoZU0p&nvdouS
zG*dm<EO<L6Od4?mcN6S*%j!7nNJ4H0ilmZgo=J3QSk1z#`r*a3w9vLTV?{LMGIA~V
z+uKb(h{o>-?4^n57hRAPp(VGfI_J%F-m*_R`6C^9GJl(^uQxyg&Z>*TXhspFHZ6*G
zp7>de^AVjli+Ib>;s`N(cQE}i{Prv3X&&>^YLYmB!8~m(8X_(vM$m}%DY!6<m@Jwo
zdvgf&gNKLs!MR?^ccVD;jEwSjU3az8eT0oQw(xv)%M$`~rV=`c9^p<%EbtXPacr#w
zE@IPo-_@nGU66*pz^gK7BdT85#Su}~kv8PMIl$Xjy5)~d2_q;^%)JVP98E|?5Rp2Q
z9LWQiyC^@UH0|$})fJV*aYC(!u?G*dHzTDX%+J}$+Gx)KB3vAEraR!XYY!GC`4{n)
zazeUUh|3?O{Z|Q9*IUO!c!APcKi$d`$2OqdnyEDF4i=a?Md?dZ&`@t6o`MH|tvCLK
zR1@^En-N+^##%otU9@;#rveZ_aKId<UN`jb1VCUm53>GyMAU$!pWS<I`rw|;Y@THl
zsZXhL<l(^;U@bVh567=8L)^n>2@XG#Lz@ofO@mMAMhfz5>Oy0&w~&yg)jzpSz2YVG
zOYe1#!gx_;%E#SzaqNGT4ZL#@qOX=*7yNKJLj<_n#it(oXTO(5&PMzX0~3x!ORxn-
zp+#%a>$6=Vs&IaYF|o5NNFdLE*6>uw5NbRqp_U~gsm~1=UwX=2{|`hCVzitVnpG0{
z&L012Ucm{=70W6F#@o0ouKM12G}iAT6{p9w7B4B%v%dD_rU^XiP$lpm7r+B9@bY7=
zbGZAsh2Gs~2!4rsvOfha9Dc}u4>ED~^W*D^eWCDSFe7#GSH1v?yL8DM@r&`{-m|TL
zIEIaQp50>h08}ziu?Ed#DaV=YG+yTLb|(?wfN7~CioW|M-Dgr)$RzGPqd+#CW;Eje
zepS^ODd7Di@J7Ef$oZ5u?W*;&%fwhCw%WSCHrK0imM0C<q=Be@*5eOWBKo+1&AX+q
zxm^l)Rh{Af8Q`GY<apD;>7DnB4d_?|KEGUIJod3+uF@H)f=sgx_0h%N!N_s||HX@d
zdynPIpSpuo0O~4_B9@(%|N4(uQtk8lDN!BHx(|aEc}epv-T)T%&M2Z>Mg2#ice&PT
z7Rv`NC3{6cpQ1OG*)pSL;_3cABQTR&#Kd)@maE3G_>1s%;=n7%XyXz#!MWAk)@iHM
zPZH@rbMRJA*q>5OH%|&Cs{lK`4OffJ&Qc?_YmI5LMwh?Fgw*W`8u5#hKC8SJQA#b7
z{(Tk=*3zpbaKeX1v2kRSokE75Wj;Gv-S|<#)oHdj-sp0+dcUIw!mGb?pkyp<ur}nT
zoBCmBHUH1;xB>!inYa_tw963OKg+myS`zA?v%AcbnYnE+OolebYD7DblDYkIr>v`^
z@4M#&HVK>;Zrk*V#X2M{{m75y>3)E@`uQV14I-PhKCu9hGau;KPbnbpFMe2|D>Zws
z#v|NI2YZ<0@>S9$IXjzlyFMB;XwD|WmK*R2m9=*oVG!efqKb4{s*PpbD6d3LZ(DV4
z>xBfW#ZMxgq2_Z+!gd$!^`9_CW42wgnYQ?0F7KLtGDD5WBcm95O5aU$fi_b`7W)dQ
zAy>6}BkhNHcHe=fa=KbFq9Lv7{y8-}jUSx-$X8SyzN~#!_t!~JzrHPwKaltHavaat
zJl-mFoU<9GeGlZ%L(&q0ZoTp^emnM{Rl=s(aEgIgCPq)GhC?}6<HXXZGsk?utWz&B
z%~g)r`cav7&DrUmcS@eG&r!W%u$4E?unw!<l(fF}<O?hGi!`Y(l9}ibZ0_OjO*C|v
z;%*#bg6UBGFH+fsf>B}qjsPE5vch#WIKoS*FyU<-uXD#PlZ<a1+W4E5rOB?fT>f8O
ze5eBb*)(&si<CX-TUxPW$KwoTn_u*lVYr7q?@4~Hmks%&onrn=EGys-rjebeE6^vo
zoHd_E+GzQF?<#i;ue<8J%|dKZf(F&TI>H2AZNg~~1!DXpWa<hS+ee6fQw>5>4JH$=
zZL>yJLGROPCMN*>R!IjbTlo8>j;+H%M(U+Yuv*8)*z@Hs4r-8DvLpwbBf;MoUa-L0
z2ogdWogmK7lDBy!#e^Av*UDD(kZ&2qbd-SgODf5D7z;J)g3Qt+i1KycLv6O5CD5N|
zT7wIcPPg4xI2dYpPXHgsyR|0PgzyHmDKK#7+(~$EJniqbFxnPeivnQ)ezqGz*(vN+
z5m`)B-Pc&nkdp3f&gr=0>n_O^$DYkXZF>WfQ(xuUdc*!Q#qv`iW*e0J8x~M#+diXd
zY5mvXSmG(LZB+AWFWeP77PT3Iy}nvQt-RgSw(LBQyR{YwW)B_c3xu9~LlITG0fqne
zx?XZ*Hp#7hir5|U%M>2faC?QC=4Va6S-!Vhvm*px4XqyaPvrO^!_N}EM%5bw1R6+R
z#|aCu7aJW!e3`BXt@HP-h(PPp(9^z#^{cwFCZkf@a7;`_Va$22Plb02aNqdxZ;V)B
zj-qNyBzMVZT*?+HxI4a?_JKtrkDby8Q<-M$&d9)QKWR9P=B&yUMs-_)(rkw&9rCNp
zMEj$!-va6?)R~Cs!|1n3diUC#&H6;4m+I6sUHRh^twDS5HN=DVXLnNEY=aXHvPR#j
z9S->iGL{|3S5c$nYrqMktAq)gj!tFa-GG-b2u6N})aZaXNmZkBN=ems{QJD21&VB@
zRuY#KTDh^Raw3B37-on@GIe8}o}K7$xWx_e*Xz`zR^Q(`55bmR;j7!d;I>SN4Y{?q
zfcZH79D=Ks3Zh`SEI;(eF2~4DCKkLjgeU@x=u1b9(w0n+O^fB}o+VV9*Yf(?W!@we
zz$>d_{}*xbTdHgCV6!Uh3V;=skun}Q2PCnZJ?eZ($kUJdF@h(Xcz(MUluTRw{U!v@
zm9H|%14-Fj2%S+pdU6tW3*A&7No(q-cX2e;Y)SE+4Y=^lxCybbQ9^spK|C$)tpOSt
z%P})sXl?c=bFQuuqI?Njv80~g0{67?CILGVoDI2$o8LZb-2|c+EY7rMKi-o86a>hV
z?!G_e$Fkh7LCn$)kX%5f)8i3DP1CrcH4FJ8J%gNV`LBvuV*~@+%cs}G{-i+~vuOXr
zi^>;W4nHT?g}(0=VN`rJg0Jkas^BwrdbSol@g9~E^V#>>GR_ovT2ZjIS$ohYa(y=c
zH+g>KU68xtz{K?u;t|4{yv-EL0eg+HF-@>_O*JT%FGb4}n5+UqLrM3DgQ$GY`|}B+
z`<a(h=io(SBQD0n^dQ`>p9Daj(A;R;EI933m?yaqI-HNGfjleRp}po<@|sWSsK{cy
zG449Nw!{<1(wSYKpglcS^|3ac6ysuLolEVkwb`>BjaiF91dp1pupEXuUS8MXR>qME
zQw7iuN+qo22X~xFKP_gSJfcMC%~i-Z4^T!&k9fVB<B&LH&bSWqnA6MwFt5lwsOfK*
zhOZBcDnuFX(oz~OUs+?XQY|?E4-D9N83ZGgy+u~!pbvM@)n@HlcRw|_u3xaeAIYy8
z@l4-P#5b23l0$@vX<8nWe(wFRC_b7}YN4PHlE8R_Ct<i0)hY<o$qIlK<4gQ_qc)3>
zULApWXT4AP-w#`;hqv43b7?p+V-xhY=25UQd`OKj6l;yxy2%-_7cQ3bXj_VBb==l)
z?8@)t1Gf1j1JW;_DM4cPg>w~42hBo1T}jO&XNf$qrO<jOh2e^H!XchO?Ht!EuCh@{
zljg!|ZjtJ!hb?x14*k~+eBXpWa1B7MtYd;U%tMjqb<v>4$As0rAOriyd3d&6$x>Dd
z0Zmse<|$P+SH-_m=7?9H{N?uo%fH&|1>N&zgDKi_LT!5ZHK=?LuU=u9GZYyhtU_#Q
z^26PQxRFsdVpal&Db(HJ1~7;BhJ=SiVk_O`Y8^?83pFK@0pM`0ed)*c0u4t)jXFXy
z^p_+8!7z;x&qmMuYLgvBEz)$!vTxIa=&`?yDlWUP#TCd~ROSjJi0P#2GRf<_*MMlX
zqn)mHju*5p5S`8Q<oWM8xI<xbEk;PgHWjMP-(HmdIps;tO4NfsF|nDrf{Fm?Q9`x2
zh~vbEkKWYk56sQSr@wpva_rx(^V%uaTQQ9WatE<<c8#U;rlYoAQlH%m*3IKE`x$pO
zT6RD*Ut}`*qZ1ex6~3F?(HWOKb~j8p*cZEWXaG7peZVjjs@8q%Ll?%)#BLvx(O9xL
z_myKh+qT2a!g)-$91$#xOw_%|a*YUvlgET^B<l`61JGdaX`Dkx51Ep!E_fJrOcDMo
z;@pU&Ln{Wr_RGjadWdV~TcuzB6R7{9QvW;RVmqIEQy=q>75{%Sg(f|W1KwyFYf%nX
zf$%sUAdq3o!aVoC`OUzYEdjUVGRylX#c#-8``wAXada@#bFpt$dZOH;S0tmUV2`GZ
zB+P3KuEF(lFpvQ~%wa&svnJl+Y+n`wJkbo@_()6q?Ek?E`JamY(9sEvqkzJtT92Q{
zKMaJQ>pXhyWdGb*&C%QWxTBMol~a_GRg#ibF_%?QlT%Prl$Vs1Rg;x{FOtylp9G*V
bC$}d7|6E`Wq3nAsK&P+sK)dvgUHHEN|G>}r

literal 0
HcmV?d00001

diff --git a/docs/images/factory_init_injections.png b/docs/images/factory_init_injections.png
new file mode 100644
index 0000000000000000000000000000000000000000..31ddc5b77e14da81ff5e558ffdc24fbac2076f5f
GIT binary patch
literal 4112
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
Q?m0jZdM4NFbZ_4K7b&}hYybcN

literal 0
HcmV?d00001

diff --git a/docs/images/factory_init_injections_and_contexts.png b/docs/images/factory_init_injections_and_contexts.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3328ed00ceb77c36fa18bc30df5aa26edce29d6
GIT binary patch
literal 7370
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
R#Y!?DQ;<`UErGr8|2KeBw50$5

literal 0
HcmV?d00001

diff --git a/docs/images/factory_method_injections.png b/docs/images/factory_method_injections.png
new file mode 100644
index 0000000000000000000000000000000000000000..95a44af706bacc859c92f6481a847537928ab125
GIT binary patch
literal 8747
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
bf9YuN|33>fNVYiK2;ga|={`lMJb(Kii-q>!

literal 0
HcmV?d00001

diff --git a/docs/providers.rst b/docs/providers.rst
index 84f96890..55f665a9 100644
--- a/docs/providers.rst
+++ b/docs/providers.rst
@@ -72,6 +72,8 @@ Example below shows how to create ``Factory`` of particular class with
 ``__init__`` keyword argument injections which injectable values are also
 provided by another factories:
 
+.. image:: images/factory_init_injections.png
+
 .. code-block:: python
 
     """`Factory` providers with init injections example."""
@@ -105,8 +107,8 @@ provided by another factories:
                             KwArg('main_photo', photos_factory))
 
     # Creating several User objects:
-    user1 = users_factory()  # Same as: User(main_photo=Photo())
-    user2 = users_factory()  # Same as: User(main_photo=Photo())
+    user1 = users_factory()  # Same as: user1 = User(main_photo=Photo())
+    user2 = users_factory()  # Same as: user2 = User(main_photo=Photo())
 
     # Making some asserts:
     assert isinstance(user1, User)
@@ -125,6 +127,8 @@ passes positional context arguments to class's ``__init__`` method, but
 keyword context arguments have priority on ``KwArg`` injections (this could be
 useful for testing). So, please, follow the example below:
 
+.. image:: images/factory_init_injections_and_contexts.png
+
 .. code-block:: python
 
     """`Factory` providers with init injections and context arguments example."""
@@ -177,12 +181,12 @@ useful for testing). So, please, follow the example below:
                             KwArg('credit_card', credit_cards_factory))
 
     # Creating several User objects:
-    user1 = users_factory(1)  # Same as: User(1,
-                              #               main_photo=Photo(),
-                              #               credit_card=CreditCard())
-    user2 = users_factory(2)  # Same as: User(2,
-                              #               main_photo=Photo(),
-                              #               credit_card=CreditCard())
+    user1 = users_factory(1)  # Same as: user1 = User(1,
+                              #                       main_photo=Photo(),
+                              #                       credit_card=CreditCard())
+    user2 = users_factory(2)  # Same as: user2 = User(2,
+                              #                       main_photo=Photo(),
+                              #                       credit_card=CreditCard())
 
     # Making some asserts:
     assert user1.id == 1
@@ -211,12 +215,146 @@ useful for testing). So, please, follow the example below:
 Factory providers and attribute injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    - Attributes example.
+Example below shows how to create ``Factory`` of particular class with
+attribute injections. Those injections are done by setting specified attributes
+with injectable values right after object's creation.
+
+.. image:: images/factory_attribute_injections.png
+
+.. code-block:: python
+
+    """`Factory` providers with attribute injections example."""
+
+    from objects.providers import Factory
+    from objects.injections import Attribute
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self):
+            """Initializer."""
+            self.main_photo = None
+            self.credit_card = None
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    class CreditCard(object):
+
+        """Example class CreditCard."""
+
+
+    # User, Photo and CreditCard factories:
+    credit_cards_factory = Factory(CreditCard)
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            Attribute('main_photo', photos_factory),
+                            Attribute('credit_card', credit_cards_factory))
+
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: user1 = User()
+                             #          user1.main_photo = Photo()
+                             #          user1.credit_card = CreditCard()
+    user2 = users_factory()  # Same as: user2 = User()
+                             #          user2.main_photo = Photo()
+                             #          user2.credit_card = CreditCard()
+
+    # Making some asserts:
+    assert user1 is not user2
+
+    assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user1.credit_card, CreditCard)
+
+    assert isinstance(user2.main_photo, Photo)
+    assert isinstance(user2.credit_card, CreditCard)
+
+    assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
+
 
 Factory providers and method injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    - Method example.
+Current example shows how to create ``Factory`` of particular class with
+method injections. Those injections are done by calling of specified method
+with injectable value right after object's creation and attribute injections
+are done.
+
+Method injections are not very popular in Python due Python best practices
+(usage of public attributes instead of setter methods), but it may appear in
+some cases.
+
+.. image:: images/factory_method_injections.png
+
+.. code-block:: python
+
+    """`Factory` providers with method injections example."""
+
+    from objects.providers import Factory
+    from objects.injections import Method
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self):
+            """Initializer."""
+            self.main_photo = None
+            self.credit_card = None
+
+        def set_main_photo(self, photo):
+            """Set user's main photo."""
+            self.main_photo = photo
+
+        def set_credit_card(self, credit_card):
+            """Set user's credit card."""
+            self.credit_card = credit_card
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    class CreditCard(object):
+
+        """Example class CreditCard."""
+
+
+    # User, Photo and CreditCard factories:
+    credit_cards_factory = Factory(CreditCard)
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            Method('set_main_photo', photos_factory),
+                            Method('set_credit_card', credit_cards_factory))
+
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: user1 = User()
+                             #          user1.set_main_photo(Photo())
+                             #          user1.set_credit_card(CreditCard())
+    user2 = users_factory()  # Same as: user2 = User()
+                             #          user2.set_main_photo(Photo())
+                             #          user2.set_credit_card(CreditCard())
+
+    # Making some asserts:
+    assert user1 is not user2
+
+    assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user1.credit_card, CreditCard)
+
+    assert isinstance(user2.main_photo, Photo)
+    assert isinstance(user2.credit_card, CreditCard)
+
+    assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
+
+
 
 Instance providers & Injections
 -------------------------------
diff --git a/examples/providers/factory_attribute_injections.py b/examples/providers/factory_attribute_injections.py
new file mode 100644
index 00000000..1e5f1e79
--- /dev/null
+++ b/examples/providers/factory_attribute_injections.py
@@ -0,0 +1,52 @@
+"""`Factory` providers with attribute injections example."""
+
+from objects.providers import Factory
+from objects.injections import Attribute
+
+
+class User(object):
+
+    """Example class User."""
+
+    def __init__(self):
+        """Initializer."""
+        self.main_photo = None
+        self.credit_card = None
+
+
+class Photo(object):
+
+    """Example class Photo."""
+
+
+class CreditCard(object):
+
+    """Example class CreditCard."""
+
+
+# User, Photo and CreditCard factories:
+credit_cards_factory = Factory(CreditCard)
+photos_factory = Factory(Photo)
+users_factory = Factory(User,
+                        Attribute('main_photo', photos_factory),
+                        Attribute('credit_card', credit_cards_factory))
+
+# Creating several User objects:
+user1 = users_factory()  # Same as: user1 = User()
+                         #          user1.main_photo = Photo()
+                         #          user1.credit_card = CreditCard()
+user2 = users_factory()  # Same as: user2 = User()
+                         #          user2.main_photo = Photo()
+                         #          user2.credit_card = CreditCard()
+
+# Making some asserts:
+assert user1 is not user2
+
+assert isinstance(user1.main_photo, Photo)
+assert isinstance(user1.credit_card, CreditCard)
+
+assert isinstance(user2.main_photo, Photo)
+assert isinstance(user2.credit_card, CreditCard)
+
+assert user1.main_photo is not user2.main_photo
+assert user1.credit_card is not user2.credit_card
diff --git a/examples/providers/factory_init_injections.py b/examples/providers/factory_init_injections.py
index 02d79998..9d068ed3 100644
--- a/examples/providers/factory_init_injections.py
+++ b/examples/providers/factory_init_injections.py
@@ -29,8 +29,8 @@ users_factory = Factory(User,
                         KwArg('main_photo', photos_factory))
 
 # Creating several User objects:
-user1 = users_factory()  # Same as: User(main_photo=Photo())
-user2 = users_factory()  # Same as: User(main_photo=Photo())
+user1 = users_factory()  # Same as: user1 = User(main_photo=Photo())
+user2 = users_factory()  # Same as: user2 = User(main_photo=Photo())
 
 # Making some asserts:
 assert isinstance(user1, User)
diff --git a/examples/providers/factory_init_injections_and_contexts.py b/examples/providers/factory_init_injections_and_contexts.py
index de78273a..a43e5f5a 100644
--- a/examples/providers/factory_init_injections_and_contexts.py
+++ b/examples/providers/factory_init_injections_and_contexts.py
@@ -48,12 +48,12 @@ users_factory = Factory(User,
                         KwArg('credit_card', credit_cards_factory))
 
 # Creating several User objects:
-user1 = users_factory(1)  # Same as: User(1,
-                          #               main_photo=Photo(),
-                          #               credit_card=CreditCard())
-user2 = users_factory(2)  # Same as: User(2,
-                          #               main_photo=Photo(),
-                          #               credit_card=CreditCard())
+user1 = users_factory(1)  # Same as: user1 = User(1,
+                          #                       main_photo=Photo(),
+                          #                       credit_card=CreditCard())
+user2 = users_factory(2)  # Same as: user2 = User(2,
+                          #                       main_photo=Photo(),
+                          #                       credit_card=CreditCard())
 
 # Making some asserts:
 assert user1.id == 1
diff --git a/examples/providers/factory_method_injections.py b/examples/providers/factory_method_injections.py
new file mode 100644
index 00000000..83897a52
--- /dev/null
+++ b/examples/providers/factory_method_injections.py
@@ -0,0 +1,60 @@
+"""`Factory` providers with method injections example."""
+
+from objects.providers import Factory
+from objects.injections import Method
+
+
+class User(object):
+
+    """Example class User."""
+
+    def __init__(self):
+        """Initializer."""
+        self.main_photo = None
+        self.credit_card = None
+
+    def set_main_photo(self, photo):
+        """Set user's main photo."""
+        self.main_photo = photo
+
+    def set_credit_card(self, credit_card):
+        """Set user's credit card."""
+        self.credit_card = credit_card
+
+
+class Photo(object):
+
+    """Example class Photo."""
+
+
+class CreditCard(object):
+
+    """Example class CreditCard."""
+
+
+# User, Photo and CreditCard factories:
+credit_cards_factory = Factory(CreditCard)
+photos_factory = Factory(Photo)
+users_factory = Factory(User,
+                        Method('set_main_photo', photos_factory),
+                        Method('set_credit_card', credit_cards_factory))
+
+# Creating several User objects:
+user1 = users_factory()  # Same as: user1 = User()
+                         #          user1.set_main_photo(Photo())
+                         #          user1.set_credit_card(CreditCard())
+user2 = users_factory()  # Same as: user2 = User()
+                         #          user2.set_main_photo(Photo())
+                         #          user2.set_credit_card(CreditCard())
+
+# Making some asserts:
+assert user1 is not user2
+
+assert isinstance(user1.main_photo, Photo)
+assert isinstance(user1.credit_card, CreditCard)
+
+assert isinstance(user2.main_photo, Photo)
+assert isinstance(user2.credit_card, CreditCard)
+
+assert user1.main_photo is not user2.main_photo
+assert user1.credit_card is not user2.credit_card

From 3123574cf644e528ef6805bdef05f14d68de24bb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 10 Jun 2015 09:53:15 +0300
Subject: [PATCH 28/73] Changing provider docs structure

---
 docs/{providers.rst => _providers.rst} |  13 +-
 docs/index.rst                         |   2 +-
 docs/providers/factory.rst             | 348 +++++++++++++++++++++++++
 docs/providers/index.rst               |  12 +
 4 files changed, 370 insertions(+), 5 deletions(-)
 rename docs/{providers.rst => _providers.rst} (98%)
 create mode 100644 docs/providers/factory.rst
 create mode 100644 docs/providers/index.rst

diff --git a/docs/providers.rst b/docs/_providers.rst
similarity index 98%
rename from docs/providers.rst
rename to docs/_providers.rst
index 55f665a9..a316d4dd 100644
--- a/docs/providers.rst
+++ b/docs/_providers.rst
@@ -72,7 +72,7 @@ Example below shows how to create ``Factory`` of particular class with
 ``__init__`` keyword argument injections which injectable values are also
 provided by another factories:
 
-.. image:: images/factory_init_injections.png
+.. image:: ../images/factory_init_injections.png
 
 .. code-block:: python
 
@@ -127,7 +127,7 @@ passes positional context arguments to class's ``__init__`` method, but
 keyword context arguments have priority on ``KwArg`` injections (this could be
 useful for testing). So, please, follow the example below:
 
-.. image:: images/factory_init_injections_and_contexts.png
+.. image:: ../images/factory_init_injections_and_contexts.png
 
 .. code-block:: python
 
@@ -219,7 +219,7 @@ Example below shows how to create ``Factory`` of particular class with
 attribute injections. Those injections are done by setting specified attributes
 with injectable values right after object's creation.
 
-.. image:: images/factory_attribute_injections.png
+.. image:: ../images/factory_attribute_injections.png
 
 .. code-block:: python
 
@@ -289,7 +289,7 @@ Method injections are not very popular in Python due Python best practices
 (usage of public attributes instead of setter methods), but it may appear in
 some cases.
 
-.. image:: images/factory_method_injections.png
+.. image:: ../images/factory_method_injections.png
 
 .. code-block:: python
 
@@ -355,6 +355,11 @@ some cases.
     assert user1.credit_card is not user2.credit_card
 
 
+Singleton providers
+-------------------
+
+``Singleton`` provider creates new instance of specified class on first call
+and returns same instance on every next call.
 
 Instance providers & Injections
 -------------------------------
diff --git a/docs/index.rst b/docs/index.rst
index ad7a2c2b..c35ee4de 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -38,7 +38,7 @@ Contents
 
     introduction
     installation
-    providers
+    providers/index
     injections
     catalogs
     decorators
diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
new file mode 100644
index 00000000..0388cc5b
--- /dev/null
+++ b/docs/providers/factory.rst
@@ -0,0 +1,348 @@
+Factory providers
+-----------------
+
+``Factory`` provider creates new instance of specified class on every call.
+
+Nothing could be better than brief example:
+
+.. code-block:: python
+
+    """`Factory` providers example."""
+
+    from objects.providers import Factory
+
+
+    class User(object):
+
+        """Example class User."""
+
+
+    # Factory provider creates new instance of specified class on every call.
+    users_factory = Factory(User)
+
+    user1 = users_factory()
+    user2 = users_factory()
+
+    assert user1 is not user2
+    assert isinstance(user1, User) and isinstance(user2, User)
+
+
+Factory providers and injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Objects can take dependencies in different forms. Some objects take init
+arguments, other are using attributes setting or method calls to be
+initialized. It affects how such objects need to be created and initialized,
+and that is the place where ``objects.injections`` need to be used.
+
+``Factory`` provider takes various number of positional arguments, that define
+what kind of dependency injections need to be done.
+
+All of those instructions are defined in ``objects.injections`` module and are
+subclasses of ``objects.injections.Injection``. There  are several types of
+injections that are used by ``Factory`` provider:
+
+    - ``KwArg`` - injection is done by passing injectable value in object's
+      ``__init__()`` method in time of object's creation via keyword argument.
+      Takes keyword name of ``__init__()`` argument and injectable value.
+    - ``Attribute`` - injection is done by setting specified attribute with
+      injectable value right after object's creation. Takes attribute name and
+      injectable value.
+    - ``Method`` - injection is done by calling of specified method with
+      injectable value right after object's creation and attribute injections
+      are done. Takes method name and injectable value.
+
+All ``Injection``'s injectable values are provided *"as is"*, except of
+providers. Providers will be called every time, when injection needs to be
+done.
+
+
+Factory providers and __init__ injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Example below shows how to create ``Factory`` of particular class with
+``__init__`` keyword argument injections which injectable values are also
+provided by another factories:
+
+.. image:: /images/factory_init_injections.png
+
+.. code-block:: python
+
+    """`Factory` providers with init injections example."""
+
+    from objects.providers import Factory
+    from objects.injections import KwArg
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self, main_photo):
+            """Initializer.
+
+            :param main_photo: Photo
+            :return:
+            """
+            self.main_photo = main_photo
+            super(User, self).__init__()
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    # User and Photo factories:
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            KwArg('main_photo', photos_factory))
+
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: user1 = User(main_photo=Photo())
+    user2 = users_factory()  # Same as: user2 = User(main_photo=Photo())
+
+    # Making some asserts:
+    assert isinstance(user1, User)
+    assert isinstance(user1.main_photo, Photo)
+
+    assert isinstance(user2, User)
+    assert isinstance(user2.main_photo, Photo)
+
+    assert user1 is not user2
+    assert user1.main_photo is not user2.main_photo
+
+
+Next example shows how ``Factory`` provider deals with positional and keyword
+``__init__`` context arguments. In few words, ``Factory`` provider fully
+passes positional context arguments to class's ``__init__`` method, but
+keyword context arguments have priority on ``KwArg`` injections (this could be
+useful for testing). So, please, follow the example below:
+
+.. image:: /images/factory_init_injections_and_contexts.png
+
+.. code-block:: python
+
+    """`Factory` providers with init injections and context arguments example."""
+
+    from objects.providers import Factory
+    from objects.injections import KwArg
+
+
+    class User(object):
+
+        """Example class User.
+
+        Class User has to be provided with user id.
+
+        Also Class User has dependencies on class Photo and class CreditCard
+        objects.
+
+        All of the dependencies have to be provided like __init__ arguments.
+        """
+
+        def __init__(self, id, main_photo, credit_card):
+            """Initializer.
+
+            :param id: int
+            :param main_photo: Photo
+            :param credit_card: CreditCard
+            :return:
+            """
+            self.id = id
+            self.main_photo = main_photo
+            self.credit_card = credit_card
+            super(User, self).__init__()
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    class CreditCard(object):
+
+        """Example class CreditCard."""
+
+
+    # User, Photo and CreditCard factories:
+    credit_cards_factory = Factory(CreditCard)
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            KwArg('main_photo', photos_factory),
+                            KwArg('credit_card', credit_cards_factory))
+
+    # Creating several User objects:
+    user1 = users_factory(1)  # Same as: user1 = User(1,
+                              #                       main_photo=Photo(),
+                              #                       credit_card=CreditCard())
+    user2 = users_factory(2)  # Same as: user2 = User(2,
+                              #                       main_photo=Photo(),
+                              #                       credit_card=CreditCard())
+
+    # Making some asserts:
+    assert user1.id == 1
+    assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user1.credit_card, CreditCard)
+
+    assert user2.id == 2
+    assert isinstance(user2.main_photo, Photo)
+    assert isinstance(user2.credit_card, CreditCard)
+
+    assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
+
+    # Context keyword arguments have priority on KwArg injections priority:
+    main_photo_mock = Photo()
+    credit_card_mock = CreditCard()
+
+    user3 = users_factory(3, main_photo=main_photo_mock,
+                          credit_card=credit_card_mock)
+
+    assert user3.id == 3
+    assert user3.main_photo is main_photo_mock
+    assert user3.credit_card is credit_card_mock
+
+
+Factory providers and attribute injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Example below shows how to create ``Factory`` of particular class with
+attribute injections. Those injections are done by setting specified attributes
+with injectable values right after object's creation.
+
+.. image:: /images/factory_attribute_injections.png
+
+.. code-block:: python
+
+    """`Factory` providers with attribute injections example."""
+
+    from objects.providers import Factory
+    from objects.injections import Attribute
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self):
+            """Initializer."""
+            self.main_photo = None
+            self.credit_card = None
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    class CreditCard(object):
+
+        """Example class CreditCard."""
+
+
+    # User, Photo and CreditCard factories:
+    credit_cards_factory = Factory(CreditCard)
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            Attribute('main_photo', photos_factory),
+                            Attribute('credit_card', credit_cards_factory))
+
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: user1 = User()
+                             #          user1.main_photo = Photo()
+                             #          user1.credit_card = CreditCard()
+    user2 = users_factory()  # Same as: user2 = User()
+                             #          user2.main_photo = Photo()
+                             #          user2.credit_card = CreditCard()
+
+    # Making some asserts:
+    assert user1 is not user2
+
+    assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user1.credit_card, CreditCard)
+
+    assert isinstance(user2.main_photo, Photo)
+    assert isinstance(user2.credit_card, CreditCard)
+
+    assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
+
+
+Factory providers and method injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Current example shows how to create ``Factory`` of particular class with
+method injections. Those injections are done by calling of specified method
+with injectable value right after object's creation and attribute injections
+are done.
+
+Method injections are not very popular in Python due Python best practices
+(usage of public attributes instead of setter methods), but it may appear in
+some cases.
+
+.. image:: /images/factory_method_injections.png
+
+.. code-block:: python
+
+    """`Factory` providers with method injections example."""
+
+    from objects.providers import Factory
+    from objects.injections import Method
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self):
+            """Initializer."""
+            self.main_photo = None
+            self.credit_card = None
+
+        def set_main_photo(self, photo):
+            """Set user's main photo."""
+            self.main_photo = photo
+
+        def set_credit_card(self, credit_card):
+            """Set user's credit card."""
+            self.credit_card = credit_card
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+
+    class CreditCard(object):
+
+        """Example class CreditCard."""
+
+
+    # User, Photo and CreditCard factories:
+    credit_cards_factory = Factory(CreditCard)
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            Method('set_main_photo', photos_factory),
+                            Method('set_credit_card', credit_cards_factory))
+
+    # Creating several User objects:
+    user1 = users_factory()  # Same as: user1 = User()
+                             #          user1.set_main_photo(Photo())
+                             #          user1.set_credit_card(CreditCard())
+    user2 = users_factory()  # Same as: user2 = User()
+                             #          user2.set_main_photo(Photo())
+                             #          user2.set_credit_card(CreditCard())
+
+    # Making some asserts:
+    assert user1 is not user2
+
+    assert isinstance(user1.main_photo, Photo)
+    assert isinstance(user1.credit_card, CreditCard)
+
+    assert isinstance(user2.main_photo, Photo)
+    assert isinstance(user2.credit_card, CreditCard)
+
+    assert user1.main_photo is not user2.main_photo
+    assert user1.credit_card is not user2.credit_card
+
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
new file mode 100644
index 00000000..92a9a0d1
--- /dev/null
+++ b/docs/providers/index.rst
@@ -0,0 +1,12 @@
+Providers
+=========
+
+Providers are strategies of accessing objects.
+
+All providers are callable. They describe how particular objects are provided.
+
+..  toctree::
+    :maxdepth: 2
+    :glob:
+
+    *

From d386969004db70904ccb3786906fe0e0748d216d Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 10 Jun 2015 12:00:43 +0300
Subject: [PATCH 29/73] Adding Singleton docs & making some changes for Factory
 docs

---
 docs/_providers.rst                      | 486 -----------------------
 docs/providers/factory.rst               |   2 +
 docs/providers/singleton.rst             |  97 +++++
 examples/providers/factory.py            |   2 +
 examples/providers/singleton.py          |  22 +
 examples/providers/singleton_reseting.py |  31 ++
 6 files changed, 154 insertions(+), 486 deletions(-)
 create mode 100644 docs/providers/singleton.rst
 create mode 100644 examples/providers/singleton.py
 create mode 100644 examples/providers/singleton_reseting.py

diff --git a/docs/_providers.rst b/docs/_providers.rst
index a316d4dd..a4aa7394 100644
--- a/docs/_providers.rst
+++ b/docs/_providers.rst
@@ -1,492 +1,6 @@
 Providers
 =========
 
-Providers are strategies of accessing objects.
-
-All providers are callable. They describe how particular objects are provided.
-
-
-Factory providers
------------------
-
-``Factory`` provider creates new instance of specified class on every call.
-
-Nothing could be better than brief example:
-
-.. code-block:: python
-
-    """`Factory` providers example."""
-
-    from objects.providers import Factory
-
-
-    class User(object):
-
-        """Example class User."""
-
-
-    # Factory provider creates new instance of specified class on every call.
-    users_factory = Factory(User)
-
-    user1 = users_factory()
-    user2 = users_factory()
-
-    assert user1 is not user2
-    assert isinstance(user1, User) and isinstance(user2, User)
-
-
-Factory providers and injections
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Objects can take dependencies in different forms. Some objects take init
-arguments, other are using attributes setting or method calls to be
-initialized. It affects how such objects need to be created and initialized,
-and that is the place where ``objects.injections`` need to be used.
-
-``Factory`` provider takes various number of positional arguments, that define
-what kind of dependency injections need to be done.
-
-All of those instructions are defined in ``objects.injections`` module and are
-subclasses of ``objects.injections.Injection``. There  are several types of
-injections that are used by ``Factory`` provider:
-
-    - ``KwArg`` - injection is done by passing injectable value in object's
-      ``__init__()`` method in time of object's creation via keyword argument.
-      Takes keyword name of ``__init__()`` argument and injectable value.
-    - ``Attribute`` - injection is done by setting specified attribute with
-      injectable value right after object's creation. Takes attribute name and
-      injectable value.
-    - ``Method`` - injection is done by calling of specified method with
-      injectable value right after object's creation and attribute injections
-      are done. Takes method name and injectable value.
-
-All ``Injection``'s injectable values are provided *"as is"*, except of
-providers. Providers will be called every time, when injection needs to be
-done.
-
-
-Factory providers and __init__ injections
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Example below shows how to create ``Factory`` of particular class with
-``__init__`` keyword argument injections which injectable values are also
-provided by another factories:
-
-.. image:: ../images/factory_init_injections.png
-
-.. code-block:: python
-
-    """`Factory` providers with init injections example."""
-
-    from objects.providers import Factory
-    from objects.injections import KwArg
-
-
-    class User(object):
-
-        """Example class User."""
-
-        def __init__(self, main_photo):
-            """Initializer.
-
-            :param main_photo: Photo
-            :return:
-            """
-            self.main_photo = main_photo
-            super(User, self).__init__()
-
-
-    class Photo(object):
-
-        """Example class Photo."""
-
-
-    # User and Photo factories:
-    photos_factory = Factory(Photo)
-    users_factory = Factory(User,
-                            KwArg('main_photo', photos_factory))
-
-    # Creating several User objects:
-    user1 = users_factory()  # Same as: user1 = User(main_photo=Photo())
-    user2 = users_factory()  # Same as: user2 = User(main_photo=Photo())
-
-    # Making some asserts:
-    assert isinstance(user1, User)
-    assert isinstance(user1.main_photo, Photo)
-
-    assert isinstance(user2, User)
-    assert isinstance(user2.main_photo, Photo)
-
-    assert user1 is not user2
-    assert user1.main_photo is not user2.main_photo
-
-
-Next example shows how ``Factory`` provider deals with positional and keyword
-``__init__`` context arguments. In few words, ``Factory`` provider fully
-passes positional context arguments to class's ``__init__`` method, but
-keyword context arguments have priority on ``KwArg`` injections (this could be
-useful for testing). So, please, follow the example below:
-
-.. image:: ../images/factory_init_injections_and_contexts.png
-
-.. code-block:: python
-
-    """`Factory` providers with init injections and context arguments example."""
-
-    from objects.providers import Factory
-    from objects.injections import KwArg
-
-
-    class User(object):
-
-        """Example class User.
-
-        Class User has to be provided with user id.
-
-        Also Class User has dependencies on class Photo and class CreditCard
-        objects.
-
-        All of the dependencies have to be provided like __init__ arguments.
-        """
-
-        def __init__(self, id, main_photo, credit_card):
-            """Initializer.
-
-            :param id: int
-            :param main_photo: Photo
-            :param credit_card: CreditCard
-            :return:
-            """
-            self.id = id
-            self.main_photo = main_photo
-            self.credit_card = credit_card
-            super(User, self).__init__()
-
-
-    class Photo(object):
-
-        """Example class Photo."""
-
-
-    class CreditCard(object):
-
-        """Example class CreditCard."""
-
-
-    # User, Photo and CreditCard factories:
-    credit_cards_factory = Factory(CreditCard)
-    photos_factory = Factory(Photo)
-    users_factory = Factory(User,
-                            KwArg('main_photo', photos_factory),
-                            KwArg('credit_card', credit_cards_factory))
-
-    # Creating several User objects:
-    user1 = users_factory(1)  # Same as: user1 = User(1,
-                              #                       main_photo=Photo(),
-                              #                       credit_card=CreditCard())
-    user2 = users_factory(2)  # Same as: user2 = User(2,
-                              #                       main_photo=Photo(),
-                              #                       credit_card=CreditCard())
-
-    # Making some asserts:
-    assert user1.id == 1
-    assert isinstance(user1.main_photo, Photo)
-    assert isinstance(user1.credit_card, CreditCard)
-
-    assert user2.id == 2
-    assert isinstance(user2.main_photo, Photo)
-    assert isinstance(user2.credit_card, CreditCard)
-
-    assert user1.main_photo is not user2.main_photo
-    assert user1.credit_card is not user2.credit_card
-
-    # Context keyword arguments have priority on KwArg injections priority:
-    main_photo_mock = Photo()
-    credit_card_mock = CreditCard()
-
-    user3 = users_factory(3, main_photo=main_photo_mock,
-                          credit_card=credit_card_mock)
-
-    assert user3.id == 3
-    assert user3.main_photo is main_photo_mock
-    assert user3.credit_card is credit_card_mock
-
-
-Factory providers and attribute injections
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Example below shows how to create ``Factory`` of particular class with
-attribute injections. Those injections are done by setting specified attributes
-with injectable values right after object's creation.
-
-.. image:: ../images/factory_attribute_injections.png
-
-.. code-block:: python
-
-    """`Factory` providers with attribute injections example."""
-
-    from objects.providers import Factory
-    from objects.injections import Attribute
-
-
-    class User(object):
-
-        """Example class User."""
-
-        def __init__(self):
-            """Initializer."""
-            self.main_photo = None
-            self.credit_card = None
-
-
-    class Photo(object):
-
-        """Example class Photo."""
-
-
-    class CreditCard(object):
-
-        """Example class CreditCard."""
-
-
-    # User, Photo and CreditCard factories:
-    credit_cards_factory = Factory(CreditCard)
-    photos_factory = Factory(Photo)
-    users_factory = Factory(User,
-                            Attribute('main_photo', photos_factory),
-                            Attribute('credit_card', credit_cards_factory))
-
-    # Creating several User objects:
-    user1 = users_factory()  # Same as: user1 = User()
-                             #          user1.main_photo = Photo()
-                             #          user1.credit_card = CreditCard()
-    user2 = users_factory()  # Same as: user2 = User()
-                             #          user2.main_photo = Photo()
-                             #          user2.credit_card = CreditCard()
-
-    # Making some asserts:
-    assert user1 is not user2
-
-    assert isinstance(user1.main_photo, Photo)
-    assert isinstance(user1.credit_card, CreditCard)
-
-    assert isinstance(user2.main_photo, Photo)
-    assert isinstance(user2.credit_card, CreditCard)
-
-    assert user1.main_photo is not user2.main_photo
-    assert user1.credit_card is not user2.credit_card
-
-
-Factory providers and method injections
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Current example shows how to create ``Factory`` of particular class with
-method injections. Those injections are done by calling of specified method
-with injectable value right after object's creation and attribute injections
-are done.
-
-Method injections are not very popular in Python due Python best practices
-(usage of public attributes instead of setter methods), but it may appear in
-some cases.
-
-.. image:: ../images/factory_method_injections.png
-
-.. code-block:: python
-
-    """`Factory` providers with method injections example."""
-
-    from objects.providers import Factory
-    from objects.injections import Method
-
-
-    class User(object):
-
-        """Example class User."""
-
-        def __init__(self):
-            """Initializer."""
-            self.main_photo = None
-            self.credit_card = None
-
-        def set_main_photo(self, photo):
-            """Set user's main photo."""
-            self.main_photo = photo
-
-        def set_credit_card(self, credit_card):
-            """Set user's credit card."""
-            self.credit_card = credit_card
-
-
-    class Photo(object):
-
-        """Example class Photo."""
-
-
-    class CreditCard(object):
-
-        """Example class CreditCard."""
-
-
-    # User, Photo and CreditCard factories:
-    credit_cards_factory = Factory(CreditCard)
-    photos_factory = Factory(Photo)
-    users_factory = Factory(User,
-                            Method('set_main_photo', photos_factory),
-                            Method('set_credit_card', credit_cards_factory))
-
-    # Creating several User objects:
-    user1 = users_factory()  # Same as: user1 = User()
-                             #          user1.set_main_photo(Photo())
-                             #          user1.set_credit_card(CreditCard())
-    user2 = users_factory()  # Same as: user2 = User()
-                             #          user2.set_main_photo(Photo())
-                             #          user2.set_credit_card(CreditCard())
-
-    # Making some asserts:
-    assert user1 is not user2
-
-    assert isinstance(user1.main_photo, Photo)
-    assert isinstance(user1.credit_card, CreditCard)
-
-    assert isinstance(user2.main_photo, Photo)
-    assert isinstance(user2.credit_card, CreditCard)
-
-    assert user1.main_photo is not user2.main_photo
-    assert user1.credit_card is not user2.credit_card
-
-
-Singleton providers
--------------------
-
-``Singleton`` provider creates new instance of specified class on first call
-and returns same instance on every next call.
-
-Instance providers & Injections
--------------------------------
-
-Providers
-~~~~~~~~~
-
-*Instance* providers are providers that deal with object's creation and
-initialization.
-
-There are few *Instance* providers:
-
-    - ``Factory`` provider creates new instance of specified class on every
-      call.
-    - ``Singleton`` provider creates new instance of specified class on first
-      call and returns same instance on every next call.
-
-Example:
-
-.. code-block:: python
-
-    """`Factory` and `Singleton` providers example."""
-
-    from objects.providers import Factory
-    from objects.providers import Singleton
-
-
-    # Factory provider creates new instance of specified class on every call.
-    object_factory = Factory(object)
-
-    object_1 = object_factory()
-    object_2 = object_factory()
-
-    assert object_1 is not object_2
-    assert isinstance(object_1, object) and isinstance(object_2, object)
-
-    # Singleton provider creates new instance of specified class on first call
-    # and returns same instance on every next call.
-    single_object = Singleton(object)
-
-    single_object_1 = single_object()
-    single_object_2 = single_object()
-
-    assert single_object_1 is single_object_2
-    assert isinstance(object_1, object) and isinstance(object_2, object)
-
-
-
-Injections
-~~~~~~~~~~
-
-Objects can take dependencies in various forms. Some objects take init
-arguments, other are using attributes or methods to be initialized. It affects
-how such objects need to be created and initialized, and that is the place
-where *Injections* need to be used.
-
-In terms of computer science, *Injection of dependency* is a way how
-dependency can be coupled with dependent object.
-
-In terms of *Objects*, *Injection* is an instruction how to provide
-dependency for the particular provider.
-
-Every Python object could be an injection's value. Special case is an *Objects*
-provider as an injection's value. In such case, injection value is a result of
-injectable provider call (every time injection is done).
-
-There are several types of injections. Below is a description of how they are
-used by instance providers:
-
-    - ``KwArg`` - is injected in object's ``__init__()`` method in time of
-      object's initialization via keyword argument.
-    - ``Attribute`` - is injected into object's attribute (not class attribute)
-      after object's initialization.
-    - ``Method`` - is injected into object method's call after objects
-      initialization.
-
-Example:
-
-.. code-block:: python
-
-    """`Factory` and `Singleton` providers with injections example."""
-
-    import sqlite3
-
-    from objects.providers import Singleton
-    from objects.providers import Factory
-
-    from objects.injections import KwArg
-    from objects.injections import Attribute
-
-
-    class ObjectA(object):
-
-        """ObjectA has dependency on database."""
-
-        def __init__(self, database):
-            """Initializer.
-
-            Database dependency need to be injected via init arg."""
-            self.database = database
-
-        def get_one(self):
-            """Select one from database and return it."""
-            return self.database.execute('SELECT 1').fetchone()[0]
-
-
-    # Database and `ObjectA` providers.
-    database = Singleton(sqlite3.Connection,
-                         KwArg('database', ':memory:'),
-                         KwArg('timeout', 30),
-                         KwArg('detect_types', True),
-                         KwArg('isolation_level', 'EXCLUSIVE'),
-                         Attribute('row_factory', sqlite3.Row))
-
-    object_a_factory = Factory(ObjectA,
-                               KwArg('database', database))
-
-    # Creating several `ObjectA` instances.
-    object_a_1 = object_a_factory()
-    object_a_2 = object_a_factory()
-
-    # Making some asserts.
-    assert object_a_1 is not object_a_2
-    assert object_a_1.database is object_a_2.database is database()
-    assert object_a_1.get_one() == object_a_2.get_one() == 1
-
-
 Static providers
 ----------------
 
diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
index 0388cc5b..3d20e5a2 100644
--- a/docs/providers/factory.rst
+++ b/docs/providers/factory.rst
@@ -20,9 +20,11 @@ Nothing could be better than brief example:
     # Factory provider creates new instance of specified class on every call.
     users_factory = Factory(User)
 
+    # Creating several User objects:
     user1 = users_factory()
     user2 = users_factory()
 
+    # Making some asserts:
     assert user1 is not user2
     assert isinstance(user1, User) and isinstance(user2, User)
 
diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
new file mode 100644
index 00000000..4c26b09b
--- /dev/null
+++ b/docs/providers/singleton.rst
@@ -0,0 +1,97 @@
+Singleton providers
+-------------------
+
+``Singleton`` provider creates new instance of specified class on first call
+and returns same instance on every next call.
+
+.. code-block:: python
+
+    """`Singleton` providers example."""
+
+    from objects.providers import Singleton
+
+
+    class UserService(object):
+
+        """Example class UserService."""
+
+
+    # Singleton provider creates new instance of specified class on first call and
+    # returns same instance on every next call.
+    users_service_provider = Singleton(UserService)
+
+    # Retrieving several UserService objects:
+    user_service1 = users_service_provider()
+    user_service2 = users_service_provider()
+
+    # Making some asserts:
+    assert user_service1 is user_service2
+    assert isinstance(user_service1, UserService)
+    assert isinstance(user_service2, UserService)
+
+
+Singleton providers and injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``Singleton`` providers use ``Factory`` providers for first creation of
+specified class instance, so, all of the rules about injections are the same,
+as for ``Factory`` providers.
+
+.. note::
+
+    Due that ``Singleton`` provider creates specified class instance only on
+    the first call, all injections are done once, during the first call, also.
+    Every next call, while instance has been already created and memorized, no
+    injections are done, ``Singleton`` provider just returns memorized earlier
+    instance.
+
+    This may cause some problems, for example, in case of trying to bind
+    ``Factory`` provider with ``Singleton`` provider (provided by dependent
+    ``Factory`` instance will be injected only once, during the first call).
+    Be aware that such behaviour was made with opened eyes and is not a bug.
+
+    By the way, in such case, ``Delegate`` provider can be useful. It makes
+    possible to inject providers *as is*. Please check out full example in
+    *Providers delegation* section.
+
+Singleton providers resetting
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Created and memorized by ``Singleton`` instance can be reset. Reset of
+``Singleton``'s memorized instance is done by clearing reference to it. Further
+lifecycle of memorized instance is out of ``Singleton`` provider's control.
+
+.. code-block:: python
+
+    """`Singleton` providers resetting example."""
+
+    from objects.providers import Singleton
+
+
+    class UserService(object):
+
+        """Example class UserService."""
+
+
+    # Singleton provider creates new instance of specified class on first call and
+    # returns same instance on every next call.
+    users_service_provider = Singleton(UserService)
+
+    # Retrieving several UserService objects:
+    user_service1 = users_service_provider()
+    user_service2 = users_service_provider()
+
+    # Making some asserts:
+    assert user_service1 is user_service2
+    assert isinstance(user_service1, UserService)
+    assert isinstance(user_service2, UserService)
+
+    # Resetting of memorized instance:
+    users_service_provider.reset()
+
+    # Retrieving one more UserService object:
+    user_service3 = users_service_provider()
+
+    # Making some asserts:
+    assert user_service3 is not user_service1
+
diff --git a/examples/providers/factory.py b/examples/providers/factory.py
index 63dbbff8..35532b4b 100644
--- a/examples/providers/factory.py
+++ b/examples/providers/factory.py
@@ -11,8 +11,10 @@ class User(object):
 # Factory provider creates new instance of specified class on every call.
 users_factory = Factory(User)
 
+# Creating several User objects:
 user1 = users_factory()
 user2 = users_factory()
 
+# Making some asserts:
 assert user1 is not user2
 assert isinstance(user1, User) and isinstance(user2, User)
diff --git a/examples/providers/singleton.py b/examples/providers/singleton.py
new file mode 100644
index 00000000..1f287b58
--- /dev/null
+++ b/examples/providers/singleton.py
@@ -0,0 +1,22 @@
+"""`Singleton` providers example."""
+
+from objects.providers import Singleton
+
+
+class UserService(object):
+
+    """Example class UserService."""
+
+
+# Singleton provider creates new instance of specified class on first call and
+# returns same instance on every next call.
+users_service_provider = Singleton(UserService)
+
+# Retrieving several UserService objects:
+user_service1 = users_service_provider()
+user_service2 = users_service_provider()
+
+# Making some asserts:
+assert user_service1 is user_service2
+assert isinstance(user_service1, UserService)
+assert isinstance(user_service2, UserService)
diff --git a/examples/providers/singleton_reseting.py b/examples/providers/singleton_reseting.py
new file mode 100644
index 00000000..efe2bd88
--- /dev/null
+++ b/examples/providers/singleton_reseting.py
@@ -0,0 +1,31 @@
+"""`Singleton` providers resetting example."""
+
+from objects.providers import Singleton
+
+
+class UserService(object):
+
+    """Example class UserService."""
+
+
+# Singleton provider creates new instance of specified class on first call and
+# returns same instance on every next call.
+users_service_provider = Singleton(UserService)
+
+# Retrieving several UserService objects:
+user_service1 = users_service_provider()
+user_service2 = users_service_provider()
+
+# Making some asserts:
+assert user_service1 is user_service2
+assert isinstance(user_service1, UserService)
+assert isinstance(user_service2, UserService)
+
+# Resetting of memorized instance:
+users_service_provider.reset()
+
+# Retrieving one more UserService object:
+user_service3 = users_service_provider()
+
+# Making some asserts:
+assert user_service3 is not user_service1

From 91ea2a54f67b562602f6a83ba07d41dd618c31e5 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 16 Jun 2015 10:37:57 +0300
Subject: [PATCH 30/73] Adding static provider docs

---
 docs/_providers.rst                           | 71 -------------------
 docs/providers/index.rst                      |  5 +-
 docs/providers/static.rst                     | 42 +++++++++++
 .../static.py}                                |  6 +-
 4 files changed, 50 insertions(+), 74 deletions(-)
 create mode 100644 docs/providers/static.rst
 rename examples/{readme2/static_providers.py => providers/static.py} (74%)

diff --git a/docs/_providers.rst b/docs/_providers.rst
index a4aa7394..87a85e97 100644
--- a/docs/_providers.rst
+++ b/docs/_providers.rst
@@ -1,77 +1,6 @@
 Providers
 =========
 
-Static providers
-----------------
-
-Static providers are family of providers that return their values "as is".
-There are four of static providers: ``Class``, ``Object``, ``Function`` and
-``Value``. All of them has the same behaviour, but usage of anyone is
-predicted by readability and providable object's type.
-
-Example:
-
-.. code-block:: python
-
-    """Static providers example."""
-
-    from objects.providers import Class
-    from objects.providers import Object
-    from objects.providers import Function
-    from objects.providers import Value
-
-
-    cls_provider = Class(object)
-    assert cls_provider() is object
-
-    object_provider = Object(object())
-    assert isinstance(object_provider(), object)
-
-    function_provider = Function(len)
-    assert function_provider() is len
-
-    value_provider = Value(123)
-    assert value_provider() == 123
-
-
-Callable providers
-------------------
-
-``Callable`` provider is a provider that decorates particular callable with
-some injections. Every call of this provider returns result of call of initial
-callable.
-
-Example:
-
-.. code-block:: python
-
-    """`Callable` providers examples."""
-
-    from objects.providers import Callable
-    from objects.providers import Singleton
-
-    from objects.injections import KwArg
-
-    import sqlite3
-
-
-    def some_function(arg, database):
-        """Example function that has input arg and dependency on database."""
-        return database.execute('SELECT @1', [arg]).fetchone()[0]
-
-
-    # Database and `ObjectA` providers.
-    database = Singleton(sqlite3.Connection,
-                         KwArg('database', ':memory:'))
-
-    some_function = Callable(some_function,
-                             KwArg('database', database))
-
-    # Some asserts.
-    assert some_function(1) == 1
-    assert some_function(2) == 2
-    assert some_function(2231) == 2231
-
 
 External dependency providers
 -----------------------------
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 92a9a0d1..a32ce952 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -7,6 +7,7 @@ All providers are callable. They describe how particular objects are provided.
 
 ..  toctree::
     :maxdepth: 2
-    :glob:
 
-    *
+    factory
+    singleton
+    static
diff --git a/docs/providers/static.rst b/docs/providers/static.rst
new file mode 100644
index 00000000..bd61029e
--- /dev/null
+++ b/docs/providers/static.rst
@@ -0,0 +1,42 @@
+Static providers
+----------------
+
+Static providers are family of providers that return their values "as is".
+There are four types of static providers:
+
+    - ``Class``
+    - ``Object``
+    - ``Function``
+    - ``Value``
+
+All of them have the same behaviour, but usage of anyone is predicted by
+readability and providing object's type.
+
+Example:
+
+.. code-block:: python
+
+    """`Static` providers example."""
+
+    from objects.providers import Class
+    from objects.providers import Object
+    from objects.providers import Function
+    from objects.providers import Value
+
+
+    # Provides class - `object`
+    cls_provider = Class(object)
+    assert cls_provider() is object
+
+    # Provides object - `object()`
+    object_provider = Object(object())
+    assert isinstance(object_provider(), object)
+
+    # Provides function - `len`
+    function_provider = Function(len)
+    assert function_provider() is len
+
+    # Provides value - `123`
+    value_provider = Value(123)
+    assert value_provider() == 123
+
diff --git a/examples/readme2/static_providers.py b/examples/providers/static.py
similarity index 74%
rename from examples/readme2/static_providers.py
rename to examples/providers/static.py
index 7664d59b..42675e0f 100644
--- a/examples/readme2/static_providers.py
+++ b/examples/providers/static.py
@@ -1,4 +1,4 @@
-"""Static providers example."""
+"""`Static` providers example."""
 
 from objects.providers import Class
 from objects.providers import Object
@@ -6,14 +6,18 @@ from objects.providers import Function
 from objects.providers import Value
 
 
+# Provides class - `object`
 cls_provider = Class(object)
 assert cls_provider() is object
 
+# Provides object - `object()`
 object_provider = Object(object())
 assert isinstance(object_provider(), object)
 
+# Provides function - `len`
 function_provider = Function(len)
 assert function_provider() is len
 
+# Provides value - `123`
 value_provider = Value(123)
 assert value_provider() == 123

From 7f439137d67867dcb5929e985587f7a813462f88 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 16 Jun 2015 11:05:12 +0300
Subject: [PATCH 31/73] Adding callable provider docs and some minor changes to
 factory docs

---
 docs/_providers.rst                    |  4 --
 docs/providers/callable.rst            | 64 ++++++++++++++++++++++++++
 docs/providers/factory.rst             |  4 +-
 docs/providers/index.rst               |  1 +
 examples/providers/callable.py         | 47 +++++++++++++++++++
 examples/readme2/callable_providers.py | 26 -----------
 6 files changed, 114 insertions(+), 32 deletions(-)
 create mode 100644 docs/providers/callable.rst
 create mode 100644 examples/providers/callable.py
 delete mode 100644 examples/readme2/callable_providers.py

diff --git a/docs/_providers.rst b/docs/_providers.rst
index 87a85e97..f70a580f 100644
--- a/docs/_providers.rst
+++ b/docs/_providers.rst
@@ -164,7 +164,3 @@ Example:
     assert object_a_1 is not object_a_2
     assert object_a_1.get_one() == object_a_2.get_one() == 2
 
-
-
-
-.. _Constructor injection: http://en.wikipedia.org/wiki/Dependency_injection#Constructor_injection
diff --git a/docs/providers/callable.rst b/docs/providers/callable.rst
new file mode 100644
index 00000000..9968818c
--- /dev/null
+++ b/docs/providers/callable.rst
@@ -0,0 +1,64 @@
+Callable providers
+------------------
+
+``Callable`` provider is a provider that decorates particular callable with
+some injections. Every call of this provider returns result of call of initial
+callable.
+
+``Callable`` provider uses ``KwArg`` injections. ``KwArg`` injections are
+done by passing injectable values like keyword arguments during call time.
+
+Context keyword arguments have higher priority than ``KwArg`` injections.
+
+Example:
+
+.. code-block:: python
+
+    """`Callable` providers examples."""
+
+    from objects.providers import Callable
+    from objects.providers import Singleton
+
+    from objects.injections import KwArg
+
+
+    class UserService(object):
+
+        """Example class UserService."""
+
+        def get_by_id(self, id):
+            """Return user info by user id."""
+            return {'id': id, 'login': 'example_user'}
+
+
+    def get_user_by_id(user_id, users_service):
+        """Example function that has input arg and dependency on database."""
+        return users_service.get_by_id(user_id)
+
+
+    # UserService and get_user_by_id providers:
+    users_service = Singleton(UserService)
+    get_user_by_id = Callable(get_user_by_id,
+                              KwArg('users_service', users_service))
+
+    # Making some asserts:
+    assert get_user_by_id(1) == {'id': 1, 'login': 'example_user'}
+    assert get_user_by_id(2) == {'id': 2, 'login': 'example_user'}
+
+
+    # Context keyword arguments priority example:
+    class UserServiceMock(object):
+
+        """Example class UserService."""
+
+        def get_by_id(self, id):
+            """Return user info by user id."""
+            return {'id': id, 'login': 'mock'}
+
+
+    user_service_mock = UserServiceMock()
+
+    user3 = get_user_by_id(1, users_service=user_service_mock)
+
+    assert user3 == {'id': 1, 'login': 'mock'}
+
diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
index 3d20e5a2..d6ec5abe 100644
--- a/docs/providers/factory.rst
+++ b/docs/providers/factory.rst
@@ -48,8 +48,8 @@ injections that are used by ``Factory`` provider:
       ``__init__()`` method in time of object's creation via keyword argument.
       Takes keyword name of ``__init__()`` argument and injectable value.
     - ``Attribute`` - injection is done by setting specified attribute with
-      injectable value right after object's creation. Takes attribute name and
-      injectable value.
+      injectable value right after object's creation. Takes attribute's name
+      and injectable value.
     - ``Method`` - injection is done by calling of specified method with
       injectable value right after object's creation and attribute injections
       are done. Takes method name and injectable value.
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index a32ce952..7bb0970f 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -11,3 +11,4 @@ All providers are callable. They describe how particular objects are provided.
     factory
     singleton
     static
+    callable
diff --git a/examples/providers/callable.py b/examples/providers/callable.py
new file mode 100644
index 00000000..b3112569
--- /dev/null
+++ b/examples/providers/callable.py
@@ -0,0 +1,47 @@
+"""`Callable` providers examples."""
+
+from objects.providers import Callable
+from objects.providers import Singleton
+
+from objects.injections import KwArg
+
+
+class UserService(object):
+
+    """Example class UserService."""
+
+    def get_by_id(self, id):
+        """Return user info by user id."""
+        return {'id': id, 'login': 'example_user'}
+
+
+def get_user_by_id(user_id, users_service):
+    """Example function that has input arg and dependency on database."""
+    return users_service.get_by_id(user_id)
+
+
+# UserService and get_user_by_id providers:
+users_service = Singleton(UserService)
+get_user_by_id = Callable(get_user_by_id,
+                          KwArg('users_service', users_service))
+
+# Making some asserts:
+assert get_user_by_id(1) == {'id': 1, 'login': 'example_user'}
+assert get_user_by_id(2) == {'id': 2, 'login': 'example_user'}
+
+
+# Context keyword arguments priority example:
+class UserServiceMock(object):
+
+    """Example class UserService."""
+
+    def get_by_id(self, id):
+        """Return user info by user id."""
+        return {'id': id, 'login': 'mock'}
+
+
+user_service_mock = UserServiceMock()
+
+user3 = get_user_by_id(1, users_service=user_service_mock)
+
+assert user3 == {'id': 1, 'login': 'mock'}
diff --git a/examples/readme2/callable_providers.py b/examples/readme2/callable_providers.py
deleted file mode 100644
index 97015bb9..00000000
--- a/examples/readme2/callable_providers.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""`Callable` providers examples."""
-
-from objects.providers import Callable
-from objects.providers import Singleton
-
-from objects.injections import KwArg
-
-import sqlite3
-
-
-def some_function(arg, database):
-    """Example function that has input arg and dependency on database."""
-    return database.execute('SELECT @1', [arg]).fetchone()[0]
-
-
-# Database and `ObjectA` providers.
-database = Singleton(sqlite3.Connection,
-                     KwArg('database', ':memory:'))
-
-some_function = Callable(some_function,
-                         KwArg('database', database))
-
-# Some asserts.
-assert some_function(1) == 1
-assert some_function(2) == 2
-assert some_function(2231) == 2231

From ef41688e618839ddd59713a6de8c019c4a0f5388 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 18 Jun 2015 14:45:26 +0300
Subject: [PATCH 32/73] Minor fixes in singleton docs

---
 docs/providers/singleton.rst             | 3 +--
 examples/providers/singleton_reseting.py | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
index 4c26b09b..1865cbb9 100644
--- a/docs/providers/singleton.rst
+++ b/docs/providers/singleton.rst
@@ -73,8 +73,7 @@ lifecycle of memorized instance is out of ``Singleton`` provider's control.
         """Example class UserService."""
 
 
-    # Singleton provider creates new instance of specified class on first call and
-    # returns same instance on every next call.
+    # Users service singleton provider:
     users_service_provider = Singleton(UserService)
 
     # Retrieving several UserService objects:
diff --git a/examples/providers/singleton_reseting.py b/examples/providers/singleton_reseting.py
index efe2bd88..a35fc6a8 100644
--- a/examples/providers/singleton_reseting.py
+++ b/examples/providers/singleton_reseting.py
@@ -8,8 +8,7 @@ class UserService(object):
     """Example class UserService."""
 
 
-# Singleton provider creates new instance of specified class on first call and
-# returns same instance on every next call.
+# Users service singleton provider:
 users_service_provider = Singleton(UserService)
 
 # Retrieving several UserService objects:

From dbc368d5f621898d06b3d717165c3e27c309d563 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 18 Jun 2015 14:55:13 +0300
Subject: [PATCH 33/73] Minor updates for static provider docs

---
 docs/providers/static.rst    | 8 ++++----
 examples/providers/static.py | 8 ++++----
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/docs/providers/static.rst b/docs/providers/static.rst
index bd61029e..c9e2d5df 100644
--- a/docs/providers/static.rst
+++ b/docs/providers/static.rst
@@ -24,19 +24,19 @@ Example:
     from objects.providers import Value
 
 
-    # Provides class - `object`
+    # Provides class - `object`:
     cls_provider = Class(object)
     assert cls_provider() is object
 
-    # Provides object - `object()`
+    # Provides object - `object()`:
     object_provider = Object(object())
     assert isinstance(object_provider(), object)
 
-    # Provides function - `len`
+    # Provides function - `len`:
     function_provider = Function(len)
     assert function_provider() is len
 
-    # Provides value - `123`
+    # Provides value - `123`:
     value_provider = Value(123)
     assert value_provider() == 123
 
diff --git a/examples/providers/static.py b/examples/providers/static.py
index 42675e0f..941756ed 100644
--- a/examples/providers/static.py
+++ b/examples/providers/static.py
@@ -6,18 +6,18 @@ from objects.providers import Function
 from objects.providers import Value
 
 
-# Provides class - `object`
+# Provides class - `object`:
 cls_provider = Class(object)
 assert cls_provider() is object
 
-# Provides object - `object()`
+# Provides object - `object()`:
 object_provider = Object(object())
 assert isinstance(object_provider(), object)
 
-# Provides function - `len`
+# Provides function - `len`:
 function_provider = Function(len)
 assert function_provider() is len
 
-# Provides value - `123`
+# Provides value - `123`:
 value_provider = Value(123)
 assert value_provider() == 123

From e3ea517d72cff21968f3640eb6fd94df36e884d4 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 18 Jun 2015 16:34:26 +0300
Subject: [PATCH 34/73] Minor ExternalDependency provider updates, Adding
 ExternalDependency provider docs

---
 docs/_providers.rst                       |  80 ---------------
 docs/images/external_dependency.png       | Bin 0 -> 15072 bytes
 docs/providers/external_dependency.rst    | 120 ++++++++++++++++++++++
 docs/providers/index.rst                  |   1 +
 examples/providers/external_dependency.py |  78 ++++++++++++++
 objects/providers.py                      |   4 +
 tests/test_providers.py                   |   4 +-
 7 files changed, 205 insertions(+), 82 deletions(-)
 create mode 100644 docs/images/external_dependency.png
 create mode 100644 docs/providers/external_dependency.rst
 create mode 100644 examples/providers/external_dependency.py

diff --git a/docs/_providers.rst b/docs/_providers.rst
index f70a580f..7187b56c 100644
--- a/docs/_providers.rst
+++ b/docs/_providers.rst
@@ -2,86 +2,6 @@ Providers
 =========
 
 
-External dependency providers
------------------------------
-
-``ExternalDependency`` provider can be useful for development of
-self-sufficient libraries / modules / applications, that has required external
-dependencies.
-
-For example, you have created self-sufficient library / module / application,
-that has dependency on *database connection*.
-
-Second step you want to do is to make this software component to be easy
-reusable by wide amount of developers and to be easily integrated into many
-applications.
-
-It may be good idea, to move all external dependencies (like
-*database connection*)  to the top level and make them to be injected on your
-software component's initialization. It will make third party developers feel
-themselves free about integration of yours component in their applications,
-because of they would be able to find right place / right way for doing this
-in their application's architectures.
-
-On the other side,
-you can be sure, that your external dependency will be satisfied by appropriate
-instance.
-
-Example:
-
-.. code-block:: python
-
-    """External dependency providers example."""
-
-    import sqlite3
-
-    from objects.providers import Singleton
-    from objects.providers import Factory
-    from objects.providers import ExternalDependency
-
-    from objects.injections import KwArg
-    from objects.injections import Attribute
-
-
-    class ObjectA(object):
-
-        """ObjectA has dependency on database."""
-
-        def __init__(self, database):
-            """Initializer.
-
-            Database dependency need to be injected via init arg."""
-            self.database = database
-
-        def get_one(self):
-            """Select one from database and return it."""
-            return self.database.execute('SELECT 1').fetchone()[0]
-
-
-    # Database and `ObjectA` providers.
-    database = ExternalDependency(instance_of=sqlite3.Connection)
-
-    object_a_factory = Factory(ObjectA,
-                               KwArg('database', database))
-
-    # Satisfaction of external dependency.
-    database.override(Singleton(sqlite3.Connection,
-                                KwArg('database', ':memory:'),
-                                KwArg('timeout', 30),
-                                KwArg('detect_types', True),
-                                KwArg('isolation_level', 'EXCLUSIVE'),
-                                Attribute('row_factory', sqlite3.Row)))
-
-    # Creating several `ObjectA` instances.
-    object_a_1 = object_a_factory()
-    object_a_2 = object_a_factory()
-
-    # Making some asserts.
-    assert object_a_1 is not object_a_2
-    assert object_a_1.database is object_a_2.database is database()
-
-
-
 Config providers
 ----------------
 
diff --git a/docs/images/external_dependency.png b/docs/images/external_dependency.png
new file mode 100644
index 0000000000000000000000000000000000000000..831f2699376f0408cefd1029dec110467e95ce68
GIT binary patch
literal 15072
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
JUfw43e*t(a#zz1E

literal 0
HcmV?d00001

diff --git a/docs/providers/external_dependency.rst b/docs/providers/external_dependency.rst
new file mode 100644
index 00000000..ebbdd800
--- /dev/null
+++ b/docs/providers/external_dependency.rst
@@ -0,0 +1,120 @@
+External dependency providers
+-----------------------------
+
+``ExternalDependency`` provider can be useful for development of
+self-sufficient libraries / modules / applications that has required external
+dependencies.
+
+For example, you have created self-sufficient library / module / application,
+that has dependency on *database connection*.
+
+Second step you want to do is to make this software component to be easy
+reusable by wide amount of developers and to be easily integrated into many
+applications.
+
+It may be good idea, to move all external dependencies (like
+*database connection*) to the top level and make them to be injected on your
+software component's initialization. It will make third party developers feel
+themselves free about integration of yours component in their applications,
+because they would be able to find right place / right way for doing this
+in their application's architectures.
+
+At the same time, you can be sure, that your external dependency will be
+satisfied by appropriate instance.
+
+
+Example:
+
+
+.. note::
+
+    Class ``UserService`` is a part of some library. ``UserService`` has
+    dependency on database connection, which can be satisfied with any
+    DBAPI 2.0 database connection. Being a self-sufficient library,
+    ``UserService`` doesn't hardcode any kind of database management logic.
+    Instead of this, ``UserService`` provides external dependency, that has to
+    be satisfied out of library's scope.
+
+.. image:: /images/external_dependency.png
+
+.. code-block:: python
+
+    """`ExternalDependency` providers example."""
+
+    from objects.providers import ExternalDependency
+    from objects.providers import Factory
+    from objects.providers import Singleton
+
+    from objects.injections import KwArg
+    from objects.injections import Attribute
+
+    # Importing SQLITE3 and contextlib.closing for working with cursors:
+    import sqlite3
+    from contextlib import closing
+
+
+    # Definition of example UserService:
+    class UserService(object):
+
+        """Example class UserService.
+
+        UserService has dependency on DBAPI 2.0 database connection."""
+
+        def __init__(self, database):
+            """Initializer.
+
+            Database dependency need to be injected via init arg."""
+            self.database = database
+
+        def init_database(self):
+            """Initialize database, if it has not been initialized yet."""
+            with closing(self.database.cursor()) as cursor:
+                cursor.execute("""
+                  CREATE TABLE IF NOT EXISTS users(
+                    id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    name VARCHAR(32)
+                  )
+                """)
+
+        def create(self, name):
+            """Create user with provided name and return his id."""
+            with closing(self.database.cursor()) as cursor:
+                cursor.execute('INSERT INTO users(name) VALUES (?)', (name,))
+                return cursor.lastrowid
+
+        def get_by_id(self, id):
+            """Return user info by user id."""
+            with closing(self.database.cursor()) as cursor:
+                cursor.execute('SELECT id, name FROM users WHERE id=?', (id,))
+                return cursor.fetchone()
+
+
+    # Database and UserService providers:
+    database = ExternalDependency(instance_of=sqlite3.Connection)
+    users_service_factory = Factory(UserService,
+                                    KwArg('database', database))
+
+    # Out of library's scope.
+    #
+    # Setting database provider:
+    database.provided_by(Singleton(sqlite3.Connection,
+                                   KwArg('database', ':memory:'),
+                                   KwArg('timeout', 30),
+                                   KwArg('detect_types', True),
+                                   KwArg('isolation_level', 'EXCLUSIVE'),
+                                   Attribute('row_factory', sqlite3.Row)))
+
+    # Creating UserService instance:
+    users_service = users_service_factory()
+
+    # Initializing UserService database:
+    users_service.init_database()
+
+    # Creating test user and retrieving full information about him:
+    test_user_id = users_service.create(name='test_user')
+    test_user = users_service.get_by_id(test_user_id)
+
+    # Making some asserts:
+    assert test_user['id'] == 1
+    assert test_user['name'] == 'test_user'
+
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 7bb0970f..8815ba0e 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -12,3 +12,4 @@ All providers are callable. They describe how particular objects are provided.
     singleton
     static
     callable
+    external_dependency
diff --git a/examples/providers/external_dependency.py b/examples/providers/external_dependency.py
new file mode 100644
index 00000000..c4b3ef04
--- /dev/null
+++ b/examples/providers/external_dependency.py
@@ -0,0 +1,78 @@
+"""`ExternalDependency` providers example."""
+
+from objects.providers import ExternalDependency
+from objects.providers import Factory
+from objects.providers import Singleton
+
+from objects.injections import KwArg
+from objects.injections import Attribute
+
+# Importing SQLITE3 and contextlib.closing for working with cursors:
+import sqlite3
+from contextlib import closing
+
+
+# Definition of example UserService:
+class UserService(object):
+
+    """Example class UserService.
+
+    UserService has dependency on DBAPI 2.0 database connection."""
+
+    def __init__(self, database):
+        """Initializer.
+
+        Database dependency need to be injected via init arg."""
+        self.database = database
+
+    def init_database(self):
+        """Initialize database, if it has not been initialized yet."""
+        with closing(self.database.cursor()) as cursor:
+            cursor.execute("""
+              CREATE TABLE IF NOT EXISTS users(
+                id INTEGER PRIMARY KEY AUTOINCREMENT,
+                name VARCHAR(32)
+              )
+            """)
+
+    def create(self, name):
+        """Create user with provided name and return his id."""
+        with closing(self.database.cursor()) as cursor:
+            cursor.execute('INSERT INTO users(name) VALUES (?)', (name,))
+            return cursor.lastrowid
+
+    def get_by_id(self, id):
+        """Return user info by user id."""
+        with closing(self.database.cursor()) as cursor:
+            cursor.execute('SELECT id, name FROM users WHERE id=?', (id,))
+            return cursor.fetchone()
+
+
+# Database and UserService providers:
+database = ExternalDependency(instance_of=sqlite3.Connection)
+users_service_factory = Factory(UserService,
+                                KwArg('database', database))
+
+# Out of library's scope.
+#
+# Setting database provider:
+database.provided_by(Singleton(sqlite3.Connection,
+                               KwArg('database', ':memory:'),
+                               KwArg('timeout', 30),
+                               KwArg('detect_types', True),
+                               KwArg('isolation_level', 'EXCLUSIVE'),
+                               Attribute('row_factory', sqlite3.Row)))
+
+# Creating UserService instance:
+users_service = users_service_factory()
+
+# Initializing UserService database:
+users_service.init_database()
+
+# Creating test user and retrieving full information about him:
+test_user_id = users_service.create(name='test_user')
+test_user = users_service.get_by_id(test_user_id)
+
+# Making some asserts:
+assert test_user['id'] == 1
+assert test_user['name'] == 'test_user'
diff --git a/objects/providers.py b/objects/providers.py
index a8fd9ea9..b7b4229f 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -189,6 +189,10 @@ class ExternalDependency(Provider):
 
         return instance
 
+    def provided_by(self, provider):
+        """Set external dependency provider."""
+        return self.override(provider)
+
 
 class _StaticProvider(Provider):
 
diff --git a/tests/test_providers.py b/tests/test_providers.py
index 0dc37ee7..26bddfa4 100644
--- a/tests/test_providers.py
+++ b/tests/test_providers.py
@@ -323,12 +323,12 @@ class ExternalDependencyTests(unittest.TestCase):
 
     def test_call_overridden(self):
         """Test call of overridden external dependency."""
-        self.provider.override(Factory(list))
+        self.provider.provided_by(Factory(list))
         self.assertIsInstance(self.provider(), list)
 
     def test_call_overridden_but_not_instance_of(self):
         """Test call of overridden external dependency, but not instance of."""
-        self.provider.override(Factory(dict))
+        self.provider.provided_by(Factory(dict))
         self.assertRaises(Error, self.provider)
 
     def test_call_not_overridden(self):

From ab548df0b288c1428d6dcef8d2171630ebb72489 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 18 Jun 2015 16:35:00 +0300
Subject: [PATCH 35/73] Minor Factory and Singleton provider docs update

---
 docs/providers/factory.rst   | 8 +++++++-
 docs/providers/singleton.rst | 2 ++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
index d6ec5abe..77375eb1 100644
--- a/docs/providers/factory.rst
+++ b/docs/providers/factory.rst
@@ -119,7 +119,9 @@ Next example shows how ``Factory`` provider deals with positional and keyword
 ``__init__`` context arguments. In few words, ``Factory`` provider fully
 passes positional context arguments to class's ``__init__`` method, but
 keyword context arguments have priority on ``KwArg`` injections (this could be
-useful for testing). So, please, follow the example below:
+useful for testing).
+
+So, please, follow the example below:
 
 .. image:: /images/factory_init_injections_and_contexts.png
 
@@ -213,6 +215,8 @@ Example below shows how to create ``Factory`` of particular class with
 attribute injections. Those injections are done by setting specified attributes
 with injectable values right after object's creation.
 
+Example:
+
 .. image:: /images/factory_attribute_injections.png
 
 .. code-block:: python
@@ -283,6 +287,8 @@ Method injections are not very popular in Python due Python best practices
 (usage of public attributes instead of setter methods), but it may appear in
 some cases.
 
+Example:
+
 .. image:: /images/factory_method_injections.png
 
 .. code-block:: python
diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
index 1865cbb9..ab978b23 100644
--- a/docs/providers/singleton.rst
+++ b/docs/providers/singleton.rst
@@ -61,6 +61,8 @@ Created and memorized by ``Singleton`` instance can be reset. Reset of
 ``Singleton``'s memorized instance is done by clearing reference to it. Further
 lifecycle of memorized instance is out of ``Singleton`` provider's control.
 
+Example:
+
 .. code-block:: python
 
     """`Singleton` providers resetting example."""

From 8b479a189810e07f5776eb1a310bf55812f168bb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Thu, 18 Jun 2015 16:37:19 +0300
Subject: [PATCH 36/73] Removing old external dependency provider example

---
 .../readme2/external_dependency_providers.py  | 48 -------------------
 1 file changed, 48 deletions(-)
 delete mode 100644 examples/readme2/external_dependency_providers.py

diff --git a/examples/readme2/external_dependency_providers.py b/examples/readme2/external_dependency_providers.py
deleted file mode 100644
index f920b814..00000000
--- a/examples/readme2/external_dependency_providers.py
+++ /dev/null
@@ -1,48 +0,0 @@
-"""External dependency providers example."""
-
-import sqlite3
-
-from objects.providers import Singleton
-from objects.providers import Factory
-from objects.providers import ExternalDependency
-
-from objects.injections import KwArg
-from objects.injections import Attribute
-
-
-class ObjectA(object):
-
-    """ObjectA has dependency on database."""
-
-    def __init__(self, database):
-        """Initializer.
-
-        Database dependency need to be injected via init arg."""
-        self.database = database
-
-    def get_one(self):
-        """Select one from database and return it."""
-        return self.database.execute('SELECT 1').fetchone()[0]
-
-
-# Database and `ObjectA` providers.
-database = ExternalDependency(instance_of=sqlite3.Connection)
-
-object_a_factory = Factory(ObjectA,
-                           KwArg('database', database))
-
-# Satisfaction of external dependency.
-database.override(Singleton(sqlite3.Connection,
-                            KwArg('database', ':memory:'),
-                            KwArg('timeout', 30),
-                            KwArg('detect_types', True),
-                            KwArg('isolation_level', 'EXCLUSIVE'),
-                            Attribute('row_factory', sqlite3.Row)))
-
-# Creating several `ObjectA` instances.
-object_a_1 = object_a_factory()
-object_a_2 = object_a_factory()
-
-# Making some asserts.
-assert object_a_1 is not object_a_2
-assert object_a_1.database is object_a_2.database is database()

From 6a920566085f39f81f4428e0bcda620bac56f233 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 19 Jun 2015 12:16:15 +0300
Subject: [PATCH 37/73] Removing old docs for config provider

---
 docs/_providers.rst | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/docs/_providers.rst b/docs/_providers.rst
index 7187b56c..c898fd6b 100644
--- a/docs/_providers.rst
+++ b/docs/_providers.rst
@@ -2,9 +2,6 @@ Providers
 =========
 
 
-Config providers
-----------------
-
 Providers delegation
 --------------------
 

From a612e42a992464ba6d97e0436605bd8e59dd0e2d Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 19 Jun 2015 12:44:46 +0300
Subject: [PATCH 38/73] First steps with providers delegation docs

---
 docs/providers/delegation.rst    | 75 ++++++++++++++++++++++++++++++++
 docs/providers/index.rst         |  1 +
 examples/providers/delegation.py | 68 +++++++++++++++++++++++++++++
 3 files changed, 144 insertions(+)
 create mode 100644 docs/providers/delegation.rst
 create mode 100644 examples/providers/delegation.py

diff --git a/docs/providers/delegation.rst b/docs/providers/delegation.rst
new file mode 100644
index 00000000..585dcdc1
--- /dev/null
+++ b/docs/providers/delegation.rst
@@ -0,0 +1,75 @@
+Providers delegation
+--------------------
+
+Example:
+
+.. code-block:: python
+
+    """Providers delegation example."""
+
+    from objects.providers import Factory
+    from objects.providers import Singleton
+
+    from objects.injections import KwArg
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self, id, name):
+            """Initializer.
+
+            :param id: int
+            :param name: str
+            :return:
+            """
+            self.id = id
+            self.name = name
+
+
+    class UserService(object):
+
+        """Example class UserService.
+
+        UserService has dependency on users factory.
+        """
+
+        def __init__(self, users_factory):
+            """Initializer.
+
+            :param users_factory: objects.providers.Factory
+            :return:
+            """
+            self.users_factory = users_factory
+
+        def get_by_id(self, id):
+            """Return user info by user id."""
+            return self.users_factory(id=id, name=self._get_name_from_db(id))
+
+        def _get_name_from_db(self, id):
+            """Return user's name from database by his id.
+
+            Main purpose of this method is just to show the fact of retrieving
+            some user's data from database, so, actually, it simulates work
+            with database just by merging constant string with provided user's id.
+            """
+            return ''.join(('user', str(id)))
+
+
+    # Users factory and UserService provider:
+    users_factory = Factory(User)
+    users_service = Singleton(UserService,
+                              KwArg('users_factory', users_factory.delegate()))
+
+
+    # Creating several User objects:
+    user1 = users_service().get_by_id(1)
+    user2 = users_service().get_by_id(2)
+
+    # Making some asserts:
+    assert user1.id == 1
+    assert user1.name == 'user1'
+
+    assert user2.id == 2
+    assert user2.name == 'user2'
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 8815ba0e..070c57c7 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -13,3 +13,4 @@ All providers are callable. They describe how particular objects are provided.
     static
     callable
     external_dependency
+    delegation
diff --git a/examples/providers/delegation.py b/examples/providers/delegation.py
new file mode 100644
index 00000000..cfaff6d8
--- /dev/null
+++ b/examples/providers/delegation.py
@@ -0,0 +1,68 @@
+"""Providers delegation example."""
+
+from objects.providers import Factory
+from objects.providers import Singleton
+
+from objects.injections import KwArg
+
+
+class User(object):
+
+    """Example class User."""
+
+    def __init__(self, id, name):
+        """Initializer.
+
+        :param id: int
+        :param name: str
+        :return:
+        """
+        self.id = id
+        self.name = name
+
+
+class UserService(object):
+
+    """Example class UserService.
+
+    UserService has dependency on users factory.
+    """
+
+    def __init__(self, users_factory):
+        """Initializer.
+
+        :param users_factory: objects.providers.Factory
+        :return:
+        """
+        self.users_factory = users_factory
+
+    def get_by_id(self, id):
+        """Return user info by user id."""
+        return self.users_factory(id=id, name=self._get_name_from_db(id))
+
+    def _get_name_from_db(self, id):
+        """Return user's name from database by his id.
+
+        Main purpose of this method is just to show the fact of retrieving
+        some user's data from database, so, actually, it simulates work
+        with database just by merging constant string with provided user's id.
+        """
+        return ''.join(('user', str(id)))
+
+
+# Users factory and UserService provider:
+users_factory = Factory(User)
+users_service = Singleton(UserService,
+                          KwArg('users_factory', users_factory.delegate()))
+
+
+# Creating several User objects:
+user1 = users_service().get_by_id(1)
+user2 = users_service().get_by_id(2)
+
+# Making some asserts:
+assert user1.id == 1
+assert user1.name == 'user1'
+
+assert user2.id == 2
+assert user2.name == 'user2'

From c05879bada5d30c1f3e9ed02f1d09c06c7899bb9 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Tue, 23 Jun 2015 16:21:37 +0300
Subject: [PATCH 39/73] Updating factory provider doc images

---
 docs/images/external_dependency.png           | Bin 15072 -> 40801 bytes
 docs/images/factory.png                       | Bin 0 -> 7808 bytes
 docs/images/factory_attribute_injections.png  | Bin 6366 -> 32560 bytes
 docs/images/factory_init_injections.png       | Bin 4112 -> 18876 bytes
 .../factory_init_injections_and_contexts.png  | Bin 7370 -> 34096 bytes
 docs/images/factory_method_injections.png     | Bin 8747 -> 35252 bytes
 docs/providers/factory.rst                    |   2 ++
 7 files changed, 2 insertions(+)
 create mode 100644 docs/images/factory.png

diff --git a/docs/images/external_dependency.png b/docs/images/external_dependency.png
index 831f2699376f0408cefd1029dec110467e95ce68..317903ecbbd1265e7219e20b8473939ad8779e10 100644
GIT binary patch
literal 40801
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
G{r>{xzLQ7*

literal 15072
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
JUfw43e*t(a#zz1E

diff --git a/docs/images/factory.png b/docs/images/factory.png
new file mode 100644
index 0000000000000000000000000000000000000000..65c4072e3098b02e157515a7a07670cdc85a181b
GIT binary patch
literal 7808
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

literal 0
HcmV?d00001

diff --git a/docs/images/factory_attribute_injections.png b/docs/images/factory_attribute_injections.png
index 29b982510cae00ed543e0e8555e80537c7fc305e..01273e8a14cd9f6cefb6ecfaf6b776d2ee9e3681 100644
GIT binary patch
literal 32560
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
TbD-6)|GJW#s%)9`>kt0}ybpml

literal 6366
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
bC$}d7|6E`Wq3nAsK&P+sK)dvgUHHEN|G>}r

diff --git a/docs/images/factory_init_injections.png b/docs/images/factory_init_injections.png
index 31ddc5b77e14da81ff5e558ffdc24fbac2076f5f..8a104712f73a995290b85f6f150e7a1287d2e9a9 100644
GIT binary patch
literal 18876
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
RaTQPlgQu&X%Q~loCIB#7)oTC%

literal 4112
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
Q?m0jZdM4NFbZ_4K7b&}hYybcN

diff --git a/docs/images/factory_init_injections_and_contexts.png b/docs/images/factory_init_injections_and_contexts.png
index a3328ed00ceb77c36fa18bc30df5aa26edce29d6..2eb6c32807142073e83dd5014df878d1e00d4527 100644
GIT binary patch
literal 34096
zcmce-byQSq7&l4?NC--gAQ*JR3|$IH=g^G;LrNoE5=uzd4BZV%h&0kMLx)I9hae0{
z!`*n!`C_fR?z-Ro<IY+$v-i8-exLk3&kk2tmAgmqkN^V%<DP=N3={+74h#bW>+~)*
zP(sX(*$4dHv3jBM0t4f74B_P~9N-?)6)Go%Q8`4r1>8I~mxrogV0bfOU<8I>V4MR*
zftwf@?mQS6+h!OTBB>Y{R8HxQ8e%}Ng6hgzFK=#c78e(Tf`WjWT)>Bgye?CHvGesK
zW(rq?R&<N?SiSMhqH|dF>%19{3*a;Bm_6xU(49N6GOiFIb8_~_tHeER*x4pZ<?`zC
zGpb5og;_|6)vwUdAW3^*zR%cC=J)abhw9L6q}9=+J@k!OQtzA1-y05QJk;a_34t$y
zoP-Nv6-dYlWsSk?!t@0N1xH6mt&=U=+uO*AL7OZ~8Bw~rx;hyd8GU{Iv9YnPt}be7
z>V$*@2L}gMRi>^ooy59$2AL-zRY9EEY=ITN%R7tKnHKmD?qXtLZXX_BTwXo#N>xfI
zC$Nw1nOi+NJx5J`$GA&K_cjUtRbc3s-lg5&0%5uM=I`h{Q-+o|>L(V)*LG+a+3l0c
zLhHx<%X{HthnV*sBoFOjU}DAhZJ57LFCLthGO#8lqg1i=cF$?l^NMsWYvotaVi9_7
znpGFozL3&B%om&~609vAqG6L?+ch$QBd(6~Tzjg?1X*oB|L|Ub1>MpofyJ5rwN`_p
zm9J+9vsV{?e%8xx5Bly;r(GPcZFbvT14Wx%C%Yq;r+WwUB`p5w*jN~bK2i(Y3n|Ts
zqRxWYI9Tg_mhqi-x=Kv<=}80?SU^0~rQeFV^*Q{Cygz)gcvopk_K;Xhff39>>7A$F
zUaYOF%w!huQr%93U!M6fJC*r|47cpB;mtoFa!`yrxY$g5312#JWsS5FOZi@^)3NdB
z`$Q{Qd)meqhqnNAGy^{kdKYz&f*xJ5RH6Zj!F;VGCxh_;=aD>cgYP7-?}~vzop$@h
zRB#VY1c(nqLFR>)=Z{}4;pS`#nH$XHSPUTyn<Wo7F@F^k=C4m^xS%sLk1Twv%Dhce
zrf28BSlu6c?I~rg&fDrST{peU>+_v%@uaSG|KfV(^5W_#p8~^kc?Jc7)~r1#1(=LQ
zYf;~Dq^S(7Yv7h?{(t&hKmJr2$gOt|*~FFYaC&ia0K+dwU8LZjm!Fls&T}~3IXMW+
zL68%L29eywDKQytk`ODU*`bLmur!~yYKy5?dR~HJ`Hi2Zc($3PR!U<ytAt9f@~3x9
z)uu>4X~8+aGr8St7gFO;K71jOCAi~%?$`V(kpOiuh2<xu_zT&jD74+v)9i@$s#z{t
z?4^+{`Q7ZuIl{bNq|*qE^IBX-Gwt1$<01~IVoHx={LL%f&A0e#?xDV7K~}hN%Z_7O
zPhUr82EnpHDS@!d?&oz(gUE642=YG4_bjjBN@9U$B&y9x$F3R~<L?@s36Fu1_UFg!
z{*ebuURN}H;a=o$)C4OQtXe6Sc$r4*1n@N()L82Hi^&ap7QydIIyYsi?r;BEjb%8H
ze|?QO`zZORn<`+pe#57?RUsP`Fj_VB8lL3k-D8gWVEZ%=QX}YARfIU}*Cp?~-t0xU
zS}s0~%z-OUiI5JqR?4)Q>DrmYf!dm={Dgk-LuBhHGRU39;mZ^!ih<a~HEfF?ZNA5P
zfyx@X2=hzh2!y?EXoh~n3RvV|(?)LJVN6(m^Ge%pme2JlstEBae3wl-`ImG-^s4xK
z;~&tiuD8%1B5}XI?g~ZuRKXWzn;|%a+3<L%7pV&CL&koVA8bzVn!N`R&U&&w>-9`m
zp}5g%g{rTn@5S)DK5uIidXw^!Z8iQGqv?RN5_sn*^liD%ItYDn%6di6ddk_QRJHcY
zj!8)cu2-Hq(CujlPSZW3X3Sn!hApI=l}dticQ6O7hm}R5y)Soz>7+I9gcbMNp}P9n
z<eH5aRMhh<Jw(58!cQ}wB|>ev=_HSSbKX7k^X)$v)0Kpuw48@|T_BcY=9uIZUqz&L
zEI+-8n=te{Fal1U&TtJUQy5?Dgmj1pwOhRM%DofKW#&S7GERM9-$z0Fo45kRH}vg`
z!g2<zb=?!c^ZWSkFZ>B9t#GmFVXf3WW|a^8;C(yaUs)W#C-|O;xjvQpjCdkigpKDB
z22p#<fNfV8ptV7uhj6C+*#aAAdOH{<IZi4(T2YBKiGY7u`yS_kIBW8kRe@JM;8y82
zoQ#SXjfsMKU27DNL_Z#$if7|p-kjY{jg!=0lIt|!lJu`V(QEOknwS~thZ|fxUmV_=
z?cNSg?vtZ9{Zu$4Aw(#o8HA3ETzRDMLXKOXrHGz;;sX8XN5OZ;DcvRqPtmd3G@e<7
zhPIbr{27k47RyoPj=?G9BI;l)1>LH$C<2fyIkWbb+>6<e>pP#bp`b>&$UpPvFn;t&
z)Q1>cao2LLDS3z$6}>JuSFwVt^TFO_R2oA$+`R6~9|!Fg518Z%k=^#|ZfD5z++4qX
zT~(b)TeIG4TYwUp0w2vf>-6U!%P6++RBRgZIrqvB6v3uq%j_5XM?2i>u1CKP1o%6b
zH40)=PKy=q!JU}8AGHZ5ace6G%?Osm+dM3|k%3mxGq^>H8j)+zjLP(^mKD==L;*;r
z+h;8*ZK!yw6RdqO3U)n$W(+=X7^1BbYBg{-_eVUak5!xU@R)As75o;n$0)Gr8tLIF
zP(}|~Apll98iBvwa15PDE3kG0TQ|ZMKEZm9j^nMaTdVkg5FX7M>hq>e2;dvBD1kXL
zCW9(XY_|L2t~D5+iZC_FgRZJ{=2L56Urvsz{=~jT$G(l96;$;4o;srwAUVHu(=K_c
ziFfs&h&$k%oIAQze4!YYJE_H(HPBzzE7fiGNsqrN7>Dk)VgUiVwPQM`^>k*_bZU4v
zU<T<FSF03VqEO>nvM;Fw4od2Mrf4<yJBP<+(m7F@#cuH+Vx>%5uz3s_<e$<1StZNo
zh_Thjtv1ILCZfDQy2c<7J=U}!p7EZ`%)_$`p|6!`gSwP9wZY{l%l^{e{l0ymTMy;*
zY%TbFQ)pmIS7(S5_1%;ce&tNx!Y0nlll_YTkZ-BYj<DxoDvr4Eg9`Wx#r)wGy|H!?
zyT~RfP&o&ViCQ{nE(rp}<LWaNY=nLuWq&`M@5!hWsyxFfo~(D&_1M{J%|gY+*Jvw%
zKLa!1l0FRfyE=&dIr#eZ;RXyB;#xl8<9?u8;*rPis&J#3!XBL`nz$j}WMjGU^XG2u
z&15Of2$4yK8;*64sq#7b?=ujdkQF^@eW>YVUlJ<4wwvCz6?{JaQyE8<YZ&W~{}o8j
zc$^#BD!Q`&M^{rY8>D<^`R_u`GYU1*TYUHIfsV!v{H~7E{2qb;;jh`2BTirqvqd3&
z;)l3fJ!{^u-VP<ch|F88>;^$r-oe&I*MuP0Mji7rXe@!EjRaNLS~<-~R2HRr5G+uM
zW5cNZx?64V+Y4|zW3sCy_6^oQIwaXOgXzEPPuuxzfiNRXU_d?TS<~m>%Iv^lC!HO7
zlzaEO*Nw_4wsjBA`jyh17*O$)Bx2(d8-1Pj8*e0v@UitFm4E5fUBrDz!yP~~U20Y2
zfUJ8M0Tr=aWP1<w9L$A@Iwh3UwzI}XIO79zKP@qk29HE30ejq`Hu(?{1T(?{#sxYV
zA%d)s0;l?0vo7pky%w5P$`8Rtef=L@2iUBa)i-I8|2GtHe-Hcr>j2bca3|JF3qmCM
zzw-<Kj9@JpOW@?u{BIpSwoEib2u|ysXaALCS{LSLYFz<y1>Md$sttlZo;Dr2AT=4(
zLwzvnV5K0E2Gjjr{HYQ+@<?^u92Jr@kaXx}-9z(VC%6zY!uOpoU($oFGWa#Mv_&vb
zo+1CPwJQ+TG4%t&3Oq@OzXKfi|I#XfGf9yl5n58(Rs%a6_<=>Y^zSAg*e@!-?6xku
zi}DQqub&zOtKvHX$jZI{_IB8|u+)Y3JP_9W?cbgM84jzC-Y<vStFLX{j6@0kcQ{dg
zGueortxL8%6a+=3=vK@W?Ej7spxFPjQ~s$@cfCH_Fm>;i0&W?FNN2~<|C)Jy6Z9WV
z5NX|(Y>m^3WB*4nR<{PtB=|2)RE;Ci-1aFG>#N<Col-hhMz#mSrTm8LX{N~0e`_?A
zlnqOe8$Hx<U=d^c%tS?30#|1PTVZ-iw;4oQ>gWK2;Us23(37`1m$5nd^FBo78xN{W
zwk}BV&prgK2>!-sv+{lNhaN056Mk}UkK{5BE{OatSld}(&(uZu&5}?=n@Ov<C)e9u
zNQC+x72Yg$vttc;q%A5W5_XlO(oe@#s>Ny-Pyk`PNcW|HH$!n|3dd8^;Zosh)Lbmu
zi4*YLT|K>W+c$===*$-*t5w-s_s~e0`>cP?U?1+N=j^-HjO%Ehpc1wC<?ted;nIoE
zOd~{MC|P0%bllSz?E}^f2Zoq*H43hpjh8~SWFcD16_<rJdn3`=yLwAuA4{f)0V~8;
zFr^U_*u%=-Q7|o5%BS5SH55r7VOp_8nF{)doZ#i`h<g?~-S+%ymII?i^cB^b)}|Z}
zVID_q5)LStNHKg~8pgiLTmf>Q2*H}=#9A0%t?|;M$l1)%N$+;PpP&uh{cYS^j_d%t
zVix7ED-GNCaY%s}maS3wGWUjt%vxf`leJW%9b`56*1Mjm<-)IZtpq3t9OEq+o~3B4
zCd4lZ6yR&~J<Uax`-ZK*37)ZCkF#7~`%4PpR=NU9_##{834-Q1P}ZVZHpaOAm7F(M
zoXVe}H!ODHXsTM+xoO4>QBo=kb7|2|nY>mv;Y$$e4r_4)*B>o^qlzp&nCd@Pv8Vr}
zf^9$_$|NETO+J)=j=-18vSnhh(TvV(#0xtK|JzaiAY&1#OSn_f#pS(vPYCo?3u7;I
z^kr!2@%_PAEC0O~tL$58W|9l1try5$;n$3>#pxYQw`rwD9kq$n99O-54sLwJ`0?2S
zySM<YQc`YY1oWoQDaUu^f3|#l(rNLv)1nsUwx~Sm46zU~S2O@$RSnro1N^N~k-PP|
z#API(kAto5D>$rF@+>BLB>d#xHRQre^WX>a;Fn1xDet_JhNGsU*kICLUIRlS2<<ay
zdE)dl?PdELJ4n*D6-^;%kBtr2(oCTzwOYI8nUEt0Nqk%+JJ97i3<%pX<g{sk@V=5K
zr@5(s=MTX=EiNTo>I%56h9volkilA!sY@D^w5soQfZyd@l(`{<EJ@Ds@bIpgLS{qB
zp{tnJ&P>ZonU5OyZJ(~5`k$4t?%+aJm{A<tqAK2ZL_1kuH-pN;_%6i<@s3_x&3MQN
zJ*@mwgUDNsRV5#<k~1*ve03qVtmkGnn;!*}o@)2dE85!EQ#P7J7OAym%0m7!`d%xE
zu|d3G4D9`RZx4>j&8g%;8P#vmHl|@^Z9rLC_fQy(DEAi<pp+w<jN98Tw#La({|FH(
z$anyp9|w3ai2bAO`e@MRUov%3d%7lR<S(}GA>rqJH8}sDl5sk-40bFENBlkCTW$5H
zEaCPU_TOun`+u(sN0o23;3;d~TlTz%EGkTwxrBbNTo#x9)av~EJj$Q)>(Ni6n4z!w
zia3!gu!TgtV9kMpYVC3Zc^twOx(OQj>o6yucvV2u9bk^zhFRf6AC{+c_whUR=nX}M
zz3*LJY7k$$R~*3*sqL10xj9L^&<LADxX=QM(YO7(E_2p5+kOkviCoY`6!kOhhoWfM
zO;S<0z2#a(vDC|9IdHmQ6)5Fa*Jp$1dEP#~YeL7GH2BG<qnm(n4q2iY=YF4kEmD6<
znP0m?N6X2Hg3;D%b@fg0>z4&my!}~umorkW)MTjq@_w`w1HAlNf7KUGPNj`vZDGU8
zVusbjx;R)f3p5YOk1vwC&04>*T5;ODBrxk}6?~tajuO4KD@LM7sH@<)1G<SwI<nQf
zjPk#t2?U>1dr@$dM(m}1rjq4VrzS5iZbp)5a;$nuiDyV6<NK86%!h5YYnft7VEOp*
zKaVvJNlD|vS2LVi@5~D(j1kgmS^NO)<@Em`i>z+c;*pmVv|I~W0)}LdoR#`JWEs2^
zuo3zH>=HH8DMmM|Ti{tFZDA3U;Hofcf6$10N<E)=Bqpk?uud@S-1v!W!1n6S+J_)%
zW<JWRKFfDwA<JiWN3{3H#GF-gr@6Bg!y`pJqOEo`3zRiD17WL4yR0eJ@BZ1;frEFn
zL}*1^Z#YwOXW_u;qeqnNM3c%x0|h0047v@){IjP^=W*DsTAxiVOc`mpj+q~k5ZkVg
z8nwftw!#$@uvri(cE)#6u~vn~cZvTwSR5^=j#8(=&-VCOlZ+A`Bk+q0T#|x!BH5#7
z#~E3GRrylrs?t=P-RcXsC}-kaHtaQa1>AZl1e*TzS;7a(<GP_)YA$QoTAEEtTFBpN
z3RrvR!?W2o&*-8QGRKLyA2)!8B*&C(m!eoLb?o{4z{|zf4Bg~mc0J1Y%D<2FnkzL~
zts!K_5R~#gK%$=penyOr2U~UU+I>;o3Hti;Yqr9B131t8HVzoqm~Sf!SH&Vcy?g+b
zH*Nqv>a?vOx`+5W`!$<eje?KVs-zW$tY(jV08t@<)CeKYw#%}R|CmG;dYGSm7px1r
zeud~g>D_sejN2HPVb`>kv{KDhtSiN`6^eg^Y=2Tl_?;<vW5!=F(#s)-8Wk%c_4%Em
z_Hpd78Pz9=&jTq!YME9~s)R(t-B&3Lqqxkd0%4SLV8>KuM88OzuGS~52P%oRr0)uv
z^{um^T3&e|QjLB%d+|FQ9pxYcninrUE(@oKPUfLXmS)clV<g%2r>Dl01spkFG?dW)
zsblPbLaX=kVF}MT{B>f)%^{j~hsas#5hNDIt*Yau(b6m>-Im-}GDTm0HGwD{_Jx*v
zAQWRLt;=v3b(4S4l%Vw3DEO3Mnw7qvA;oa(s1%tJa<|(2DyAN_ONv!7z)uufu=$~N
zIP`+4*Gn<|T|)9HZ%5Rz4BZ(MwLxGndY$-It9I4wL%L;sKdL0M3$)gbHf2ew*}p?N
zk_eU_e-=r;F+uDc!2jCUJc|IjqXgct+F)l-+29_)0dzjNgA<i+PcTmPrR!?}2)6N(
z^Px5Dt}`Gt=f<MUDU!SvOB@mSWyf0w2cqW>ge1<Ke5Is>B}K0v<6%v_dxg3ajUA-z
z-h+2>$E`9cgM^-YF=O*`Bb~tsL|qF1cneCwq)Rfq7IPyp-Z2I6!eK+)iO_vDg?lOK
zua2cESnCw8g*3N+?m|ycwCE3MHMOn_&ayhfnpBC`zTK;mybW|&UfLDI7Xknvc3DqQ
zcnfZk*)U~KVKMJdKD3eYBPvfXjvP-KKS@Mqh=|VTWHb^A@lZoXzqN0Ldbb_E$Z!T(
zm4lACJ{`u*bv9tBspfrI_sbei;p|f0!$6%zhHoG9*2}z&)@QO~-z6bV9h#K0Ep*yD
z>Ey2&z!RQU2*fVrcb6(zP&(H<Z}#+t*&dcVc5V1o4M(2#G{(1?w*CIsk|zY*3#Kt7
z-1AkaA39EgdlGbziD2HRAhdA*3R{?+Co1agwX!OwnAa~)<T~nyW82yG>!UTzVQ~vK
zSgw{*DC$?%Dn=h*Lqif{$#otdU`H>021ECUqv`En?%(0qW$4z?jsDUs25c0@bgDd<
zzCy-;?CR|YhxPP()5wBJT#*%Z8@X`UX+Pp57k<(?+)Sota4FDp2ZfPxTb(>csj7sm
z0<LsMl)fJ;@HJ)q^;g)?+0syV=w4_J6ABOfp`s#mLA4F&KP7b+)|UO}vebaT0#4@s
z`C)9_uRv(;hTW9>I4g<#G5FW-Pvq=2+Qz<mEnn5CiVVOT+dm&|yn|f=Qo-nTb=p;8
zlk!5A-tfgX9eH%XcS<T9DxNcoZ1GMuXo_f~mB+EnK_0*Fmy8v{f#U~=1K|-Or*MT?
za^^$w{qRYH880hKQIhiA5fkBRvb*U->mt)v_vj^l54VRWWz}SzR&rwzVF9yzzKJD^
z3H&=5f_nwHy$oqiA6Vml4Vgs<*PIFMm*N)QL11zPW#dO-0sok&K#k{sKbsBWA-JuT
zr6YiG{ojLT8x%$WP-7XW!4K3(7pwr?QSk>J=LG@|@pG^lIWR?hYuu=xWmW!sw-(W@
z(+P+1C@?z#j;`scA~@A$PFFL!?bWR@&<gY4IEMH0)s>x(xoD%OvDh4`fm&ZH;HLiP
z$7N{T#Ku;A+scEz_oBBx?Jw`EGPNxKlR7V5?KcZ2XU!$AoDFpWj5c)V#`pSsyvX!s
zsJ^P4Mi<?R+CU{iQyV96Zii`v`M=Ec;tXh%*q`-XfZXSAxJ7zl>J<UUO4jR>fJuK#
z;&8xI3OHuFK9a=$YvsR2X=zTzEoMR$ElW$HGK9!70y}E@Gu3#7Lldv}yBi`(c9&Z1
zzZ+?LMwFp7>vRYZ2jlxIJ5_Dzw_XsHU17drOk1cd<pUjIMba;1YHpPiHT_|QES7my
zPYR9#W~kPRXkQ)6t1>3V^oMzWt~&=j#9<XMN~f$+lBsCHmfxxh?kIV4nFc`4lv^2v
zyMw{Sm<K}PIH-?S^Y6KEtUDoO{+7$-)G+kRGhy8qp}2pN$Q87&C9>h4jpnDcE-J^V
zD~JjV&Q}UG9DjJ(o|x0E*r3*J@dD`EE_Q%@baZHoc{!%6@Ue}gdYR*jDiS8Gf5k}y
z?RK)aHfVTI;}T0l7>vldno&<87-bwCwpGaeNMzZkKH%j3No%1VG$rVj8jYAwd!m}0
z;~IKlN^k5URED-<7>D&6IVO))^PI|Sh}$Mwx^exuyG4jhO$bxrinrFe@zV=%rMSYI
zK!j@_Q@GsKo}W;7JvjpAGsHs8!ST+TR`~M_!6&<jw4UI8S4lOL@5xmWFx|7p_t<l0
za7gDXsKT2u$@x;2MNc~!rN>z@+XBkv#agXe)bct|;epiQ<U>V-G%FW#>LjT`3CAN8
z34{vDCT#<KwNQGf(dc0w`q)%nZ(}dO9l9p{WJvob1EVTwzK`S}6$RgmgrWV%T~xif
zcL&`2&se1stDfj338;rF{lbeo!qfhiI;vbKA5iZ5WN@*AVt{m=Y)nEMRJmF(isZa{
zG-r$szQk5rJ1YMu+X=A<K|pN2^LZTWpu9QG4&3?0N09YxYVl|Onfp!LS+K+IU6^|J
zs-dUWNNxX9QdHum0AbO@Gt{aQoYp6AK;(y3iT#)Mmo}(7N;9RUM7FXNVBex~odw#0
zcV+pJ5#fD+yViQQnp`QpOr3E{tNJskPhMXUF`MP_Fwx~paxF&Xjne9S=K0OG6RT>Y
z?%PJAM0g5Us!r!=2|H9Mb-rsds!hYp%93`&m)cR?E{7@A&4?{l?G>To(ZY42v(@t;
znX#|l>UETI8Xt9<=067)CPQ9rPb-Q;+!kij(sn9yQ_G4_&^$Z)g_0k~<^1T#tbp?)
zv?=oV<TDGRKUtCST(C{+A=o#czf;gf!=Zy0F?utCzM|IxHH6~wYcA1IxKPw<=Dvzf
zeeHW;ha%5^vb>wDqTnp7SQewRX>9_{m+{o{yeR`4Mp@qfIrU*R1`ds43$tVD!;{XB
z<?*=Zs{2L4PRE&$v)oXk`WLwy$8do9n6m5-NsVhCsBJ>c=t=e_cU2F+6{QLIk!?z!
zY|WF=2X*QO`LulRZBO(hngRFkL}#$5_v}afmMTPg_BfNz3swv_b#6YoKu4w^880<8
zoAE?-aUHHc9baFhN+?&r-?i}TfM20Y_6G)@q3jVf8q86l(zJp4h?yvf)?>}N{Onro
zUJYX&Dn?7dk9C-9&dBoE2xg44;V+{R@8l=jssB*@O0kND1zrp?jo2bv!!z)oBc5CB
zJjw!vz3vW|KZAg@mo@Qv|L}7+!}ikm&8Hfg3dR{s=MH-xwUv3!ZcgrUnLU!wKo@Lq
zEJaH`EC)?)Ln@1-aQW?EMR3P6%-;PC!LBafDK+JxDr|2y6A&cHq!?~?6wZI7(eTKt
z2Ep7^0Ql@AqeKB^il^q$u%mg}cy@fbN2YJ8zknH2-i*b+dG`vj6{F)yuTq-J{|ql8
zIsH6OE4r;Ak>DV!-$-gm;E7*Yxh8iV3^(xwrOl4tv3G_6gW!qF(9|=Ox{~Fm*z-q4
zc@`vsV>9Ei!}>Ps;BKY1OvmQhLmxN%n<Gi|u>bjy*FxP-ZO=UT<;WB=5XLs=-xocN
zgiY9@^yCT>W{ebswoiXBFFK+^RF0l@G1;Ny)lLd4;88XFWWJ?vdkOl4Y*wp`u_@*6
zQ64dt%lxkUyXO@<cT4T?Q|lcpu0wk(K)p$G+qJnMu2RlYg#IE@vX?v5FVn8Mw)#+X
zBKqu4B)9*$kE7ez<cuwo1#NtS1R1|7nAA|K*Dh>WGqDx4V?E^7qvh^=Rpl4a%$>%D
zFj9=Scx~UZx!DR&hZsXA)|cf12<#utzwNIn?D!&@d5Jo}Fc@G+NSILoi}(_9pU96V
zxvh|9Tom%>yA96s5D^xz+TcRQt7WSVbydR440P<mxIZ!3HfF`auDzmDTGP;uKW9x{
zYh@6lG>$RMh!P33{fs8cLe_mvONEL!2BM9W*JRSBt^}Ns9;p`&qES=InfCGZN$pwM
zNd&!$6YsKP^Qql|sFYR05U2D@5vmyO?g+N5wF>+1bT(|n1AO^V&;UjB+E!z+Oaqr6
zg|J<|!q3l6B{#7(m&NkaIvNx;Gr30--(?j?Ta|5{XzjNk<M~1*uFu39egPhPuY{(O
zx5FNtO_)!FFlMjby@BbGUo?4eQT)zE@E8#eJFFvfSlWc^YT<eiaXf0e6<28Ldk)cl
z<yxj#<vC-f4i+0TdYG)$^Ko|rrj_Z#cAh~O19>J+_0o1IvFDD8n-88~1|po|R3njG
z@`W_b^7Zt!*K0;EgYJQX1gFbxwf17OZtt1Lk|P46{VuzN{@aBzp#Wu6M%0GnWA~iR
zMP1%yzXE=}_*7AwerKN@#W<T``72-E4#%nW+M;5;8>dg^#-&8*DhuqU#qxUJ*(j!K
z*&U37TX6l1>V5#IB6sW$3FEzTeQT7{^nJVa*~P23tdPzd@11~ezbceVAkDGqQK-H_
zsTnDjLBkov0j>`xgWntMVT5A&kBF^Gk1E*k$_l<=zG<vsq;;YDs7<J^Nf%Jx3Jbns
zqWm=|q*O*(%0&1^ONm#6bj>Ol&ltoGe;+`YqYR-Wwklf}T8rraLg!t5v-`@mxikx}
zFZl@F*Qj>|BBT)L?NL_BhKFq#E}MXMgvGARc<P`J$5hZf_qh*T`E~YDNeVu4qK&d(
z6v84CASfJB>vM-brQNI1q8Yj*$0=9vIJrQ5DWo&}akVs7h}kj)&I|&c{*C#A)eHHS
z^B6uv_cRiPIySEN^XVSmJZ_wi-nIQ=YdquXYP_>B=-|5h#b;P|bXhE;Q1#qt()w-F
zNrpo`bAxDNgM**5KKObQi;{BfpjpnMgEF9J;o<1d`k41O<zSmF1xS+L3@!0z|8Fx?
zHcScLXN0pu3F28IX(T<FYRAyz7hp&HHX>^<VJSSZ#R!#EQxDDCi!O2+i$FNQQk~kq
zjtv@sH8Xe5CK}+i*g1ejm)48cq0|9$#b)Fi^E`q7CNdzYvO@Hi$=(JmZkp{e0OKF9
z3vvF9AKeC>G??C<UY<1xn+QWzz_(UmkxfPG`8IRakmyDVIZ*I7n4&T!d=D^T0eg^8
zQbkze-|I-`HWEp(q7#B_&=SUNMCII185@F4`yZzN9NhYJ{oimw&IHnw_f7&C)YfW&
ze@x>aY)$8v0y~iIP&(<Q+b8iCC&T3bM1+ybp4M7ANx))yB~@s);Ci<Th;W>3XLMP<
zTxT&(^YC-y*{7MKKa~TU23)O`p@$5?L3Lg?bT6{_Z?tRy!<!IM=v8F1fOs-mK6J5;
z$P74mPk-I*W!iaEeqN;b7r$o`4H6v6x(PZ(qgx|v4u+`{Z~>GgFu3h^r)l=h@C6&?
zZSVlo@A@Z+<YhtIQ71`&^TPCJv*$qTPiKPxKs9~+Gj_?#Z>E_iNgR~G<gx9qw@D;p
z&8`oDCX-&K{jYCf@%EopaHnvoqBenjJAD=a`@_|{Jf^>1B01Zjzy3xN;I}Yct^OPw
znFrtBXuBSqU3a|v-MKhn7=Q-m+|yhIi~9>Zn2B7gp9k;<bl2Ji0>Q!&qLIr<djC_y
zqm}pcn=6hvRNqx@`@U<D+=h~T31$y46vYD)Hvn(!TSP)FEd2p_D&_5hqULwX_*XVb
za5Zn^9%kLbVQ(PjF%H37w`ks{r+&Qa;bKbQ0MyZB;NK#i-~K@bAoMz>6XtF6a&l3r
zYJO>Fa@@LkOoToy%J=$mzM1>x*P-CABL6q2^2>Wim`%5_GnDV~q?$<v)jp&_$`str
z2~d&^>|r(t@Jr_KfUR!F7>T;LT?jP>!kPZIZ|vvby}y&fu<r4@T?`R`gpdGB2*k_=
zo!rik2LrMqF%lKP?^<b+O!qgm15~Vn)VMa=zQN^U7Fpg7gweuvV%}HA5&exh0<{GZ
z_~mQ`{55C?731{E^7PCW-LiZ__dk1AAV1?4b-Ru9rPCH@%Eo1x#(?uuqJQ(a_i}ZZ
z5g%lQIMuSpJsZRgalKw3?d&i8+<g}M6Ge7@&&bHv$g7AeTGFK0oH%Kr?ODujIc-(R
zifb?C!T2_QO2?RY!1XD|2+?oW5hRko#?|*l>4>*b9_|3%OjDt%j_P89gd6*YxS*5j
z#E*f2H6KOq@`Z}>^pYU#F1(>Ccg9fS9@YO^lc`hbbgn2HXKq$Jihi&2c2)5HQdJ7z
z6-k^&lhnZI9_a};Bt{X{y~nMhL10SYAm9x!)eFp_0*d2UpK{_?-EV*x>|J2ptmEvR
z2xnR|q4mazGokyUkAxmTuzd+2;EPsxLd@F<H;0!hn1htbu&L<Kgh%nv$4+z8QSN5l
zUCOUH!r>B`M45Ph`#-SA-?E|q-R*N;O(rynz)u~bf`&I{t8eEOz^{X>d;)VoOS;*h
zn9MX`<2n)Tw?osLA!XaxG0ItXs9kx<!Lu1QyLGoUt)AxLiSQK+{Ea!cv&@po@h3%q
zv#b^b6Z0YP+z4&~3F)6X<qR#jYQBWj97cCMAqX!Hmm0lq6Cx&kF*S6Kr+Q9x_G)w7
zi+wTR24%EEit$YSIcmc)IAf)bf6rKW{3C5dI2YGq#qaUf?W^7-lIDwe$z5!WX6<#q
z;0x@4*6};*SSA8a^mkOQ{oF~BK%DUZiRu9U#{J((7l?0AnO?drq<q@_OSv4;Fo}R`
zhlP~3yMOP2Sgfhvaf0qfx2Ou>Ndu$|a0MVASAg*Q|2NA2znudRV>#Py9*F{^0>D1N
zpySQs0BVzk1@JcplKPgjo(T(Qo=|Y$0z#@rZ1*T&w1_#uLP%%Gk@>1l0$Vh}0uL9c
zrcbFVVUl_rsyj5i>Optvgj^SrkUVQwiqC2mo!Y_M_Z6DLo0|B%^89&*K6^@*v2S{x
z=JP;UHhgWV6AraHjFb>=Rj29|Wfv_|EQ$1RBP-7+sYx1FG6DS--&zZaW^eiZ$%XEF
zTvTofM#`U8jqC<b0WOE(fA^{{<kG2oEYG!Hpy5)Yqo(8K<pLdO8c))$Yph0V7#{|C
zurrS>2(M(91Oy^p>?avaRvWZr+kePl!U7}-W!8A>107Bkr)OajLowKHWWOJ-QSEze
zAb#ZNMUccA0RcQb>ZyrR`|u`JQ@1CB1b^Y;>kG$qzcUHOY_4*Q4dn`iYLceq@dS%N
zUx{~sa=EkRU0V78-{JTA;2~_Hy1?=%dM;lr_e)>{g#c7%$%J}5{p=Hr-wJCxPq_Rm
z%B7qLlK?R>0|%_@Ad2}^eKIR&bJ>cgwun2oJBu6UHk2-80A}ZlvS`h82|x{qDuJ)C
zHxXW(w`aoO`?Xd?TQ#~sbL|ReU)-mN-<2(kJt!f`b*r{PYri79U!>hw%sV^0$&-tB
z1j2jU29oaETq`g<j75I0g+!gmJ(pivQJC<~lsp&n9FWRp#%f%;^8Ds`yT3hbjWh<;
z{C6HYr@Yh!(JCWdYWoMS5Yf5VC#ogiI(jssv6qqnS&TfacI8sL!YyCCITIBJqF0x%
ztSsMqWNn*IVg44$hNl5>*mh-&ZQF(Vv*rfqfaI@N*0>yx%Sr`q0i+4!X)t#ntR0I~
zecKy=p?n+uXd)p=|1t$hyZTgOsWJchE%@1^tzy!BeD8m-M|;(ssfqZS^}HUW7N9Z#
zB|JSixScD1o4`?S&-3gpmQrLuPii6Ft<1*_9Q_MTVemWzfaYuv24LOXs=9XTzuE<Z
z`ra*z5n<#3c^;Su%*dhtg+t6nzhSYVH%K=8FfovTLd4)P2Rdkv3IZ~w!2qZHWtji1
z5cUw|dvhg-ZuP|oy!keOixCLIMj;;owiM+fYuFy3Lq~&Pw@~{3%UifCI7>1>aDUMB
z4xn&1|Iv~s<82`x2qO#xrWxcfCu2nY&0P3DT<X7#%|_48ceqV6rn3OmS6bgqB8j{p
zFzK^3TWDJeEyr_=rkV&Yp;SM}fnnL9uLlE!Zw{Nem%7W(OdyV*>6*ovD)Ax<L8Zpu
z)TxoN>ap9?%>lz?6T!zH@1{PX*-4lV#u-<>O-4=S1(H#lg{6<p>}Zgw72!MI-r2yk
zaW?!&xUgT;iR>>PxgMMOEu1XzeUh*d*W*F4P#{h?zY>Kc{(zrUox{C9@$MTsfxf5K
z(s882I?$~+DM6`=c}xXQ|6ZQv9|Idw1$+Uy2fGWwrsjsAulD`G``bsg-Y>u=fHm7g
zh&qiG1d?j(7j%C=&4wS)$`pzOFi1?7Wzkx%-;2|9{MDEPKgdr)Fzu(=L;@D|`%lm_
zE!g+CR4BUjD*)K8fO6o6cMfONZN>d~cI96ac%bfD!`4G0ld)gtnAsrSB|eO6IZuZv
zep8=nL`Tv|+z_F7@GdM}5vO|^KfEly!oDya$hfS6C258&)#%>njp}$Uk_}6NYZwg)
z*j55nqP-MHwMw6x5|ohpg}Jb0CE($hPb#*OCt!!N(eKb#vuGs}K<$_k2RA;lNhN8;
zjpc9BLT&kr-U&PG=R<SUBZlH42U1>#t7gnXJX#5os}qdHAz*Q5|0208rfN0AtzRu}
z=Z}q5(OhFh!q$Ged*>B?j6NqU(%vy|cj-!xrENah=WCxiwX>yfelP&jyk9#OXBE#B
zQ`~=}0k_N$Z%r%Q#g|a>_Tav%${)W-XUkZ4CS7vH>3UOk{P7M1T(-Ry4l8B#m*m%F
zoF_l@4WO!a+xTn--OViZ52#~syt(hC6IQCO*!zTrRVftpfb^vhi(#6^SsaiBF|eC0
zZl9S81+g||ze(Y?i29{fx~*V(IA#aiiM{zUz8WVJ@2<HZYF3}<wVz|X{y{K-d^_>j
z(NS8&xKH*$jk%Hm7qT+XOd<d2`du5g>dF&)_6$EI`sKIeeg!w<0jmkdBGRv8B25-o
zs-Q#5dv-UzBgoV3wICRuSJRrh)?3$(9C$WC7??skd^DNO<&c`bZ$mL!+ONZRl2=i?
zpaSdU?uIl&hObVFEOUQK^@IcdHj~mQ1A9b5lu3j}S!mL5^QGDyRC5&e#oL92{ly_S
zt17uK0~~k@bBx;Mk&1uFnk==W)6^qe7|8mo4Ptt?p1FLg92*KMU@#SJvJrf`JRZlk
zA1^&su{&{{v&%tiQ@x9Rq4<_XmG69I{p0B3x4|2?5hQwY5F0gOYyv4#C^2J!&3k=;
zu@JCXC=VD3DN7U|ViG6qO2_a^{~7p{eOQ>UTtY5@=r?4v%57BXto}Jqks(P*pcqkn
zMCCP>Y3PEA#TZ+^=hU!Mp)xKNo~mMFRX%8#e$g!LlZy;n`Xzt)A?<O@fa<ng46VFf
z=!KucL&JUx8LR2V60K^2$uMlz-yi5NBqz>h%nGxt*~NEs9znpGsMU|`&?}zq95{!d
z$6+@|QSCd1&mk)#WT-Bvi1$ykV)8nU!rUp32OoZh#Wgpk;@33aAzrS9F@yxenn#qq
zZrWW2<M!T->MUn7^{3T3#&E4XU%XMM(T#S!LDKaqj<K=r-%FLXV~P`aGUd=Fr&sN`
zxo`7GHmTlS<ABp{J@Rxfjt?RHotyjJKMG}X%jWoSiD^)=SnE{_0P3>BR)<!4UcUT6
z58{=L#UWMZ)gI^BqW8`Pu|aePNJf?A1GqOA9v&z}y-lih=6i|1EHyUE@g$vUzFnyj
z-qk9jB34<$?#FXcxG1<V9mOjvQ!gQ~+tM^<-r4)s-KVp<BM@eNlOrQb69dUZJ4cbv
z2nd%1)ihOoBpaprGAKTA-T|AvCuSpl3Iw8?&ppnz#;aS$$qBV(xOeY1pxBpLXx{Ay
zfbXELzP=*c|K8(7=baCV?o$5KjE@j-XNqpleLIpr$X==#dSTx2ni79G%Awf{;n~k`
z{_x&8m&7NBU*EF(se@^qYJU+So(>Qr@)`D!&W+CxBO{50ER7)UW_T)1jl34`3TqFB
zmqqrI7GBRI<GG%d!TAGF%AJR{VSVI>vb4O!28v@3;|dksYI33ak5<XG{lUqDMdc2Z
zy*YA-904UpLv@jay+M5R%D1#R;q<DWa;~Msq?g_{iiO&Y9<2`AFTm^zVuA@vpRN25
z^U|#=!u}#lhJLd-AWA8|A>(#@hj+UUy*94qKEW3u_0bcrp85;PfXVR+$lT1X0{M~(
zVnd?hUB?TWY1AT`IZ(T7^GXR5=BDS@8=tG-fM(6K9r`gqSqj?~=@VG~oYfq4y_qrh
zkhcPU4a~29d(^JL#~8V!AuD2sRIjHS5va(^CT=dp5tSLxZn;R11|uq@cXU)4PAoi2
zB(vXup1t<>nfm^P|0#+y>sd?P28Sl!qdtE+ev$9h<1!4beA4r5W7EjD`hxJc316y+
zTi|)*h=X+XSOZEN{EXFbQC<uZK3xJ{LvXZoFk*T48?-i2(K45Jh+$ccbvWk8QhLh6
z5X=Y~&!hp|ftUcaVCF=yaI<~8gF^DOir_~}qVOtYo(s(yB>c%|=lp03Io~W9*IL2*
zKQ@&opdvq#@UAU3H`VF(=M6V{(VqDRf(G`eU6kFI=hiS{p^KN*(kBuk5D_1HBrj7j
zJpxVzjN<5b(4EKC(_jPhv38XAJ&Hap-b*-5y^Lw?T`NiV0x+61<$?9JM{N2Iq)F>u
zXFwCR*7KhLth>{TeQaie@S?!8NlWo4X804m{v{f4NE}~ZxyP7D2y|r#CN-F}wn1vD
z4{0PXenv{Je@I_Qh5fvmj4@eY3un0)6&nT&?o@l$-I>%eCllQk)${SCtZ20v$!1qR
zjZw*K#6w7%jU=`J6>7I&e4Oggg|z<zp1EQt;P4Z9sT>m+8NlC0PY>y+VsYHR0^QX!
z5f+x%K-JWl=j8`BrtfN*x~v}M(HkBwRVWi3fBD<W`S^#hsiv*=gmYu*#E<t$=I+X-
zr)U}AwWz#c`XSGqM{k<zb>1!N1HSw|lfk{s7$KMQH<~1X;|>@WzE{U7Rjoxi@Pf5a
zgz%Ys<;brDSHAFCwR415k;L9EZCMPvsA5Kyub$>yCVp(xLY8ZEh6j+b?;ihM;b~FU
zl^YJ?fI#gw+bKCI#U?DunW;xlxJ8|czK-`Cp|9;5n_EOO7ppHU$X=L9tNHqovNO9?
zuB8^E%eih_2uutM;Y=t_zp$cmGE%cAzHlVWJ&pwN>mKPmuh0iQdO;?<nm%7ssuL3v
zqdN&#kQ&vJJf5-Gi0|9l0dmhqzlkQaF1UF+_7wu#ZZ!V<CZl(vuf(gYfOYTtL@dgA
z>sLQx81(RGL2!!Add7U1uy75HfFBSNh-#eE7X}CLy&-q#NZ&G=tMn3F?q_g0pT2gV
z=3k+%q!V{(NlX73twJ(Go6>qi*~t@MlPRob3LrPc#Pt>(&lIy@IPaVSoPOLx*{ec(
zCW^Vkmddqbh`)>TT{%3gfX5s*xVZSgps~7AY;v{t=)1#JVS*@Pj1k+X&nke)R(6nQ
zz5W#>AE0;JfeO%paxpyXIXLfww&2?JbOLW*!c{V?`fc!&X9|3bB93~*_J2$<`(h>e
zCd&)r%U4lh`7A4xTqE{9wA`|Y@eo!Uo%IfaH-EC0SM-@f$|Z8@Oif=4$-Q@<dE)h(
zy9Xb96DF+my#UX_q!dJF`n2VPz}umcgN{dSy+>=}ewi+K$dX3AhD2l0qTR=JZ@Gdf
zNu(<>quFM#QC%MOtJl*tLVaZl$uQEl!OPF%Y5VSgUChdE#*Q)1R?Gxnl`uT<BBOyO
zIulY^3#=IWp;E_XSZsbi=X-OUwV=5zFFBGj!d&}jM=6SS?3MAKFtJ0bjS#$>LSdz@
z0=YL#6G-6AshOSqt(Q~CLS^Hmfe6^^qk>fap17I3chv?jQca7Adyx6dqp8XibhS~j
zPztUPFjOI3P$$XDhmcoX_@3aqcRx5kLo<&ar}5=Eeqxhi)v;ESjZo3=7D0%C#21Ae
z2QCeOq%frh`28XVH6p6R?Zq)}H%AF?!OLTWS2vnebbr?$-o8CE5N;qUE(}|4-sq4h
zo=ggC6xz7E<GW@*sVcH;{pF+E(B-VdG0MKbi*qX^v)0yhm?zKF<R{2#D#4df&eMfW
zT%Wt`-J_I~+G);b`IDoqaD=SdeN}zSo`n{nHiH(<kJ;|Ol0B=Hy<=72gDK3#xz8@-
zYB!!o)NR~*3-Ka8%HL>iXsXP@7eFWM^j8chc<Fdnm0v%CXQrBxE}p0ZZ;JhltTGKy
z<NgHm#KkoUf6VC6kB4?ii+~Y$w}xeNn8j{{;^yL9D<8y}DGD=JR}aMY(;r0<H`ljo
z4%jPV<`nzIM^p=ViG=4?5OGzHodipR-SSBj`z1@nT6>_7B;B*b#4M`<ZA)1VAKs96
znXGOS2rr_OF5gvwdnA&^EH70uJPz-mWXu(xokH6dR)NeDwLT}UWKqO4rylp<8#cs@
zX7#7`M&%QzNeYG5DHtU;HSR~4e_^><Kw{yaTC2SGxW;%ZT<BK<EvsF^M$-5Cq;D_j
zj<1$Rh}7I_xWGf|UcMg{Ox_fvCm#;JuYM~fGnBEAV&UUW`YHy3mOBzXJ3#l#er`vw
z_PxetO@5(RST_it#J9MY@JW12E14w3(*U>O<nXg~u?1%`LxOQPn@G%n#@z(X7X-nl
zYui!Q!Gt3}`dpu}bftkDq`NJ6?_{vE<0}@#`@K)gW=&QoaQU2?DDx&qudstuAw2YO
z?mQ>=@bFqwfoX$1wPfHb7oIe}(msHHRqt}Ryt0iq55uQz6ZP{82VUaiJ{tVtU=wDA
zo{ug<O?X_)9!S?XU@pGec_5BQH>}i+C*Vnn*Kjg$@ato~In&{)z%UnAhfx0gb@d8O
z>Ml*~M;`<%UbBzlR(Z6eT?#F?n`N5qVU$Hi_zJPg2FAQ^N601Ri%3?ylf`WbyGf$;
zp4xm?hZ{=biCOWq0p~X3_~#1>vgu&GzIb)g>MwPpAa-^R_80MqusyswS^R2&Hw`4H
zo%?gZ8#+3xOE!@C7j;m!wbKs{x?OHkS0Iif9}Os<zT-C}c`GX~sai<Vin#B)RD9Pi
zP8{J((&<D+)`ZAex;ZH8v2J2*({;yKy=Ht;dcL$!;V`1wij_I1y91Vdm|gnYMvCl)
z0%-!SMAHQ90*dtyO(WgcJdmHH0XkI9LR0OF!pV*XpI4upThr4@vhCsH7JqKVfb)Yl
z;_xK>&?WWZih74un)=;-XE?S{hB5-)odoxA6`u(po2|rqur(VO9{g<V3GK9%N}5;r
zaa3kG{Hs0vfsGL&6J||s+*Uumdx~02&E;K@GXetpG%^Sb?|fGKs1?2P$8%ZwigvOm
zqpKC7!rhTMzn>6CoqB37URJ;FOerl_F`I)%Y@_0}{rPQSOfmhwZ7-A{#Hf(O@G?bj
zV+z2OxjJdDCP;f6Id*8E#-##XkwaZ3t`t-S*l!21BZNnA<Cp^JY$EhD-y0_U)F8`|
zyvmr0+RI}-u_EAhOyjppqTN>$X??OhSc!b<Fc&{Jl{UrT<tBepBp>`ifOAv`Qj?=>
zl(aj1_X&bG@^k+2#0IH_hJndie*wI2vh9Z6_c-KwLh|rfj<D`+M2ShIHB%Y0!Cg?j
z#aho~8JQE&GhQX8*?mS{MED!ZU{YZ?%>u-^Ll*pM{u>nH>XIDs^U3(b&j#Q*B|F^s
zT}zG9ZnFU1kZXO`T7odaGoQ%@YN>%#<z)T7u#3niAy76dcf1>$^<K%Jp8d8}P5B_O
z>DM}r7abfN?TBS++1JUzGHoec)=aH+ZI!$5LR#<^tCIHIw`%U4R*g|_ZLI$}R{0@W
zlTkUv-qA2y*}xn4qz>@n<`~gn^kw2Fh;*o9zHypRN5FAA*&G4FE&mnjs>LSR6JpmA
z7gSvyMC(!9xAf70Da7l@;83f9`K49uIV^Wfmd~!-B0sfRPYyRM5#K$(=_|`xZ+SKc
za@<wtR85CXI|C7?`3BLNk=|wH+tBFRXq~KoSCmrvlkQssG1R3%uTsEjG2Y%C6_K&;
zf(|qBs1VBD2Q)0-9ty1zQ-GRBQ6YC@Oq4Q>_Y@Qi$FCh|P_))w3RDDCnv^@KmPBsF
z&*r-?psjU*FT^^?-02RoIN)>cwz8^qmgjGYQKafN<H9Z6Fpa5q1nKA2PQu34>)k*O
z=pGEepnP;&?4<k7#UN9Gr+5L;A~Go!naq0O`CwLxzq<mYz+$e*nn%oD98cuCsMMao
zi+B~;_f&;-tC2N1UnQT+;qXlQg^zJ?D@;lZk)aFI56v~X2&~cdvKH4)%3(GH)BajB
zu8vxSpvM<i1&MICgG3R_4#^*D`3;QMTT_p(8|}9&;My+)(W7DI;*T#pKi0R**R~)k
zqF4(mCaoJLYWv$yTJDJ9$%5_UI`iq0ay5T37u*hfa3+{v)0b#z0}Ga`89dBhXdSAp
ztl2*t@%GjY%d|&1)#|?O=Nmz~by-Y4BZ%p`m(#pQGpeLGK*mp-*cI_-{42$zX;3zK
z9Yk~a+rHxWDP<kHv{Aw@2a34giVNT>{<{TF?IyyGHHAQiEI3WQCvh-9KKuWWg}+=E
zQqi#}And0y_e049JBUM8L{XQ?{-!S3fM9`tE&nF79QXBAUipRW5nIin%so8D1HTKK
zxo39G1_6Qy;h*33^FCC-L&OB~h}XV}SpIxGAG_RZ5<TSw&dur&{uEkmb#f{(Mnv^Q
zZMOJVaBULPlj^b1#FG_2lzmmxF#ss9U`-mypDPJtL{KpP_@u*p7cSjgK#xZC1-de6
zAw&6?Vvgc1j;opeI6<s<j0Lq#7!0EoNZG(ToC+t-U(^$!s5on(#Bt`tM+MhPO8UZA
zh2*O6qsP;Qs<E7F`MN@OMcj?YBT@Shw5Iq)=W}tVU#v^>(k*P5c+U^~!Ud2%cn9}f
zKhz(Yx8m_F`F{Ew@YUJuP@Y@ir#jz{&e8O5Zu7f`ijFSI@#^q{`FuBe=0AT5v|KGj
ztDTG0SVZHmQj$qs&N*4r`L<qEa%Mb^o3JZk*gd)cb`o$ZLpla?qZ18DO1^fk%Qz~l
zd>AgBrWaq}9S?u}$Ar>7f8JZZ`_UIBZ*yBIUmcR>*U3QAatbGNEaIo1;`FlfVY81?
z<!OsI3JQ*kt70eKI0nZJW6&{kH`P~uS={-CES<LJN5^a5^(};(4RnK^UYfMPD&Q&Q
zl1pGzd69AYla5I5-)CqKbfv0V+4L@i%;%N4*=p?r^wL^cZImUPpDf_tg7!7-6`nPr
z)F*@Gpb;S61_qK)|ARlRagq0}ad}3FQlE?vnE~NY>1<H@X$u{){1y#eI@!hnUd8)6
z9V*BQj(?R25d8EsCV6|Q@hcnT7zo2yaToV2S~spyKE_&D@<3rYrWVoxhC4;1M>OiE
z2=f##-18b@#+gYrLN;3U5VeVosjsUp)O1uWHFUx4=LPhD-uC|F+FHmJZHac%E;(UH
zMH60Ww%imC9aRTaBZh_;-<11JwCVH)C7k?$2K7=+od+#wao<rfSqeY_FK)imoem~5
z3DM#{>K%)nyosK~d1IPhtui#ED^Yq9L}Iu7jQ%T8Y@(_T);<Nl-8r5PR@qcXFJQb*
z#<mm#%b|J>4)n4V7ZQFJ=NpUipqeNgef#z6cl{Y*L(!r|I`-A8AJMxED5E{6dZe6*
zl+zLh)yrS0ksj4&K}yFm0JJXnPX~94`RzvAz#0Uux#gJ;^@9>yaqsG%d9E?sUlLM;
zfSm%*tgXb1(S;^b-~|9>UQap>OaWgP&ps+6eawq#C=@Zvv2nFPZ+oz50vbi0nbnV+
z!Ru%b`+EtA8^lWfo2a|EnXr-K_bwN`l}}q*#y{G`&rh>yID^`UqCHpV#*}X`-YeTB
zf08iz(Q%mlFQ5&J@OB!=Xm32x5efRgYJ2anrn+}q)P{UWQ;Ha>NRwWY(2Gcu5PGkI
zKp<4<O;EZZMLJ0UsX==0O;kFe6QqmuE?sHf#rOTry?gJo&pvzqasT2W&s=k5t<3q(
zG2eHLG1c|(c<+-v!V=J(VtB9HQ9w9GN)ad<ag1CqK8tI(`7I$is`OtsLlrV^H5*rn
z>)t5R87dT?Gi=Bu9q#W%i$9-S2uRT;3mss4D86_wNqECIBvK6gMbAu^-?oz&7(j4i
z^3%nq5)$0`yW>*?b%xc58)HuzG^V(#U0z}N9-BV`PZD~1hEXl49t9zqfoyzK-_gUD
z4ZRmo{FnB?@hVHQ5Vg7V;mgs*#iS&!a|@=_=l`qWe;AAZ)leO^Lrj=~9YrqsgGM9%
zvSbV3I|^Dj@fE1rfTkk~k4K`$$H1FYHeVJ}f3MGFS2z>2>6am)3DqfOs?z#eBa#V?
zAKq_U6x7A<@N#VOpPP{*^jff^@E$X^rb82DHn-A|K0Uk{2{17;W_BVb>}+1(9w$A>
zLmh>ZF8tG)v4{E0Xd5U9{Pa8Wb#3Bc*fijHw6`4`T|WnNa8X%&GDR2h>?xD_TFEcP
z&m;Y^t}1oU9>v`}809lm_z_1s(w{LmH!Hy1-6<09j@|xRsznzsUQtnD-n!=}m1=n8
z%NicP;cUa%+Y|D_m%FJaOAVWtRA%TeSycBTt2hq@M{0-5FTCtLuU26kg4Y_|!Gsoi
zWYMcCe6dKODLW<trn4n9L5I!{mXzQ!HMN*Xr^Fg@xN}@OwYnH?_bwO<?7B9-EyjC_
z$@-+oR}A2iSsL2u(OFDO@g8$4ovJ>;o(>GIBS&wMJ1@JUmrOqn(6vnjqjbvz0Rggx
zY{4r|MPmXrP~p(7ly0=1Zd~l@7(1bAg_c>t(?FF%*PvHPiT9ScwBqO-J|eWVQtB<0
z?(l{!Kk?9P%Dn(y>TncHNw^nA@_z2E(laq4SD0jJuY0PDA-KuTUnG7do}!R`a*kJ9
zr&|4t^1LEljoc0qyUh~AOqtX`#f5QASv2Vka6Nl-=8QK~Bo3iD`hKvwyJDK2p;uOc
z)+~7WSY6qhn~FHWwQ?!Z0KU8~@VXLF$Yns9U!Pmt8=f=X+^hJmTE>{_Lv9!np<Q6k
zT(%GDRka>{J;V4S6ZL!SW;kF*VkK0vW;sD|Q$(ru*?r}`-mIyl7USv;Rho!^_-Q0(
zuw%7sc<s8|7uM*ngtru#<8G-c59_5-C^M?T_9q1%WvkkCZym&RT<>ewq|DXf%A@kv
z;T3%8W|dH^K~c7pd!(s_x#~^#E-p8hq*n7SndX6fD10RFFWV<zF{d6Y7?nfB2V16;
zj$|YFTq5F;9+Tq~#h0utsa)Qe_-ge>Rw=xvu{<sh(T4giZa?2MB+cZ1)fu~Vdi7nc
zs_9K^F0ps8zkEY1Yhm_bxFUEn8zNRK`UGr6P;?`gM{vo?Ii^+=HX==wa8Gz$MoU2v
zLa8I@CeRhbMa?Nlty@gyS!IBpw8B|E9)KkYx!zpSE};65KtZ)y0w@rY1Ko^w+}BkW
zN-F6k%!!jGIH$x$l-+lUy{=0@YTDDmXL1m?#3<wII`YapES!l#J##l58{YCZg<eBf
zSbd-2>*3WBH1-iowjf>(rUL7_Q_P-yHvL4V8d~p$6*Z`o)|Wj+6!yB$8TkBS9eH5%
zY_1-0+;I(fjG0#!*K@_NV&9f;D{D=$=-DGo#WMWFzCA9Q4U9iqr5)<e0X7&(lM41L
zdCgKdDg|z_9FSA%OZzY$EgckBhoWodi#kM5@7{M)_C)>h!1x9ts=OuF0r=yT)$WM4
zJGJ5W<3vhPEP_u)Y!P1$aa&b>$7H%D_K3k9jIv75tp>%;2A23gAY5(<8ECy?ayiIA
zZw=!k=&TN=9)|VUvRj=ZBDXT0#%zBkyyH0!hf!GdK!pYvlF#qYY|_Pa*5`=aCw2QX
z$X@3Kn>nN74h72SCY$XnxGnLg)Qp}nN_gws2xx-FX47=jDX8(tW4&IGMKvzuTToY8
zZGv?THGc|AF<WoamJGY34%nF9q~{rBm&#_(*V~S}!!bv{j(=Rk*%lUD3VY!@Kg+IX
zTjQ*B%V|q)v#AI?W)MN-a;7C^m@v9UChyyUlUE03?yhnr!I6TD^~o+fK@cPtb5DXM
z*Yo$Dq!93+ufU2}eQxWY<pxk(sC#{}^8-x>5bo>A?-cG}_4qeU;XMznHM<g45sdbV
zGEq5X9>``H&QSUv4JexZ`;f(uDPGRae=fZxrzne21Xn!LCj`B^V@OM+Eq(gBe{Tj3
zp&V-wP?)0Y>q881B^o~)>X+PXH^8yhvG~n=e9Nj@St3;xH&jC9|FELY<*srh&7(8A
zeQ-rnU0sLaHXhD8`Px$1SsQfPvmmwU^W93m^Aq{8Crtq-;6p?*0q3OUd)cK@Zx!!&
zzh6<WPU|qxfjN<=uU->kLeewnP^0l}so2v#%q=BSGK^tdOcgeuo%Enc$LO0E*L*YL
zia4jv$-B^}1O}uzB#;9t+fG2P^9lGA$gaxy(*{)`q9ityr5@yf4ju`oGTN?iPO_!F
zwo`=XfcT?=mBm{CJ^|PY4FD}3vVRZ503JXXfGw^P)&Q3P;H-fFi4j03xWaEyH0a*|
z-30O6!VI9TfB=rfwZ)VCb{oBa{qyfzU!lFXf1o#;ukLjdeVrD7eI$SEZ_6go@RT6l
z00;(HgRi&>D#d`v=wC(fD;nMwcfU%}74ieX;ZHTn{}&{lGXiB10LJ{=uk>F+%K!7T
z@YDVMOjZk!D$E?i?`=-H^^%BQNdaTOW4!n6(e1phJo@J&3l`_rudkQgM5Ce{L?!m8
z-3pZQBT*$$Ezpd1cht}N#6^`memRq&qi`)Yrq>eBqF}EwW7xSz8{Zxtq_C_q!Bh0)
zv^!b$;<_9>$LES>_ikjOdL9>ybUUlRB{)d1#aca=-}v3f8TuhtrC_+Hi^0;>?jW?&
zo0>Qur73c$5i@2LO^I2BP^vo=&2AGBN5c<oFrOUwuHoQ{^;7}pyt)iY^_fo-l8`;N
zH*jyi6|&{G7UpGff(!b)Erlyy1ytT1b8i;Iv5s4vsLl*{321>m`#7BHyeRepn}dzY
zcYk|-wR$VVDOfVHTzMh208xANf+M!8E<HLoFoa0E_9&-$NA}w-oI%~W%5LUX_kC5x
zJTn8l8@d2n$fc87J~kwOXI7^n<uc-V`)6d>xa`R;zR_s@y|Z#ggnPXRKB;vQ2n-+I
ze@%1U)F?Qzdg1q6xozMcLw?JiDVN|Qbi|f+gi_+dLshzU(tKsl(ZV#zy9{}{X}uDW
zsh@1$QK~4Z<ieZ8NSV8SG$~cv=s*4Vi;-G+AWP;Am&)L92JL*?EgW3Cg>g1A&nAeZ
zad^EAUQD%go4~(FPv<>`R4$KMS!nVF7mwi=0<{Li#Abr@qQpD;KJQ>8Ai#RUXZC3!
zHZm{JQ$<ukm)#(-*$U%Os1@y^Ebbz}ab2T05td}@tf8xQYEWEAxnBo|^#Wvct;g*8
zsEC0yg7N;-Q@#edRyN_W04rO+?@t(DVf*4evK>B~wlWn(W73=!{(dTC9JcSEa)b#w
ztd0sgKHRR)nv~`J;!1J?xueRM3Q8PvP)A>8{rN(4EBhKo&ZBGNbCXJfS!(XZS)Nsg
z^VAM<_MPQ6`0IUFw5l_~63_oA8|sfLoFImNX%S@8{Yx*1>+w8LYQ}QKGpCe2cA7}k
zd9Rj2TKGz>;09FqPFiHp{T<9?f6+r(V?(@L2KoK&$DGvkf7wMw2Gip;VM$bm`5(`o
zf0j+kcD8!YW2#}6_aao%J}lN{k~68ywfAX;R%pFC_NjGMaN#Myn!1#tkI+yFlJ0a5
zcz_$iGtcgx^9pg<jtFXNH3pur3fibtv9ArN52dS#{0?(s7^bmn{rcPWI9G1<eQj^E
zNBP2*#T-A!$a2VVf5uFki)K&Ol6baOO#QcuquiKJzaHc>R}>%AkxHwewiVAFY1NwG
zZ`iJ!?Y5!(Lw%4(zDWpC{ZOOp=e&}@Jx}<1*!t@NzFBb>K8@0SdjFBSX1`V<-*>7M
ziXT+E!h~$yioualS|tu-iH4+D9-K~P<6S-FK+=Ss)!)WR!fP`lkRO(^()ab^`IR_0
zF4hxNxVg`M3^@%$DJ%3WAAtWVhE_Q{N00X>^I}XBzBR5UP!&9@{`|rm_ZX>=gxq|q
zKr@*@vOKGlV-Uf6**4sdudPuKixs8m>!}UPL%n6(g>mB(lJC8in2I#MV?YA1d#>X&
zB;$T4%G&kI>>7c^{OqF;u#xK~FYLQ(=kCCwJ|lYe^wiENv1c0d(aqDnY4IdCLtLro
zJE9PxzbqyrU<Pzc0$dR~l(;Z(EuykgNh{CFgwwg8OY0ispcfB!6~f6!X?!zB9+(<G
ze2V>%$<+>{#L*if%1u&cVwhYxaOE7%JPqHBYneqJ)v}(UC+CG}UMy!Rj@<KFmM{Ki
zWEDZQ(QvSZv9JZQ+F?orTIc?&EtRb08JTR!jr(M#vW1V>v|s5m2;a?xCe+j!uyHn=
z;sV;L@=)b-+PS0oI{km;_gZgyY7wA)9OwJrL8_RICc*Q0&kbZspDy5Tt2~3Sd{I)$
zM!o&Co%)pzh3K{vlY>+_xw2*0c5Y4P<JF&ob&fmZezby+Gk_|)(5&nZ+AJ5PIt(9p
zHK9rjn(ra>FlR#-0BSjLyQ;iMtuMFJqD@YXElNPWP&im9S?B$+=9n!zn)6nY+UZOV
zbf~`?J()D<UsVFF;&&nLlAm5mWoaEwsD&ijA~FSQWQxO&BM@+&T1P{cxS8z}T=DcB
zH#<eoZ6_96H1Y_YhY-%eQ@+ww?qBUyW|2R>udCR)7nsQa;asLSj?@j4@;i_RvkSZk
zs-)hr5A!&F9IJ-v>7!oG0(n8e+1xf0tj4h~-@2MZs`AJvr|+%rseWWxe7N&#HrDMu
z6?2(J(CohNk0*Clw96qG!*HYRj=F@zcS6AAA`1DFV7XK+YKlAcd=91?dEIX+Hoe!w
zs2heb(`^B~JS^O`E|)xE!|v@bMVz69XGpPlp<qo5<-54Yn%5^e^&WRrb`<_q_^W!2
z10AvdKo??6(qUjGo<jAt>#KEzr2iC}X!RFhzZooU7K||as*Tfl06E8DLuT5>(40)1
z_y{~nQ%E*7@;U<-rGDI7ylz9W0qq`y!<=-hz*QU<h@(u98YhV;ZZ0+8iGZY358T{X
zu3r3hnk)yFq|cC!e<9^FdksA-dEz|>^evYSITWjpTIU=fl;d=Au*JQHxsGSH)&vXP
z;3a$tqmGQ^=YSJE_0f$`;4UmTEP2oHIhHUu18`l^sYqOP$LMGUrfcaY#nb0hs<;<F
z089lj`R~YjC_h>7XAByP;(qqUpN1;?amT~S_(PQ9zA^7f1&9v@$O%=X%#Gh0&^vuO
zEnSY8n;$VwG*=f7@H&YZp_BaBa`_B=zOiH`Zc$q;Np`GSy4`)5m1Zu2f|RL^WbmdB
zo<=!uF){Rt;#<*6M{2e!9^;$TyAV>lFv7y{rik#AN#^lpu8uAJl*;ob?{>cNK3<Pc
zx_Q22DqAZW2-CdD%1yo)nw@Yp9#?dwyE?3u^{J)q<Q-NBY{y;B1q@Xy6M7T|(f+Ok
z%GG!7**`$q;k$%Iu^V5aKORywa1a230+7`Ux37#XPsGkEjJwRvvis@g8Y)Q1Mkgq$
zh`XhIEWpA`)M^*Wbt3%G7Hb^6JkO<^pZ!;jI)BN1Cb5K#@O|t=e|x>Y0HyJ$d+FDS
zzKDs{j0d)e+dBJ(U7HhS9Kx;b!@HOM1ar;V7s=3s+6)EFKNY?!?NZQ?>X|Pt`bOZz
zXIwRVr!#(|RvGjFaS_P=Rh0?wmzd?SX*@GL=Qzf{oijW0-jMNNUpDWe#zkSmuxKW{
zvLxqRv)FGe6zp%0IC}_+V6~YsdIry{$mK|GmrzwlnSqb};;M3u9;*r!;Qn&u<X;K&
z9z|c@0p#bPA1A5w=skeT{U7s$fRyNhFgW~C+5PR-9}xDz(xc3u_TT)@w`QH<hjy*^
zHKxX1{~`)Rm_=u3I4`|-d%XPl?Vi0vJaGYMW4P%p^sqB|UIIU-rsaO_5r(v^X`mkd
zewAm8q;8ifYOH^OBx3@Y3#xzGzgt)>)#T|Q_xE|=jKBA$EcQ4C$+^Kz@ZM?98O$hr
zX<7O~5h!C=qT=;?HK!H_uKwT_dGUrO=YZx*W*I4JTc$IM%>BnW`u^<bo49859=hNo
zoaala_hiHi!+``r8M8l!xWx|YOw_%j?;YH9^sGl!?0Y4-%`YKl;B$&YJ=E^z(Jkvq
zi9{bkmY!hKfDHBun#p8BdkRlh%Wp}NO0Sjv43YotNa$(%lCRuNK+noD9Wg6)@nXbD
zsI@Qr(HLx<=79*!ckd44BI}ep%ab-bue|0ZCn)EoW~RRza@v;V#_VEGO#D9HMpvW>
zwyRp+xK|Z5ZGih3SXlUTrakRjMU1gts|?o&wot1bW_Dq7s^pN1pzmu@HaymM%ji;3
zkix@Xi`5si@VH%Qe&`sDn)#zdc;3t0_N+zF4D2FhXr}dngV$Npc|BA^hqbk=clko<
z{=FpKfWv`L8A9OEpX7$;-=DFaG^CNDOc3gbyDK-?F2z`1(+?4iF?!v0d=^N5(H-?;
zfb%Gk^Hpq}Pk?l5=GRt;3!c0dN7+v#_K2A030PaFEX9t!a~JGNYys}(XF_BQlMJ#@
zPWN+mIJ<=JC$e#X`@6q>T1YGmnS2Q1bAMPKsmm7oJIffHTl6Pw)%}~!X?nk1H7h|c
z{gUpn67-`MD#-NVbHv-SVkQYvTg6MBc$wZ+<#kRjErpZ(Z4)5QKs+K?;+5nFYs#g~
zz`m1j<bS`Pub5lLNPX5MX?yso2t?0LAq4swrx$TR&=b5L@O$VoE-}LPxZtn-DGL;?
z+zhXca7<+*{%Bp3Pqs*O|66TyL2ioe!p}7qdv-H~tn0NJb+kB@TZ!{e5~}GQ4<zoV
zICt~IV3iBVP`?$r=e922*G;0Y`-QZ8`#GnJkQ|QSw|d?KI9ojekseW@=Vq;1{b7Js
zzL(It7WKlrO30g+S}H5)QZv4xn_JM6IB$j1T8r!c$_?#TX|FUnUsf=ms<Tt^g%(Mw
zm%|05Vc;ckGY{EI64?6Wq1L%u1Jv!kTK)vJf0PfC5%z1&nzaP8pqdf3h_(dO@;Zlp
zo{K4!2X@~~*?Cj>(~;fn^?Z9Eb>8LGL%l+XRKyOytD@}nTW;CD<;d{NAh*fTz{dB7
z<S@MLQ+q*x7%Oc52Di|4vCWOQ{A=CCjSnY2gYe6DCc@S30X|h`E%bGsJoM}?LtUw<
zvb2Qbuei{h<p$o@gIv(VX9fP6-;tJ)LZEWE6bmu&PvdunY;LO+cVPnu_jRz(eEP{p
z;HmkW{XfrCWCe-WEvp_AbpN<L0+{DcV&UywWu`Vy>G?_3jwCWs&3Ckh3$%n4<B7V0
zV2D<&q{7WvVdo9&U}ZhwXVd&D9PvHwjXWwm(W6mjidy{p-kDVf2VThv*OV%S6U1TC
zzR$TzY0}4JM0>>($E;z^Nz&P#(QuEdl>5AE)@1G>ofFk6um2idk7x95nclfE_kKI1
zzof(N$H++{T%|OZ$w0kqb;M0!h~y8(`9W3ov*9>q`Z*F9#yk!2ji<s6a$o4t^pcpM
zhb!-!W~#U{>5cRSN!>Fg<<NbfT8-AHW<<KK2qz6Ljcm4-e%ZN<^{Qv30t6e#&Tu>I
z6IdK)!)N-+Bv%-gIHThn><j}>5ijnhR6|#H^bAY#IX?rYDD1>Ntd7ZX2?}Jrjq+1-
z@k#7TACf0(6G3$G8xMQ>R69?sm#ID6QvpYZa=H=EKuP_E#Z4B#kGQeu8UH&@VwN=v
zx1=$@gkv(VmF6G>pymE1;>eSqbeM*qU+#nGx_-b+c5RFK=9TxRPB&Tglzn`mo5Z<<
zRA)yQ7!dR}w;?*%$XY8+G6T$QUbdU4fT^qSRD>!R|Mq=%KfBxf+I(q<<6@GtjmM?N
zWR&)b>>W|u#^BB4DL6b=5|K2SJ2iioRAKBk)cO%uWx!X0EzI?`>MzFl56B{i({!d9
z1fydDjN)ENu0QyaRdHrsSd$6@Rygvtn1>G--Kl-Zz?zg|%bxE&mR|;%{WWANG%_I}
zu9vl<23w&oEyTUZxRC?r8Z->9u<gf3?ImYClca-j`b8v3Q#UvaeC3D@b@efm2(%$1
z1yev8oKYR4{mK1<m8BFT>8_dmBMFOVh%G<fN0vSKt;I?$R<FFTBDJ-ut3RLN<ZG=p
zr?&T{!@+hRh?6sI<oG2Eq945*FO+|(I3*Irl|}$SEJ8&WBsZJY80=}mP0$<l#9804
z+h`OVtV_iCG%xiq_G^YSP89vv^-uU2dYGGcGDYJ7*qOxo?XoqWt8Vw|8u)930tf?;
z>8O%xh<RXv!J9eVjg7+(!c`FR(p{Qb@9CZjm5@SMwxmU>we-$L=$i6-jeGVRxtJtn
zMyy10dCnx~e+AZrP?ll*<-LCU`iQu^e4GyXGRS{(YNX8X<Kd&J;*TsI@)MP6+gv4}
zMr`zwxPo<rs}DD$@@6Qpw|xK3ct9ZtS@BYX{ib?$!4X8n!K(U<TAg1G9J6sW634Df
zq~yb!n^yQ$6tXb<VHjN?enPljOWs#Gfu~Sw;GwyPSHI)7>skwubmi(XS(<rJxHRc}
zXlU)M8A#1m^dKb1cfo{j2(FjM&?UEV@j^rl#<gOtk&%MocEr{<rB-VfuO#tU5aHmT
z+gk(DLjJ7lpY2t`V*Mq{Om>`=e#K#0Zp9w0jqa2dxd(kIzv**l_oZJk!n+{orW2`h
zia-kY;KjCU7i@~}r$8KDHa5BQ?Nw%xozGuPsp&LOdWva2$(qw^aT*ZE!T(Z!Fwh|E
zb4!#d+txA-QR#~kQGHvbvj(=hFP14G`J8JFpdrufEZmzNjF-i~;8do>K9+h+!1-QU
zj#DYnS9$wY;UmFBk^+fH-c+;H?AC{~%$7&{Awz(Y`)e5EXR-HwKfk}}Dxi$Jce5>c
z^R`1z<9M9>qZdxk11i<##Kph8ANj#z_ILzDw#KvfmgmchmA&cs5tfLXN`ad~bMEC?
z6Ww@KTED5b;Aelxi|fb_M?X&!*|#`xyL{&DdIIKus0ZtLvWF1V?bZ6F!*I4?)zMHt
zjo_n+R8V2_gSEUAEb{X!425yY%YfS#(8Hj}0#&oX6qWd%-!F9e1QZF9i*FDk1hIA%
z@d<s2p~ONl$UmPYxy@z&REVflH*lJ^f=(B^r&J3B7afNB?S1xlvV&RMs8J70bSous
z2NylnhcsezdUR&RpARL?{>|<my@!!n5X@Nw-B)qf;7Q_KIf4?9x$luc@>jZy@lpM#
zhvziM__c~mM+w#aHh1=UEtYvy6jQ<B-1nO=BMJ~?D>qJ(M(y|Z8~s${Ie(s6qQOOG
zInV?m<8zST6$3k+{oE$Khd4){tb6GIv(O%xxuvs7qNB^!jM5r-2ggn2B<v+at5Rxz
zm2H&>s@{}PJ#Axr79e^`MfIqFMTEw3@y6)DjT3(%M;gdMNMg(F&MTSw;!bXU?$T^W
z++dc~{^Gk=g1SCRJryhvyJgc@pT57*u4K|1Zor-n3pu5ltYB*mf{RN2gt*i!^?W86
z{Qpv~|D8PN-qXJoS!Z_+My@L8*8!msprHI)aCC*F+q#zit{ea7`Q0j(+qgH5h65JL
zP)hVA`;EbSR|5C84V#TX`=a6CVFzzb@>d^Gx-BbzrSkq8QB)luirP_-`Uz;T><ZU6
zKFK>s&+AE>N<ob!R++juF1%Y0SQChkKH(-eKWWrTMx^_HL?uD<f|y^!FRC-YK9$YG
zcmBCQFqk;fDf-(xi*Nm`VM}T?wyMwavX;U?*FME6RmEd(PoClf7aP%R0pTWHYbu|Y
zW`uLGj4`=Mdn}*~;}meicV4j6x-}yrSY8%%xD?0eAFdMC9PcgC{$crL)*=&7hVKS5
zJ%iaWiC*;Vg*J*x%Sw5(6#EF?{jP-TmWemV7T?bJz4<&rz;=~kc0-(G!yb`D>gMVR
z=S?}0m<fMWl9Dh^Tyw1UBLCoIFzwpWC;s|<dtb)ac3~S{*ZSY@SrXf9jEuFuF_I8Q
zo}tC`cRehZ(?gD~dmsXAcJalcAI@Kf`F?-hOlyBwg!n`+R<%r_QR{Mw&N5IgaiLu8
zKToiY`s_%ao*KFsgZT6m$Z>OsKFtd_UmEJ~4IhUJ_o9rX5TdqI>q@Zvi=RYS$?GrW
z;sIwZ?M4DA`wgF^gluv__V5V89K3rQf2@XSK<dfS&F5EEUO(T)MWjfl#c50bv^0^R
z$wl?4Ox5M!yCqYKvs9cW4066*_p_zDMhuvGEzKNv5GgM`H7zY|;lR-sRe9~!vsHaj
zePFklCJ7_@^bjZ&yeCiD*kb)8JKA*uYe`uR;(Xdz@4i{_yuAD$b>Xd_dTS>eJ86=$
zg#Y__6#WeRdg-^W@jwApqj~2O@OQR<WcSybr7}T3DS%|ZHvuE^c7po=n(ad_<u$n2
z4uOi~vgozSH?ZwOGDNqoqYsV7b#sLk=GNBh;1yqFO7Knd(ERHqxHCqR+jc6A^}N@j
zv;coFK!L}dhmf(k3n;@QwT^t|gZiF)dH0d%AK^E!v*Z!{XEH<tBCZM)D*dmZqaP<Q
zr;8qjO2b>YJ#r|O?d@Mw{AR+bWrz(}&0*JOWsG=squaS0DFM)nwK8OM(^Eon=}c$>
zaB0EtxXB!L&)UCQ0qQ9~If0^EbP?KvWny>iV4b1V`=u%vR-?3pl<|r=PCu#}_N}+8
z|3w3s8no@>A#VOf{Vnqj<F*MRJB*DbbEI_!zI8LU>$5dYr%@9%;f=HCb&sS%55IvC
z^lYhB%lfR$$MB*RoNE4bi3&3VtPncdR8$b|XCuv5pjrYN@F>#N-1T%ej>ZfGiz)54
zmNcI0JfeQa@yEH*RYCtyVUO5sWO+0jCqeW4%au~yM;nbCX;BebZ&`cu9M-zMhDq`i
zuHPQE=9gS!NPITpUebzc-10K(P2cjVUm!d}NpMDkA$Fd4MdN%|h@`u+soT;VUx7Uz
z)~Qr>)`;M;PD?Z$yIt?v#RL$4-t`-gM9uWooe#cN-x<6=|3Ovg$!^T9ZR>BQolOSu
zk%rZ2G%XqVks5C2MgaZI;XS9_Kq*;1Z(A*i0_Kdhxrwsh8u@@#?V$gnS&c-nm;1@e
zirK1NpZ&W!laVAbLb@`u*WYF8slM4&n*R#fVx1+kKXHOD!bxu7-gGSUBC#sNVNTjZ
zjt)mJ-ItDbi}Z@x(a5(^;zygpvv_^ik5DZzZ-YQ@uiOMF-+JVUOIcqFed8htL-P2j
z1iA}_J__Rtp%8YaElKtu`#m7mVGeM0CZ6UUyI*dW9;J*p)XdUW1zo*GW3=Y1+80}_
zqpyn7a*VKqvok#RYpUD?3-lm!i*c!_R9<<+vtcyUR-_uvQYbN$Du_m|n|Kg~ZN0N~
zk$GwCtn#446hf*u5PZv4WW>+vQj2y5a}WkdMNj7YTR*>1SOgx1rJ~a`*3Un$DI^`7
ziAp{mkV`?Tm7>_a;$~=Z)r?52i@x7XK@L=V)ntSRDKiokU%>CH2#!Bc8%KAF>W{d&
zO)O;zMO=!Dlz#6C0bgrQtIGv#)-F9zoG;pzpoDlBm0&BLbxE6UqB7Te@1SW-cQ_lo
zY&-8kBEohUJu=@SK9Y`_7mbVgXoo*PrH2yD7iShYox3>`cyzw^Fvbj#7}(AwBSgE`
zj83FuLEJHljI=Y8_J$!-B(p0XXR@auO*r3aVYoW!Kv_pi7iomU)XWDtkqgHh>!yv`
ztfn{4)7vrbw}IqBFh(?OB}1jv-d!|0W~N@HvB&h&L@mNfU{kNsXwR&V>_!%-e5e_U
zD`(i*ewgFNEgK($EbfF&Ol5@^0LOwTc0KXy%yrnfuZXFBX%887m^Li)$Ugp5UR8})
z>L+*L0Kb_P4qo#BkKrO5a2nIfD_ku#9}?HAXJ~uF5O2zSg3&(ki<n2TF^eeEIc5>J
zU?rDRf3QgO)E9GorwhFvxdx#}bM}Bsjv`oOrnn)gSY%?hmUA}_A$sDNGqF5DR@zkP
z`J6`9<M&?krtzq41$6Ym#gYIZu*LwD&DnMqFG;$1h$6fD4pKV7&wwblt<LP|ctz!E
zN*ex!YYsUp?P#$Pa~5s3H_n;7s-Q|+uR}(wQiL~rk`ENUCYv8kzx%tfIIcfJEq`ZY
z`rF_0+2uKS{^I<gF4zxX%l-TZ6dbs{3H{=aJKrD8|M2I9Ibh*H>YY#Yi|Pb=u)Pb|
zx*@;gXaKu>K*=rt>Od-D<>V}m5@-YboLm7X6I5asF-MNK(G9zv;SP=AmP4nyixX}@
z*zD`5`%oZzzyXg=3q&+th|$wyV%M54T|~Q<NGNfm=Bm<y8$`{?D*P5QZuh_w{a!$D
zq?~tII#h{BLlmLR{N>k4q3t0{EH5SL7Q+ywQihHlH?O|s;HqiGwU>|LMpvozp`&Xi
zeHZ-bVfz|GG;)eGEQ57@Z(4poS#!1VPvw)?^WjYhZxV#f`2ZFv<g{=DhgfVZ1G&+f
zF{|kX*_)Z3d<a>X<P5?7BeuCnCflqmTiOE|+LWHmqpF%WeA*gpSEd1TJIP%;f=|~d
z#4b+tcaSSa>Q?#l!A>*l1zBH3g@{Z`I_h4w6xlqSD0@D?*7L<a`CjA3!azT#0-MX6
zqS9P-tMgCyyCNfh6(Z|?Vp7P3G($34^|2qao5`#5^H*8xB0V5JOV5l?-NX_5ga@^?
zC>Etb>R0o6e_Aq9e@vD1ys;@o?FQ_Q<^z18qHEqE@@j1-GWEG2Gry%QUN1<Qxt9Hv
zY@=af^X`}xHq|qFbmqV&C3dXQpV<A(x?7$+68uunV{lZ~WPXh^a63WrvAy=VJfR}U
zWJzwGoDAoFv~*Vr<$+~)Q~t?4XUf@zgC(rn|DxStooq2KWB&MO@Ac_<$nMtj&ecI}
z#-!&f%|%q#)EBzf)i0F2AS~Kb&_<qMzWD`G!*@?0aw6^*iYt9fD6!vf`Wg9d*ot_Y
zHDP%J@v4imtD1El8JDGs7I!1ECMg}e$1<{`g++o&y%X}M9rjs;NE3<*R^yR|S3-%e
z2Tx~&X|=R495cS=5$+vN9i1)?y`}%kU}#|jFU=eji`M90hDzf5^O+C*985(|-6U_4
zn01w(F7FS^Yy;MI7mq2q)<Ulvb&9@fldd)rLX|n`LjaM4VbktOw!3vU{9bYfqA+W<
zx@jC74h+D>WIwSv>WOM2(}W_g9AmDMOL~YW%}di$Pj53x`xrWZd?_l?K>a)NzD4FX
zp)@W@1^xTOpOoDXL$B5L&vx@APyN~qu7CIN&IEZGfu$VpB5$n4VH*Ww3_qx@L+6XT
z0GkeXCe`W2geIXn9Th^wSIs%j0h3=ARKkPNbc@OO=s5?&Wv_mRA0rR5Rj)J)CWe%&
z>jiI}9dM~cr3QK)lvbKkh`tQ4za8%TxN>>aGmf7puSe2bQCPEw`@QvfoFYz2kkQ2D
z3Gc`-#1*R_>w@E^tfs@0I-^BBazNm|U54GP{t}73_sD3263|W_^ro`jZyXtoeW=7m
zm6ok;!uS$TpcwQ^C5sG{7pJkHZ;Div1=fO?=jTRdIqvqk1#L6a(e6WQx)bvBl{d5!
zpfCFvxP-iOFhm}VEy<D$JIcc#02I(6S)|r5Z5$od9pVU>3&X}Uuf6od`SPGjaejDy
zN|J*|8o=x~#k8gyM-2XQ^;kVjPgR&TKxd7SkN5^5u6a`*7pVd|oF>E4M!c;D=Iljr
z9Q(Q?vWm+)uA6&jX#C6@G;^kwVhoPg=uB)>WYE)K1N~}Ed6RDgabwYbUsp2Ov1>HK
zK0;LX`&@s-(5kl*;?|Kf>FA@et7cQUzQw?3wCf4*k8xi_0XB0GuwXc>(bTjps@6e9
z-|M0uOHzoK)OgIl{U%pN-X*KNI1oU4(oS23pN~c`?%=f46~U@4kk2KC?~S`;8=197
zxoO;iu3kK3dF%H#=^b4;bA59WJ5e(NQP69Ae{7mlhQgrjxozdZ=Ig&Y24(zDk9Id4
zX+GT8nK4s-%}MwqS|Z|#A|B2C4@F!G^m4~^cGm0&&bZEooP#O)iK4-&rF1aui7r;6
zq{+4F+_QS0*Bp6h7LlVOWB;d<!y9eYV~L~BRTdJJ$z4r1Z{d>7n6r@iZEh|*fKxsX
zb=xWBSYidoFlJr;?g{@p@kS@9+#h5UrM#K`06!-W@E_b?%$}c|w<$n1`c5{o&T`J>
zyQkw5tXHrAnW*o}?zzdF)dtue*KEb-`~iu@d$@%C1$0c>2HCYfLFFN6`5j22(u7|y
z);HsUJ!W#)uJpxzQ@d1Z?&#I}A^GaWoA95d<Hg@>?N1apao&KNS~6h$d)46UlfOwk
zY=DRLe}coKZZHD7mOSe@k@<aK8<a;Nn*cC{%>Nfm2l)M0i_-t7XOte8!SD2sTAhgO
zsjtnJ<Wf3c(j%q;$qCDY8LwGmH6(Bll6eHsir0?~i$7pH@>Vw1ZE}v{jDf|)Vm6bz
zmyPx%qk0yLJoEvd<u`0A5eRhI_`m^ry#}`_H7gjZ!HM&2Y3DX@^I_Ob$~=qn0jyZg
zag?}f`V)r)r;|BdIcF%F`?@k+j-m6$qH4={y`2$oG5oD|*-5{8xOL-%h=*N<Nd?U5
zD?3)6Gk0PFo^bA}yGno<H#J2=nm>6|v2Z)}MXG7>eRzPr{%JmH9Ij%zC-kl4w&Sc@
zFL#W2BZHmg%-)`{2ToQyN8v_8+iJXcTIMV>^B5~Wj;=q^Gta$Lar-#Zf22aCIl=QC
z-`88JyvWZ#xn}f#B!x?iM8!0qN8V(yxc=}YzPf>A4rsjOdCgJ!e2d-KI@W2VWY+eh
z@L7<wA(%mTbF68EOmkcOEZfIT=?ru3V(B$Bw{bth6r#DB`qowJwo~1Vt4<#D%kpfE
z0gseT#&LRxx+yR7WV_D_FJMjmMv%l7J87pm{YF|G?~lX9*~crWG`kjwSDv72>(`%p
zN!nw%t;?fJ<yrN|ZVW4L4#Z5O-4q;!<xO8P8#T1WdBPXlcW&S>K8<;=)4cSU-qwuq
z46c$|n^D!GgWP;m1{#8!k{%D&j+Jb+<nhLMRjY5XhT1!6&lG0ZV%bl>2iI+V#51sA
zvv<UUbL6&_&<zPqWwYC!zeC6$y_<GHH>{7B89mA_jmewJZYKoHb)Fx<hgfsQ-HSF$
zYUwvCLZ_gSC`NY*e~cSVxtzBCjF{UhPs7<`+s5Q3^@Eo=vv}Y*0opo!9yB7iuoNTc
z&KytZ55D#b1B5LOqXsCtAt@$ae168OaAM&;0h4#RF&G+7<>agHI1YL|83mJZm*{*n
zLs3A?Vg$xcx{lh;o7t;-L?aGc-r-5EU9N&~l5h2l6v6sf=araQx7U513pY;yN~b;r
z<ciX1nsR<$HS+xqMkLygZ7v?p>y!*JI%4#BN00v~1|5wPh#_o5=YBX77cryl%|h{o
zTaX^&u6=g~Ue2PoXN=R4UXED;rj;%Gqlc6DX+wjNs<;#2OWML&Lc-|Qh^!g+$iXo*
z>!%f2OR@L2H2azq;L9PSmPgf-j~V6)Cs|Zq<>Ku&1oH@qiqLq2F}Xq8l?*1%&S#X@
zq;0nPZjU*w8x7*#^5lNW^R%XNcZ7`ATherYPhkE2?Jb5mk}%YXp28LtlR6ij2TBM;
zE6sFkZU+ppMr`_uOcz*$RTv85bA(i-UFiPxN=F+D`ljWNl9fIEorTejN!jF(-7?=J
zJ$28SbwUqJ`q`QNz?3s?XkZiH!uYzdt~mVlrq_xi%=E8q;Vz>U&IPs2okj~aHD$UZ
z-zrOLqkO5vSBJ#v0e@!&s?gVgtnQot7_2}={~}fbd4zw(z5hC_{kP(l;`La-c4|au
z7vl_QR6dOaW%m5v1Ll9L=l?v`{*Nx@$HS}U=zniFjOA!U`}GFrXa~(3&HPPz_t?f;
zhIxSao=Rhn%`;+YlgiSxSI>@4_P;l~%AY^&6JJ`?$*RBju1Q~?-?Nh&cruEE7q~Iw
zqptZW7G1ZpQV#A>y90P8X!vRVvICn(*z+gp#GBQfG)nAgx$RKES<K)CFg8d1*BQp>
zC$kHRQtlt8A;fFA#~b}pi_425s809az507u0Gb`a-w$VH=8bMccc#3ge&c;KYMh*H
zrwGTFSX<2M@NvZxb>v4F#e8lbV^gss|GK$_bDYGuoh{BCfb$sv!bY<@v*w%YwIyS6
z?}U!l+Aybb(HQ6nPo!c#mNl~xIRotYqA_P^-?a@(ToIZzQL<)AS1!eW{>Nr3rnrXy
zckL(4tQfQtjpU5)54P*8J5ArH4eMl3J$eXgj9k)KEJ53ypsW4!$7WT-FLS2TBNtjx
z_IZu7o|xLl?T+s*7gIO0JSG^o<{I)IxfkX4=?||wt^bp!W_;qP;JFd!G_{eXJk?;|
zBgko7K$hR^I1ei%Y}_zz_(b+P6mcyTR5nI(V&kr>-a4*CpsMfsW@)534iP!v+2x0U
zj+?j7ymc@DlRE^8KOdmR<h1iLuRm$sF(XejER!-oua8&&WJK4l-<Y%<l@dxVTnj+V
zGl&-1fbGvBFQAitBKk8?b{~m?1%NQFFPMpHthu|HI(Mf8WqieFGkUc;y4td~5J@Ln
zJ-+fRvbM~l+LgPqaMb_fZm0Nm#eiG>4kNja>Ad#$F#+_#52nX$ALUJ4y4WgOXph25
zP#KRyYpa8PQ5Z;h`4e2Z{sE*ph;fOY{;<-j7_ORq6mBYA_SM`g`~D`jmHoHLXlqyu
z_8FNX0S~?EyDuDfFku8%MqpCEcRDZXcP8VjA(rAkKHpTxoiR^f9uhAqfLQ*<aKATm
zT>-uR4ZW~C^6hTNO!YJs*i;HwQ9ruX?Km2f`W<$5=e6nTLlf*%5l%G-aWdQtq^z-5
zoD;BSBSDoQN}X>9vrA8u5TT7;EuJi4b}++UEcTs~0Z2&_?n?k1Ty*DSgRy39&RA2w
zw64Ti{EuMZhhZzVT?qh4Td!=(O*Rz4JoL$gH7>pz1Bd%#9!j_x3Tl(RpU0+ElgsB6
zMsbi%`xPuZ!Q7mPvYE&11rLMZtEjWr2J*O8gnQS1OLet72FL-MD+0Cj1C-JfK$IGG
zstZGGfWpV7PM}4^D`65QjVF#$joRASl+>=2F<u41YF&N3pwh<8YCEfNj@Tifv`B8$
zCn~numSpjhOvb`8W_GyZ4AY9Btr1S*#ieZq*Z|3jPbA*s5~{#40kQWiv{jMeWA@wl
z=!*@l#X_vp(Zi#posV%hk4o+4`|fjm+<TzCSc_eXYr2Paalh{N$3s=ByIUt`+-ZJ%
zIaR1@XL?^glf`ypFF2qs4JLvFP!gg8&Jk2ULh-_lgz>?pw6$e7Lfd(EE=D4Dc0vey
z&fMgCO0qp=<s7O`a1~%C2Sg6c86#22E8kA8AG!sUSqIfYO#vFYO1~&>#*6n--_Ks&
zxy--$tW7N8cr2J3jf~>X&cpf`e@f6N1+eE>)F?dPdarHTn59v0Yq8{y<->K|lSc55
z7TCncI&p1zsk%DG5I7KV>;#na{|n#=Br6U>d|5uYfUA~N{bJ^d_G`jc{16SnXHFBZ
zL_eN%u7Je;$_H5V6hO;U^4sKcGVRljExGb;tF@;xW)eJee&RN|;qyq_`52$Wln;z}
zCJ}vJrHm#)_1%wq+IN5rL<Fh@VYiJ~M4JqIPewK2#8(S2Ol7Z6S9(G{icv^KKSh$!
zMe4Nvck?HD8N)Qd2_OQIG;LYDx7XIAee+L%0;XP3Oks_^FTVLySDR+owmZ`4FpDPG
zui0rPsc_s5cJbj<NzNW?_NVPvcz{JyyCLmSj8(3{Gnp^?Z9Y1g{eE+=J23fGjU^&w
zQ<9dpv7Vb=3VzA%v<%^hjU^h`=j4XXBO_Rk9}zA_7?G|vywyW?<!RV#0>%;MF*PM2
zWVcU2xa!{uZ%#|JwrG&ll806lw9;<*iUj4dzR)~IseToosoc8<fF!4k@zU9lM|O^H
z=-`!Wppf7mbyFa5@c}&DgHOZkTVmI%&6tML!*|5#$0cwMINJ=QbZt;)v)h-@k?Ru~
zx<4vUC;6Cj6$$G($&P6v6rakJfz^@y{YLDulX_nIuhgMa+rH`u0>*rh6i9w?A&YmH
zacl$U*ScL`G2{p>>wcJSWQ@Qdp_{XTA}O>`)KKraInI4dZZXm_U7}&TsZjR#<B5|`
z0Gf}cJ3-AvTS7tIXtY@7W252oEE}((k>N|rHdBS?N!^k12M^im409C0v%>1IVT}P0
z()N#>>g7~ah^<mn(Us355I7ZE22=x2>t(4?Nre;Jb7RIl1Z2vc$WAmkC}a%Gt+x@X
z|EsfQl=gkY!CGRp{i@HdPQpPdQ!c2MWH7|TO`Ec6$bWVrG}%ggp>)R<5!$`~mm{hN
zb|XKqAi%G8l4EB1TA{4I2H@V%tF>tTpwtn!7Hhwp8i$?So)dPmiVb<*teT|*fPHhI
z#xeQ5_CuCgo71?JUb73@0t78}b|-(?GKbu2yy45}ii%ZC7ReG=+Z!{8Zd?+Sc^usT
z*-N`9E>)bo&b>naQKy>9S*DvM4qSZrf>&Rvk1fWDDdWKI3BZp^b}H&{F_rr>%!I^(
z9}FCAc<@rQMHe>q*N%oDu07~@XACywUa{?c;CyC?6YWi5OsxfYWydb4h=rKX2~(-E
zyZ5`GuMl>#CIu`07!C@&lmK))SX@N6Q7@2`v)nRew|<_XO3^(Dd6`;6RV`F+u{Z|z
z&m?en#29pGxm)XttlhY64&mRyG*k)A^zFwE)&ZQ9`CcvpfHG}7aFm%~G9OFF?^F<O
zOk`R*e&iS}?MDtBfNdbB(1KN`8xddWCcJ$2_hoTo{f21r6V(F;ctS7}c5>7)U8w|g
z$>&ruQHmzrVJW4<xz~6O0q>KZ|GAuTc0yBASO&;MstCos+JaB01<a?3Y-mm76Z~K1
zDGtUdfes<dq#pAt%jrgqUb!5C(aRL;Ve5NlD34vUuaJ7_J5XuH`qa{R<sQ{<_~n>1
z-vh<_3yx&ASZ0PV=d9pZ!HOnv5x@lh$tLaJzafw??<y}_&uGj^zD0f^4e3N8%<&%y
z8@J1t5?idaRXqIY{l+mAcU?fZd*G?=k9B6!O}JVgTep02eul{cmp~)1*G4VpmthZ1
zjluoCD;@<Mh0QD%vd(=wf48wj7~s(w*CN)sOU#nh#t)xdQpX|=PW(pWzHH|--B(0k
zd(hMO;l|2YoZE2Q{Gqc<IA{?9E`Q<?UL`pc?Q4Bs?EBs#cU5V-T(n%_>D#87JbeXb
z9~0%r?)<nYKfa&Iku4+W^}X+|`9+6s8z8EOFJ8vH$WxCf87ha4HrFr`C(q>=wK*&1
zy62p|sYcZo<V;PR>zntxnvO0m0M*1VKDfTy>BgwiQm@z3$T@c-2FCo-I>kh=z`$rz
zQ%-S-UW-$5v12W*xI&AEU)SJ)aMPDvz4V2`@kMIy2G&{0hSsL0<Qo#$Pp7(a;c7>E
zC#5+o`2#p}mUZ+XTRLxga-3zAN6`m%tc*z!XOqN=q_}eUzKKf4%J{Z!La!}!yWy5`
zoqn{M{nqJUSAZ2EeNW!Gzir<mAc9Of_u94V)5`L)I$O(FsrTP4&<Y8qM{baTM`6tp
zVt~O{`Bz|FDs$TV^Ub(r*egCAd-+E^f!zIujJRx*zyF26O9C7~VMxAVfAig<^he|!
zcfiw~M{p4`T9d({`R4=r`xRZ6&&#<QlT&$E&p(cXGUYw7;U8WT>1qLrl`8#P#^9B>
zKXI!M+<rn2H=^6is`R^Aud*KPtm#*Zs{gpZ`Bzc&f3!jP_x05O+oc&pSNnh*#lbP+
znMD|IHrk)U>!~zFzJR@|v7MdATpRM*isF;KjcD^)6Bfh`6&zZtrl|AKi{gO-06oU0
z04vvP{c)erH^4Te(V+5~TY9Vhlziev?@6vnTo;fN=)Cp6m!JRt_~g6l!JnJ2FrYMv
zP+>4|12%UB19vM6cWZG=S8L$UH6Z~(D6fDpuMk*A5G*brCJq+j77!2@5J-F=68G;e
daCEjpB7FYO7c48p@?JfHvVxj?=~MHd{|AQ&!$kl9

literal 7370
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
R#Y!?DQ;<`UErGr8|2KeBw50$5

diff --git a/docs/images/factory_method_injections.png b/docs/images/factory_method_injections.png
index 95a44af706bacc859c92f6481a847537928ab125..a30cf299c07774a96598e630de0f490d86608812 100644
GIT binary patch
literal 35252
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

literal 8747
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
bf9YuN|33>fNVYiK2;ga|={`lMJb(Kii-q>!

diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
index 77375eb1..4af9b846 100644
--- a/docs/providers/factory.rst
+++ b/docs/providers/factory.rst
@@ -5,6 +5,8 @@ Factory providers
 
 Nothing could be better than brief example:
 
+.. image:: /images/factory.png
+
 .. code-block:: python
 
     """`Factory` providers example."""

From c56cb70a24b076e188b02badb6adbb131cecc0b3 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Wed, 24 Jun 2015 12:29:58 +0300
Subject: [PATCH 40/73] Adding images for singleton docs

---
 docs/images/singleton.png           | Bin 0 -> 9899 bytes
 docs/images/singleton_internals.png | Bin 0 -> 11572 bytes
 docs/providers/singleton.rst        |   6 ++++++
 3 files changed, 6 insertions(+)
 create mode 100644 docs/images/singleton.png
 create mode 100644 docs/images/singleton_internals.png

diff --git a/docs/images/singleton.png b/docs/images/singleton.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fc8ae7f84ecc9474ebd500f2f29a62a76b161d5
GIT binary patch
literal 9899
zcmch71yEdFu;u_ExCREd{Ahr|9fA|woxuaaVG?9;9o*e*u;2s;0|aMq4+H`P84_F*
z2m}es|L56m)!W_LdT*=d)~P;o`?Q?y?{=SiW3)A25a3ed0ssI46=elo0009F0H9G~
zV?4|RyJD3;43A#PYRCcrO-XpS)|d}8+8f;$a)A0N+Pw#Y(N<Yk0|4-21pq=K0D$X<
zsgPX&z>60E*tY@z#Ipea3Xl8_9m$73hP2i774Prw*VorWLqi`XKp+q?6TNhVw`OUo
zYEF!4N9E1Ujd5Gq`PF4;Q<XT>MKLkt=Jq!2Lkqx0YjF7!gN!)0g+4Y35v#VcVN(&M
zhh^*R`2P1(lkE8N^78ZZa{*^7-Rc~LxWM&;T}nPKH#fJ|)>cYN%KiQQxw$zL6O+Ng
zK?Mbcw6wJH;ogDi2~dz5K!i&pC1T;*CIBA?fQF`7n!;tSubLO9mLLBj9fk`eQ!h^9
zvp1uY5+Pw>67_Oa%Z*b=2>xVrB=KMXnvL2E1wb?=o$>>L<DqQw1^}SU`};yu@d{4|
z0GL0jD9GwVmyZhYg1@r+RIUtRkAC1$7spOfGaIWKmO3tE?#$Ehe)Cza`#uYIht`uL
z%lunMsbRs6$d(~aM0H4yD5Ge=^&l_)z<=*=XZzTqHu<J=_1Bo)xd0^P`t@b<%`5ZR
zsD%;dF1r?HkhY~w`>0%9qTJBx7&k5mUKANOpC!RG=9G~xS6jAc>Q2QSgEyb$&-CWL
zT8#-A=w{+Ub*GTu(~Yh3^|ww|DKUz#4TOjfqMx#~jL>cmo-dzqZo)GHE2*JwFYG2U
zhfy|!p~wt@X8xvaep6DedOiLFt>CG;Cm=Xxvps~$mM7Pw=N7p$9h_svF6~Pdi0wR)
zqnm3G)4Z7I3S<E>(f&S&SfXpH?IP~RVNg4k%elx3zWDXS^3Kbx1l$?_y0Ps!t#;UP
z!hqVDUaVUAFP5Oo=ABaR#r4~xo#~?c+wt=K`!89YXS<Fus5y6fi^xv}YFJaPde+@3
zyS~8-rO1T@jkGm~GAAZnx_IRiIj^f-g6H&awCwM`@37bP++66+U7zp8UGdWw1d@I8
zguL~G-tNg2j@x&F++)W_Y^t7?KKBKVzebklIb5p*%%tmRcok!_4#l_vC5=q=+^~jt
z5rf0Q?Crz@=3OZhqd6Cg6m8f=$B{psd{MYcvFBHudC-@-;W7m3vkKvKmb%U>{^6M4
zOb@PoX9hcGX`Jevc08ThYdtUQCt{!pulxH>UhlbOxJI~$i_Tir#oo_Q5VZ0{F6$^e
z3Pl28HCq^Ff_Bebm?qolhw#`D1Q6u<o>V%mp#D?(R^mSSeB;u<ta@KMN@*X_hMMxP
zTri3s*=+Wo8iFbE>UyreC4<{<#9#i{%EH(gbcsFqJ-%g_x=5boWtAc_iz2LxqF##B
z_b_(J<nj);1BhA3$S~MWh1tLDqUjpKNoHD$B|T<VYW$J?gpd=Dm3h}~OmB`wKa22&
zR47nKJ9+o4k+PHGENW2TeD%~dtB|Ju^OK1IWGv@)^?ZkSLL{6Y>QJ|_n45SF?hak=
zB9DGot!<MH<|*5^fr`ZW>e}DoaP{}x<zc-0de(+@cAG#3;Ta5^A3s^QD3oPA+x_<I
z_~X_k1L~VZz%7Bz9aE5e^XZ<&hX8qqY{X7O5-+#*s-Et8A#&hyt70)<Td9DdXt$M;
z;fDZ3W#q)-T%10Jy3`r_G$995;{!th?mK{(b^n=nMLd$io^J;gJH3K_Nbd3)^@TBr
z_xY!%anqlGK|(<~R4^)9+9C1HO{LWO>XIbQQgl5wj=CG@@hulBOj-j6hMh!9o)9oW
zlRKrMrM0<06KZk3r#05?@Z?c>Ki4)#&c&q_2|YjH-jl)Ll%|^T*`vjoKoTO<Z!GNN
zI4DrMTMFmwlm++nqsSQsN-CO-c(H((=aSEfY`yvF`Wq&OY+><0*=OlQsv}V*B3_E9
zYc4z~9#O9MOHW(OV?SF3!9|O6sKV_JqmN6bE*UA*mj<N7ZRfeRBL+Tk?4#$-diq{#
zs^V1<q%wcCGSsalrK8O>W?TK>WU!P#du>~}n1zfPw=KfUyKqp<vp%C*8kLt8UjlLu
z9`$C^l?>j(JS1|NnzM(4dxEcqmt5}dco?P=JF}`_>pFOrg-C&fTSXNq>l?D9!6$+*
zte&mKxifMalYA$~5<D)U^A97vmQs|_k-9^}Nik)*7{EIfg#0Qa7NOD*fMBu<GjzTm
zNCtV1Hg0Rl3V16dX%J-72(i>Eg$DuO^jjOPgvdQ&j~9QO9SwU{()p6Vv{e0i%C<lT
zLcm?(C9kM3;3I_UXIPpoR#^NwV<>MgiczH#X#CuY%5x?3Y`=6U!d}e8;K$3v-$C~T
zT>a8?sdPLjXD74c!5^2N-{YWtPcHX%G4VDpt18!Jv>2ZfFA|+`W3Gj7^P+#hy7Og!
z?{3KltI5!jv2DcCF%it&C&VLsOzaoX;pJeUJQLy>QlJ#9H<Nz}mzM=rHFHA<_}GMz
z1_lFq3n2)b*%cs*i2qu}0MpwNCoduDZcM_w;!XeC;-S*PZ&h#I_o9Y8Tgtliq=L+7
zlT?4L&OCV~K)igfBsZYNHY3i?akG!nGi_)e7?kFy5F~L}1MOz>3VebZzLW(Qr&c;_
z&(30iG_HVl=sVA)r1i*{7{3Q{l~@}D&5>kh&7Yy?{WvffXQ$SXip5pM=Co-@eap8@
zuG&v`EBZ;w-(5vE?*oN->{<yKTQe`E-jt1-enF0jamgdBX5xC+k-0oSTyt^Sp*GzD
zd8v}kJO%HugL=gnJkve;sAAlJs;VpFAL8~oBB$B3O66pUh9+|x2Qu@lpQoYd*R4(G
zHqy{oUr&2F5a`|N42b#7u_J4JmghMJO@+kFR2)=}h8Ue*8*FKdBNZpz4OkaR%_$F5
zgcw-qUFqKoWowH<XRMy+XLNa#^cSjf2fU?WAn?~6=W=-Y;{4?Zg#jrAHFVN`0;ln7
z*oC7*X}<-Gr#kF$qZ1|T`-Q6y7taK@Jd8Z%2wI2B45{F{H38^xq(%#sY=V-&1IJ`T
z!oc#fqPe7s@7|1(iM!?$h1#zra^M1Z6aDwUrGo;IJX=ZkUU6FP2@d%7n+z)8U@NA8
zDB<1CD}rka%2V>ZN(R1DMSRkZ8}Y<f0aQZ*gygq7)Ayd=@d;M&UzD^udVuBX+;(9v
zq~f#XIaB8OF*OdO6ES0w<fvmSJw%ekNb*E$$&MK7nSjsjH%)0-=nLEAb&<xSRX>-!
z1I~pjwN6Yj5jK|ZF6;ZqJayElX<;AV!PKek8yvRsPxR96#EI7=O2g)2-lfznNBaiY
z(@7SGN(Kc}-Y8!#Sx8B1m~+zhL2u8m$cH%Tkx8#kozc-OORud)i07gAl#17+c0co#
zP`15Ef}}<A;0E?m9IOfjF6vzlwOTlD`j<98{eK+o8SrWDz|tvhgVlK3b^?bjU-+EV
zw^38R#qvgQQ;t=G?ITuq-9XS&d=o3z_CfstSd8;$S|PHcGG4+Q>EHCN-{n`OqoXRV
zGxc1;ZGJ=!oL-`@d&vSmjQWxAdY@%Kl?=KL3~0U(1g<u?^X}az^afuS?eM^T4T#(e
z1If=zc2Cy6da0+!21)-;3>nu*cnP7)HHqp`SbO?xXYWA3VOJstYIVfImg>X9qb1+F
zm9-Nk-MwXe^QG$wGA~hwnW?j*q`5yo@lkAj@RvY8N?fuzG5dE5OZ^Y~>uCcezwgIB
zx;1=SQOJwtH}x@{BA|LTk8T5wR}n}refxs<Umr%AMnvL7tsYQKlauL3<DcRNE)bXX
zOQ6#lLRVyRSRDBoC+;A9qQiI5>5E|C`;~kZfBHi~Q+H`mkA{r>pXR5tEt(Pk)JBkQ
ze%+7#L>Ep8X9}W0Okp|Q)xT!ijvd^dsIM<U`VNY}4_@4!^rFUcOmYy>2%ESwO#)Zs
zEXbw*{Mn%`DzzodQdz3!r%=Pk)U3BHT=n@m88HIsI!0ELiV(;A2C>+2Lh6r{ikuuy
z__|2X6-qN_m^X85NIiF5wUVN2Sh$SMDI>N<^Cw$nNrEUlz8omal+wJ^MCh<HpQ+eV
z%~?%f!f*?E1$i%#jB4j#O9wOqq&3A1G@6<i8+>a=hMOZf7=lpcD5In113O0xG_;nq
z%0HWw;1T}BEaP%|Y}Z5;dS6`+(=QLpo|*5Xexi%UH7LT(9Twtv-k2>GN#;>OCpp0w
z$-3+Pt(ejH`JUb*PMC<Ic+HH2z9h+<-`B5Bz|7u_ez|MVcr_1K{kJzxRI=rV5F}CU
z^$UTCRD{(+cRIpbH8t?D^Y;i(pj@uwtfVri+}dLn=c=JkEfBk<QA{;d9{}kq(GyQc
z5W~pO2!#Tqd{aUVo@sO-89_urCCp;EuPx$H??%Js8%G+3Gt!`W^hnrLSuXtD&g%=s
zT56yXOf8Xy0BD?q+IPTt9y{J^j1EFSE+*jU`=tvbAQ9Fqq046+FujxEJeFmhr9Oys
z5aMPZdZdksDF~&`;uI-1LyUTm*Eb(7Lq;B%i<E4&>3{=g2)GWMHno!Bh?n9fWs&$R
zf?t>^#1bN_DkrmFL7EVRNWvOFWMlU8J^aA&mdA%(`qn}VeDc2|bKm+XfcQMWlVT7U
z#Nl0ZeqHXLdzD63p5`p*fQnZ!lI=uK)Ze#x@4zDVI4upKt{7>b^u|9=2fXo=Fn*FX
z(8yCzQD;=FSEaBB#0(O~%bJR@o1eL8db}@ank_kERmaThIUyV^AIOvCSzL9)GIAd7
zq4HyS6JK094K6cMDMK2eyv#S+O6^Ntu;OkiD_u*AEY}TA7Id*kJ*5rAhZDtog`J0Q
zr7hO}vt>3^3*q6)vTiQ3=G+EWr>x4(GWJP#g5Y&>#xB8U4Z^p1ETNIl3?Lp!QTqee
zM-`bhQEouqg#bIo&o5n_{6ZyLUkE_D+}e8?IFgr#V{dgopT}1jgBM{)m{k#0Af0^O
z(OF{!F1Yl#_`45#Vxc6~0<WjrM<KKiE3+`W{WqbAM$7b}xjq7Vr^zxj*_LHxa<n;y
zM><|C=3h%k@bO_AGm&&R&H|8<)r<L^>RC=%)p687m>{?j!QYFLE56aEk&bWf>`#Kj
zHcW6#Qy))C>cQ)a;g9N_?LJ>qV*Q1}W^7*-O#6&YvEf4#x!)L+#d~<dTZZBODlnB<
z;jmA@u^>{cG37}@sLp633kXUvGoggnm*B<p(ddNWFgLvIEEk!92BgsWIb(Fj?b{ZK
zYkt5CIw!-Gj~M+7yaJ<3t1E2@o%#|}_}Pf~5gQrIlwYydYG%@Za@VlfJ2QiCNzIs7
z|LUs@(i7*qnh{#aM4Te?iYDZ~t4G_r#-+liyQ+=BR8|mzh)nMWxhD;^X==gq(bZT)
zW@pjIdNN$*)Qg!N)RS@s<er<mkHjo^KQ!>S=y5Ljoi;fdNWwzj_w90&;o2RXM#}5k
zQm>YVYtDR@X`4~Rk)xaHpLv>K=_JqQB9D>OqIKvI_idg6xcI$YfvS&C8VeDjpLfF!
z#xUqa@2-%PdP~&*2g($v#2_=<>L=4BJ(L6S@lS*uB#8f@3T)6zxo(mX^!m|>)+r)@
z{ST(aWy7KrgM&lISi}}`Rze#Quk8(4KRq;?VgIqk{2Tp*vSw4QAm1ix)oa`1Gatoq
zzOuKonSAJYjlp69oKKuVaF)J*bTEEH#f|evX70Fy%Ky4#%F2_`qh6E^gpVQ&=@pLp
zyCMGH-2N|3?ti5Q5GSgf*`4CgS#yoH(4`YqZZg%QH#6SvZhqGM@uFyJd~Kfa)mqwI
z@#E%c9Cp`Zz)fEeb9)iSAF~XpV7B9j0jMyIK5L27FVC9>yt@1fvH!TFCO$qpQNFg@
zykw6(-D<+CB^aB^`;0++PLXnOAtyDyyRT8tN!?c-+?Oj$XTDs{tdzhCFF$>LG~GyY
zHC@Ku$b|*bc>K}_rO7O95NHkIE-FCrmpa&Dgwed(EKF?toF5%ojI67zR!X;DI;wVM
zV!<PkbfJxraJk6Vvvqm{navz!WKeIZAZRUZBy&y6dUX5j)Y9QTT`4*-^?<kFHT|2E
zKYQ{sT20gdy8LvC+*GjyR>fQgY4cAoi^yXaa?F4ibaYkMQj}D0{nCcVuBI<DgO<jd
zE*hJk9g3pk;yAX6lNa}7<n}Cv-sAaness)(tXk+Q@Llu9wJZM#2pYRbHxptc_hquU
z;Tl>o67aCx+!mxQRZ?*dDR=C6`H_L`xRR@~i#hwgQiFp$n4rb9AZEKv?M6b*v{=I>
zt9Sv!-;=X3>PxJeLr=w*r`#@VVn{IapRi5f*BwYbpI@R}jW<U2JmwbCO^GE(M5wMt
z6CzoxecbR}WO6Dhq=ub4#Wr}O@!EhVr7U|M!6WR{JG84GlcgwaH@0gVg}xYCp$S__
z9lu#kQraQ=H@{@VL~EmjDQSK24~o(KsS=tCOSLhh&=PV)A!b{C0(KonY7(q*^Bgqw
zdrWd-3Xz}%u0B3qnbM$D9ADCp|GrK%-u$ffI3_Br0@oCTwG!e390D>HGnj$IPQH6K
zwb_g4vgXxQ`g<#G^$8!&qSQ$m?ONFR@V?a4^<L2h#9%NrXR6s&cboG5F<J^0<}G7g
zgg0nV_S}dd)|qC8>`{wt(YSR4F?of<)|syax-Dh(+zj)cs%%evg#AcJLS@2!YLJyA
zyheBN(2LP2(KCV#ms+XhEaBgjd_OiaCC;tg)0!%(8`4k_(UOq?jY(f(QiH>uiBg+J
zlf+Y$|Kz>ac8Lc%QF0EGTm$nOx;-3wr`whyS?+qFO6zk&V`ibey2{%XDjnY|*46F*
zCA_>dbzI=9r-gX_mP;wAm@sPw?DaRBR~Uqhz;LMkhs15;czHqtwzp>b!_CVd$tsz2
zX2y$)!urbsIf<17A~Rh-Y%1}`{VC^~UVtlfMdjsl$m(bb!(`iaWOx-TJq~#a*-zK4
zR^CUbO}f<UIpW868<91EIyPrY$sOm&;s9rnO$m#k1yslCY&M9s=zk4Oe<U&=^Pg0H
z6n7y0Cm9}|dz<JeQvngi`bHmvzkbLXgSkN4a*Zb0|9;Z;UkO702V8r4i9fj#ibSGp
zKo2@TMz*f~bJq9&QG@>%Z2u2Ng^!Pj-yB!E#veRS-zKj4!oYBezY@RLaS1=c#c=Y;
zkQ(^|6IfZZ+iq!BZ=oVMEV)VLVr3gYgXuop+e@;o#Zy_m`0mqhZwX1dp2GN7bnV}?
z`+2-wZ|WClta~#^?!q!=C7o&ftK@ny7PVm+Ao?d)>iGHn3(p%foV7b}6^pe>h+F;4
z<c-~#-o5jDd#s93-E5^ZUqCXSvQtV$t5L-pIbJwz8UOVmxqqwGJl@naLB*<AXwTmh
zYGM?(R6%Gh`~{z|CSABNRx5;)GV+gza3p4AF-bXz-24?z;u?p;$r<_zHWN4P0`bQY
zs4P5^RX!GAUy^9OcAl(@Mk1*^EWb>XX}5@Nsf)Lx;K5hO@=?q7os=gMH?)!ttZwb4
zKC<Y*?CqhUUeen_5Y)#hX#PjeUr2IiCl1(<*1lA8<D*|l_R?ciQOFC}dmV=o;JbYV
zhVV_E=o(;`E@8JOM}QF(vHf2z<kUJ-bNJn%D=CN%F_ZRMs8}r7wo{JZIy!GNb7iq>
zVBsy!SIlwsm|fRZYxNX#0pUbm_!Neg#^CW+@c1ykA>{j!!`=C0gbdKDwnqYKr#mpS
zvCeNEnV|Op5iX2ZW~BqRaF{T3nC(dKh<_Hhy|TJp8>pYGiE`S)Nh&IJY4qRW{S4Jc
zsDMp3Fy#HN9@Xi$aAL5Fdhx>UaSrg}oPW8br%=-xA5+Tw1!>)y)r7otN;Zy3X|lJ~
z;6d@-TI$?X&N)&gF^|wFSeR_Cd^hj`>37hWKD-B^Q$$ngP<2fA$OvQPBES~r>&B3J
z5f~2bQjz|0;#f;z^0yT`%FQ$SSkZVB;#C{xIm<YdWkfoU=`L1F5!wJkJEcMW5{7Rp
zBB`3GxrswNa(oGOS}3R81F|ilw+yUtn_F5&|13g{$~6UDap{f2q$(Y@G7R|fYGO@6
zeD{xM%>3cNE+$Y;*n6{j-WISEYkjm6=5lE&vX#pi%s^tK<NC9G!@_m{4Kl8_QP+?e
zgmnSNOQ%x6X3`j9U!!(kA~j-}**Fl4W~XO=Re_ceM0U&$+8-4XkiTH7`MbJrHc;}O
zj)1vByiUAkUG{T*;dR5aatI?1zjA_r$VA=PQq+Atd{z#F#0E|pmgP7If79SH;0o!B
zwsMFd(n+YtBOsKaCN<*B4Z%oHLySSIOF_nnAzFezC5+C;B4H#ZPx_imXG^jDXxXBU
zV`f^Yh`Ll_!{Yp!4B$gBDScU~SpcS;Y=KT-^2jIJa#x5o18y*Z`Fd~T-BlspdX|>}
zM6pkH`Lw<m>JvGd`p>S?f|bVDZ-c$(seX7r<$WGC)}*wB>G&+d^<&G*6xjl0@$%C$
z_V=w<?ynAju7kfb5H9gAV){u`lvXmgz4Vti$daoCStGY{p0c<M^_b66-ck$hUo|ge
zk;kd6*CGhfA~9Yyzt)mDb^&Wrr?4yd_b)JfLq~NCrH^ot$w_X1LgtL^-c_%^4ZWA5
z@A{F<FtE@w1<!@Vp9*%EAIRzZt5$M&9}?z+1IS)cEZ&Jqc8HfDrn%#OG^&B!R>{xS
z2MZU+-CfJEb^K=w%D*kcNZv{Q-rpAAUiggkVjINi@f%HdZo=hp?TE4-yRp$R+VwEV
z+J#H^N}MXbI^uK4ZoNx3BY$OsyhABMf*@a{zOH@yr7KxmwrK+~k5S7O_qlAh^T0V?
ze98@6Y(=O`qt4vCYHjnAMWYZ7kk?D(0g?W+i(R{*+lTBMc5BSl6#oI4VybtX8#0^W
z_wyfgofFEexTn9AYU|G8^X#W?e(}TZ2;6mImwK}?r~q6fc<l?BbqewsB!hb<z}pR9
z1Wo^5xW!AE-}rg^`sgj*%n7}Q%a`G`rY3}2a^15ELZd!SNMFlZeOsXGbvP+^ftT08
zob+&9&6B*#yD9`OQ@-K}!|<0&a;|!suNy3E4xqmH@2WIxG#=G0dSKo&@MhVnxPAeo
zJF*q|iR1jh(OecJ3y%;!68xa_>0a~Rfy`)UHCRS|ww?N$k)ip)O9CD}Gm4ozHYf+(
zlR>IT-kKocx*$F9`^-QMO@c8cl<a}2L8t0mzRezW7x`{gdn}fCD|k$(VpTa3iKGRA
z@-;Q-v%y=|HftbAd3l^tu@@^$evyy2=IL5{n%o%uwlbNH%#^#In9J;>;x!hXf{L~C
zRrg~Gu}`HR*E%0pJ`<gNvB1vZx5q4wipIgs{v2_TT<Lg0gHk=nI@)l+HDn!5XP&B{
zxI6W-z!J`OMq@3pDyo6EbA6L!jf)dA2A6xtiu4blovVL!gUsfFSZp{e;So;BdGfx+
z%FCWh@&eX3Hd{)H3^hL2Y_V#WI+!f=kTdO+@_17IWYG>UbW0bn!}UJh#;+$89y7Ti
z3>;FLgG<Cl0jf*v$_&LNPGd_S!rEvyZ6&Ze(g-H&gXt)f%mit<V>qAlE~5`rW^;k;
z<-xOuu}ODVuZAVhGQl<zcUmW;6m?4P1Iw@bcEd669vkVVbW(;MP#-KB0SOya?iC=R
z@0D}=uY`qZ2UxUwM#;%ElZeo>pb0o`9U~9IU5;=QYOGT!hOV|E7aUuv@eM;=vHW&p
zE>v7k`GlwKoaedz82@pf?Hjl@-ybRT(6yEE3~sb4#gEg$86%n{EbMX|elDmyE7#Uw
zSW)me5@U{5yG|o`HoEa6f$riy5g`t4b3FgL{x~0_%(BWh3cvdkO=#nY9-b4Q;zEq<
zX!C<*+g8oVrg^woI3g9hL?lK5Wo;G3na-~t!7`)=(+3Hszr!up<*Ez^du9a}9FnLc
zVmY~&UQ9>#ojaDf>wydN=R!uTtjdQsy|rNx5ZqTH>tJMy;u2x}E8M(mzg^#II;7Cx
zO9<Z!(W+29adRQ#w97WI0G>+!ljqSo;IE=Xl?}u<`u4-Fcres~4Z{Sor`*Sb<7fM0
zND3Z@)NKW0UvfS@*4}0aTZtW985n6;J?bpH_d<v{nHtE_O*oj6^SC^3LN1Elz?Eg~
z$J#imLzWOoAx=HN=Im+VTylH_Ts-`Ml~)ZIA7iG_24<a9g$OW>(FK*K5z$mFZh%_8
zL;VHkoI=;08)UeAx+?ID+ByJEwpzHbGMAzGES}jHq<IySWU!NCZtdI65yh)60pP(F
z?wF`#4k05)nSrcRp)nJ6AjO+2wXaM5JjFpTQYf+DbKY49VcMo)Rm!>^i>sC}Qm%1R
zaat1xwG~^-y(20jD4MV<B1gU!Sqx`oWrt4%?4(YzJF%6A7&aQfn0GYq0@y9a=efh|
zi67rHgAN|uOmFGTX-OPBcg2(wiCYWbjCqY;Wb+P@Jy0p#_geU~(-ITYdo(M?qkx#h
zSBXn!q%=ozX&p8tK&642nvj#&6{j{t*l-~A422}MT{V`pE}EUDKarTb2b9=SYV(FQ
zfQna5xR{e&XUqTe@q1~sHf;kVf2fJn-is1k|7G~D7h}8tY6GVL+ZEqkB-Q$1J14o-
zw_w+Q#X&_xc5&R*Gmlh)=r9+eehol5Wwit{=U(1gxG3gmH4$wkLAQ3)fBd@q{mIQo
z{cp7VbpgJ+@gLt*`}P_>`SEx7ic&XD_jAsOFQQ(U4G}likS~m#g9{y@_X6}sei*{v
zgLh_qT*bk0-Rra=i<Q2sy^nVETrH<pCNUqX^!5*kXIpDMinEC8T6!Csu%i#<g2&>7
z4nO-IA_1Cn?`8F{99R88?*sYJZ-hP^e>5WMF&;R@vJka5!HIU)&;Q2Rmyp>`%cZG}
zi^RuH#+{G^si-W%zi%=D)349=AO3aY#6zE9kKKfL23*v5=VKTUvh4t7k#5!4)9=M0
zR?KDUPRS%qt$5A?fpK`|KP{Wy<UM~C@*wSyEQ<tFJp(pcwafCjP5Q{1YS`mhopm|_
zkYeAP^n^d1y{j^3iyW#L=G%=R;yaAyg1D=ypRj&KK4|=KTrfiYshOf02J3`5=##1F
zBvi^VIh99ocS7n=>fmab_E1DEvDaR&re}ZWy9zJHZv9C=5r{41izp3hP8B)ya#=bR
zoSotD@Sx=ptLFW3m|l9JDJbUs<}Wc=kc}#7)*$(4(?aZh_=eS6gE$O&qvgOvBodrQ
z07>|5u*wMHMRT@>uf;;=a4n0EEA-gwtxaM+lNw>wW5|MA2*-*sSmHQ(aaESSw3-jK
zcs=BS+s_uT_Q|(0(Ot(r+`&D4(k#`p9p|?Bja*_R3?s@;pOe6!^4#n!v8If?|8En|
z+l$vOm(){GEs9C)AKx<9^COEI%H$x99OA?j+{&OCiO<ZS<(ylflAtkIWCUyQn=tbe
zS9vjsj6ply+eLe(+ap;pK|NNzWsEb`xNJSz!?yhjLDYJb=+0&JrJY>(i7Toxjh|mr
z7VzY#_+)#AyNT90$QktW4l&nLPnn#wf3q<houZ<Ct5|J)fJvI-LD)r~P+1Dwt<@aZ
z+r{;GPDXU!t7JqDEk4t|D$R{i8?eWcJ2Vb%r~g|YO-RP*n_3V!!6I4z!0)4L{(ij9
z=q~3d+AU)y$oHhVWn8mrv`es#V8}J7dZy!jtsC0kNl<8V=0H35yLKY4@u4aZ;1&z*
zGBIm%$JnHad<dF+6>!tS^*xF=DZK6PC>L9_8J)VVw1%GsKFGx8`O!o85VQ~PZ|MFe
z|7ob*h=Gg$d9YhU%&{KCJ~;gUg3(B}8R16U$4T2D%QR?vTxwrGdFP67noc0QY*))|
z7x$4{jf~2!O?M$*V<y@tHZ8IU&c2+1k)fD;#001i{=^eV-;Kxv;r7mH^NUYYQfdd@
zz8`Es*bmYE-}<SL$W$=e$h)YmJiOS4Prd*wo{GkvFReZ8#BE>OJq!STUOpjiUSV#2
zL495^aee`DAt6p)UU6RDFcHJn|B1oX{iUP5?|;tl!|533fdQbRsHspdXBGB801m^r
A1^@s6

literal 0
HcmV?d00001

diff --git a/docs/images/singleton_internals.png b/docs/images/singleton_internals.png
new file mode 100644
index 0000000000000000000000000000000000000000..3bb058282036e268ed770502f0d487525c181f3c
GIT binary patch
literal 11572
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
LDpKVVppgFo`2!qx

literal 0
HcmV?d00001

diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
index ab978b23..e3a18b76 100644
--- a/docs/providers/singleton.rst
+++ b/docs/providers/singleton.rst
@@ -4,6 +4,10 @@ Singleton providers
 ``Singleton`` provider creates new instance of specified class on first call
 and returns same instance on every next call.
 
+Example:
+
+.. image:: /images/singleton.png
+
 .. code-block:: python
 
     """`Singleton` providers example."""
@@ -37,6 +41,8 @@ Singleton providers and injections
 specified class instance, so, all of the rules about injections are the same,
 as for ``Factory`` providers.
 
+.. image:: /images/singleton_internals.png
+
 .. note::
 
     Due that ``Singleton`` provider creates specified class instance only on

From db09503426639e2b18606eb0df3ad238b77cc0b8 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Fri, 26 Jun 2015 10:21:23 +0300
Subject: [PATCH 41/73] Adding better scalling for some factory and singleton
 documentation images

---
 docs/providers/factory.rst   | 2 ++
 docs/providers/singleton.rst | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
index 4af9b846..24a78ca2 100644
--- a/docs/providers/factory.rst
+++ b/docs/providers/factory.rst
@@ -6,6 +6,8 @@ Factory providers
 Nothing could be better than brief example:
 
 .. image:: /images/factory.png
+    :width: 80%
+    :align: center
 
 .. code-block:: python
 
diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
index e3a18b76..2e62e813 100644
--- a/docs/providers/singleton.rst
+++ b/docs/providers/singleton.rst
@@ -7,6 +7,8 @@ and returns same instance on every next call.
 Example:
 
 .. image:: /images/singleton.png
+    :width: 80%
+    :align: center
 
 .. code-block:: python
 
@@ -42,6 +44,8 @@ specified class instance, so, all of the rules about injections are the same,
 as for ``Factory`` providers.
 
 .. image:: /images/singleton_internals.png
+    :width: 80%
+    :align: center
 
 .. note::
 

From d3ee3edc4e15a9b5cfd4bf666b024c8d25de9659 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Mon, 29 Jun 2015 21:32:03 +0300
Subject: [PATCH 42/73] Updating license file

---
 LICENSE | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/LICENSE b/LICENSE
index 5442b8b7..a5d52629 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015, Roman
+Copyright (c) 2015, Roman Mogilatov
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without

From 4db4629c758979171ed320aa890e92089de276c0 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Mon, 6 Jul 2015 16:52:51 +0300
Subject: [PATCH 43/73] Fixing comment in catalogs

---
 objects/catalog.py | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/objects/catalog.py b/objects/catalog.py
index c69346d0..75b34e1d 100644
--- a/objects/catalog.py
+++ b/objects/catalog.py
@@ -38,10 +38,9 @@ class AbstractCatalog(object):
 
     @classmethod
     def override(cls, overriding):
-        """
-        Override current catalog providers by overriding catalog providers.
+        """Override current catalog providers by overriding catalog providers.
 
-        :param overriding: AbstractCatalog
+        :type overriding: AbstractCatalog
         """
         overridden = overriding.all_providers() - cls.all_providers()
         for name, provider in overridden:

From 77f5d05071440a7fb2854cad34dc8a9554b5bb28 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <roman.mogilatov@cupid.com>
Date: Mon, 6 Jul 2015 16:53:09 +0300
Subject: [PATCH 44/73] Updating gitignore

---
 .gitignore | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.gitignore b/.gitignore
index a419efbc..a1c86b0b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,3 +64,6 @@ venv/
 
 # JointJS Experiments
 jointjs/
+
+# Vim Rope
+.ropeproject/

From 4620ad7f29721713801b11899d42107f646fa21e Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Sat, 11 Jul 2015 17:21:36 +0300
Subject: [PATCH 45/73] Adding delegate option for injections

---
 examples/singleton_and_factory.py | 69 +++++++++++++++++++++++++++++++
 objects/injections.py             |  7 ++--
 2 files changed, 73 insertions(+), 3 deletions(-)
 create mode 100644 examples/singleton_and_factory.py

diff --git a/examples/singleton_and_factory.py b/examples/singleton_and_factory.py
new file mode 100644
index 00000000..3d044608
--- /dev/null
+++ b/examples/singleton_and_factory.py
@@ -0,0 +1,69 @@
+"""Providers delegation example."""
+
+from objects.providers import Factory
+from objects.providers import Singleton
+
+from objects.injections import KwArg
+
+
+class User(object):
+
+    """Example class User."""
+
+    def __init__(self, id, name):
+        """Initializer.
+
+        :param id: int
+        :param name: str
+        :return:
+        """
+        self.id = id
+        self.name = name
+
+
+class UserService(object):
+
+    """Example class UserService.
+
+    UserService has dependency on users factory.
+    """
+
+    def __init__(self, users_factory):
+        """Initializer.
+
+        :param users_factory: objects.providers.Factory
+        :return:
+        """
+        self.users_factory = users_factory
+
+    def get_by_id(self, id):
+        """Return user info by user id."""
+        return self.users_factory(id=id, name=self._get_name_from_db(id))
+
+    def _get_name_from_db(self, id):
+        """Return user's name from database by his id.
+
+        Main purpose of this method is just to show the fact of retrieving
+        some user's data from database, so, actually, it simulates work
+        with database just by merging constant string with provided user's id.
+        """
+        return ''.join(('user', str(id)))
+
+
+# Users factory and UserService provider:
+users_service = Singleton(UserService,
+                          KwArg('users_factory',
+                                Factory(User),
+                                delegate=True))
+
+
+# Creating several User objects:
+user1 = users_service().get_by_id(1)
+user2 = users_service().get_by_id(2)
+
+# Making some asserts:
+assert user1.id == 1
+assert user1.name == 'user1'
+
+assert user2.id == 2
+assert user2.name == 'user2'
diff --git a/objects/injections.py b/objects/injections.py
index c574071b..15d20a5c 100644
--- a/objects/injections.py
+++ b/objects/injections.py
@@ -8,17 +8,18 @@ class Injection(object):
     """Base injection class."""
 
     __IS_OBJECTS_INJECTION__ = True
-    __slots__ = ('name', 'injectable')
+    __slots__ = ('name', 'injectable', 'delegate')
 
-    def __init__(self, name, injectable):
+    def __init__(self, name, injectable, delegate=False):
         """Initializer."""
         self.name = name
         self.injectable = injectable
+        self.delegate = delegate
 
     @property
     def value(self):
         """Return injectable value."""
-        if is_provider(self.injectable):
+        if is_provider(self.injectable) and not self.delegate:
             return self.injectable()
         return self.injectable
 

From e38cecfae0e936987be98fff67711cf057db24e0 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Sat, 11 Jul 2015 17:27:28 +0300
Subject: [PATCH 46/73] Updating example

---
 examples/singleton_and_factory.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/examples/singleton_and_factory.py b/examples/singleton_and_factory.py
index 3d044608..8a1b6853 100644
--- a/examples/singleton_and_factory.py
+++ b/examples/singleton_and_factory.py
@@ -2,6 +2,7 @@
 
 from objects.providers import Factory
 from objects.providers import Singleton
+from objects.providers import Delegate
 
 from objects.injections import KwArg
 
@@ -53,8 +54,7 @@ class UserService(object):
 # Users factory and UserService provider:
 users_service = Singleton(UserService,
                           KwArg('users_factory',
-                                Factory(User),
-                                delegate=True))
+                                Delegate(Factory(User))))
 
 
 # Creating several User objects:

From acc9259ddd30b6433dc93ea1604325ca38448132 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Sat, 11 Jul 2015 23:34:23 +0300
Subject: [PATCH 47/73] Removing delegate option from injections

---
 examples/singleton_and_factory.py | 5 ++---
 objects/injections.py             | 7 +++----
 tox.ini                           | 4 ++--
 3 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/examples/singleton_and_factory.py b/examples/singleton_and_factory.py
index 8a1b6853..6a8b4f70 100644
--- a/examples/singleton_and_factory.py
+++ b/examples/singleton_and_factory.py
@@ -52,10 +52,9 @@ class UserService(object):
 
 
 # Users factory and UserService provider:
+users_factory = Factory(User)
 users_service = Singleton(UserService,
-                          KwArg('users_factory',
-                                Delegate(Factory(User))))
-
+                          KwArg('users_factory', Delegate(users_factory)))
 
 # Creating several User objects:
 user1 = users_service().get_by_id(1)
diff --git a/objects/injections.py b/objects/injections.py
index 15d20a5c..c574071b 100644
--- a/objects/injections.py
+++ b/objects/injections.py
@@ -8,18 +8,17 @@ class Injection(object):
     """Base injection class."""
 
     __IS_OBJECTS_INJECTION__ = True
-    __slots__ = ('name', 'injectable', 'delegate')
+    __slots__ = ('name', 'injectable')
 
-    def __init__(self, name, injectable, delegate=False):
+    def __init__(self, name, injectable):
         """Initializer."""
         self.name = name
         self.injectable = injectable
-        self.delegate = delegate
 
     @property
     def value(self):
         """Return injectable value."""
-        if is_provider(self.injectable) and not self.delegate:
+        if is_provider(self.injectable):
             return self.injectable()
         return self.injectable
 
diff --git a/tox.ini b/tox.ini
index 2dff08c0..54d47a1f 100644
--- a/tox.ini
+++ b/tox.ini
@@ -39,14 +39,14 @@ basepython=python2.7
 deps=
     flake8
 commands=
-    flake8 --max-complexity=8 objects
+    flake8 --max-complexity=8 objects/
 
 [testenv:pep257]
 basepython=python2.7
 deps=
     pep257
 commands=
-    pep257 objects
+    pep257 objects/
 
 [testenv:py26]
 basepython=python2.6

From 7224fd4b37d1a61136ecc921ed9d3e8ff6270054 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Tue, 14 Jul 2015 02:37:25 +0300
Subject: [PATCH 48/73] Updating callable provider docs

---
 docs/images/callable.png       | Bin 0 -> 15150 bytes
 docs/providers/callable.rst    |  64 ++++++++++++++++-----------------
 examples/providers/callable.py |  55 +++++++++++++---------------
 3 files changed, 54 insertions(+), 65 deletions(-)
 create mode 100644 docs/images/callable.png

diff --git a/docs/images/callable.png b/docs/images/callable.png
new file mode 100644
index 0000000000000000000000000000000000000000..67a7e492f5321770e88ac57027ec61beafe9397a
GIT binary patch
literal 15150
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

literal 0
HcmV?d00001

diff --git a/docs/providers/callable.rst b/docs/providers/callable.rst
index 9968818c..9d1b4b35 100644
--- a/docs/providers/callable.rst
+++ b/docs/providers/callable.rst
@@ -1,64 +1,60 @@
 Callable providers
 ------------------
 
-``Callable`` provider is a provider that decorates particular callable with
+``Callable`` provider is a provider that wraps particular callable with
 some injections. Every call of this provider returns result of call of initial
 callable.
 
 ``Callable`` provider uses ``KwArg`` injections. ``KwArg`` injections are
-done by passing injectable values like keyword arguments during call time.
+done by passing injectable values as keyword arguments during call time.
 
 Context keyword arguments have higher priority than ``KwArg`` injections.
 
 Example:
 
+.. image:: /images/callable.png
+    :width: 100%
+    :align: center
+
 .. code-block:: python
 
     """`Callable` providers examples."""
 
     from objects.providers import Callable
-    from objects.providers import Singleton
-
     from objects.injections import KwArg
 
 
-    class UserService(object):
+    class SomeCrypt(object):
 
-        """Example class UserService."""
+        """Example class SomeCrypt."""
 
-        def get_by_id(self, id):
-            """Return user info by user id."""
-            return {'id': id, 'login': 'example_user'}
+        @staticmethod
+        def encrypt(data, password):
+            """Encypt data using password."""
+            return ''.join((password, data, password))
+
+        @staticmethod
+        def decrypt(data, password):
+            """Decrypt data using password."""
+            return data[len(password):-len(password)]
 
 
-    def get_user_by_id(user_id, users_service):
-        """Example function that has input arg and dependency on database."""
-        return users_service.get_by_id(user_id)
-
-
-    # UserService and get_user_by_id providers:
-    users_service = Singleton(UserService)
-    get_user_by_id = Callable(get_user_by_id,
-                              KwArg('users_service', users_service))
+    # Encrypt and decrypt function providers:
+    encrypt = Callable(SomeCrypt.encrypt,
+                       KwArg('password', 'secret123'))
+    decrypt = Callable(SomeCrypt.decrypt,
+                       KwArg('password', 'secret123'))
 
     # Making some asserts:
-    assert get_user_by_id(1) == {'id': 1, 'login': 'example_user'}
-    assert get_user_by_id(2) == {'id': 2, 'login': 'example_user'}
+    initial_data = 'some_data'
 
+    encrypted1 = encrypt(initial_data)
+    decrypted1 = decrypt(encrypted1)
+
+    assert decrypted1 == initial_data
 
     # Context keyword arguments priority example:
-    class UserServiceMock(object):
-
-        """Example class UserService."""
-
-        def get_by_id(self, id):
-            """Return user info by user id."""
-            return {'id': id, 'login': 'mock'}
-
-
-    user_service_mock = UserServiceMock()
-
-    user3 = get_user_by_id(1, users_service=user_service_mock)
-
-    assert user3 == {'id': 1, 'login': 'mock'}
+    encrypted2 = encrypt(initial_data, password='another_secret')
+    decrypted2 = decrypt(encrypted2)
 
+    assert decrypted2 != initial_data
diff --git a/examples/providers/callable.py b/examples/providers/callable.py
index b3112569..73654eb4 100644
--- a/examples/providers/callable.py
+++ b/examples/providers/callable.py
@@ -1,47 +1,40 @@
 """`Callable` providers examples."""
 
 from objects.providers import Callable
-from objects.providers import Singleton
-
 from objects.injections import KwArg
 
 
-class UserService(object):
+class SomeCrypt(object):
 
-    """Example class UserService."""
+    """Example class SomeCrypt."""
 
-    def get_by_id(self, id):
-        """Return user info by user id."""
-        return {'id': id, 'login': 'example_user'}
+    @staticmethod
+    def encrypt(data, password):
+        """Encypt data using password."""
+        return ''.join((password, data, password))
+
+    @staticmethod
+    def decrypt(data, password):
+        """Decrypt data using password."""
+        return data[len(password):-len(password)]
 
 
-def get_user_by_id(user_id, users_service):
-    """Example function that has input arg and dependency on database."""
-    return users_service.get_by_id(user_id)
-
-
-# UserService and get_user_by_id providers:
-users_service = Singleton(UserService)
-get_user_by_id = Callable(get_user_by_id,
-                          KwArg('users_service', users_service))
+# Encrypt and decrypt function providers:
+encrypt = Callable(SomeCrypt.encrypt,
+                   KwArg('password', 'secret123'))
+decrypt = Callable(SomeCrypt.decrypt,
+                   KwArg('password', 'secret123'))
 
 # Making some asserts:
-assert get_user_by_id(1) == {'id': 1, 'login': 'example_user'}
-assert get_user_by_id(2) == {'id': 2, 'login': 'example_user'}
+initial_data = 'some_data'
 
+encrypted1 = encrypt(initial_data)
+decrypted1 = decrypt(encrypted1)
+
+assert decrypted1 == initial_data
 
 # Context keyword arguments priority example:
-class UserServiceMock(object):
+encrypted2 = encrypt(initial_data, password='another_secret')
+decrypted2 = decrypt(encrypted2)
 
-    """Example class UserService."""
-
-    def get_by_id(self, id):
-        """Return user info by user id."""
-        return {'id': id, 'login': 'mock'}
-
-
-user_service_mock = UserServiceMock()
-
-user3 = get_user_by_id(1, users_service=user_service_mock)
-
-assert user3 == {'id': 1, 'login': 'mock'}
+assert decrypted2 != initial_data

From 7f92b886bddb397fb37e5e49bfad42bc2378dcd6 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Wed, 15 Jul 2015 16:14:40 +0300
Subject: [PATCH 49/73] removing example of callalbe provider

---
 examples/providers/callable.py | 40 ----------------------------------
 1 file changed, 40 deletions(-)
 delete mode 100644 examples/providers/callable.py

diff --git a/examples/providers/callable.py b/examples/providers/callable.py
deleted file mode 100644
index 73654eb4..00000000
--- a/examples/providers/callable.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""`Callable` providers examples."""
-
-from objects.providers import Callable
-from objects.injections import KwArg
-
-
-class SomeCrypt(object):
-
-    """Example class SomeCrypt."""
-
-    @staticmethod
-    def encrypt(data, password):
-        """Encypt data using password."""
-        return ''.join((password, data, password))
-
-    @staticmethod
-    def decrypt(data, password):
-        """Decrypt data using password."""
-        return data[len(password):-len(password)]
-
-
-# Encrypt and decrypt function providers:
-encrypt = Callable(SomeCrypt.encrypt,
-                   KwArg('password', 'secret123'))
-decrypt = Callable(SomeCrypt.decrypt,
-                   KwArg('password', 'secret123'))
-
-# Making some asserts:
-initial_data = 'some_data'
-
-encrypted1 = encrypt(initial_data)
-decrypted1 = decrypt(encrypted1)
-
-assert decrypted1 == initial_data
-
-# Context keyword arguments priority example:
-encrypted2 = encrypt(initial_data, password='another_secret')
-decrypted2 = decrypt(encrypted2)
-
-assert decrypted2 != initial_data

From 295c6b56eba0c038d6502b919aa41139e6566d04 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Wed, 15 Jul 2015 16:15:45 +0300
Subject: [PATCH 50/73] Removing of Callable provider docs

---
 docs/providers/callable.rst | 60 -------------------------------------
 docs/providers/index.rst    |  1 -
 2 files changed, 61 deletions(-)
 delete mode 100644 docs/providers/callable.rst

diff --git a/docs/providers/callable.rst b/docs/providers/callable.rst
deleted file mode 100644
index 9d1b4b35..00000000
--- a/docs/providers/callable.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-Callable providers
-------------------
-
-``Callable`` provider is a provider that wraps particular callable with
-some injections. Every call of this provider returns result of call of initial
-callable.
-
-``Callable`` provider uses ``KwArg`` injections. ``KwArg`` injections are
-done by passing injectable values as keyword arguments during call time.
-
-Context keyword arguments have higher priority than ``KwArg`` injections.
-
-Example:
-
-.. image:: /images/callable.png
-    :width: 100%
-    :align: center
-
-.. code-block:: python
-
-    """`Callable` providers examples."""
-
-    from objects.providers import Callable
-    from objects.injections import KwArg
-
-
-    class SomeCrypt(object):
-
-        """Example class SomeCrypt."""
-
-        @staticmethod
-        def encrypt(data, password):
-            """Encypt data using password."""
-            return ''.join((password, data, password))
-
-        @staticmethod
-        def decrypt(data, password):
-            """Decrypt data using password."""
-            return data[len(password):-len(password)]
-
-
-    # Encrypt and decrypt function providers:
-    encrypt = Callable(SomeCrypt.encrypt,
-                       KwArg('password', 'secret123'))
-    decrypt = Callable(SomeCrypt.decrypt,
-                       KwArg('password', 'secret123'))
-
-    # Making some asserts:
-    initial_data = 'some_data'
-
-    encrypted1 = encrypt(initial_data)
-    decrypted1 = decrypt(encrypted1)
-
-    assert decrypted1 == initial_data
-
-    # Context keyword arguments priority example:
-    encrypted2 = encrypt(initial_data, password='another_secret')
-    decrypted2 = decrypt(encrypted2)
-
-    assert decrypted2 != initial_data
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 070c57c7..1b5eab00 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -11,6 +11,5 @@ All providers are callable. They describe how particular objects are provided.
     factory
     singleton
     static
-    callable
     external_dependency
     delegation

From 54eb60698b4e9f6e6090ef1bc450b720b51adfc5 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Thu, 16 Jul 2015 00:48:30 +0300
Subject: [PATCH 51/73] Reverting removing of Callable docs

---
 docs/providers/callable.rst | 60 +++++++++++++++++++++++++++++++++++++
 docs/providers/index.rst    |  1 +
 2 files changed, 61 insertions(+)
 create mode 100644 docs/providers/callable.rst

diff --git a/docs/providers/callable.rst b/docs/providers/callable.rst
new file mode 100644
index 00000000..9d1b4b35
--- /dev/null
+++ b/docs/providers/callable.rst
@@ -0,0 +1,60 @@
+Callable providers
+------------------
+
+``Callable`` provider is a provider that wraps particular callable with
+some injections. Every call of this provider returns result of call of initial
+callable.
+
+``Callable`` provider uses ``KwArg`` injections. ``KwArg`` injections are
+done by passing injectable values as keyword arguments during call time.
+
+Context keyword arguments have higher priority than ``KwArg`` injections.
+
+Example:
+
+.. image:: /images/callable.png
+    :width: 100%
+    :align: center
+
+.. code-block:: python
+
+    """`Callable` providers examples."""
+
+    from objects.providers import Callable
+    from objects.injections import KwArg
+
+
+    class SomeCrypt(object):
+
+        """Example class SomeCrypt."""
+
+        @staticmethod
+        def encrypt(data, password):
+            """Encypt data using password."""
+            return ''.join((password, data, password))
+
+        @staticmethod
+        def decrypt(data, password):
+            """Decrypt data using password."""
+            return data[len(password):-len(password)]
+
+
+    # Encrypt and decrypt function providers:
+    encrypt = Callable(SomeCrypt.encrypt,
+                       KwArg('password', 'secret123'))
+    decrypt = Callable(SomeCrypt.decrypt,
+                       KwArg('password', 'secret123'))
+
+    # Making some asserts:
+    initial_data = 'some_data'
+
+    encrypted1 = encrypt(initial_data)
+    decrypted1 = decrypt(encrypted1)
+
+    assert decrypted1 == initial_data
+
+    # Context keyword arguments priority example:
+    encrypted2 = encrypt(initial_data, password='another_secret')
+    decrypted2 = decrypt(encrypted2)
+
+    assert decrypted2 != initial_data
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 1b5eab00..070c57c7 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -11,5 +11,6 @@ All providers are callable. They describe how particular objects are provided.
     factory
     singleton
     static
+    callable
     external_dependency
     delegation

From 67fb4181f4294487d63261902d12632591cc01f5 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Thu, 16 Jul 2015 00:49:20 +0300
Subject: [PATCH 52/73] Reverting of removing callable provider example

---
 examples/providers/callable.py | 40 ++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 examples/providers/callable.py

diff --git a/examples/providers/callable.py b/examples/providers/callable.py
new file mode 100644
index 00000000..73654eb4
--- /dev/null
+++ b/examples/providers/callable.py
@@ -0,0 +1,40 @@
+"""`Callable` providers examples."""
+
+from objects.providers import Callable
+from objects.injections import KwArg
+
+
+class SomeCrypt(object):
+
+    """Example class SomeCrypt."""
+
+    @staticmethod
+    def encrypt(data, password):
+        """Encypt data using password."""
+        return ''.join((password, data, password))
+
+    @staticmethod
+    def decrypt(data, password):
+        """Decrypt data using password."""
+        return data[len(password):-len(password)]
+
+
+# Encrypt and decrypt function providers:
+encrypt = Callable(SomeCrypt.encrypt,
+                   KwArg('password', 'secret123'))
+decrypt = Callable(SomeCrypt.decrypt,
+                   KwArg('password', 'secret123'))
+
+# Making some asserts:
+initial_data = 'some_data'
+
+encrypted1 = encrypt(initial_data)
+decrypted1 = decrypt(encrypted1)
+
+assert decrypted1 == initial_data
+
+# Context keyword arguments priority example:
+encrypted2 = encrypt(initial_data, password='another_secret')
+decrypted2 = decrypt(encrypted2)
+
+assert decrypted2 != initial_data

From ec808b136188ab8b36a8b41ff3ba9f42f0981a92 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Thu, 16 Jul 2015 02:39:21 +0300
Subject: [PATCH 53/73] Updating callable docs

---
 docs/images/callable.png       | Bin 15150 -> 39392 bytes
 docs/providers/callable.rst    |  46 +++++++++------------------------
 examples/providers/callable.py |  46 +++++++++------------------------
 3 files changed, 24 insertions(+), 68 deletions(-)

diff --git a/docs/images/callable.png b/docs/images/callable.png
index 67a7e492f5321770e88ac57027ec61beafe9397a..5dec3a6564c9a0e8aab4adf8036c8fabf3931e46 100644
GIT binary patch
literal 39392
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

literal 15150
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

diff --git a/docs/providers/callable.rst b/docs/providers/callable.rst
index 9d1b4b35..a9091e99 100644
--- a/docs/providers/callable.rst
+++ b/docs/providers/callable.rst
@@ -18,43 +18,21 @@ Example:
 
 .. code-block:: python
 
-    """`Callable` providers examples."""
+    """`Callable` providers example."""
+
+    from passlib.hash import sha256_crypt
 
     from objects.providers import Callable
     from objects.injections import KwArg
 
 
-    class SomeCrypt(object):
+    # Password hasher and verifier providers (hash function could be changed
+    # anytime (for example, to sha512) without any changes in client's code):
+    password_hasher = Callable(sha256_crypt.encrypt,
+                               KwArg('salt_size', 16),
+                               KwArg('rounds', 10000))
+    password_verifier = Callable(sha256_crypt.verify)
 
-        """Example class SomeCrypt."""
-
-        @staticmethod
-        def encrypt(data, password):
-            """Encypt data using password."""
-            return ''.join((password, data, password))
-
-        @staticmethod
-        def decrypt(data, password):
-            """Decrypt data using password."""
-            return data[len(password):-len(password)]
-
-
-    # Encrypt and decrypt function providers:
-    encrypt = Callable(SomeCrypt.encrypt,
-                       KwArg('password', 'secret123'))
-    decrypt = Callable(SomeCrypt.decrypt,
-                       KwArg('password', 'secret123'))
-
-    # Making some asserts:
-    initial_data = 'some_data'
-
-    encrypted1 = encrypt(initial_data)
-    decrypted1 = decrypt(encrypted1)
-
-    assert decrypted1 == initial_data
-
-    # Context keyword arguments priority example:
-    encrypted2 = encrypt(initial_data, password='another_secret')
-    decrypted2 = decrypt(encrypted2)
-
-    assert decrypted2 != initial_data
+    # Making some asserts (client's code):
+    hashed_password = password_hasher('super secret')
+    assert password_verifier('super secret', hashed_password)
diff --git a/examples/providers/callable.py b/examples/providers/callable.py
index 73654eb4..a85023dc 100644
--- a/examples/providers/callable.py
+++ b/examples/providers/callable.py
@@ -1,40 +1,18 @@
-"""`Callable` providers examples."""
+"""`Callable` providers example."""
+
+from passlib.hash import sha256_crypt
 
 from objects.providers import Callable
 from objects.injections import KwArg
 
 
-class SomeCrypt(object):
+# Password hasher and verifier providers (hash function could be changed
+# anytime (for example, to sha512) without any changes in client's code):
+password_hasher = Callable(sha256_crypt.encrypt,
+                           KwArg('salt_size', 16),
+                           KwArg('rounds', 10000))
+password_verifier = Callable(sha256_crypt.verify)
 
-    """Example class SomeCrypt."""
-
-    @staticmethod
-    def encrypt(data, password):
-        """Encypt data using password."""
-        return ''.join((password, data, password))
-
-    @staticmethod
-    def decrypt(data, password):
-        """Decrypt data using password."""
-        return data[len(password):-len(password)]
-
-
-# Encrypt and decrypt function providers:
-encrypt = Callable(SomeCrypt.encrypt,
-                   KwArg('password', 'secret123'))
-decrypt = Callable(SomeCrypt.decrypt,
-                   KwArg('password', 'secret123'))
-
-# Making some asserts:
-initial_data = 'some_data'
-
-encrypted1 = encrypt(initial_data)
-decrypted1 = decrypt(encrypted1)
-
-assert decrypted1 == initial_data
-
-# Context keyword arguments priority example:
-encrypted2 = encrypt(initial_data, password='another_secret')
-decrypted2 = decrypt(encrypted2)
-
-assert decrypted2 != initial_data
+# Making some asserts (client's code):
+hashed_password = password_hasher('super secret')
+assert password_verifier('super secret', hashed_password)

From 839888f445fe62f6493819c70d34a793b3e7a160 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Thu, 16 Jul 2015 02:50:55 +0300
Subject: [PATCH 54/73] Adding some minor updates for providers delegation
 example

---
 docs/providers/delegation.rst    | 5 +++--
 examples/providers/delegation.py | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/docs/providers/delegation.rst b/docs/providers/delegation.rst
index 585dcdc1..cde345a3 100644
--- a/docs/providers/delegation.rst
+++ b/docs/providers/delegation.rst
@@ -9,6 +9,7 @@ Example:
 
     from objects.providers import Factory
     from objects.providers import Singleton
+    from objects.providers import Delegate
 
     from objects.injections import KwArg
 
@@ -38,7 +39,7 @@ Example:
         def __init__(self, users_factory):
             """Initializer.
 
-            :param users_factory: objects.providers.Factory
+            :param users_factory: (objects.providers.Factory) -> User
             :return:
             """
             self.users_factory = users_factory
@@ -60,7 +61,7 @@ Example:
     # Users factory and UserService provider:
     users_factory = Factory(User)
     users_service = Singleton(UserService,
-                              KwArg('users_factory', users_factory.delegate()))
+                              KwArg('users_factory', Delegate(users_factory)))
 
 
     # Creating several User objects:
diff --git a/examples/providers/delegation.py b/examples/providers/delegation.py
index cfaff6d8..2d8501d4 100644
--- a/examples/providers/delegation.py
+++ b/examples/providers/delegation.py
@@ -2,6 +2,7 @@
 
 from objects.providers import Factory
 from objects.providers import Singleton
+from objects.providers import Delegate
 
 from objects.injections import KwArg
 
@@ -31,7 +32,7 @@ class UserService(object):
     def __init__(self, users_factory):
         """Initializer.
 
-        :param users_factory: objects.providers.Factory
+        :param users_factory: (objects.providers.Factory) -> User
         :return:
         """
         self.users_factory = users_factory
@@ -53,7 +54,7 @@ class UserService(object):
 # Users factory and UserService provider:
 users_factory = Factory(User)
 users_service = Singleton(UserService,
-                          KwArg('users_factory', users_factory.delegate()))
+                          KwArg('users_factory', Delegate(users_factory)))
 
 
 # Creating several User objects:

From 3b9d36f2d2bf74c2d6a094c8524a5174f103afa4 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 17 Jul 2015 10:01:27 +0300
Subject: [PATCH 55/73] Adding fixes for ExternalDependecy provider docs

---
 docs/images/external_dependency.png       | Bin 40801 -> 41683 bytes
 docs/providers/extending.rst              |   2 ++
 docs/providers/external_dependency.rst    |  17 +++++++++--------
 docs/providers/index.rst                  |   1 +
 examples/providers/external_dependency.py |  10 ++++++----
 5 files changed, 18 insertions(+), 12 deletions(-)
 create mode 100644 docs/providers/extending.rst

diff --git a/docs/images/external_dependency.png b/docs/images/external_dependency.png
index 317903ecbbd1265e7219e20b8473939ad8779e10..4195412e54f21eaf2866b50b2e65822abe707d70 100644
GIT binary patch
literal 41683
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

literal 40801
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
G{r>{xzLQ7*

diff --git a/docs/providers/extending.rst b/docs/providers/extending.rst
new file mode 100644
index 00000000..fd272267
--- /dev/null
+++ b/docs/providers/extending.rst
@@ -0,0 +1,2 @@
+Extending of providers
+----------------------
diff --git a/docs/providers/external_dependency.rst b/docs/providers/external_dependency.rst
index ebbdd800..91fd629c 100644
--- a/docs/providers/external_dependency.rst
+++ b/docs/providers/external_dependency.rst
@@ -20,7 +20,7 @@ because they would be able to find right place / right way for doing this
 in their application's architectures.
 
 At the same time, you can be sure, that your external dependency will be
-satisfied by appropriate instance.
+satisfied with appropriate instance.
 
 
 Example:
@@ -32,8 +32,8 @@ Example:
     dependency on database connection, which can be satisfied with any
     DBAPI 2.0 database connection. Being a self-sufficient library,
     ``UserService`` doesn't hardcode any kind of database management logic.
-    Instead of this, ``UserService`` provides external dependency, that has to
-    be satisfied out of library's scope.
+    Instead of this, ``UserService`` has external dependency, that has to
+    be satisfied by cleint's code, out of library's scope.
 
 .. image:: /images/external_dependency.png
 
@@ -58,12 +58,14 @@ Example:
 
         """Example class UserService.
 
-        UserService has dependency on DBAPI 2.0 database connection."""
+        UserService has dependency on DBAPI 2.0 database connection.
+        """
 
         def __init__(self, database):
             """Initializer.
 
-            Database dependency need to be injected via init arg."""
+            Database dependency need to be injected via init arg.
+            """
             self.database = database
 
         def init_database(self):
@@ -90,14 +92,14 @@ Example:
 
 
     # Database and UserService providers:
-    database = ExternalDependency(instance_of=sqlite3.Connection)
+    database = ExternalDependency(instance_of=sqlite3.dbapi2.Connection)
     users_service_factory = Factory(UserService,
                                     KwArg('database', database))
 
     # Out of library's scope.
     #
     # Setting database provider:
-    database.provided_by(Singleton(sqlite3.Connection,
+    database.provided_by(Singleton(sqlite3.dbapi2.Connection,
                                    KwArg('database', ':memory:'),
                                    KwArg('timeout', 30),
                                    KwArg('detect_types', True),
@@ -117,4 +119,3 @@ Example:
     # Making some asserts:
     assert test_user['id'] == 1
     assert test_user['name'] == 'test_user'
-
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 070c57c7..352d73e7 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -14,3 +14,4 @@ All providers are callable. They describe how particular objects are provided.
     callable
     external_dependency
     delegation
+    extending
diff --git a/examples/providers/external_dependency.py b/examples/providers/external_dependency.py
index c4b3ef04..796be0e3 100644
--- a/examples/providers/external_dependency.py
+++ b/examples/providers/external_dependency.py
@@ -17,12 +17,14 @@ class UserService(object):
 
     """Example class UserService.
 
-    UserService has dependency on DBAPI 2.0 database connection."""
+    UserService has dependency on DBAPI 2.0 database connection.
+    """
 
     def __init__(self, database):
         """Initializer.
 
-        Database dependency need to be injected via init arg."""
+        Database dependency need to be injected via init arg.
+        """
         self.database = database
 
     def init_database(self):
@@ -49,14 +51,14 @@ class UserService(object):
 
 
 # Database and UserService providers:
-database = ExternalDependency(instance_of=sqlite3.Connection)
+database = ExternalDependency(instance_of=sqlite3.dbapi2.Connection)
 users_service_factory = Factory(UserService,
                                 KwArg('database', database))
 
 # Out of library's scope.
 #
 # Setting database provider:
-database.provided_by(Singleton(sqlite3.Connection,
+database.provided_by(Singleton(sqlite3.dbapi2.Connection,
                                KwArg('database', ':memory:'),
                                KwArg('timeout', 30),
                                KwArg('detect_types', True),

From 0e272f9d58d0048ba3c3d6337d4e611f664836c6 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 17 Jul 2015 19:31:44 +0300
Subject: [PATCH 56/73] Refactoring of Catalog using metaclass

---
 objects/catalog.py    | 52 +++++++++++++++++++++++++++++--------------
 tests/test_catalog.py | 41 +++++++++++++++++++++++++---------
 2 files changed, 65 insertions(+), 28 deletions(-)

diff --git a/objects/catalog.py b/objects/catalog.py
index 75b34e1d..490d752a 100644
--- a/objects/catalog.py
+++ b/objects/catalog.py
@@ -1,14 +1,38 @@
 """Catalog module."""
 
-from .providers import Provider
+from six import iteritems
+
 from .errors import Error
+from .utils import is_provider
+
+
+class CatalogMetaClass(type):
+
+    """Providers catalog meta class."""
+
+    def __new__(mcs, class_name, bases, attributes):
+        """Meta class factory."""
+        providers = dict()
+        new_attributes = dict()
+        for name, value in attributes.iteritems():
+            if is_provider(value):
+                providers[name] = value
+            new_attributes[name] = value
+
+        cls = type.__new__(mcs, class_name, bases, new_attributes)
+        cls.providers = cls.providers.copy()
+        cls.providers.update(providers)
+        return cls
 
 
 class AbstractCatalog(object):
 
-    """Abstract object provides catalog."""
+    """Abstract providers catalog."""
 
-    __slots__ = ('__used_providers__',)
+    providers = dict()
+
+    __slots__ = ('providers', '__used_providers__',)
+    __metaclass__ = CatalogMetaClass
 
     def __init__(self, *used_providers):
         """Initializer."""
@@ -17,7 +41,7 @@ class AbstractCatalog(object):
     def __getattribute__(self, item):
         """Return providers."""
         attribute = super(AbstractCatalog, self).__getattribute__(item)
-        if item in ('__used_providers__',):
+        if item in ('providers', '__used_providers__',):
             return attribute
 
         if attribute not in self.__used_providers__:
@@ -26,15 +50,11 @@ class AbstractCatalog(object):
         return attribute
 
     @classmethod
-    def all_providers(cls, provider_type=Provider):
-        """Return set of all class providers."""
-        providers = set()
-        for attr_name in set(dir(cls)) - set(dir(AbstractCatalog)):
-            provider = getattr(cls, attr_name)
-            if not isinstance(provider, provider_type):
-                continue
-            providers.add((attr_name, provider))
-        return providers
+    def filter(cls, provider_type):
+        """Return dict of providers, that are instance of provided type."""
+        return dict([(name, provider)
+                     for name, provider in iteritems(cls.providers)
+                     if isinstance(provider, provider_type)])
 
     @classmethod
     def override(cls, overriding):
@@ -42,7 +62,5 @@ class AbstractCatalog(object):
 
         :type overriding: AbstractCatalog
         """
-        overridden = overriding.all_providers() - cls.all_providers()
-        for name, provider in overridden:
-            overridden_provider = getattr(cls, name)
-            overridden_provider.override(provider)
+        for name, provider in iteritems(overriding.providers):
+            cls.providers[name].override(provider)
diff --git a/tests/test_catalog.py b/tests/test_catalog.py
index cc0baf8b..16bedf1c 100644
--- a/tests/test_catalog.py
+++ b/tests/test_catalog.py
@@ -33,19 +33,38 @@ class CatalogTests(unittest.TestCase):
 
     def test_all_providers(self):
         """Test getting of all catalog providers."""
-        all_providers = self.Catalog.all_providers()
-        all_providers_dict = dict(all_providers)
+        self.assertTrue(len(self.Catalog.providers) == 2)
 
-        self.assertIsInstance(all_providers, set)
-        self.assertTrue(len(all_providers) == 2)
+        self.assertIn('obj', self.Catalog.providers)
+        self.assertIn(self.Catalog.obj, self.Catalog.providers.values())
 
-        self.assertIn('obj', all_providers_dict)
-        self.assertIn(self.Catalog.obj, all_providers_dict.values())
-
-        self.assertIn('another_obj', all_providers_dict)
-        self.assertIn(self.Catalog.another_obj, all_providers_dict.values())
+        self.assertIn('another_obj', self.Catalog.providers)
+        self.assertIn(self.Catalog.another_obj,
+                      self.Catalog.providers.values())
 
     def test_all_providers_by_type(self):
         """Test getting of all catalog providers of specific type."""
-        self.assertTrue(len(self.Catalog.all_providers(Object)) == 2)
-        self.assertTrue(len(self.Catalog.all_providers(Value)) == 0)
+        self.assertTrue(len(self.Catalog.filter(Object)) == 2)
+        self.assertTrue(len(self.Catalog.filter(Value)) == 0)
+
+    def test_metaclass_with_several_catalogs(self):
+        """Test that metaclass work well with several catalogs."""
+        class Catalog1(AbstractCatalog):
+
+            """Catalog1."""
+
+            provider = Object(object())
+
+        class Catalog2(AbstractCatalog):
+
+            """Catalog2."""
+
+            provider = Object(object())
+
+        self.assertTrue(len(Catalog1.providers) == 1)
+        self.assertIs(Catalog1.provider, Catalog1.providers['provider'])
+
+        self.assertTrue(len(Catalog2.providers) == 1)
+        self.assertIs(Catalog2.provider, Catalog2.providers['provider'])
+
+        self.assertIsNot(Catalog1.provider, Catalog2.provider)

From 71101d98f88b3cad14aabe98f54d01100a61f02a Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 17 Jul 2015 19:39:54 +0300
Subject: [PATCH 57/73] Fixing py3 errors after recatoring of Catalog using
 metaclasses

---
 objects/catalog.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/objects/catalog.py b/objects/catalog.py
index 490d752a..f4df7e04 100644
--- a/objects/catalog.py
+++ b/objects/catalog.py
@@ -1,6 +1,7 @@
 """Catalog module."""
 
 from six import iteritems
+from six import add_metaclass
 
 from .errors import Error
 from .utils import is_provider
@@ -25,14 +26,14 @@ class CatalogMetaClass(type):
         return cls
 
 
+@add_metaclass(CatalogMetaClass)
 class AbstractCatalog(object):
 
     """Abstract providers catalog."""
 
     providers = dict()
 
-    __slots__ = ('providers', '__used_providers__',)
-    __metaclass__ = CatalogMetaClass
+    __slots__ = ('__used_providers__',)
 
     def __init__(self, *used_providers):
         """Initializer."""

From ab5bc6a503c8a5234676d307aafecf23508c6e70 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 17 Jul 2015 19:42:59 +0300
Subject: [PATCH 58/73] Fixing bad for py3 dict.iteritems() usage after
 refactoring of Catalog using metaclasses

---
 objects/catalog.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/objects/catalog.py b/objects/catalog.py
index f4df7e04..57c08952 100644
--- a/objects/catalog.py
+++ b/objects/catalog.py
@@ -15,7 +15,7 @@ class CatalogMetaClass(type):
         """Meta class factory."""
         providers = dict()
         new_attributes = dict()
-        for name, value in attributes.iteritems():
+        for name, value in iteritems(attributes):
             if is_provider(value):
                 providers[name] = value
             new_attributes[name] = value

From 92a598279273638d1b5f08c74a3042b1d9a268bb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Mon, 20 Jul 2015 12:58:51 +0300
Subject: [PATCH 59/73] Replaceing pypip.in badges with shields.io ones

---
 README.rst     | 10 +++++-----
 docs/index.rst | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/README.rst b/README.rst
index 99e33eda..beb6e77b 100644
--- a/README.rst
+++ b/README.rst
@@ -4,20 +4,20 @@ Objects
 Dependency injection framework for Python projects.
 
 +---------------------------------------+-------------------------------------------------------------------+
-| *PyPi*                                | .. image:: https://pypip.in/version/Objects/badge.svg             |
+| *PyPi*                                | .. image:: https://img.shields.io/pypi/v/Objects.svg              |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Latest Version                                           |
-|                                       | .. image:: https://pypip.in/download/Objects/badge.svg            |
+|                                       | .. image:: https://img.shields.io/pypi/dm/Objects.svg             |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Downloads                                                |
-|                                       | .. image:: https://pypip.in/license/Objects/badge.svg             |
+|                                       | .. image:: https://img.shields.io/pypi/l/Objects.svg              |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: License                                                  |
 +---------------------------------------+-------------------------------------------------------------------+
-| *Python versions and implementations* | .. image:: https://pypip.in/py_versions/Objects/badge.svg         |
+| *Python versions and implementations* | .. image:: https://img.shields.io/pypi/pyversions/Objects.svg     |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Supported Python versions                                |
-|                                       | .. image:: https://pypip.in/implementation/Objects/badge.svg      |
+|                                       | .. image:: https://img.shields.io/pypi/implementation/Objects.svg |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Supported Python implementations                         |
 +---------------------------------------+-------------------------------------------------------------------+
diff --git a/docs/index.rst b/docs/index.rst
index c35ee4de..301fa0cf 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -4,20 +4,20 @@ Objects
 Dependency injection framework for Python projects.
 
 +---------------------------------------+-------------------------------------------------------------------+
-| *PyPi*                                | .. image:: https://pypip.in/version/Objects/badge.svg             |
+| *PyPi*                                | .. image:: https://img.shields.io/pypi/v/Objects.svg              |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Latest Version                                           |
-|                                       | .. image:: https://pypip.in/download/Objects/badge.svg            |
+|                                       | .. image:: https://img.shields.io/pypi/dm/Objects.svg             |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Downloads                                                |
-|                                       | .. image:: https://pypip.in/license/Objects/badge.svg             |
+|                                       | .. image:: https://img.shields.io/pypi/l/Objects.svg              |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: License                                                  |
 +---------------------------------------+-------------------------------------------------------------------+
-| *Python versions and implementations* | .. image:: https://pypip.in/py_versions/Objects/badge.svg         |
+| *Python versions and implementations* | .. image:: https://img.shields.io/pypi/pyversions/Objects.svg     |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Supported Python versions                                |
-|                                       | .. image:: https://pypip.in/implementation/Objects/badge.svg      |
+|                                       | .. image:: https://img.shields.io/pypi/implementation/Objects.svg |
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Supported Python implementations                         |
 +---------------------------------------+-------------------------------------------------------------------+

From 311c15d389001343176c287c25572c043475addc Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Mon, 20 Jul 2015 13:00:03 +0300
Subject: [PATCH 60/73] Fixing minor typos in heading table

---
 README.rst     | 2 +-
 docs/index.rst | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.rst b/README.rst
index beb6e77b..0066048a 100644
--- a/README.rst
+++ b/README.rst
@@ -21,7 +21,7 @@ Dependency injection framework for Python projects.
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Supported Python implementations                         |
 +---------------------------------------+-------------------------------------------------------------------+
-| *Builds and test coverage*            | .. image:: https://travis-ci.org/rmk135/objects.svg?branch=master |
+| *Builds and tests coverage*           | .. image:: https://travis-ci.org/rmk135/objects.svg?branch=master |
 |                                       |    :target: https://travis-ci.org/rmk135/objects                  |
 |                                       |    :alt: Build Status                                             |
 |                                       | .. image:: https://coveralls.io/repos/rmk135/objects/badge.svg    |
diff --git a/docs/index.rst b/docs/index.rst
index 301fa0cf..b766bd5f 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -21,7 +21,7 @@ Dependency injection framework for Python projects.
 |                                       |    :target: https://pypi.python.org/pypi/Objects/                 |
 |                                       |    :alt: Supported Python implementations                         |
 +---------------------------------------+-------------------------------------------------------------------+
-| *Builds and test coverage*            | .. image:: https://travis-ci.org/rmk135/objects.svg?branch=master |
+| *Builds and tests coverage*           | .. image:: https://travis-ci.org/rmk135/objects.svg?branch=master |
 |                                       |    :target: https://travis-ci.org/rmk135/objects                  |
 |                                       |    :alt: Build Status                                             |
 |                                       | .. image:: https://coveralls.io/repos/rmk135/objects/badge.svg    |

From 2690d9b9d4c7504b71c1f067fb5ff2790c766773 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Mon, 20 Jul 2015 18:46:45 +0300
Subject: [PATCH 61/73] Adding docs for factories delegation

---
 docs/images/factory_delegation.png            | Bin 0 -> 21495 bytes
 docs/providers/delegation.rst                 |  76 -----------
 docs/providers/factory.rst                    | 122 ++++++++++++++----
 docs/providers/index.rst                      |   1 -
 examples/providers/delegation.py              |  69 ----------
 examples/providers/factory.py                 |   1 -
 .../providers/factory_attribute_injections.py |  15 ++-
 examples/providers/factory_delegation.py      |  50 +++++++
 examples/providers/factory_init_injections.py |   1 -
 .../factory_init_injections_and_contexts.py   |  15 ++-
 .../providers/factory_method_injections.py    |  15 ++-
 11 files changed, 170 insertions(+), 195 deletions(-)
 create mode 100644 docs/images/factory_delegation.png
 delete mode 100644 docs/providers/delegation.rst
 delete mode 100644 examples/providers/delegation.py
 create mode 100644 examples/providers/factory_delegation.py

diff --git a/docs/images/factory_delegation.png b/docs/images/factory_delegation.png
new file mode 100644
index 0000000000000000000000000000000000000000..3aa652793e09235f6ffd0e86e88b8b46ee1acd6e
GIT binary patch
literal 21495
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
G=Dz@0YwEfH

literal 0
HcmV?d00001

diff --git a/docs/providers/delegation.rst b/docs/providers/delegation.rst
deleted file mode 100644
index cde345a3..00000000
--- a/docs/providers/delegation.rst
+++ /dev/null
@@ -1,76 +0,0 @@
-Providers delegation
---------------------
-
-Example:
-
-.. code-block:: python
-
-    """Providers delegation example."""
-
-    from objects.providers import Factory
-    from objects.providers import Singleton
-    from objects.providers import Delegate
-
-    from objects.injections import KwArg
-
-
-    class User(object):
-
-        """Example class User."""
-
-        def __init__(self, id, name):
-            """Initializer.
-
-            :param id: int
-            :param name: str
-            :return:
-            """
-            self.id = id
-            self.name = name
-
-
-    class UserService(object):
-
-        """Example class UserService.
-
-        UserService has dependency on users factory.
-        """
-
-        def __init__(self, users_factory):
-            """Initializer.
-
-            :param users_factory: (objects.providers.Factory) -> User
-            :return:
-            """
-            self.users_factory = users_factory
-
-        def get_by_id(self, id):
-            """Return user info by user id."""
-            return self.users_factory(id=id, name=self._get_name_from_db(id))
-
-        def _get_name_from_db(self, id):
-            """Return user's name from database by his id.
-
-            Main purpose of this method is just to show the fact of retrieving
-            some user's data from database, so, actually, it simulates work
-            with database just by merging constant string with provided user's id.
-            """
-            return ''.join(('user', str(id)))
-
-
-    # Users factory and UserService provider:
-    users_factory = Factory(User)
-    users_service = Singleton(UserService,
-                              KwArg('users_factory', Delegate(users_factory)))
-
-
-    # Creating several User objects:
-    user1 = users_service().get_by_id(1)
-    user2 = users_service().get_by_id(2)
-
-    # Making some asserts:
-    assert user1.id == 1
-    assert user1.name == 'user1'
-
-    assert user2.id == 2
-    assert user2.name == 'user2'
diff --git a/docs/providers/factory.rst b/docs/providers/factory.rst
index 24a78ca2..d8e13cb1 100644
--- a/docs/providers/factory.rst
+++ b/docs/providers/factory.rst
@@ -20,7 +20,6 @@ Nothing could be better than brief example:
 
         """Example class User."""
 
-
     # Factory provider creates new instance of specified class on every call.
     users_factory = Factory(User)
 
@@ -98,7 +97,6 @@ provided by another factories:
 
         """Example class Photo."""
 
-
     # User and Photo factories:
     photos_factory = Factory(Photo)
     users_factory = Factory(User,
@@ -118,7 +116,6 @@ provided by another factories:
     assert user1 is not user2
     assert user1.main_photo is not user2.main_photo
 
-
 Next example shows how ``Factory`` provider deals with positional and keyword
 ``__init__`` context arguments. In few words, ``Factory`` provider fully
 passes positional context arguments to class's ``__init__`` method, but
@@ -172,7 +169,6 @@ So, please, follow the example below:
 
         """Example class CreditCard."""
 
-
     # User, Photo and CreditCard factories:
     credit_cards_factory = Factory(CreditCard)
     photos_factory = Factory(Photo)
@@ -181,12 +177,14 @@ So, please, follow the example below:
                             KwArg('credit_card', credit_cards_factory))
 
     # Creating several User objects:
-    user1 = users_factory(1)  # Same as: user1 = User(1,
-                              #                       main_photo=Photo(),
-                              #                       credit_card=CreditCard())
-    user2 = users_factory(2)  # Same as: user2 = User(2,
-                              #                       main_photo=Photo(),
-                              #                       credit_card=CreditCard())
+    user1 = users_factory(1)
+    # Same as: user1 = User(1,
+    #                       main_photo=Photo(),
+    #                       credit_card=CreditCard())
+    user2 = users_factory(2)
+    # Same as: user2 = User(2,
+    #                       main_photo=Photo(),
+    #                       credit_card=CreditCard())
 
     # Making some asserts:
     assert user1.id == 1
@@ -211,7 +209,6 @@ So, please, follow the example below:
     assert user3.main_photo is main_photo_mock
     assert user3.credit_card is credit_card_mock
 
-
 Factory providers and attribute injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -250,7 +247,6 @@ Example:
 
         """Example class CreditCard."""
 
-
     # User, Photo and CreditCard factories:
     credit_cards_factory = Factory(CreditCard)
     photos_factory = Factory(Photo)
@@ -259,12 +255,14 @@ Example:
                             Attribute('credit_card', credit_cards_factory))
 
     # Creating several User objects:
-    user1 = users_factory()  # Same as: user1 = User()
-                             #          user1.main_photo = Photo()
-                             #          user1.credit_card = CreditCard()
-    user2 = users_factory()  # Same as: user2 = User()
-                             #          user2.main_photo = Photo()
-                             #          user2.credit_card = CreditCard()
+    user1 = users_factory()
+    # Same as: user1 = User()
+    #          user1.main_photo = Photo()
+    #          user1.credit_card = CreditCard()
+    user2 = users_factory()
+    # Same as: user2 = User()
+    #          user2.main_photo = Photo()
+    #          user2.credit_card = CreditCard()
 
     # Making some asserts:
     assert user1 is not user2
@@ -278,7 +276,6 @@ Example:
     assert user1.main_photo is not user2.main_photo
     assert user1.credit_card is not user2.credit_card
 
-
 Factory providers and method injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -330,7 +327,6 @@ Example:
 
         """Example class CreditCard."""
 
-
     # User, Photo and CreditCard factories:
     credit_cards_factory = Factory(CreditCard)
     photos_factory = Factory(Photo)
@@ -339,12 +335,14 @@ Example:
                             Method('set_credit_card', credit_cards_factory))
 
     # Creating several User objects:
-    user1 = users_factory()  # Same as: user1 = User()
-                             #          user1.set_main_photo(Photo())
-                             #          user1.set_credit_card(CreditCard())
-    user2 = users_factory()  # Same as: user2 = User()
-                             #          user2.set_main_photo(Photo())
-                             #          user2.set_credit_card(CreditCard())
+    user1 = users_factory()
+    # Same as: user1 = User()
+    #          user1.set_main_photo(Photo())
+    #          user1.set_credit_card(CreditCard())
+    user2 = users_factory()
+    # Same as: user2 = User()
+    #          user2.set_main_photo(Photo())
+    #          user2.set_credit_card(CreditCard())
 
     # Making some asserts:
     assert user1 is not user2
@@ -358,3 +356,75 @@ Example:
     assert user1.main_photo is not user2.main_photo
     assert user1.credit_card is not user2.credit_card
 
+Factory providers delegation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``Factory`` provider could be delegated to any other provider via any kind of 
+injection. Saying in other words, delegation of factories - is a way to inject
+factories themselves, instead of results of their calls. 
+
+As it was mentioned earlier, ``Injection`` calls ``Factory`` if ``Factory`` is
+injectable value. ``Factory`` delegation is performed by wrapping delegated 
+``Factory`` into special provider type -  ``Delegate``, that just returns 
+``Factory`` itself.
+
+Another one, more *convenient*, method of creating ``Delegate`` for ``Factory``
+is just calling ``Factory.delegate()`` method that returns delegate for current
+factory. 
+
+Example:
+
+.. image:: /images/factory_delegation.png
+
+.. code-block:: python
+
+    """`Factory` providers delegation example."""
+
+    from objects.providers import Factory
+    from objects.injections import KwArg
+
+
+    class User(object):
+
+        """Example class User."""
+
+        def __init__(self, photos_factory):
+            """Initializer.
+
+            :param photos_factory: objects.providers.Factory
+            :return:
+            """
+            self.photos_factory = photos_factory
+            self._main_photo = None
+            super(User, self).__init__()
+
+        @property
+        def main_photo(self):
+            """Return user's main photo."""
+            if not self._main_photo:
+                self._main_photo = self.photos_factory()
+            return self._main_photo
+
+
+    class Photo(object):
+
+        """Example class Photo."""
+
+    # User and Photo factories:
+    photos_factory = Factory(Photo)
+    users_factory = Factory(User,
+                            KwArg('photos_factory', photos_factory.delegate()))
+
+    # Creating several User objects:
+    user1 = users_factory()
+    user2 = users_factory()
+
+    # Making some asserts:
+    assert isinstance(user1, User)
+    assert isinstance(user1.main_photo, Photo)
+
+    assert isinstance(user2, User)
+    assert isinstance(user2.main_photo, Photo)
+
+    assert user1 is not user2
+    assert user1.main_photo is not user2.main_photo
diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index 352d73e7..aa0b2eba 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -13,5 +13,4 @@ All providers are callable. They describe how particular objects are provided.
     static
     callable
     external_dependency
-    delegation
     extending
diff --git a/examples/providers/delegation.py b/examples/providers/delegation.py
deleted file mode 100644
index 2d8501d4..00000000
--- a/examples/providers/delegation.py
+++ /dev/null
@@ -1,69 +0,0 @@
-"""Providers delegation example."""
-
-from objects.providers import Factory
-from objects.providers import Singleton
-from objects.providers import Delegate
-
-from objects.injections import KwArg
-
-
-class User(object):
-
-    """Example class User."""
-
-    def __init__(self, id, name):
-        """Initializer.
-
-        :param id: int
-        :param name: str
-        :return:
-        """
-        self.id = id
-        self.name = name
-
-
-class UserService(object):
-
-    """Example class UserService.
-
-    UserService has dependency on users factory.
-    """
-
-    def __init__(self, users_factory):
-        """Initializer.
-
-        :param users_factory: (objects.providers.Factory) -> User
-        :return:
-        """
-        self.users_factory = users_factory
-
-    def get_by_id(self, id):
-        """Return user info by user id."""
-        return self.users_factory(id=id, name=self._get_name_from_db(id))
-
-    def _get_name_from_db(self, id):
-        """Return user's name from database by his id.
-
-        Main purpose of this method is just to show the fact of retrieving
-        some user's data from database, so, actually, it simulates work
-        with database just by merging constant string with provided user's id.
-        """
-        return ''.join(('user', str(id)))
-
-
-# Users factory and UserService provider:
-users_factory = Factory(User)
-users_service = Singleton(UserService,
-                          KwArg('users_factory', Delegate(users_factory)))
-
-
-# Creating several User objects:
-user1 = users_service().get_by_id(1)
-user2 = users_service().get_by_id(2)
-
-# Making some asserts:
-assert user1.id == 1
-assert user1.name == 'user1'
-
-assert user2.id == 2
-assert user2.name == 'user2'
diff --git a/examples/providers/factory.py b/examples/providers/factory.py
index 35532b4b..f1a48df2 100644
--- a/examples/providers/factory.py
+++ b/examples/providers/factory.py
@@ -7,7 +7,6 @@ class User(object):
 
     """Example class User."""
 
-
 # Factory provider creates new instance of specified class on every call.
 users_factory = Factory(User)
 
diff --git a/examples/providers/factory_attribute_injections.py b/examples/providers/factory_attribute_injections.py
index 1e5f1e79..f28c179e 100644
--- a/examples/providers/factory_attribute_injections.py
+++ b/examples/providers/factory_attribute_injections.py
@@ -23,7 +23,6 @@ class CreditCard(object):
 
     """Example class CreditCard."""
 
-
 # User, Photo and CreditCard factories:
 credit_cards_factory = Factory(CreditCard)
 photos_factory = Factory(Photo)
@@ -32,12 +31,14 @@ users_factory = Factory(User,
                         Attribute('credit_card', credit_cards_factory))
 
 # Creating several User objects:
-user1 = users_factory()  # Same as: user1 = User()
-                         #          user1.main_photo = Photo()
-                         #          user1.credit_card = CreditCard()
-user2 = users_factory()  # Same as: user2 = User()
-                         #          user2.main_photo = Photo()
-                         #          user2.credit_card = CreditCard()
+user1 = users_factory()
+# Same as: user1 = User()
+#          user1.main_photo = Photo()
+#          user1.credit_card = CreditCard()
+user2 = users_factory()
+# Same as: user2 = User()
+#          user2.main_photo = Photo()
+#          user2.credit_card = CreditCard()
 
 # Making some asserts:
 assert user1 is not user2
diff --git a/examples/providers/factory_delegation.py b/examples/providers/factory_delegation.py
new file mode 100644
index 00000000..d9fc33e0
--- /dev/null
+++ b/examples/providers/factory_delegation.py
@@ -0,0 +1,50 @@
+"""`Factory` providers delegation example."""
+
+from objects.providers import Factory
+from objects.injections import KwArg
+
+
+class User(object):
+
+    """Example class User."""
+
+    def __init__(self, photos_factory):
+        """Initializer.
+
+        :param photos_factory: objects.providers.Factory
+        :return:
+        """
+        self.photos_factory = photos_factory
+        self._main_photo = None
+        super(User, self).__init__()
+
+    @property
+    def main_photo(self):
+        """Return user's main photo."""
+        if not self._main_photo:
+            self._main_photo = self.photos_factory()
+        return self._main_photo
+
+
+class Photo(object):
+
+    """Example class Photo."""
+
+# User and Photo factories:
+photos_factory = Factory(Photo)
+users_factory = Factory(User,
+                        KwArg('photos_factory', photos_factory.delegate()))
+
+# Creating several User objects:
+user1 = users_factory()
+user2 = users_factory()
+
+# Making some asserts:
+assert isinstance(user1, User)
+assert isinstance(user1.main_photo, Photo)
+
+assert isinstance(user2, User)
+assert isinstance(user2.main_photo, Photo)
+
+assert user1 is not user2
+assert user1.main_photo is not user2.main_photo
diff --git a/examples/providers/factory_init_injections.py b/examples/providers/factory_init_injections.py
index 9d068ed3..18755eb9 100644
--- a/examples/providers/factory_init_injections.py
+++ b/examples/providers/factory_init_injections.py
@@ -22,7 +22,6 @@ class Photo(object):
 
     """Example class Photo."""
 
-
 # User and Photo factories:
 photos_factory = Factory(Photo)
 users_factory = Factory(User,
diff --git a/examples/providers/factory_init_injections_and_contexts.py b/examples/providers/factory_init_injections_and_contexts.py
index a43e5f5a..dcc39f35 100644
--- a/examples/providers/factory_init_injections_and_contexts.py
+++ b/examples/providers/factory_init_injections_and_contexts.py
@@ -39,7 +39,6 @@ class CreditCard(object):
 
     """Example class CreditCard."""
 
-
 # User, Photo and CreditCard factories:
 credit_cards_factory = Factory(CreditCard)
 photos_factory = Factory(Photo)
@@ -48,12 +47,14 @@ users_factory = Factory(User,
                         KwArg('credit_card', credit_cards_factory))
 
 # Creating several User objects:
-user1 = users_factory(1)  # Same as: user1 = User(1,
-                          #                       main_photo=Photo(),
-                          #                       credit_card=CreditCard())
-user2 = users_factory(2)  # Same as: user2 = User(2,
-                          #                       main_photo=Photo(),
-                          #                       credit_card=CreditCard())
+user1 = users_factory(1)
+# Same as: user1 = User(1,
+#                       main_photo=Photo(),
+#                       credit_card=CreditCard())
+user2 = users_factory(2)
+# Same as: user2 = User(2,
+#                       main_photo=Photo(),
+#                       credit_card=CreditCard())
 
 # Making some asserts:
 assert user1.id == 1
diff --git a/examples/providers/factory_method_injections.py b/examples/providers/factory_method_injections.py
index 83897a52..67acc041 100644
--- a/examples/providers/factory_method_injections.py
+++ b/examples/providers/factory_method_injections.py
@@ -31,7 +31,6 @@ class CreditCard(object):
 
     """Example class CreditCard."""
 
-
 # User, Photo and CreditCard factories:
 credit_cards_factory = Factory(CreditCard)
 photos_factory = Factory(Photo)
@@ -40,12 +39,14 @@ users_factory = Factory(User,
                         Method('set_credit_card', credit_cards_factory))
 
 # Creating several User objects:
-user1 = users_factory()  # Same as: user1 = User()
-                         #          user1.set_main_photo(Photo())
-                         #          user1.set_credit_card(CreditCard())
-user2 = users_factory()  # Same as: user2 = User()
-                         #          user2.set_main_photo(Photo())
-                         #          user2.set_credit_card(CreditCard())
+user1 = users_factory()
+# Same as: user1 = User()
+#          user1.set_main_photo(Photo())
+#          user1.set_credit_card(CreditCard())
+user2 = users_factory()
+# Same as: user2 = User()
+#          user2.set_main_photo(Photo())
+#          user2.set_credit_card(CreditCard())
 
 # Making some asserts:
 assert user1 is not user2

From 996fc4ecbf9b4c12f5b1b260631361a5e70054ab Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Mon, 20 Jul 2015 18:58:39 +0300
Subject: [PATCH 62/73] Updating singleton examples

---
 docs/providers/singleton.rst             | 4 ----
 examples/providers/singleton.py          | 1 -
 examples/providers/singleton_reseting.py | 1 -
 3 files changed, 6 deletions(-)

diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
index 2e62e813..dbe03bba 100644
--- a/docs/providers/singleton.rst
+++ b/docs/providers/singleton.rst
@@ -21,7 +21,6 @@ Example:
 
         """Example class UserService."""
 
-
     # Singleton provider creates new instance of specified class on first call and
     # returns same instance on every next call.
     users_service_provider = Singleton(UserService)
@@ -35,7 +34,6 @@ Example:
     assert isinstance(user_service1, UserService)
     assert isinstance(user_service2, UserService)
 
-
 Singleton providers and injections
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -84,7 +82,6 @@ Example:
 
         """Example class UserService."""
 
-
     # Users service singleton provider:
     users_service_provider = Singleton(UserService)
 
@@ -105,4 +102,3 @@ Example:
 
     # Making some asserts:
     assert user_service3 is not user_service1
-
diff --git a/examples/providers/singleton.py b/examples/providers/singleton.py
index 1f287b58..92caca00 100644
--- a/examples/providers/singleton.py
+++ b/examples/providers/singleton.py
@@ -7,7 +7,6 @@ class UserService(object):
 
     """Example class UserService."""
 
-
 # Singleton provider creates new instance of specified class on first call and
 # returns same instance on every next call.
 users_service_provider = Singleton(UserService)
diff --git a/examples/providers/singleton_reseting.py b/examples/providers/singleton_reseting.py
index a35fc6a8..be5780ef 100644
--- a/examples/providers/singleton_reseting.py
+++ b/examples/providers/singleton_reseting.py
@@ -7,7 +7,6 @@ class UserService(object):
 
     """Example class UserService."""
 
-
 # Users service singleton provider:
 users_service_provider = Singleton(UserService)
 

From 0efebb337f37b1dd8ecadc35354af731a53ebfeb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Mon, 20 Jul 2015 19:31:31 +0300
Subject: [PATCH 63/73] Adding explanation for Singleton and Callable providers
 delegation

---
 docs/providers/callable.rst                   | 35 +++++++++++++++++++
 docs/providers/singleton.rst                  | 30 ++++++++++++++++
 examples/providers/callable_delegation.py     | 16 +++++++++
 .../{callable.py => callable_injections.py}   |  0
 examples/providers/singleton_delegation.py    | 14 ++++++++
 5 files changed, 95 insertions(+)
 create mode 100644 examples/providers/callable_delegation.py
 rename examples/providers/{callable.py => callable_injections.py} (100%)
 create mode 100644 examples/providers/singleton_delegation.py

diff --git a/docs/providers/callable.rst b/docs/providers/callable.rst
index a9091e99..a2ca017e 100644
--- a/docs/providers/callable.rst
+++ b/docs/providers/callable.rst
@@ -5,6 +5,9 @@ Callable providers
 some injections. Every call of this provider returns result of call of initial
 callable.
 
+Callable providers and injections
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 ``Callable`` provider uses ``KwArg`` injections. ``KwArg`` injections are
 done by passing injectable values as keyword arguments during call time.
 
@@ -36,3 +39,35 @@ Example:
     # Making some asserts (client's code):
     hashed_password = password_hasher('super secret')
     assert password_verifier('super secret', hashed_password)
+
+Callable providers delegation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``Callable`` provider could be delegated to any other provider via any kind of
+injection. Delegation of ``Callable`` providers is the same as ``Factory`` and
+``Singleton`` providers delegation, please follow *Factory providers 
+delegation* section for example.
+
+``Callable`` delegate could be created obviously using 
+``Delegate(Callable())`` or by calling ``Callable.delegate()`` method.
+
+Example:
+
+.. code-block:: python
+
+    """`Callable` providers delegation example."""
+
+    import sys
+
+    from objects.providers import Callable
+    from objects.providers import Delegate
+
+
+    # Some callable provider and few delegates of it:
+    callable_provider = Callable(sys.exit)
+    callable_provider_delegate1 = callable_provider.delegate()
+    callable_provider_delegate2 = Delegate(callable_provider)
+
+    # Making some asserts:
+    assert callable_provider_delegate1() is callable_provider
+    assert callable_provider_delegate2() is callable_provider
diff --git a/docs/providers/singleton.rst b/docs/providers/singleton.rst
index dbe03bba..4da14692 100644
--- a/docs/providers/singleton.rst
+++ b/docs/providers/singleton.rst
@@ -102,3 +102,33 @@ Example:
 
     # Making some asserts:
     assert user_service3 is not user_service1
+
+Singleton providers delegation
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``Singleton`` provider could be delegated to any other provider via any kind of
+injection. Delegation of ``Singleton`` providers is the same as ``Factory``
+providers delegation, please follow *Factory providers delegation* section for
+example.
+
+``Singleton`` delegate could be created obviously using 
+``Delegate(Singleton())`` or by calling ``Singleton.delegate()`` method.
+
+Example:
+
+.. code-block:: python
+
+    """`Singleton` providers delegation example."""
+
+    from objects.providers import Singleton
+    from objects.providers import Delegate
+
+
+    # Some singleton provider and few delegates of it:
+    singleton_provider = Singleton(object)
+    singleton_provider_delegate1 = singleton_provider.delegate()
+    singleton_provider_delegate2 = Delegate(singleton_provider)
+
+    # Making some asserts:
+    assert singleton_provider_delegate1() is singleton_provider
+    assert singleton_provider_delegate2() is singleton_provider
diff --git a/examples/providers/callable_delegation.py b/examples/providers/callable_delegation.py
new file mode 100644
index 00000000..d8569afe
--- /dev/null
+++ b/examples/providers/callable_delegation.py
@@ -0,0 +1,16 @@
+"""`Callable` providers delegation example."""
+
+import sys
+
+from objects.providers import Callable
+from objects.providers import Delegate
+
+
+# Some callable provider and few delegates of it:
+callable_provider = Callable(sys.exit)
+callable_provider_delegate1 = callable_provider.delegate()
+callable_provider_delegate2 = Delegate(callable_provider)
+
+# Making some asserts:
+assert callable_provider_delegate1() is callable_provider
+assert callable_provider_delegate2() is callable_provider
diff --git a/examples/providers/callable.py b/examples/providers/callable_injections.py
similarity index 100%
rename from examples/providers/callable.py
rename to examples/providers/callable_injections.py
diff --git a/examples/providers/singleton_delegation.py b/examples/providers/singleton_delegation.py
new file mode 100644
index 00000000..9ca2fce9
--- /dev/null
+++ b/examples/providers/singleton_delegation.py
@@ -0,0 +1,14 @@
+"""`Singleton` providers delegation example."""
+
+from objects.providers import Singleton
+from objects.providers import Delegate
+
+
+# Some singleton provider and few delegates of it:
+singleton_provider = Singleton(object)
+singleton_provider_delegate1 = singleton_provider.delegate()
+singleton_provider_delegate2 = Delegate(singleton_provider)
+
+# Making some asserts:
+assert singleton_provider_delegate1() is singleton_provider
+assert singleton_provider_delegate2() is singleton_provider

From 7d3460debaf7fcb42964c8546b82fe657eaf0233 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Tue, 21 Jul 2015 09:29:50 +0300
Subject: [PATCH 64/73] Add functionality for resetting of last overriding
 provider

---
 objects/providers.py    | 17 +++++++-----
 tests/test_providers.py | 58 +++++++++++++++++++++++++++--------------
 2 files changed, 50 insertions(+), 25 deletions(-)

diff --git a/objects/providers.py b/objects/providers.py
index b7b4229f..f08efb99 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -47,18 +47,23 @@ class Provider(object):
         else:
             self.overridden = self.overridden + (ensure_is_provider(provider),)
 
-    def reset_override(self):
-        """Reset all overriding providers."""
-        self.overridden = None
-
     @property
     def last_overriding(self):
         """Return last overriding provider."""
         try:
             return self.overridden[-1]
         except (TypeError, IndexError):
-            raise Error('Provider {0} '.format(str(self)) +
-                        'is not overridden')
+            raise Error('Provider {0} is not overridden'.format(str(self)))
+
+    def reset_last_overriding(self):
+        """Reset last overriding provider."""
+        if not self.overridden:
+            raise Error('Provider {0} is not overridden'.format(str(self)))
+        self.overridden = self.overridden[:-1]
+
+    def reset_override(self):
+        """Reset all overriding providers."""
+        self.overridden = None
 
 
 class Delegate(Provider):
diff --git a/tests/test_providers.py b/tests/test_providers.py
index 26bddfa4..65c93676 100644
--- a/tests/test_providers.py
+++ b/tests/test_providers.py
@@ -63,25 +63,6 @@ class ProviderTests(unittest.TestCase):
         """Test provider overriding with not provider instance."""
         self.assertRaises(Error, self.provider.override, object())
 
-    def test_reset_override(self):
-        """Test reset of provider's override."""
-        overriding_provider = Provider()
-        self.provider.override(overriding_provider)
-
-        self.assertTrue(self.provider.overridden)
-        self.assertIs(self.provider.last_overriding, overriding_provider)
-
-        self.provider.reset_override()
-
-        self.assertFalse(self.provider.overridden)
-        try:
-            self.provider.last_overriding
-        except Error:
-            pass
-        else:
-            self.fail('Got en error in {}'.format(
-                str(self.test_last_overriding_of_not_overridden_provider)))
-
     def test_last_overriding(self):
         """Test getting last overriding provider."""
         overriding_provider1 = Provider()
@@ -103,6 +84,45 @@ class ProviderTests(unittest.TestCase):
             self.fail('Got en error in {}'.format(
                 str(self.test_last_overriding_of_not_overridden_provider)))
 
+    def test_reset_last_overriding(self):
+        """Test reseting of last overriding provider."""
+        overriding_provider1 = Provider()
+        overriding_provider2 = Provider()
+
+        self.provider.override(overriding_provider1)
+        self.provider.override(overriding_provider2)
+
+        self.assertIs(self.provider.last_overriding, overriding_provider2)
+
+        self.provider.reset_last_overriding()
+        self.assertIs(self.provider.last_overriding, overriding_provider1)
+
+        self.provider.reset_last_overriding()
+        self.assertFalse(self.provider.overridden)
+
+    def test_reset_last_overriding_of_not_overridden_provider(self):
+        """Test resetting of last overriding on not overridden provier."""
+        self.assertRaises(Error, self.provider.reset_last_overriding)
+
+    def test_reset_override(self):
+        """Test reset of provider's override."""
+        overriding_provider = Provider()
+        self.provider.override(overriding_provider)
+
+        self.assertTrue(self.provider.overridden)
+        self.assertIs(self.provider.last_overriding, overriding_provider)
+
+        self.provider.reset_override()
+
+        self.assertFalse(self.provider.overridden)
+        try:
+            self.provider.last_overriding
+        except Error:
+            pass
+        else:
+            self.fail('Got en error in {}'.format(
+                str(self.test_last_overriding_of_not_overridden_provider)))
+
 
 class DelegateTests(unittest.TestCase):
 

From 27441353d953b16ac81d1fae6231a45fd0f83081 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Tue, 21 Jul 2015 09:42:21 +0300
Subject: [PATCH 65/73] Updating coveralls job

---
 tox.ini | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tox.ini b/tox.ini
index 54d47a1f..0dec390e 100644
--- a/tox.ini
+++ b/tox.ini
@@ -18,6 +18,7 @@ commands=
 
 [testenv:coveralls]
 basepython=python2.7
+passenv=TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
 deps=
     {[testenv]deps}
     coverage
@@ -25,7 +26,7 @@ deps=
 commands=
     coverage erase
     coverage run --rcfile=./.coveragerc -m unittest2 discover tests []
-    coveralls
+    COVERALLS_REPO_TOKEN=k2btfiC678lpPikhQxZnyPbdI4RjxNE68 coveralls
 
 [testenv:pylint]
 basepython=python2.7

From 6b482d87e0ae1c180be375a419bca665768a42fb Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Tue, 21 Jul 2015 09:48:50 +0300
Subject: [PATCH 66/73] Removing coveralls key from tox job

---
 tox.ini | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tox.ini b/tox.ini
index 0dec390e..bb950ba9 100644
--- a/tox.ini
+++ b/tox.ini
@@ -26,7 +26,7 @@ deps=
 commands=
     coverage erase
     coverage run --rcfile=./.coveragerc -m unittest2 discover tests []
-    COVERALLS_REPO_TOKEN=k2btfiC678lpPikhQxZnyPbdI4RjxNE68 coveralls
+    coveralls
 
 [testenv:pylint]
 basepython=python2.7

From fd8be776350bcae5c411d0f274d842671cce20f3 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Tue, 21 Jul 2015 09:57:13 +0300
Subject: [PATCH 67/73] Provider overriding first pages

---
 docs/providers/index.rst      | 1 +
 docs/providers/overriding.rst | 4 ++++
 2 files changed, 5 insertions(+)
 create mode 100644 docs/providers/overriding.rst

diff --git a/docs/providers/index.rst b/docs/providers/index.rst
index aa0b2eba..2909d655 100644
--- a/docs/providers/index.rst
+++ b/docs/providers/index.rst
@@ -13,4 +13,5 @@ All providers are callable. They describe how particular objects are provided.
     static
     callable
     external_dependency
+    overriding
     extending
diff --git a/docs/providers/overriding.rst b/docs/providers/overriding.rst
new file mode 100644
index 00000000..e100fd0f
--- /dev/null
+++ b/docs/providers/overriding.rst
@@ -0,0 +1,4 @@
+Overriding of providers
+-----------------------
+
+Every provider could be overridden by another provider.

From 1b4c6dbf8b9e7003b872e12568ee276f2d7c812a Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Wed, 22 Jul 2015 10:26:34 +0300
Subject: [PATCH 68/73] Renaming of Provider.__provide__() ->
 Provider._provide() for improving providers extending

---
 objects/providers.py | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/objects/providers.py b/objects/providers.py
index f08efb99..16fca49e 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -25,9 +25,9 @@ class Provider(object):
         """Return provided instance."""
         if self.overridden:
             return self.last_overriding(*args, **kwargs)
-        return self.__provide__(*args, **kwargs)
+        return self._provide(*args, **kwargs)
 
-    def __provide__(self, *args, **kwargs):
+    def _provide(self, *args, **kwargs):
         """Providing strategy implementation.
 
         Abstract protected method that implements providing strategy of
@@ -80,7 +80,7 @@ class Delegate(Provider):
         self.delegated = ensure_is_provider(delegated)
         super(Delegate, self).__init__()
 
-    def __provide__(self, *args, **kwargs):
+    def _provide(self, *args, **kwargs):
         """Return provided instance."""
         return self.delegated
 
@@ -111,7 +111,7 @@ class Factory(Provider):
                               if is_method_injection(injection)))
         super(Factory, self).__init__()
 
-    def __provide__(self, *args, **kwargs):
+    def _provide(self, *args, **kwargs):
         """Return provided instance."""
         init_kwargs = dict(((injection.name, injection.value)
                             for injection in self.kwargs))
@@ -152,7 +152,7 @@ class Singleton(Provider):
         self.factory = Factory(*args, **kwargs)
         super(Singleton, self).__init__()
 
-    def __provide__(self, *args, **kwargs):
+    def _provide(self, *args, **kwargs):
         """Return provided instance."""
         if not self.instance:
             self.instance = self.factory(*args, **kwargs)
@@ -214,7 +214,7 @@ class _StaticProvider(Provider):
         self.provides = provides
         super(_StaticProvider, self).__init__()
 
-    def __provide__(self, *args, **kwargs):
+    def _provide(self, *args, **kwargs):
         """Return provided instance."""
         return self.provides
 
@@ -259,7 +259,7 @@ class Callable(Provider):
                                  if is_kwarg_injection(injection)))
         super(Callable, self).__init__()
 
-    def __provide__(self, *args, **kwargs):
+    def _provide(self, *args, **kwargs):
         """Return provided instance."""
         injections = dict(((injection.name, injection.value)
                            for injection in self.injections))
@@ -286,7 +286,11 @@ class Config(Provider):
         self.value = value
         super(Config, self).__init__()
 
-    def __provide__(self, paths=None):
+    def __getattr__(self, item):
+        """Return instance of deferred config."""
+        return _ChildConfig(parents=(item,), root_config=self)
+
+    def _provide(self, paths=None):
         """Return provided instance."""
         value = self.value
         if paths:
@@ -298,10 +302,6 @@ class Config(Provider):
                                 '"{0}" is undefined'.format('.'.join(paths)))
         return value
 
-    def __getattr__(self, item):
-        """Return instance of deferred config."""
-        return _ChildConfig(parents=(item,), root_config=self)
-
     def update_from(self, value):
         """Update current value from another one."""
         self.value.update(value)
@@ -323,11 +323,11 @@ class _ChildConfig(Provider):
         self.root_config = root_config
         super(_ChildConfig, self).__init__()
 
-    def __provide__(self, *args, **kwargs):
-        """Return provided instance."""
-        return self.root_config(self.parents)
-
     def __getattr__(self, item):
         """Return instance of deferred config."""
         return _ChildConfig(parents=self.parents + (item,),
                             root_config=self.root_config)
+
+    def _provide(self, *args, **kwargs):
+        """Return provided instance."""
+        return self.root_config(self.parents)

From 541d3c0e4b454cf798ed366e73652fca0d358d63 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Wed, 22 Jul 2015 10:53:16 +0300
Subject: [PATCH 69/73] Refactoring of utils checks

---
 objects/injections.py |  8 ++++----
 objects/providers.py  |  2 +-
 objects/utils.py      | 10 +++++-----
 tests/test_utils.py   | 20 ++++++++++++++++++++
 4 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/objects/injections.py b/objects/injections.py
index c574071b..3bb70df7 100644
--- a/objects/injections.py
+++ b/objects/injections.py
@@ -7,7 +7,7 @@ class Injection(object):
 
     """Base injection class."""
 
-    __IS_OBJECTS_INJECTION__ = True
+    __IS_INJECTION__ = True
     __slots__ = ('name', 'injectable')
 
     def __init__(self, name, injectable):
@@ -27,18 +27,18 @@ class KwArg(Injection):
 
     """Keyword argument injection."""
 
-    __IS_OBJECTS_KWARG_INJECTION__ = True
+    __IS_KWARG_INJECTION__ = True
 
 
 class Attribute(Injection):
 
     """Attribute injection."""
 
-    __IS_OBJECTS_ATTRIBUTE_INJECTION__ = True
+    __IS_ATTRIBUTE_INJECTION__ = True
 
 
 class Method(Injection):
 
     """Method injection."""
 
-    __IS_OBJECTS_METHOD_INJECTION__ = True
+    __IS_METHOD_INJECTION__ = True
diff --git a/objects/providers.py b/objects/providers.py
index 16fca49e..99a33350 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -14,7 +14,7 @@ class Provider(object):
 
     """Base provider class."""
 
-    __IS_OBJECTS_PROVIDER__ = True
+    __IS_PROVIDER__ = True
     __slots__ = ('overridden',)
 
     def __init__(self):
diff --git a/objects/utils.py b/objects/utils.py
index 89319021..392fad96 100644
--- a/objects/utils.py
+++ b/objects/utils.py
@@ -8,7 +8,7 @@ from .errors import Error
 def is_provider(instance):
     """Check if instance is provider instance."""
     return (not isinstance(instance, class_types) and
-            hasattr(instance, '__IS_OBJECTS_PROVIDER__'))
+            getattr(instance, '__IS_PROVIDER__', False) is True)
 
 
 def ensure_is_provider(instance):
@@ -22,7 +22,7 @@ def ensure_is_provider(instance):
 def is_injection(instance):
     """Check if instance is injection instance."""
     return (not isinstance(instance, class_types) and
-            hasattr(instance, '__IS_OBJECTS_INJECTION__'))
+            getattr(instance, '__IS_INJECTION__', False) is True)
 
 
 def ensure_is_injection(instance):
@@ -36,16 +36,16 @@ def ensure_is_injection(instance):
 def is_kwarg_injection(instance):
     """Check if instance is keyword argument injection instance."""
     return (not isinstance(instance, class_types) and
-            hasattr(instance, '__IS_OBJECTS_KWARG_INJECTION__'))
+            getattr(instance, '__IS_KWARG_INJECTION__', False) is True)
 
 
 def is_attribute_injection(instance):
     """Check if instance is attribute injection instance."""
     return (not isinstance(instance, class_types) and
-            hasattr(instance, '__IS_OBJECTS_ATTRIBUTE_INJECTION__'))
+            getattr(instance, '__IS_ATTRIBUTE_INJECTION__', False) is True)
 
 
 def is_method_injection(instance):
     """Check if instance is method injection instance."""
     return (not isinstance(instance, class_types) and
-            hasattr(instance, '__IS_OBJECTS_METHOD_INJECTION__'))
+            getattr(instance, '__IS_METHOD_INJECTION__', False) is True)
diff --git a/tests/test_utils.py b/tests/test_utils.py
index f4b038ce..3de7e5e7 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -40,6 +40,26 @@ class IsProviderTests(unittest.TestCase):
         """Test with object."""
         self.assertFalse(is_provider(object()))
 
+    def test_with_subclass_instance(self):
+        """Test with subclass of provider instance."""
+        class SomeProvider(Provider):
+
+            """Some provider for test."""
+
+        self.assertTrue(is_provider(SomeProvider()))
+
+    def test_with_class_with_getattr(self):
+        """Test with class that has __getattr__() method implementation."""
+        class SomeClass(object):
+
+            """Some test class with __getattr__() method implementation."""
+
+            def __getattr__(self, _):
+                """Test implementation that just returns False."""
+                return False
+
+        self.assertFalse(is_provider(SomeClass()))
+
 
 class EnsureIsProviderTests(unittest.TestCase):
 

From 040aad93f892a2acee326fadbd3f29c1ad57e853 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Wed, 22 Jul 2015 16:42:36 +0300
Subject: [PATCH 70/73] Make all protected attributes `_protected`

---
 objects/catalog.py      |   8 +--
 objects/decorators.py   |   8 +--
 objects/providers.py    | 123 +++++++++++++++++++++-------------------
 tests/test_providers.py |  12 ++--
 4 files changed, 78 insertions(+), 73 deletions(-)

diff --git a/objects/catalog.py b/objects/catalog.py
index 57c08952..4630a76a 100644
--- a/objects/catalog.py
+++ b/objects/catalog.py
@@ -33,19 +33,19 @@ class AbstractCatalog(object):
 
     providers = dict()
 
-    __slots__ = ('__used_providers__',)
+    __slots__ = ('_used_providers',)
 
     def __init__(self, *used_providers):
         """Initializer."""
-        self.__used_providers__ = set(used_providers)
+        self._used_providers = set(used_providers)
 
     def __getattribute__(self, item):
         """Return providers."""
         attribute = super(AbstractCatalog, self).__getattribute__(item)
-        if item in ('providers', '__used_providers__',):
+        if item in ('providers', '_used_providers',):
             return attribute
 
-        if attribute not in self.__used_providers__:
+        if attribute not in self._used_providers:
             raise Error('Provider \'{0}\' '.format(item) +
                         'is not listed in dependencies')
         return attribute
diff --git a/objects/decorators.py b/objects/decorators.py
index 1846b3ae..fea9d86d 100644
--- a/objects/decorators.py
+++ b/objects/decorators.py
@@ -24,18 +24,18 @@ def inject(injection):
 
     def decorator(callback):
         """Dependency injection decorator."""
-        if hasattr(callback, '__injections__'):
-            callback.__injections__ += (injection,)
+        if hasattr(callback, '_injections'):
+            callback._injections += (injection,)
 
         @wraps(callback)
         def decorated(*args, **kwargs):
             """Decorated with dependency injection callback."""
-            for injection in getattr(decorated, '__injections__'):
+            for injection in getattr(decorated, '_injections'):
                 if injection.name not in kwargs:
                     kwargs[injection.name] = injection.value
             return callback(*args, **kwargs)
 
-        setattr(decorated, '__injections__', (injection,))
+        setattr(decorated, '_injections', (injection,))
 
         return decorated
     return decorator
diff --git a/objects/providers.py b/objects/providers.py
index 99a33350..8ef5a46f 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -15,15 +15,15 @@ class Provider(object):
     """Base provider class."""
 
     __IS_PROVIDER__ = True
-    __slots__ = ('overridden',)
+    __slots__ = ('_overridden',)
 
     def __init__(self):
         """Initializer."""
-        self.overridden = None
+        self._overridden = None
 
     def __call__(self, *args, **kwargs):
         """Return provided instance."""
-        if self.overridden:
+        if self._overridden:
             return self.last_overriding(*args, **kwargs)
         return self._provide(*args, **kwargs)
 
@@ -42,47 +42,52 @@ class Provider(object):
 
     def override(self, provider):
         """Override provider with another provider."""
-        if not self.overridden:
-            self.overridden = (ensure_is_provider(provider),)
+        if not self._overridden:
+            self._overridden = (ensure_is_provider(provider),)
         else:
-            self.overridden = self.overridden + (ensure_is_provider(provider),)
+            self._overridden += (ensure_is_provider(provider),)
+
+    @property
+    def is_overridden(self):
+        """Check if provider is overridden by another provider."""
+        return bool(self._overridden)
 
     @property
     def last_overriding(self):
         """Return last overriding provider."""
         try:
-            return self.overridden[-1]
+            return self._overridden[-1]
         except (TypeError, IndexError):
             raise Error('Provider {0} is not overridden'.format(str(self)))
 
     def reset_last_overriding(self):
         """Reset last overriding provider."""
-        if not self.overridden:
+        if not self._overridden:
             raise Error('Provider {0} is not overridden'.format(str(self)))
-        self.overridden = self.overridden[:-1]
+        self._overridden = self._overridden[:-1]
 
     def reset_override(self):
         """Reset all overriding providers."""
-        self.overridden = None
+        self._overridden = None
 
 
 class Delegate(Provider):
 
     """Provider's delegate."""
 
-    __slots__ = ('delegated',)
+    __slots__ = ('_delegated',)
 
     def __init__(self, delegated):
         """Initializer.
 
         :type delegated: Provider
         """
-        self.delegated = ensure_is_provider(delegated)
+        self._delegated = ensure_is_provider(delegated)
         super(Delegate, self).__init__()
 
     def _provide(self, *args, **kwargs):
         """Return provided instance."""
-        return self.delegated
+        return self._delegated
 
 
 class Factory(Provider):
@@ -92,36 +97,36 @@ class Factory(Provider):
     Factory provider creates new instance of specified class on every call.
     """
 
-    __slots__ = ('provides', 'kwargs', 'attributes', 'methods')
+    __slots__ = ('_provides', '_kwargs', '_attributes', '_methods')
 
     def __init__(self, provides, *injections):
         """Initializer."""
         if not isinstance(provides, class_types):
             raise Error('Factory provider expects to get class, ' +
                         'got {0} instead'.format(str(provides)))
-        self.provides = provides
-        self.kwargs = tuple((injection
-                             for injection in injections
-                             if is_kwarg_injection(injection)))
-        self.attributes = tuple((injection
-                                 for injection in injections
-                                 if is_attribute_injection(injection)))
-        self.methods = tuple((injection
+        self._provides = provides
+        self._kwargs = tuple((injection
                               for injection in injections
-                              if is_method_injection(injection)))
+                              if is_kwarg_injection(injection)))
+        self._attributes = tuple((injection
+                                  for injection in injections
+                                  if is_attribute_injection(injection)))
+        self._methods = tuple((injection
+                               for injection in injections
+                               if is_method_injection(injection)))
         super(Factory, self).__init__()
 
     def _provide(self, *args, **kwargs):
         """Return provided instance."""
         init_kwargs = dict(((injection.name, injection.value)
-                            for injection in self.kwargs))
+                            for injection in self._kwargs))
         init_kwargs.update(kwargs)
 
-        instance = self.provides(*args, **init_kwargs)
+        instance = self._provides(*args, **init_kwargs)
 
-        for attribute in self.attributes:
+        for attribute in self._attributes:
             setattr(instance, attribute.name, attribute.value)
-        for method in self.methods:
+        for method in self._methods:
             getattr(instance, method.name)(method.value)
 
         return instance
@@ -144,23 +149,23 @@ class Singleton(Provider):
     Singleton provider will create instance once and return it on every call.
     """
 
-    __slots__ = ('instance', 'factory')
+    __slots__ = ('_instance', '_factory')
 
     def __init__(self, *args, **kwargs):
         """Initializer."""
-        self.instance = None
-        self.factory = Factory(*args, **kwargs)
+        self._instance = None
+        self._factory = Factory(*args, **kwargs)
         super(Singleton, self).__init__()
 
     def _provide(self, *args, **kwargs):
         """Return provided instance."""
-        if not self.instance:
-            self.instance = self.factory(*args, **kwargs)
-        return self.instance
+        if not self._instance:
+            self._instance = self._factory(*args, **kwargs)
+        return self._instance
 
     def reset(self):
         """Reset instance."""
-        self.instance = None
+        self._instance = None
 
 
 class ExternalDependency(Provider):
@@ -171,26 +176,26 @@ class ExternalDependency(Provider):
     the client's code, but it's interface is known.
     """
 
-    __slots__ = ('instance_of',)
+    __slots__ = ('_instance_of',)
 
     def __init__(self, instance_of):
         """Initializer."""
         if not isinstance(instance_of, class_types):
             raise Error('ExternalDependency provider expects to get class, ' +
                         'got {0} instead'.format(str(instance_of)))
-        self.instance_of = instance_of
+        self._instance_of = instance_of
         super(ExternalDependency, self).__init__()
 
     def __call__(self, *args, **kwargs):
         """Return provided instance."""
-        if not self.overridden:
+        if not self._overridden:
             raise Error('Dependency is not defined')
 
         instance = self.last_overriding(*args, **kwargs)
 
-        if not isinstance(instance, self.instance_of):
+        if not isinstance(instance, self._instance_of):
             raise Error('{0} is not an '.format(instance) +
-                        'instance of {0}'.format(self.instance_of))
+                        'instance of {0}'.format(self._instance_of))
 
         return instance
 
@@ -207,16 +212,16 @@ class _StaticProvider(Provider):
     it got on input.
     """
 
-    __slots__ = ('provides',)
+    __slots__ = ('_provides',)
 
     def __init__(self, provides):
         """Initializer."""
-        self.provides = provides
+        self._provides = provides
         super(_StaticProvider, self).__init__()
 
     def _provide(self, *args, **kwargs):
         """Return provided instance."""
-        return self.provides
+        return self._provides
 
 
 class Class(_StaticProvider):
@@ -247,25 +252,25 @@ class Callable(Provider):
     with some predefined dependency injections.
     """
 
-    __slots__ = ('callback', 'injections')
+    __slots__ = ('_callback', '_injections')
 
     def __init__(self, callback, *injections):
         """Initializer."""
         if not callable(callback):
             raise Error('Callable expected, got {0}'.format(str(callback)))
-        self.callback = callback
-        self.injections = tuple((injection
-                                 for injection in injections
-                                 if is_kwarg_injection(injection)))
+        self._callback = callback
+        self._injections = tuple((injection
+                                  for injection in injections
+                                  if is_kwarg_injection(injection)))
         super(Callable, self).__init__()
 
     def _provide(self, *args, **kwargs):
         """Return provided instance."""
         injections = dict(((injection.name, injection.value)
-                           for injection in self.injections))
+                           for injection in self._injections))
         injections.update(kwargs)
 
-        return self.callback(*args, **injections)
+        return self._callback(*args, **injections)
 
 
 class Config(Provider):
@@ -277,13 +282,13 @@ class Config(Provider):
     to create deferred config value provider.
     """
 
-    __slots__ = ('value',)
+    __slots__ = ('_value',)
 
     def __init__(self, value=None):
         """Initializer."""
         if not value:
             value = dict()
-        self.value = value
+        self._value = value
         super(Config, self).__init__()
 
     def __getattr__(self, item):
@@ -292,7 +297,7 @@ class Config(Provider):
 
     def _provide(self, paths=None):
         """Return provided instance."""
-        value = self.value
+        value = self._value
         if paths:
             for path in paths:
                 try:
@@ -304,7 +309,7 @@ class Config(Provider):
 
     def update_from(self, value):
         """Update current value from another one."""
-        self.value.update(value)
+        self._value.update(value)
 
 
 class _ChildConfig(Provider):
@@ -315,19 +320,19 @@ class _ChildConfig(Provider):
     the current path in the config tree.
     """
 
-    __slots__ = ('parents', 'root_config')
+    __slots__ = ('_parents', '_root_config')
 
     def __init__(self, parents, root_config):
         """Initializer."""
-        self.parents = parents
-        self.root_config = root_config
+        self._parents = parents
+        self._root_config = root_config
         super(_ChildConfig, self).__init__()
 
     def __getattr__(self, item):
         """Return instance of deferred config."""
-        return _ChildConfig(parents=self.parents + (item,),
-                            root_config=self.root_config)
+        return _ChildConfig(parents=self._parents + (item,),
+                            root_config=self._root_config)
 
     def _provide(self, *args, **kwargs):
         """Return provided instance."""
-        return self.root_config(self.parents)
+        return self._root_config(self._parents)
diff --git a/tests/test_providers.py b/tests/test_providers.py
index 65c93676..77843d33 100644
--- a/tests/test_providers.py
+++ b/tests/test_providers.py
@@ -44,12 +44,12 @@ class ProviderTests(unittest.TestCase):
         delegate1 = self.provider.delegate()
 
         self.assertIsInstance(delegate1, Delegate)
-        self.assertIs(delegate1.delegated, self.provider)
+        self.assertIs(delegate1(), self.provider)
 
         delegate2 = self.provider.delegate()
 
         self.assertIsInstance(delegate2, Delegate)
-        self.assertIs(delegate2.delegated, self.provider)
+        self.assertIs(delegate2(), self.provider)
 
         self.assertIsNot(delegate1, delegate2)
 
@@ -57,7 +57,7 @@ class ProviderTests(unittest.TestCase):
         """Test provider overriding."""
         overriding_provider = Provider()
         self.provider.override(overriding_provider)
-        self.assertTrue(self.provider.overridden)
+        self.assertTrue(self.provider.is_overridden)
 
     def test_override_with_not_provider(self):
         """Test provider overriding with not provider instance."""
@@ -98,7 +98,7 @@ class ProviderTests(unittest.TestCase):
         self.assertIs(self.provider.last_overriding, overriding_provider1)
 
         self.provider.reset_last_overriding()
-        self.assertFalse(self.provider.overridden)
+        self.assertFalse(self.provider.is_overridden)
 
     def test_reset_last_overriding_of_not_overridden_provider(self):
         """Test resetting of last overriding on not overridden provier."""
@@ -109,12 +109,12 @@ class ProviderTests(unittest.TestCase):
         overriding_provider = Provider()
         self.provider.override(overriding_provider)
 
-        self.assertTrue(self.provider.overridden)
+        self.assertTrue(self.provider.is_overridden)
         self.assertIs(self.provider.last_overriding, overriding_provider)
 
         self.provider.reset_override()
 
-        self.assertFalse(self.provider.overridden)
+        self.assertFalse(self.provider.is_overridden)
         try:
             self.provider.last_overriding
         except Error:

From 2c2d4f743482f007f1e757d54160230a6da145a5 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 24 Jul 2015 00:28:52 +0300
Subject: [PATCH 71/73] Removing of Factory restriction to operate with class
 types only, factory methods are valid now

---
 objects/providers.py    | 8 ++++----
 tests/test_providers.py | 8 ++++++--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/objects/providers.py b/objects/providers.py
index 8ef5a46f..7857cd4c 100644
--- a/objects/providers.py
+++ b/objects/providers.py
@@ -101,8 +101,8 @@ class Factory(Provider):
 
     def __init__(self, provides, *injections):
         """Initializer."""
-        if not isinstance(provides, class_types):
-            raise Error('Factory provider expects to get class, ' +
+        if not callable(provides):
+            raise Error('Factory provider expects to get callable, ' +
                         'got {0} instead'.format(str(provides)))
         self._provides = provides
         self._kwargs = tuple((injection
@@ -151,10 +151,10 @@ class Singleton(Provider):
 
     __slots__ = ('_instance', '_factory')
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, provides, *injections):
         """Initializer."""
         self._instance = None
-        self._factory = Factory(*args, **kwargs)
+        self._factory = Factory(provides, *injections)
         super(Singleton, self).__init__()
 
     def _provide(self, *args, **kwargs):
diff --git a/tests/test_providers.py b/tests/test_providers.py
index 77843d33..16c9bf16 100644
--- a/tests/test_providers.py
+++ b/tests/test_providers.py
@@ -186,8 +186,12 @@ class FactoryTests(unittest.TestCase):
         """Test `is_provider` check."""
         self.assertTrue(is_provider(Factory(self.Example)))
 
-    def test_init_with_not_class(self):
-        """Test creation of provider with not a class."""
+    def test_init_with_callable(self):
+        """Test creation of provider with a callable."""
+        self.assertTrue(Factory(credits))
+
+    def test_init_with_not_callable(self):
+        """Test creation of provider with not a callable."""
         self.assertRaises(Error, Factory, 123)
 
     def test_call(self):

From 878f1d49aac36b634b1ad0f14853856dfec8d99e Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 24 Jul 2015 12:21:27 +0300
Subject: [PATCH 72/73] Removing old examples

---
 examples/delegate.py                          | 56 ---------------
 examples/readme2/instance_providers.py        | 24 -------
 .../instance_providers_with_injections.py     | 45 ------------
 examples/readme2/overriding_providers.py      | 66 ------------------
 examples/singleton_and_factory.py             | 68 -------------------
 5 files changed, 259 deletions(-)
 delete mode 100644 examples/delegate.py
 delete mode 100644 examples/readme2/instance_providers.py
 delete mode 100644 examples/readme2/instance_providers_with_injections.py
 delete mode 100644 examples/readme2/overriding_providers.py
 delete mode 100644 examples/singleton_and_factory.py

diff --git a/examples/delegate.py b/examples/delegate.py
deleted file mode 100644
index b54debc6..00000000
--- a/examples/delegate.py
+++ /dev/null
@@ -1,56 +0,0 @@
-"""Provider delegation example."""
-
-from objects.catalog import AbstractCatalog
-
-from objects.providers import Factory
-from objects.providers import Singleton
-
-from objects.injections import KwArg
-from objects.injections import Attribute
-
-import sqlite3
-
-
-class ObjectA(object):
-
-    """Example class ObjectA, that has dependency on database."""
-
-    def __init__(self, db):
-        """Initializer."""
-        self.db = db
-
-
-class ObjectB(object):
-
-    """Example class ObjectB, that has dependency on ObjectA provider."""
-
-    def __init__(self, a_provider):
-        """Initializer."""
-        self.a_provider = a_provider
-
-
-class Catalog(AbstractCatalog):
-
-    """Catalog of objects providers."""
-
-    database = Singleton(sqlite3.Connection,
-                         KwArg('database', ':memory:'),
-                         Attribute('row_factory', sqlite3.Row))
-    """:type: (objects.Provider) -> sqlite3.Connection"""
-
-    object_a = Factory(ObjectA,
-                       KwArg('db', database))
-    """:type: (objects.Provider) -> ObjectA"""
-
-    object_b = Singleton(ObjectB,
-                         KwArg('a_provider', object_a.delegate()))
-    """:type: (objects.Provider) -> ObjectB"""
-
-
-# Catalog static provides.
-b = Catalog.object_b()
-a1, a2 = b.a_provider(), b.a_provider()
-
-# Some asserts.
-assert a1 is not a2
-assert a1.db is a2.db is Catalog.database()
diff --git a/examples/readme2/instance_providers.py b/examples/readme2/instance_providers.py
deleted file mode 100644
index 1be9acb2..00000000
--- a/examples/readme2/instance_providers.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""`Factory` and `Singleton` providers example."""
-
-from objects.providers import Factory
-from objects.providers import Singleton
-
-
-# Factory provider creates new instance of specified class on every call.
-object_factory = Factory(object)
-
-object_1 = object_factory()
-object_2 = object_factory()
-
-assert object_1 is not object_2
-assert isinstance(object_1, object) and isinstance(object_2, object)
-
-# Singleton provider creates new instance of specified class on first call
-# and returns same instance on every next call.
-single_object = Singleton(object)
-
-single_object_1 = single_object()
-single_object_2 = single_object()
-
-assert single_object_1 is single_object_2
-assert isinstance(object_1, object) and isinstance(object_2, object)
diff --git a/examples/readme2/instance_providers_with_injections.py b/examples/readme2/instance_providers_with_injections.py
deleted file mode 100644
index 45d25859..00000000
--- a/examples/readme2/instance_providers_with_injections.py
+++ /dev/null
@@ -1,45 +0,0 @@
-"""`Factory` and `Singleton` providers with injections example."""
-
-import sqlite3
-
-from objects.providers import Singleton
-from objects.providers import Factory
-
-from objects.injections import KwArg
-from objects.injections import Attribute
-
-
-class ObjectA(object):
-
-    """ObjectA has dependency on database."""
-
-    def __init__(self, database):
-        """Initializer.
-
-        Database dependency need to be injected via init arg."""
-        self.database = database
-
-    def get_one(self):
-        """Select one from database and return it."""
-        return self.database.execute('SELECT 1').fetchone()[0]
-
-
-# Database and `ObjectA` providers.
-database = Singleton(sqlite3.Connection,
-                     KwArg('database', ':memory:'),
-                     KwArg('timeout', 30),
-                     KwArg('detect_types', True),
-                     KwArg('isolation_level', 'EXCLUSIVE'),
-                     Attribute('row_factory', sqlite3.Row))
-
-object_a_factory = Factory(ObjectA,
-                           KwArg('database', database))
-
-# Creating several `ObjectA` instances.
-object_a_1 = object_a_factory()
-object_a_2 = object_a_factory()
-
-# Making some asserts.
-assert object_a_1 is not object_a_2
-assert object_a_1.database is object_a_2.database is database()
-assert object_a_1.get_one() == object_a_2.get_one() == 1
diff --git a/examples/readme2/overriding_providers.py b/examples/readme2/overriding_providers.py
deleted file mode 100644
index 38361df7..00000000
--- a/examples/readme2/overriding_providers.py
+++ /dev/null
@@ -1,66 +0,0 @@
-"""Providers overriding example."""
-
-import sqlite3
-
-from objects.providers import Factory
-from objects.providers import Singleton
-
-from objects.injections import KwArg
-from objects.injections import Attribute
-
-
-class ObjectA(object):
-
-    """ObjectA has dependency on database."""
-
-    def __init__(self, database):
-        """Initializer.
-
-        Database dependency need to be injected via init arg."""
-        self.database = database
-
-    def get_one(self):
-        """Select one from database and return it."""
-        return self.database.execute('SELECT 1')
-
-
-class ObjectAMock(ObjectA):
-
-    """Mock of ObjectA.
-
-    Has no dependency on database.
-    """
-
-    def __init__(self):
-        """Initializer."""
-
-    def get_one(self):
-        """Select one from database and return it.
-
-        Mock makes no database queries and always returns two instead of one.
-        """
-        return 2
-
-
-# Database and `ObjectA` providers.
-database = Singleton(sqlite3.Connection,
-                     KwArg('database', ':memory:'),
-                     KwArg('timeout', 30),
-                     KwArg('detect_types', True),
-                     KwArg('isolation_level', 'EXCLUSIVE'),
-                     Attribute('row_factory', sqlite3.Row))
-
-object_a_factory = Factory(ObjectA,
-                           KwArg('database', database))
-
-
-# Overriding `ObjectA` provider with `ObjectAMock` provider.
-object_a_factory.override(Factory(ObjectAMock))
-
-# Creating several `ObjectA` instances.
-object_a_1 = object_a_factory()
-object_a_2 = object_a_factory()
-
-# Making some asserts.
-assert object_a_1 is not object_a_2
-assert object_a_1.get_one() == object_a_2.get_one() == 2
diff --git a/examples/singleton_and_factory.py b/examples/singleton_and_factory.py
deleted file mode 100644
index 6a8b4f70..00000000
--- a/examples/singleton_and_factory.py
+++ /dev/null
@@ -1,68 +0,0 @@
-"""Providers delegation example."""
-
-from objects.providers import Factory
-from objects.providers import Singleton
-from objects.providers import Delegate
-
-from objects.injections import KwArg
-
-
-class User(object):
-
-    """Example class User."""
-
-    def __init__(self, id, name):
-        """Initializer.
-
-        :param id: int
-        :param name: str
-        :return:
-        """
-        self.id = id
-        self.name = name
-
-
-class UserService(object):
-
-    """Example class UserService.
-
-    UserService has dependency on users factory.
-    """
-
-    def __init__(self, users_factory):
-        """Initializer.
-
-        :param users_factory: objects.providers.Factory
-        :return:
-        """
-        self.users_factory = users_factory
-
-    def get_by_id(self, id):
-        """Return user info by user id."""
-        return self.users_factory(id=id, name=self._get_name_from_db(id))
-
-    def _get_name_from_db(self, id):
-        """Return user's name from database by his id.
-
-        Main purpose of this method is just to show the fact of retrieving
-        some user's data from database, so, actually, it simulates work
-        with database just by merging constant string with provided user's id.
-        """
-        return ''.join(('user', str(id)))
-
-
-# Users factory and UserService provider:
-users_factory = Factory(User)
-users_service = Singleton(UserService,
-                          KwArg('users_factory', Delegate(users_factory)))
-
-# Creating several User objects:
-user1 = users_service().get_by_id(1)
-user2 = users_service().get_by_id(2)
-
-# Making some asserts:
-assert user1.id == 1
-assert user1.name == 'user1'
-
-assert user2.id == 2
-assert user2.name == 'user2'

From 033a97d4da991ec257c4ebfc237690d567b21681 Mon Sep 17 00:00:00 2001
From: Roman Mogilatov <rmogilatov@gmail.com>
Date: Fri, 24 Jul 2015 12:23:10 +0300
Subject: [PATCH 73/73] Removing old Factory&Singleton examples

---
 examples/readme/providers.py | 22 ----------------------
 1 file changed, 22 deletions(-)
 delete mode 100644 examples/readme/providers.py

diff --git a/examples/readme/providers.py b/examples/readme/providers.py
deleted file mode 100644
index 1d0dff6f..00000000
--- a/examples/readme/providers.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""`NewInstance` and `Singleton` providers example."""
-
-from objects.providers import NewInstance
-from objects.providers import Singleton
-
-
-# NewInstance provider creates new instance of specified class on every call.
-new_object = NewInstance(object)
-
-object_1 = new_object()
-object_2 = new_object()
-
-assert object_1 is not object_2
-
-# Singleton provider creates new instance of specified class on first call
-# and returns same instance on every next call.
-single_object = Singleton(object)
-
-single_object_1 = single_object()
-single_object_2 = single_object()
-
-assert single_object_1 is single_object_2