Changelog ========= This document describes all the changes in *Dependency Injector* framework that were made in every particular version. From version 0.7.6 *Dependency Injector* framework strictly follows `Semantic versioning`_ 4.23.3 ------ - Fix mistakenly processed awaitable objects in async mode. This bug has corrupted ``fastapi-redis`` example causing pool exhaustion. Thanks to Ilya Miroshnichenko and Valery Komarov for finding and reporting the issue. - Refactor async mode. 4.23.2 ------ - Improve async mode exceptions handling. - Fix double printing of exception when async resource initialization causes an error. 4.23.1 ------ - Hotfix a bug with importing FastAPI ``Request``. See issue: `#398 `_. Thanks to `@tapm `_ for reporting the bug. 4.23.0 ------ - Add support of aliases for ``Configuration`` provider. See issue: `#394 `_. Thanks to `@gtors `_ for suggesting the feature. 4.22.1 ------ - Pin ``sphinx`` version to hotfix docs build. - Fix a typo in docs. 4.22.0 ------ - Add method ``container.check_dependencies()`` to check if all container dependencies are defined. See issue: `#383 `_. Thanks to `@shaunc `_ for suggesting the feature. - Add container name to the representation of the ``Dependency`` provider. - Add docs cross-links between ``Singleton`` provider and "Reset container singletons" pages. 4.21.0 ------ - Improve ``Dependency`` provider error message: when dependency is undefined, error message contains its name. 4.20.2 ------ - Move docs on container "self" injections to "Providers" section. 4.20.1 ------ - Refactor containers module. 4.20.0 ------ - Add container "self" injections. See issue: `#364 `_. Thanks to `@shaunc `_ for suggesting the feature. 4.19.0 ------ - Add ``singleton.full_reset()`` method to reset all underlying singleton providers. - Fix ``container.reset_singleton()`` to reset all provider types, not only ``Singleton``. - Improve ``container.traverse(types=[...])`` and ``provider.traverse(types=[...])`` typing stubs to return ``types`` -typed iterator. - Update docs on creating custom providers with a requirement to specify ``.related`` property. 4.18.0 ------ - Add ``container.reset_singleton()`` method to reset container singletons. - Refactor ``container.apply_container_providers_overridings()`` to use ``container.traverse()``. This enables deep lazy initialization of ``Container`` providers. - Add tests for ``Selector`` provider. - Add tests for ``ProvidedInstance`` and ``MethodCaller`` providers. - Update Makefile to make Python 3 tests to be a default test command: ``make test``. 4.17.0 ------ - Add ``FastAPI`` + ``SQLAlchemy`` example. Thanks to `@ShvetsovYura `_ for providing initial example: `FastAPI_DI_SqlAlchemy `_. 4.16.0 ------ - Add container base class ``containers.Container``. ``DynamicContainer`` and ``DeclarativeContainer`` become subclasses of the ``Container``. See issue: `#386 `_. Thanks to `@ventaquil `_ for reporting the issue. 4.15.0 ------ - Add ``Configuration.from_pydantic()`` method to load configuration from a ``pydantic`` settings. 4.14.0 ------ - Add container providers traversal. - Fix an issue with ``container.init_resource()`` and ``container.shutdown_resource()`` ignoring nested resources that are not present on the root level. See issue: `#380 `_. Thanks to `@approxit `_ for finding and reporting the issue. - Add ``.provides`` attribute to ``Singleton`` and its subclasses. It's a consistency change to make ``Singleton`` match ``Callable`` and ``Factory`` interfaces. - Add ``.initializer`` attribute to ``Resource`` provider. - Update string representation of ``Resource`` provider. 4.13.2 ------ - Fix PyCharm typing warning "Expected type 'Optional[Iterable[ModuleType]]', got 'List[module.py]' instead" in ``container.wire()`` method. 4.13.1 ------ - Fix declarative container metaclass bug: parent container providers replaced child container providers. See issue: `#367 `_. Many thanks to `Shaun Cutts `_ for finding and report the issue. 4.13.0 ------ - Add ``default`` argument to the dependency provider: ``Dependency(..., default=...)``. See issue: `#336 `_. Many thanks to `Shaun Cutts `_ for providing the use case. 4.12.0 ------ - Add wiring import hook that auto-wires dynamically imported modules. See issue: `#365 `_. Thanks to `@Balthus1989 `_ for providing a use case. 4.11.3 ------ - Replace weakrefs with normal refs in ``ConfigurationOption`` to support ``Container().provider()`` use case. Test that it does not introduce a memory leak. See issue: `#358#issuecomment-764482059 `_. Many thanks to `@Minitour `_ for reporting the issue. 4.11.2 ------ - Fix a bug in ``providers.Container`` when it's declared not at class root level. See issue `#379 `_. Many thanks to `@approxit `_ for reporting the issue. 4.11.1 ------ - Fix a bug in ``@containers.copy`` to improve replacing of subcontainer providers. See issue `#378 `_. Many thanks to `Shaun Cutts `_ for reporting the issue. 4.11.0 ------ - Add ``loader`` argument to the configuration provider ``Configuration.from_yaml(..., loader=...)`` to override the default YAML loader. Many thanks to `Stefano Frazzetto `_ for suggesting an improvement. - Make security improvement: change default YAML loader to the custom ``yaml.SafeLoader`` with a support of environment variables interpolation. Many thanks to `Stefano Frazzetto `_ for suggesting an improvement. - Update configuration provider ``.from_*()`` methods to raise an exception in strict mode if configuration file does not exist or configuration data is undefined. Many thanks to `Stefano Frazzetto `_ for suggesting an improvement. - Add ``required`` argument to the configuration provider ``.from_*()`` methods to specify mandatory configuration sources. Many thanks to `Stefano Frazzetto `_ for suggesting an improvement. - Fix a bug with asynchronous injections: async providers do not work with async dependencies. See issue: `#368 `_. Thanks `@kolypto `_ for the bug report. - Refactor asynchronous injections. - Add extra tests for asynchronous injections. - Migrate CI to Github Actions. 4.10.3 ------ - Fix a bug in the ``Configuration`` provider: strict mode didn't work when provider is overridden by ``None``. See issue: `#358#issuecomment-761607432 `_. Many thanks to `Stefano Frazzetto `_ for reporting the issue. 4.10.2 ------ - Fix a bug in ``Resource`` that cause failure when async resource depends on another async resource. See issue `#361 `_. Thanks `@kolypto `_ for the bug report. 4.10.1 ------ - Fix a Python 3.9 specific bug in ``wiring`` module: introspection doesn't work for builtin ``types.GenericAlias``. This resulted in wiring failure for modules importing ``queue.Queue``. See issue `#362 `_. Thanks `@ventaquil `_ for the bug report. - Switch Coveralls reporting Travis Job to run on Python 3.9. 4.10.0 ------ - Add ``strict`` mode and ``required`` modifier for ``Configuration`` provider. See issue `#341 `_. Thanks `ms-lolo `_ for the feature request. 4.9.1 ----- - Fix a bug in the ``Configuration`` provider to correctly handle undefined values. See issue `#358 `_. Many thanks to `Stefano Frazzetto `_ for reporting the issue. 4.9.0 ----- - Add ``.dependencies`` attribute to the ``DeclarativeContainer`` and ``DynamicContainer``. It returns dictionary of container ``Dependency`` and ``DependenciesContainer`` providers. See issue `#357 `_. Many thanks to `Shaun Cutts `_ for suggesting the feature. 4.8.3 ----- - Fix a bug in the ``Configuration`` provider to correctly handle overriding by ``None``. See issue `#358 `_. Many thanks to `Stefano Frazzetto `_ for reporting the issue. 4.8.2 ----- - Fix ``Container`` provider to apply context overridings on root container initialization. See issue `#354 `_. Many thanks to `Shaun Cutts `_ for submitting the issue. - Hotfix for version ``4.8.0``: fix side effect in ``Container`` provider overriding. 4.8.1 ----- - Fix declarative container multi-level inheritance issue. See issue `#350 `_. Many thanks to `Shaun Cutts `_ for submitting the issue. 4.8.0 ----- - Add support of overriding ``Container`` provider. See issue `#354 `_. Many thanks to `Shaun Cutts `_ for submitting the issue. 4.7.0 ----- - Add container injection support for wiring. 4.6.1 ----- - Add Disqus comments widget to the provider's async injections docs page. 4.6.0 ----- - Add support of async injections for providers. - Add support of async injections for wiring. - Add support of async initializers for ``Resource`` provider. - Add ``FastAPI`` + ``Redis`` example. - Add ARM wheel builds. See issue `#342 `_ for details. - Fix a typo in `ext.flask` deprecation warning. See PR `#345 `_ for details. Thanks to `Fotis Koutoupas `_ for the fix. - Update copyright year. 4.5.4 ----- - Fix manylinux wheels uploading issue. See issue `#333 `_ for details. Thanks to `Richard Jones `_ for reporting the issue. 4.5.3 ----- - Fix ``4.5.2`` degradation bug in wiring ``@inject`` with not working ``FastAPI.Depends`` directive. See issue `#331 `_ for details. Thanks to `Juan Esteban Marín `_ for reporting the issue. - Add ``FastAPI`` tests. 4.5.2 ----- - Fix a bug in wiring ``@inject`` with not properly working ``FastAPI.Depends`` directive. See issue `#330 `_ for details. Thanks to `Lojka-oops `_ for reporting the issue. 4.5.1 ----- - Fix flake8 issue in ``Commands and Handlers`` example. 4.5.0 ----- - Add support of non-string keys for ``Dict`` provider. - Add simple ``FastAPI`` example. - Add ``Commands and Handlers`` example from issue `#327 `_. - Add extra typing test for provided instance of ``DependenciesContainer`` provider. 4.4.1 ----- - Improve ``FastAPI`` integration: handle ``Depends(Provide[...])``. - Update ``FastAPI`` example. - Remove a typo from the ``Flask`` tutorial. 4.4.0 ----- - Add ``@inject`` decorator. It helps to fix a number of wiring bugs and make wiring be more resilient. - Refactor ``wiring`` module. - Update documentation and examples to use ``@inject`` decorator. - Add ``Flask`` blueprints example. - Fix wiring bug when wiring doesn't work with the class-based decorators. - Fix wiring bug when wiring doesn't work with the decorators that doesn't use ``functools.wraps(...)``. - Fix wiring bug with ``@app.route(...)`` -style decorators (Flask, Sanic, FastAPI, etc.). - Fix wiring bug when wiring doesn't work with Flask blueprints. 4.3.9 ----- - Add ``FastAPI`` example. 4.3.8 ----- - Add a hotfix to support wiring for ``FastAPI`` endpoints. 4.3.7 ----- - Fix race in ``ThreadSafeSingleton``. Many thanks to `Dmitry Rassoshenko aka rda-dev `_ for the pull request (See PR `#322 `_). 4.3.6 ----- - Fix changelog typo. 4.3.5 ----- - Fix a bug in ``wiring`` module that caused multiple imports of the modules when ``.wire(packages=[...])`` is used (See issue `#320 `_). Thanks to `Federico iskorini `_ for reporting the issue. 4.3.4 ----- - Fix a bug in ``Configuration`` provider that resulted in not working ``.reset_override()`` (See issue `#319 `_). Thanks to `Jun lust4life `_ for reporting the issue and suggesting a fix. 4.3.3 ----- - Fix a bug in ``wiring`` with improper patching of ``@classmethod`` and ``@staticmethod`` decorated methods (See issue `#318 `_). 4.3.2 ----- - Fix a bug in ``wiring`` with mistakenly initialized and shutdown resource with ``Closing`` marker on context argument providing. 4.3.1 ----- - Fix README. 4.3.0 ----- - Implement per-function execution scope for ``Resource`` provider in tandem with ``wiring.Closing``. 4.2.0 ----- - Add support of Python 3.9. - Update readme. 4.1.8 ----- - Update asyncio daemon, single- and multi-container examples to use ``Resource`` provider. 4.1.7 ----- - Add CI job to build and push documentation to S3 bucket. 4.1.6 ----- - Fix wiring of multiple containers (see issue `#313 `_). Thanks to `iskorini `_ for reporting the issue. - Fix wiring for ``@classmethod``. 4.1.5 ----- - Fix Travis CI windows and MacOS builds. 4.1.4 ----- - Fix version of ``cibuildwheel==1.63``. - Update Travis CI webhooks to fix builds triggering. 4.1.3 ----- - Migrate from ``travis-ci.org`` to ``travis-ci.com`` to fix build issues. - Add explicit installation of ``certifi`` for Windows build to resolve build problems. 4.1.2 ----- - Bump version of ``cibuildwheel>=1.5.1`` to resolve Windows build problem. 4.1.1 ----- - Fix a few typos in ``Resource`` provider docs. 4.1.0 ----- - Add ``Resource`` provider. - Add ``Dict`` provider. - "Un-deprecate" ``@containers.override()`` and ``@containers.copy()`` decorators ( see `Issue 301 `_ for more information). - Add favicon. - Remove redirects that occur while getting badge images to optimize docs load speed. - Update license year. - Update short description on PyPI. 4.0.6 ----- - Fix wiring for top-level package ``__init__.py``. 4.0.5 ----- - Move ``.provided`` attribute to ``providers.Provider``. - Update all links in documentation and examples to use ``https://`` instead of ``http``. 4.0.4 ----- - Fix typing stubs for ``container.override()`` method. 4.0.3 ----- - Deprecate ``@containers.override()`` and ``@containers.copy()`` decorators. - Update changelog of version ``4.0.0`` so it lists all deprecated features. 4.0.2 ----- - Fix typing stubs for ``@container.override()`` and ``@containers.copy()`` decorators ( see `PR 302 `_). Thanks to `JarnoRFB `_ for reporting the issue. 4.0.1 ----- - Extend ``Configuration.from_ini()`` and ``Configuration.from_yaml()`` typing stubs to accept ``pathlib.Path``. The methods were already compatible with ``pathlib.Path`` and just did not accept it in their signatures (see `PR 300 `_). Fix was provided by `JarnoRFB `_. Many thanks to you again, JarnoRFB. 4.0.0 ----- New features: - Add ``wiring`` feature. Deprecations: - Deprecate ``ext.aiohttp`` module in favor of ``wiring`` feature. - Deprecate ``ext.flask`` module in favor of ``wiring`` feature. - Deprecate ``.delegate()`` provider method in favor of ``.provider`` attribute. Removals: - Remove deprecated ``types`` module. Tutorials: - Update ``flask`` tutorial. - Update ``aiohttp`` tutorial. - Update ``asyncio`` daemon tutorial. - Update CLI application tutorial. Examples: - Add ``django`` example. - Add ``sanic`` example. - Update ``aiohttp`` example. - Update ``flask`` example. - Update ``asyncio`` daemon example. - Update ``movie-lister`` example. - Update CLI application example. Misc: - Regenerate C sources using Cython 0.29.21. - Improve documentation and README (typos removal, rewording, etc). 3.44.0 ------ - Add native support of the generics to the providers: ``some_provider = providers.Provider[SomeClass]``. - Deprecate module ``types``. - Add documentation page on providers typing and ``mypy`` support. - Update README. 3.43.1 ------ - Fix a typo in README. 3.43.0 ------ - Update API documentation. - Remove not relevant "speech" example. - Fix a few typos. 3.42.0 ------ - Update "DI in Python" documentation page. - Delete "What is DI?" documentation page. - Delete "engines cars" example mini app. - Update README. 3.41.0 ------ - Refactor "use cases" example. - Refactor "password hashing" example. - Refactor "chained factories" pattern example. - Refactor "factory of factories" pattern example. - Fix declarative container mypy stub to ``__init__`` to accept not only providers. - Refactor main module of the "decoupled packages" example. - Delete "api client" example mini app. - Delete "mail service" example mini app. 3.40.0 ------ - Add "Decoupled packages" example. - Delete "Bundles" examples mini application. 3.39.0 ------ - Add application examples with single and multiple containers. - Remove "Services" application examples. - Split examples page into "Examples" with main examples and "Other Examples" with secondary examples. - Move "Installation" page to "Introduction" section. 3.38.1 ------ - Fix README. 3.38.0 ------ - Update "What is What is dependency injection?" documentation page. - Update README. - Fix a bunch of typos. 3.37.0 ------ - Update index documentation page. - Make multiple improvements and fixes for the providers documentation. - Update "Key Features" documentation page. - Remove "Structure of Dependency Injector" documentation page. - Edit "Feedback" documentation page. 3.36.0 ------ - Update providers overriding documentation and rework examples. - Update documentation on injecting provided object attributes, items or method calls. - Update documentation and example on creating a custom provider. - Update providers index documentation page to give better overview of providers functionality. - Fix mypy stub of the ``Provider`` to specify the protected ``._copy_overridings()`` method. - Update copyright year in the documentation. 3.35.1 ------ - Fix minor issues in the providers documentation and examples. 3.35.0 ------ - Update documentation and rework examples for: ``Singleton``, ``Callable``, ``Coroutine``, ``Object``, ``List``, ``Configuration``, ``Selector``, and ``Dependency`` providers. - Fix mypy stub of the ``DeclarativeContainer`` to specify the ``__init__`` interface. 3.34.0 ------ - Update ``Factory`` provider documentation. - Rework ``Factory`` provider examples. 3.33.0 ------ - Add typing stubs. 3.32.3 ------ - Fix few typos on README and docs main pages. 3.32.2 ------ - Make a fix in the factory delegation example (thanks to `Joël Bourgault `_ for finding and reporting the issue). 3.32.1 ------ - Update DI Demo 2 example and READ to make typed configuration option injection. 3.32.0 ------ - Add a feature that helps to explicitly specify the type of the configuration option value before the injection. - Add disqus comments to the docs page on injecting provided instance attributes, items, etc. 3.31.0 ------ - Add a feature that helps to inject provided instance attribute, item, or method call result (see `Issue 281 `_). Design for this feature was provided by `JarnoRFB `_. Many thanks to you, JarnoRFB. 3.30.4 ------ - Update README. 3.30.3 ------ - Update README. - Update containers documentation and examples. 3.30.2 ------ - Update README. 3.30.1 ------ - Update README. - Add one more example. 3.30.0 ------ - Rework ``Movie Lister`` example. - Add tutorial for building ``Movie Lister``. - Make some rewording for the other tutorials. - Fix a couple of typos. 3.29.0 ------ - Update README with the more direct message on what is ``Dependency Injector`` and how is it different from the other frameworks. - Change the example code in the README. - Add FAQ to the README. - Update documentation key features and index pages. 3.28.1 ------ - Fix typos in the ``asyncio`` + ``Dependency Injector`` monitoring daemon tutorial. 3.28.0 ------ - Add ``asyncio`` + ``Dependency Injector`` example ``monitoring-daemon-asyncio``. - Add ``asyncio`` + ``Dependency Injector`` monitoring daemon tutorial. - Fix a typo in the docblock of the ``Configuration`` provider. - Fix multiple typos in the ``flask`` and ``aiohttp`` tutorials. - Fix ``Makefile`` to run ``aiohttp`` integration tests on Python 3.5+. 3.27.0 ------ - Add deep init injections overriding for ``Factory`` provider. - Add ``asyncio`` monitoring daemon example. 3.26.0 ------ - Add configuration itemselector feature (see `Issue 274 `_). - Re-design ``Configuration`` provider implementation. - Update ``giphynav-aiohttp`` to remove doubled "if not query" (many thanks to `Oleg Baranov `_ for the feedback). 3.25.1 ------ - Fix ``aiohttp`` tutorial typos. 3.25.0 ------ - Add ``aiohttp`` tutorial. - Fix ``Flask`` tutorial typos and change some wording. 3.24.1 ------ - Update Google Search Console verification meta tag. - Update meta description. 3.24.0 ------ - Add ``Aiohttp`` integration module ``dependency_injector.ext.aiohttp``. - Add ``Aiohttp`` + ``Dependency Injector`` example ``giphynav-aiohttp``. 3.23.2 ------ - Fix ``Flask`` tutorial code issues, typos and change some wording. 3.23.1 ------ - Fix an issue with creating ``Dependency`` provider with ``abc.ABCMeta``. Thanks to `awaizman1 `_. More info: `Issue #266 `_, `PR #267 `_. 3.23.0 ------ - Add ``Flask`` tutorial. - Add PyPI classifiers. 3.22.0 ------ - Migrate docs to ``alabaster`` theme. - Add ``Bootstrap`` extension to the ``ghnav-flask`` example. - Add stubs for the tutorials to the docs. 3.21.2 ------ - Hotfix changelog typo. 3.21.1 ------ - Hotfix ``ghnav-flask`` example to read Github token from environment variable. 3.21.0 ------ - Re-design ``Flask`` integration. - Make cosmetic fixes for ``Selector`` provider docs. 3.20.1 ------ - Hotfix Windows builds. 3.20.0 ------ - Add ``Flask`` integration module ``dependency_injector.ext.flask``. - Add ``Flask`` + ``Dependency Injector`` example ``ghnav-flask``. - Add ``Factory.provides`` attribute. It is an alias to the ``Factory.cls``. - New README. 3.19.2 ------ - Add logo. 3.19.1 ------ - Start distributing wheels for Linux, MacOS, and Windows (thanks to `Travis CI `_ and `cibuildwheel `_). - Start using ``twine`` for publishing package on PyPI. - Fix Travis CI configuration file warnings. 3.19.0 ------ - Add ``Selector`` provider. - Fix ``Configuration.override()`` to return ``OverridingContext`` for non-dictionary values. 3.18.1 ------ - Add interpolation of environment variables to ``Configuration.from_yaml()`` and ``Configuration.from_ini()``. - Add ignoring of ``IOError`` to ``Configuration.from_yaml()``. 3.18.0 ------ - Add ``Configuration.from_yaml()`` method to load configuration from the yaml file. - Add ``Configuration.from_ini()`` method to load configuration from the ini file. - Add ``Configuration.from_dict()`` method to load configuration from the dictionary. - Add ``Configuration.from_env()`` method to load configuration from the environment variable. - Add default value for ``name`` argument of ``Configuration`` provider. - Add documentation for ``Configuration`` provider. - Remove undocumented positional parameter of ``DependenciesContainer`` provider. 3.17.1 ------ - Fix ``DynamicContainer`` deep-copying bug. 3.17.0 ------ - Add ``Container`` provider. - Add ``Configuration`` providers linking. 3.16.1 ------ - Update ``singleton_thread_locals.py`` to support Python 3 (thanks to `RobinsonMa `_, `PR #252 `_). - Fix Disqus comments. - Fix warnings in API docs. 3.16.0 ------ - Add ``List`` provider `issue #243 `_, `PR #251 `_. - Fix a few typos in docs (thanks to `Bruno P. Kinoshita `_, `issue #249 `_, `PR #250 `_). - Add support of six 1.15.0. - Regenerate C sources using Cython 0.29.20. 3.15.6 ------ - Fix changelog typo. 3.15.5 ------ - Add downloads badge. 3.15.4 ------ - Update a link to the PyPi page on the README page. 3.15.3 ------ - Fix a typo in the link to the PyPi on the "Dependency Injection in Python" documentation page. - Fix a couple of typos in the list of key features on the "Key Features" and index documentation pages. - Update a link to the PyPi page on a couple of documentation pages. 3.15.2 ------ - Fix a typo in the installation instructions on the README page and in the documentation. 3.15.1 ------ - Fix a couple of typos in the README. - Fix a couple of types in the diagram of "Engines-Cars" example. 3.15.0 ------ - Add Python 3.8 support. - Add PyPy 3.6 support. - Add support of six 1.14.0. - Add support of six 1.13.0. - Regenerate C sources using Cython 0.29.14. - Remove Python 2-ish inheritance from ``object`` in example modules. - Replace Python 2-ish ``super(class, self).__init__()`` calls with Python 3-ish ``super().__init__()`` in example modules. - Fix doc block errors in example modules, including related to PEP257-compliance. - Clean up tox.ini file. 3.14.12 ------- - Fix ``3.14.11`` degradation issue causing inability of using ``Delegate`` provider in ``DeclarativeContainer`` when this container is instantiated with overriding of delegating provider (thanks to `GitterRemote `_, issue details are here `#235 `_). 3.14.11 ------- - Fix issue causing creation of a copy of provided object by ``Object`` provider when it was a part of ``DeclarativeContainer`` and this container was instantiated (thanks to `davidcim `_, issue details are here `#231 `_). 3.14.10 ------- - Make spelling fix for the list of contributors. 3.14.9 ------ - Improve README - minor English nitpicking (thanks to `supakeen `_). 3.14.8 ------ - Regenerate C sources using Cython 0.29.13. 3.14.7 ------ - Fix typo on "Dependency injection and inversion of control in Python" docs page (thanks to `Dmitry (xotonic) `_). 3.14.6 ------ - Fix ``FactoryAggregate`` provider copying issue. - Regenerate C sources using Cython 0.29.7. 3.14.5 ------ - Fix issue causing ``ThreadLocalSingleton`` provider to return ``None`` after reset (thanks to `Jeroen Rietveld `_). - Add test for ``ThreadLocalSingleton`` provider reset functionality (thanks to `Jeroen Rietveld `_). - Regenerate C sources using Cython 0.29.6. 3.14.4 ------ - Fix typo in providers doc (thanks to `Vlad Ghita `_). 3.14.3 ------ - Fix issue with copying providers that have system streams injections (``sys.stdin``, ``sys.stdout`` and ``sys.stderr``). - Add support of six 1.12.0. - Regenerate C sources using Cython 0.29.2. 3.14.2 ------ - Set Cython ``language_level=2``. 3.14.1 ------ - Fix bug `#208 `_: version ``3.14.0`` hasn't worked on Python 3.5.2 (thanks to `Jeroen Entjes `_). - Remove deprecated ``assertEquals`` from tests. - Regenerate C sources using Cython 0.29. 3.14.0 ------ - Add ``Coroutine`` provider. - Add ``DelegatedCoroutine`` provider. - Add ``AbstractCoroutine`` provider. - Add ``CoroutineDelegate`` provider. - Fix type-hinting of ``*args`` & ``**kwargs`` that was specified in doc blocks of various providers and caused inspection problems in PyCharm. - Regenerate C sources using Cython 0.28.5. 3.13.2 ------ - Add additional benchmark of ``Factory`` provider. - Add tests and tox.ini to the distribution, so that they could be used after package is installed (thanks to `Tobias Happ `_). 3.13.1 ------ - Fix typo on "Chained Factories" pattern docs page. 3.13.0 ------ - Add Python 3.7 support. - Drop Python 3.3 support. - Drop Python 2.6 support. - Add example of "Chained Factories" pattern. - Add example of "Factory of Factories" pattern. 3.12.4 ------ - Fix bug `#200 `_. - Make some refactoring `#199 `_. 3.12.3 ------ - Fix bug `#198 `_. - Regenerate C sources using Cython 0.28.4. 3.12.2 ------ - Apply code style fixes to "services_v2" example miniapp. 3.12.1 ------ - Update main page example from "services_v1" to "services_v2". - Fix few typos on main page. - Add new example miniapp "password_hashing". - Add new example miniapp "services_v2". - Rename example miniapp "services" to "services_v1". - Fix incompatibility issue between Python 3.3, pip 10.0.0 and virtualenv 16.0.0 (`details `_) that caused failures of Python 3.3 tests on Travis. - Regenerate C sources using Cython 0.28.3. 3.12.0 ------ - Regenerate C sources using Cython 0.28.2. 3.11.3 ------ - Fix padding problem in code samples in docs. 3.11.2 ------ - Fix padding problem in code samples in docs. - Remove ``autodoc`` from the list of documentation dependencies. 3.11.1 ------ - Fix small typo in documentation (thanks to James Lafa). 3.11.0 ------ - Improve ``Configuration`` provider overriding logic. - Refactor ``Configuration`` provider. - Improve ``DependenciesContainer`` provider overriding logic. - Update "services" example miniapp. - Update "bundles" example miniapp. 3.10.0 ------ - Add ``DependenciesContainer`` provider. - Add "use_cases" example miniapp. - Update documentation requirements to use fixed version of ``sphinxcontrib-disqus``. 3.9.1 ----- - Fix docs build problem (``sphinx`` is frozen on ``1.5.6`` version because of incompatibility with ``sphinxcontrib-discus``). - Add badge for docs. 3.9.0 ----- - Change initialization of declarative container, so it accepts overriding providers as keyword arguments - ``DeclarativeContainer(**overriding_providers)``. - Add method to dynamic catalog for setting groups of providers - ``DynamicContainer.set_providers(**providers)``. - Add method to dynamic catalog for overriding groups of providers - ``DynamicContainer.set_providers(**overriding_providers)``. - Rename ``ExternalDependency`` provider to ``Dependency``. - Add default value for ``instance_of`` argument of ``Dependency`` provider - ``Dependency(instance_of=object)``. - Fix bug when copying ``Configuration`` provider. - Regenerate C sources using Cython 0.27.3. - Add "bundles" example miniapp. 3.8.2 ----- - Fix padding problem in code samples in docs (part 2). 3.8.1 ----- - Fix padding problem in code samples in docs. 3.8.0 ----- - Add ``DeclarativeContainer.containers`` attribute that stores dictionary of nested containers. - Fix bug related to double-overridden providers (provider1 -> provider2 -> provider3). 3.7.1 ----- - Add support of six 1.11.0. 3.7.0 ----- - Add ``FactoryAggregate`` provider. - Add ``Provider.provider`` dynamic attribute that return new provider's delegate (alias of method ``Provider.delegate()``). - Add support of six 1.11.0. - Regenerate C sources using Cython 0.27.1. 3.6.1 ----- - Regenerate C sources using Cython 0.26. 3.6.0 ----- - Add ``CallableDelegate`` provider. - Add ``FactoryDelegate`` provider. - Add ``SingletonDelegate`` provider. 3.5.0 ----- - Add functionality for initializing ``Configuration`` provider with default values. 3.4.8 ----- - Code style fixes in ``providers`` module. 3.4.7 ----- - Correct typo in changelog. 3.4.6 ----- - Add "Useful links" section to the "Dependency injection and inversion of control in Python" article. 3.4.5 ----- - Remove non-ascii character from README. This character created an installation problem on Debian (Python 3.4). 3.4.4 ----- - Add ``Provider.last_overriding`` read-only property that points to last overriding provider, if any. If target provider is not overridden, ``None`` would be returned. - Update example of writing custom providers. - Update movie lister example miniapp. - Update source of ``coveralls.io`` badge. 3.4.3 ----- - Update doc block for ``Provider.overriding_lock`` attribute. 3.4.2 ----- - Make ``Provider`` overriding methods thread safe: ``Provider.override(provider)``, ``Provider.reset_last_overriding()``, ``Provider.reset_override()``. - Refactor storage locking of ``ThreadSafeSingleton`` provider. - Fix few ``pydocstyle`` errors in examples. 3.4.1 ----- - Update movie lister example miniapp with ``AbstractFactory`` provider. 3.4.0 ----- - Add ``AbstractCallable`` provider. - Add ``AbstractFactory`` provider. - Add ``AbstractSingleton`` provider. - Optimize calling of overridden providers (~15% faster). 3.3.7 ----- - Fix minor bug related to patch of ``Configuration`` provider in version 3.3.6 - special attributes were identified by formula ``__{text}`` - now they are identified by formula ``__{text}__``, that is more correct according to Python Data Model. 3.3.6 ----- - Patch ``Configuration`` provider to raise ``AttributeError`` when there is an attempt to access special attribute like ``__module__`` or ``__name__`` (this behaviour is identical to behaviour of ``object``). - Apply minor refactoring for ``providers`` module. - Remove cythonization from travis building process. 3.3.5 ----- - [Refactoring] Consolidate all containers in ``dependency_injector.containers`` module. - [Refactoring] Consolidate all providers in ``dependency_injector.providers`` module. 3.3.4 ----- - Change ``__module__`` attribute for all members of ``dependency_injector.containers`` package to point to package, but not to package modules. - Regenerate C sources using Cython 0.25.2. 3.3.3 ----- - Update services miniapp example. 3.3.2 ----- - Add `disqus.com `_ comments for documentation. - Fix reference to version in api docs. - Fix title underline in containers api docs. - Update documentation copyright year. - Update example version in installation document. 3.3.1 ----- - Add some improvements to the documentation. 3.3.0 ----- - Add support of Python 3.6. 3.2.5 ----- - Add description of structure into README. - Fix documentation errors. 3.2.4 ----- - Switch to single version of documentation for getting shorter urls (without ``/en/stable/``). Add appropriate redirects for compatibility with previous links. - Update copyright date. 3.2.3 ----- - Add examples into README. - Make minor documentation updates. 3.2.2 ----- - Change name of version variable to follow PEP8: ``VERSION`` -> ``__version__``. 3.2.1 ----- - Update ``services`` miniapp example. 3.2.0 ----- - Add ``Configuration`` provider for late static binding of configuration options. 3.1.5 ----- - Refactor provider internals: C functions naming scheme and code layout. - Add Terrence Brannon (metaperl) to the list of contributors. 3.1.4 ----- - Move ``inline`` functions from class level to module level for removing them from virtual table and enable inlining. 3.1.3 ----- - Fix flake8 ``E305`` error in examples. 3.1.2 ----- - Remove ``public`` (``extern``) modifier utils constants. - Fix flake8 ``E305`` error in examples. 3.1.1 ----- - Fix minor typo in README. 3.1.0 ----- - Add "Services mini application" example. - Fix minor error in ``Factory`` provider API doc. 3.0.1 ----- - Add ``*.c`` source files under version control. - Change keywords. 3.0.0 ----- - **Providers** 1. All providers from ``dependency_injector.providers`` package are implemented as C extension types using Cython. 2. Add ``BaseSingleton`` super class for all singleton providers. 3. Make ``Singleton`` provider not thread-safe. It makes performance of ``Singleton`` provider 10x times faster. 4. Add ``ThreadSafeSingleton`` provider - thread-safe version of ``Singleton`` provider. 5. Add ``ThreadLocalSingleton`` provider - ``Singleton`` provider that uses thread-local storage. 6. Remove ``provides`` attribute from ``Factory`` and ``Singleton`` providers. 7. Add ``set_args()`` and ``clear_args()`` methods for ``Callable``, ``Factory`` and ``Singleton`` providers. - **Containers** 1. Module ``dependency_injector.containers`` was split into submodules without any functional changes. - **Utils** 1. Module ``dependency_injector.utils`` is split into ``dependency_injector.containers`` and ``dependency_injector.providers``. - **Miscellaneous** 1. Remove ``@inject`` decorator. 2. Add makefile (``clean``, ``test``, ``build``, ``install``, ``uninstall`` & ``publish`` commands). 3. Update repository structure: 1. Sources are moved under ``src/`` folder. 2. Tests are moved under ``tests/unit/`` folder. 2.2.10 ------ - Fix typo in README. 2.2.9 ----- - Add github badges to readme and docs index pages. - Update service names in services example miniapp. - Create engines & cars example miniapp. 2.2.8 ----- - Move fixtures to separate module in movie lister example. 2.2.7 ----- - Fix typo in README. 2.2.6 ----- - Update README. - Update docs index page. 2.2.5 ----- - Fix typo in README. 2.2.4 ----- - Update README. 2.2.3 ----- - Update README. 2.2.2 ----- - Update README. 2.2.1 ----- - Update examples. 2.2.0 ----- - Deprecate ``inject`` decorator. 2.1.1 ----- - Normalize package names by PEP-503. 2.1.0 ----- - Add ``ThreadLocalSingleton`` and ``DelegatedThreadLocalSingleton`` providers. - Add documentation section about singleton providers and multi-threading. - Update API docs of creational providers. 2.0.0 ------ - Introduce new injections style for ``Callable``, ``Factory`` & ``Singleton`` providers. - Drop providers: ``Static``, ``Value``, ``Function``, ``Class``, ``Config``. - Increase performance of making injections in 2 times (+100%). - Drop method injections. - Simplify providers overriding system. - Replace ``catalogs`` package with ``containers`` module. - Drop all backward compatibilities for 1.x. - Refactor most of the components. - Update documentation. 1.17.0 ------ - Add ``add_injections()`` method to ``Callable``, ``DelegatedCallable``, ``Factory``, ``DelegatedFactory``, ``Singleton`` and ``DelegatedSingleton`` providers. - Fix bug with accessing to declarative catalog attributes from instance level. 1.16.8 ------ - Fix some typos in introduction section of documentation. 1.16.7 ------ - Add some changes into introduction section of documentation. 1.16.5 ------ - Move project to ``https://github.com/ets-labs/python-dependency-injector``. - Move project docs to ``http://python-dependency-injector.ets-labs.org/``. 1.16.4 ------ - Add some documentation improvements. 1.16.1 ------ - Add ``@copy`` decorator for copying declarative catalog providers. - Add line numbers for all code samples in documentation. - Add "Examples" section into documentation. - Add "Movie Lister" example. - Add "Services" example. - Move project documentation into organisation's domain (dependency-injector.ets-labs.org). 1.15.2 ------ - [Refactoring] split ``catalogs`` module into smaller modules, ``catalogs`` module become a package. - [Refactoring] split ``providers`` module into smaller modules, ``providers`` module become a package. - Update introduction documentation. 1.15.1 ------ - Update package information and documentation. 1.15.0 ------ - Add ``Provider.provide()`` method. ``Provider.__call__()`` become a reference to ``Provider.provide()``. - Add provider overriding context. - Update main examples and README. 1.14.11 ------- - Update README. 1.14.10 ------- - Add "catalog-providing-callbacks" example and several tests for it. 1.14.9 ------ - Add ``override`` decorator in providers module. - Add storing of originally decorated instance in ``inject`` decorator. - Add several refactorings. - Switch to ``pydocstyle`` tool from ``pep257``. 1.14.8 ------ - Update README. 1.14.7 ------ - Add one more example in README (inline providers and injections). 1.14.6 ------ - Add ``cls`` alias for ``provides`` attributes of ``Factory``, ``DelegatedFactory``, ``Singleton`` and ``DelegatedSingleton`` providers. 1.14.5 ------ - Fix typo in provider's error message. 1.14.4 ------ - Update documentation. 1.14.3 ------ - Optimize internals of providers. - Optimize ``Callable`` provider. - Optimize ``Factory`` provider. - Optimize ``Singleton`` provider. 1.14.2 ------ - Update documentation and description. 1.14.1 ------ - Add meta description & keywords on docs index page. 1.14.0 ------ - Drop support of Python 3.2. 1.13.2 ------ - Update PyPi info. 1.13.1 ------ - Transfer ownership to `ETS Labs `_. 1.13.0 ------ - Add ``DelegatedCallable`` provider. - Add ``DelegatedFactory`` provider. - Add ``DelegatedSingleton`` provider. - Add some documentation improvements. 1.12.0 ------ - Add possibility to specialize ``Factory`` provided type. - Add possibility to specialize ``Singleton`` provided type. - Add possibility to specialize ``DeclarativeCatalog`` provider type. - Add possibility to specialize ``DynamicCatalog`` provider type. - Make some refactorings for providers. 1.11.2 ------ - Improve representation of providers and injections. 1.11.1 ------ Previous state of *Dependency Injector* framework (0.11.0 version) is considered to be production ready / stable, so current release is considered to be the first major release. - Increase major version. - Backward compatibility with all previous versions above 0.7.6 has been saved. 0.11.0 ------ - Rename ``AbstractCatalog`` to ``DeclarativeCatalog`` (with backward compatibility). - Rename ``catalog`` module to ``catalogs`` with backward compatibility. - Implement dynamic binding of providers for ``DeclarativeCatalog``. - Add ``DynamicCatalog``. - Change restrictions for providers-to-catalogs bindings - provider could be bound to several catalogs with different names. - Restrict overriding of providers by themselves. - Restrict overriding of catalogs by themselves. - Make ``DeclarativeCatalog.last_overriding`` attribute to be ``None`` by default. - Make ``Provider.last_overriding`` attribute to be ``None`` by default. - Refactor catalogs and providers modules. - Add API documentation - Improve user's guides and examples. 0.10.5 ------ - Add more representable implementation for ``AbstractCatalog`` and ``AbstractCatalog.Bundle``. 0.10.4 ------ - Remove VERSION file from MANIFEST.in. 0.10.3 ------ - Update example docblocks. 0.10.2 ------ - Fix bug with injecting entities that implement ``__getattr__``. 0.10.1 ------ - Update some examples. 0.10.0 ------ - Add functionality for creating ``AbstractCatalog`` provider bundles. - Improve ``AbstractCatalog`` inheritance. - Improve ``AbstractCatalog`` overriding. - Add images for catalog "Writing catalogs" and "Operating with catalogs" examples. - Add functionality for using positional argument injections with ``Factory``, ``Singleton``, ``Callable`` providers and ``inject`` decorator. - Add functionality for decorating classes with ``@inject``. - Add ``Singleton.injections`` attribute that represents a tuple of all ``Singleton`` injections (including args, kwargs, attributes and methods). - Add ``Callable.injections`` attribute that represents a tuple of all ``Callable`` injections (including args and kwargs). - Add optimization for ``Injection.value`` property that will compute type of injection once, instead of doing this on every call. - Add ``VERSION`` constant for verification of currently installed version. - Add support of Python 3.5. - Add support of six 1.10.0. - Add minor refactorings and code style fixes. 0.9.5 ----- - Change provider attributes scope to public. - Add ``Factory.injections`` attribute that represents a tuple of all ``Factory`` injections (including kwargs, attributes and methods). 0.9.4 ----- - Add minor documentation fixes. 0.9.3 ----- - Implement thread safety. 0.9.2 ----- - Add minor refactorings. 0.9.1 ----- - Add simplified syntax of kwarg injections for ``di.Factory`` and ``di.Singleton`` providers: ``di.Factory(SomeClass, dependency1=injectable_provider_or_value)``. - Add simplified syntax of kwarg injections for ``di.Callable`` provider: ``di.Callable(some_callable, dependency1=injectable_provider_or_value)`` - Add simplified syntax of kwarg injections for ``@di.inject`` decorator: ``@di.inject(dependency1=injectable_provider_or_value)``. - Optimize ``@di.inject()`` decorations when they were made several times for the same callback. - Add minor refactorings. - Fix of minor documentation issues. 0.8.1 ----- - ``Objects`` is renamed to ``Dependency Injector``. 0.7.8 ----- - Fixing @inject import bug in examples. 0.7.7 ----- - Fixing minor bug in concept example. 0.7.6 ----- - Adding support of six from 1.7.0 to 1.9.0. - Factory / Singleton providers are free from restriction to operate with classes only. This feature gives a change to use factory method and functions with Factory / Singleton providers. - All attributes of all entities that have to be protected was renamed using ``_protected`` manner. - Providers extending was improved by implementing overriding logic in ``Provider.__call__()`` and moving providing logic into ``Provider._provide()``. - ``NewInstance`` provider was renamed to ``Factory`` provider. ``NewInstance`` still can be used, but it considered to be deprecated and will be removed in further releases. - ``@inject`` decorator was refactored to keep all injections in ``_injections`` attribute of decorated callback. It will give a possibility to track all the injections of particular callbacks and gives some performance boost due minimizing number of calls for doing injections. - A lot of documentation updates were made. - A lot of examples were added. - Some minor refactorings were done. Previous versions ----------------- - While *Objects* was in alpha state, changes were not tracked. .. disqus:: .. _Semantic versioning: https://semver.org/