Skip to content

Commit c0d1e48

Browse files
committed
Merge branch 'release/4.24.0' into master
2 parents 1805152 + 1d588cf commit c0d1e48

File tree

9 files changed

+19119
-11245
lines changed

9 files changed

+19119
-11245
lines changed

docs/containers/copying.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Container copying
2+
-----------------
3+
4+
You can create declarative container copies using ``@containers.copy()`` decorator.
5+
6+
.. literalinclude:: ../../examples/containers/declarative_copy_decorator.py
7+
:language: python
8+
:lines: 3-
9+
:emphasize-lines: 18-22
10+
11+
Decorator ``@containers.copy()`` copies providers from source container to destination container.
12+
Destination container provider will replace source provider, if names match.
13+
14+
.. disqus::

docs/containers/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ Containers module API docs - :py:mod:`dependency_injector.containers`.
2323
dynamic
2424
specialization
2525
overriding
26+
copying
2627
reset_singletons
2728
check_dependencies
2829
traversal

docs/main/changelog.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ that were made in every particular version.
77
From version 0.7.6 *Dependency Injector* framework strictly
88
follows `Semantic versioning`_
99

10+
4.24.0
11+
------
12+
- Add docs on ``@containers.copy()`` decorator.
13+
- Refactor ``@containers.copy()`` decorator.
14+
- Refactor async mode support in containers module.
15+
1016
4.23.5
1117
------
1218
- Fix docs publishing.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""Declarative container provider copying with ``@copy()`` decorator."""
2+
3+
import sqlite3
4+
from unittest import mock
5+
6+
from dependency_injector import containers, providers
7+
8+
9+
class Service:
10+
def __init__(self, db):
11+
self.db = db
12+
13+
14+
class SourceContainer(containers.DeclarativeContainer):
15+
16+
database = providers.Singleton(sqlite3.connect, ':memory:')
17+
service = providers.Factory(Service, db=database)
18+
19+
20+
# Copy ``SourceContainer`` providers into ``DestinationContainer``:
21+
@containers.copy(SourceContainer)
22+
class DestinationContainer(SourceContainer):
23+
24+
database = providers.Singleton(mock.Mock)
25+
26+
27+
if __name__ == '__main__':
28+
container = DestinationContainer()
29+
30+
service = container.service()
31+
assert isinstance(service.db, mock.Mock)

examples/containers/declarative_override_decorator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""Declarative container provider overriding with `@override()` decorator."""
1+
"""Declarative container provider overriding with ``@override()`` decorator."""
22

33
import sqlite3
44
from unittest import mock
@@ -11,7 +11,7 @@ class Container(containers.DeclarativeContainer):
1111
database = providers.Singleton(sqlite3.connect, ':memory:')
1212

1313

14-
# Overriding `Container` with `OverridingContainer`:
14+
# Overriding ``Container`` with ``OverridingContainer``:
1515
@containers.override(Container)
1616
class OverridingContainer(containers.DeclarativeContainer):
1717

src/dependency_injector/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Top-level package."""
22

3-
__version__ = '4.23.5'
3+
__version__ = '4.24.0'
44
"""Version number.
55
66
:type: str

0 commit comments

Comments
 (0)