mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-29 04:53:59 +03:00
Last modifications on NewInstance to Factory provider renaming
This commit is contained in:
parent
0dd2884262
commit
a5337b2fc8
23
README.rst
23
README.rst
|
@ -84,12 +84,12 @@ Examples
|
||||||
|
|
||||||
from objects.catalog import AbstractCatalog
|
from objects.catalog import AbstractCatalog
|
||||||
|
|
||||||
|
from objects.providers import Factory
|
||||||
from objects.providers import Singleton
|
from objects.providers import Singleton
|
||||||
from objects.providers import NewInstance
|
|
||||||
|
|
||||||
from objects.injections import KwArg
|
from objects.injections import KwArg
|
||||||
from objects.injections import Attribute
|
from objects.injections import Attribute
|
||||||
from objects.injections import inject
|
from objects.decorators import inject
|
||||||
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
|
@ -122,19 +122,19 @@ Examples
|
||||||
Attribute('row_factory', sqlite3.Row))
|
Attribute('row_factory', sqlite3.Row))
|
||||||
""":type: (objects.Provider) -> sqlite3.Connection"""
|
""":type: (objects.Provider) -> sqlite3.Connection"""
|
||||||
|
|
||||||
object_a = NewInstance(ObjectA,
|
object_a_factory = Factory(ObjectA,
|
||||||
KwArg('db', database))
|
KwArg('db', database))
|
||||||
""":type: (objects.Provider) -> ObjectA"""
|
""":type: (objects.Provider) -> ObjectA"""
|
||||||
|
|
||||||
object_b = NewInstance(ObjectB,
|
object_b_factory = Factory(ObjectB,
|
||||||
KwArg('a', object_a),
|
KwArg('a', object_a_factory),
|
||||||
KwArg('db', database))
|
KwArg('db', database))
|
||||||
""":type: (objects.Provider) -> ObjectB"""
|
""":type: (objects.Provider) -> ObjectB"""
|
||||||
|
|
||||||
|
|
||||||
# Catalog static provides.
|
# Catalog static provides.
|
||||||
a1, a2 = Catalog.object_a(), Catalog.object_a()
|
a1, a2 = Catalog.object_a_factory(), Catalog.object_a_factory()
|
||||||
b1, b2 = Catalog.object_b(), Catalog.object_b()
|
b1, b2 = Catalog.object_b_factory(), Catalog.object_b_factory()
|
||||||
|
|
||||||
assert a1 is not a2
|
assert a1 is not a2
|
||||||
assert b1 is not b2
|
assert b1 is not b2
|
||||||
|
@ -142,8 +142,8 @@ Examples
|
||||||
|
|
||||||
|
|
||||||
# Example of inline injections.
|
# Example of inline injections.
|
||||||
@inject(KwArg('a', Catalog.object_a))
|
@inject(KwArg('a', Catalog.object_a_factory))
|
||||||
@inject(KwArg('b', Catalog.object_b))
|
@inject(KwArg('b', Catalog.object_b_factory))
|
||||||
@inject(KwArg('database', Catalog.database))
|
@inject(KwArg('database', Catalog.database))
|
||||||
def example(a, b, database):
|
def example(a, b, database):
|
||||||
assert a.db is b.db is database is Catalog.database()
|
assert a.db is b.db is database is Catalog.database()
|
||||||
|
@ -151,6 +151,7 @@ Examples
|
||||||
|
|
||||||
example()
|
example()
|
||||||
|
|
||||||
|
|
||||||
You can get more *Objects* examples in ``/examples`` directory on
|
You can get more *Objects* examples in ``/examples`` directory on
|
||||||
GitHub:
|
GitHub:
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ initialization.
|
||||||
|
|
||||||
There are few *Instance* providers:
|
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.
|
call.
|
||||||
- ``Singleton`` provider creates new instance of specified class on first
|
- ``Singleton`` provider creates new instance of specified class on first
|
||||||
call and returns same instance on every next call.
|
call and returns same instance on every next call.
|
||||||
|
@ -27,14 +27,14 @@ Example:
|
||||||
|
|
||||||
.. code-block:: python
|
.. 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
|
from objects.providers import Singleton
|
||||||
|
|
||||||
|
|
||||||
# NewInstance provider creates new instance of specified class on every call.
|
# Factory provider creates new instance of specified class on every call.
|
||||||
new_object = NewInstance(object)
|
new_object = Factory(object)
|
||||||
|
|
||||||
object_1 = new_object()
|
object_1 = new_object()
|
||||||
object_2 = new_object()
|
object_2 = new_object()
|
||||||
|
@ -85,12 +85,12 @@ Example:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
"""`NewInstance` and `Singleton` providers with injections example."""
|
"""`Factory` and `Singleton` providers with injections example."""
|
||||||
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
from objects.providers import Singleton
|
from objects.providers import Singleton
|
||||||
from objects.providers import NewInstance
|
from objects.providers import Factory
|
||||||
|
|
||||||
from objects.injections import KwArg
|
from objects.injections import KwArg
|
||||||
from objects.injections import Attribute
|
from objects.injections import Attribute
|
||||||
|
@ -119,18 +119,19 @@ Example:
|
||||||
KwArg('isolation_level', 'EXCLUSIVE'),
|
KwArg('isolation_level', 'EXCLUSIVE'),
|
||||||
Attribute('row_factory', sqlite3.Row))
|
Attribute('row_factory', sqlite3.Row))
|
||||||
|
|
||||||
object_a = NewInstance(ObjectA,
|
object_a_factory = Factory(ObjectA,
|
||||||
KwArg('database', database))
|
KwArg('database', database))
|
||||||
|
|
||||||
# Creating several `ObjectA` instances.
|
# Creating several `ObjectA` instances.
|
||||||
object_a_1 = object_a()
|
object_a_1 = object_a_factory()
|
||||||
object_a_2 = object_a()
|
object_a_2 = object_a_factory()
|
||||||
|
|
||||||
# Making some asserts.
|
# Making some asserts.
|
||||||
assert object_a_1 is not object_a_2
|
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.database is object_a_2.database is database()
|
||||||
assert object_a_1.get_one() == object_a_2.get_one() == 1
|
assert object_a_1.get_one() == object_a_2.get_one() == 1
|
||||||
|
|
||||||
|
|
||||||
Static providers
|
Static providers
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
@ -163,6 +164,7 @@ Example:
|
||||||
value_provider = Value(123)
|
value_provider = Value(123)
|
||||||
assert value_provider() == 123
|
assert value_provider() == 123
|
||||||
|
|
||||||
|
|
||||||
Callable providers
|
Callable providers
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -172,7 +174,7 @@ callable.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
"""`Callable` providers examples."""
|
"""`Callable` providers examples."""
|
||||||
|
|
||||||
|
@ -236,7 +238,7 @@ Example:
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
from objects.providers import Singleton
|
from objects.providers import Singleton
|
||||||
from objects.providers import NewInstance
|
from objects.providers import Factory
|
||||||
from objects.providers import ExternalDependency
|
from objects.providers import ExternalDependency
|
||||||
|
|
||||||
from objects.injections import KwArg
|
from objects.injections import KwArg
|
||||||
|
@ -261,8 +263,8 @@ Example:
|
||||||
# Database and `ObjectA` providers.
|
# Database and `ObjectA` providers.
|
||||||
database = ExternalDependency(instance_of=sqlite3.Connection)
|
database = ExternalDependency(instance_of=sqlite3.Connection)
|
||||||
|
|
||||||
object_a = NewInstance(ObjectA,
|
object_a_factory = Factory(ObjectA,
|
||||||
KwArg('database', database))
|
KwArg('database', database))
|
||||||
|
|
||||||
# Satisfaction of external dependency.
|
# Satisfaction of external dependency.
|
||||||
database.override(Singleton(sqlite3.Connection,
|
database.override(Singleton(sqlite3.Connection,
|
||||||
|
@ -273,14 +275,15 @@ Example:
|
||||||
Attribute('row_factory', sqlite3.Row)))
|
Attribute('row_factory', sqlite3.Row)))
|
||||||
|
|
||||||
# Creating several `ObjectA` instances.
|
# Creating several `ObjectA` instances.
|
||||||
object_a_1 = object_a()
|
object_a_1 = object_a_factory()
|
||||||
object_a_2 = object_a()
|
object_a_2 = object_a_factory()
|
||||||
|
|
||||||
# Making some asserts.
|
# Making some asserts.
|
||||||
assert object_a_1 is not object_a_2
|
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.database is object_a_2.database is database()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Config providers
|
Config providers
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
@ -300,8 +303,8 @@ Example:
|
||||||
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
|
from objects.providers import Factory
|
||||||
from objects.providers import Singleton
|
from objects.providers import Singleton
|
||||||
from objects.providers import NewInstance
|
|
||||||
|
|
||||||
from objects.injections import KwArg
|
from objects.injections import KwArg
|
||||||
from objects.injections import Attribute
|
from objects.injections import Attribute
|
||||||
|
@ -348,17 +351,18 @@ Example:
|
||||||
KwArg('isolation_level', 'EXCLUSIVE'),
|
KwArg('isolation_level', 'EXCLUSIVE'),
|
||||||
Attribute('row_factory', sqlite3.Row))
|
Attribute('row_factory', sqlite3.Row))
|
||||||
|
|
||||||
object_a = NewInstance(ObjectA,
|
object_a_factory = Factory(ObjectA,
|
||||||
KwArg('database', database))
|
KwArg('database', database))
|
||||||
|
|
||||||
|
|
||||||
# Overriding `ObjectA` provider with `ObjectAMock` provider.
|
# Overriding `ObjectA` provider with `ObjectAMock` provider.
|
||||||
object_a.override(NewInstance(ObjectAMock))
|
object_a_factory.override(Factory(ObjectAMock))
|
||||||
|
|
||||||
# Creating several `ObjectA` instances.
|
# Creating several `ObjectA` instances.
|
||||||
object_a_1 = object_a()
|
object_a_1 = object_a_factory()
|
||||||
object_a_2 = object_a()
|
object_a_2 = object_a_factory()
|
||||||
|
|
||||||
# Making some asserts.
|
# Making some asserts.
|
||||||
assert object_a_1 is not object_a_2
|
assert object_a_1 is not object_a_2
|
||||||
assert object_a_1.get_one() == object_a_2.get_one() == 2
|
assert object_a_1.get_one() == object_a_2.get_one() == 2
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,11 @@
|
||||||
|
|
||||||
from objects.catalog import AbstractCatalog
|
from objects.catalog import AbstractCatalog
|
||||||
|
|
||||||
|
from objects.providers import Factory
|
||||||
from objects.providers import Singleton
|
from objects.providers import Singleton
|
||||||
from objects.providers import NewInstance
|
|
||||||
|
|
||||||
from objects.injections import KwArg
|
from objects.injections import KwArg
|
||||||
from objects.injections import Attribute
|
from objects.injections import Attribute
|
||||||
|
|
||||||
from objects.decorators import inject
|
from objects.decorators import inject
|
||||||
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
@ -41,19 +40,19 @@ class Catalog(AbstractCatalog):
|
||||||
Attribute('row_factory', sqlite3.Row))
|
Attribute('row_factory', sqlite3.Row))
|
||||||
""":type: (objects.Provider) -> sqlite3.Connection"""
|
""":type: (objects.Provider) -> sqlite3.Connection"""
|
||||||
|
|
||||||
object_a = NewInstance(ObjectA,
|
object_a_factory = Factory(ObjectA,
|
||||||
KwArg('db', database))
|
KwArg('db', database))
|
||||||
""":type: (objects.Provider) -> ObjectA"""
|
""":type: (objects.Provider) -> ObjectA"""
|
||||||
|
|
||||||
object_b = NewInstance(ObjectB,
|
object_b_factory = Factory(ObjectB,
|
||||||
KwArg('a', object_a),
|
KwArg('a', object_a_factory),
|
||||||
KwArg('db', database))
|
KwArg('db', database))
|
||||||
""":type: (objects.Provider) -> ObjectB"""
|
""":type: (objects.Provider) -> ObjectB"""
|
||||||
|
|
||||||
|
|
||||||
# Catalog static provides.
|
# Catalog static provides.
|
||||||
a1, a2 = Catalog.object_a(), Catalog.object_a()
|
a1, a2 = Catalog.object_a_factory(), Catalog.object_a_factory()
|
||||||
b1, b2 = Catalog.object_b(), Catalog.object_b()
|
b1, b2 = Catalog.object_b_factory(), Catalog.object_b_factory()
|
||||||
|
|
||||||
assert a1 is not a2
|
assert a1 is not a2
|
||||||
assert b1 is not b2
|
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.
|
# Example of inline injections.
|
||||||
@inject(KwArg('a', Catalog.object_a))
|
@inject(KwArg('a', Catalog.object_a_factory))
|
||||||
@inject(KwArg('b', Catalog.object_b))
|
@inject(KwArg('b', Catalog.object_b_factory))
|
||||||
@inject(KwArg('database', Catalog.database))
|
@inject(KwArg('database', Catalog.database))
|
||||||
def example(a, b, database):
|
def example(a, b, database):
|
||||||
assert a.db is b.db is database is Catalog.database()
|
assert a.db is b.db is database is Catalog.database()
|
||||||
|
|
|
@ -73,7 +73,7 @@ class Factory(Provider):
|
||||||
|
|
||||||
"""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')
|
__slots__ = ('provides', 'kwargs', 'attributes', 'methods')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user