%global _empty_manifest_terminate_build 0 Name: python-dependency-injector Version: 4.41.0 Release: 1 Summary: Dependency injection framework for Python License: BSD New URL: https://github.com/ets-labs/python-dependency-injector Source0: https://mirrors.nju.edu.cn/pypi/web/packages/eb/c5/ec73412b4b460fe1ebeef8380d1aee5e8bd0374a2e234a05b5d40b0b3db0/dependency-injector-4.41.0.tar.gz Requires: python3-six Requires: python3-aiohttp Requires: python3-flask Requires: python3-pydantic Requires: python3-pyyaml %description ``Dependency Injector`` is a dependency injection framework for Python. It helps implement the dependency injection principle. Key features of the ``Dependency Injector``: - **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``, ``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency``, and ``Selector`` providers that help assemble your objects. See `Providers `_. - **Overriding**. Can override any provider by another provider on the fly. This helps in testing and configuring dev/stage environment to replace API clients with stubs etc. See `Provider overriding `_. - **Configuration**. Reads configuration from ``yaml``, ``ini``, and ``json`` files, ``pydantic`` settings, environment variables, and dictionaries. See `Configuration provider `_. - **Resources**. Helps with initialization and configuring of logging, event loop, thread or process pool, etc. Can be used for per-function execution scope in tandem with wiring. See `Resource provider `_. - **Containers**. Provides declarative and dynamic containers. See `Containers `_. - **Wiring**. Injects dependencies into functions and methods. Helps integrate with other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See `Wiring `_. - **Asynchronous**. Supports asynchronous injections. See `Asynchronous injections `_. - **Typing**. Provides typing stubs, ``mypy``-friendly. See `Typing and mypy `_. - **Performance**. Fast. Written in ``Cython``. - **Maturity**. Mature and production-ready. Well-tested, documented, and supported. from dependency_injector import containers, providers from dependency_injector.wiring import Provide, inject class Container(containers.DeclarativeContainer): config = providers.Configuration() api_client = providers.Singleton( ApiClient, api_key=config.api_key, timeout=config.timeout, ) service = providers.Factory( Service, api_client=api_client, ) @inject def main(service: Service = Provide[Container.service]) -> None: if __name__ == "__main__": container = Container() container.config.api_key.from_env("API_KEY", required=True) container.config.timeout.from_env("TIMEOUT", as_=int, default=5) container.wire(modules=[__name__]) main() # <-- dependency is injected automatically with container.api_client.override(mock.Mock()): main() # <-- overridden dependency is injected automatically When you call the ``main()`` function the ``Service`` dependency is assembled and injected automatically. When you do testing, you call the ``container.api_client.override()`` method to replace the real API client with a mock. When you call ``main()``, the mock is injected. You can override any provider with another provider. It also helps you in a re-configuring project for different environments: replace an API client with a stub on the dev or stage. With the ``Dependency Injector``, object assembling is consolidated in a container. Dependency injections are defined explicitly. This makes it easier to understand and change how an application works. Visit the docs to know more about the `Dependency injection and inversion of control in Python `_. %package -n python3-dependency-injector Summary: Dependency injection framework for Python Provides: python-dependency-injector BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip BuildRequires: python3-cffi BuildRequires: gcc BuildRequires: gdb %description -n python3-dependency-injector ``Dependency Injector`` is a dependency injection framework for Python. It helps implement the dependency injection principle. Key features of the ``Dependency Injector``: - **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``, ``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency``, and ``Selector`` providers that help assemble your objects. See `Providers `_. - **Overriding**. Can override any provider by another provider on the fly. This helps in testing and configuring dev/stage environment to replace API clients with stubs etc. See `Provider overriding `_. - **Configuration**. Reads configuration from ``yaml``, ``ini``, and ``json`` files, ``pydantic`` settings, environment variables, and dictionaries. See `Configuration provider `_. - **Resources**. Helps with initialization and configuring of logging, event loop, thread or process pool, etc. Can be used for per-function execution scope in tandem with wiring. See `Resource provider `_. - **Containers**. Provides declarative and dynamic containers. See `Containers `_. - **Wiring**. Injects dependencies into functions and methods. Helps integrate with other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See `Wiring `_. - **Asynchronous**. Supports asynchronous injections. See `Asynchronous injections `_. - **Typing**. Provides typing stubs, ``mypy``-friendly. See `Typing and mypy `_. - **Performance**. Fast. Written in ``Cython``. - **Maturity**. Mature and production-ready. Well-tested, documented, and supported. from dependency_injector import containers, providers from dependency_injector.wiring import Provide, inject class Container(containers.DeclarativeContainer): config = providers.Configuration() api_client = providers.Singleton( ApiClient, api_key=config.api_key, timeout=config.timeout, ) service = providers.Factory( Service, api_client=api_client, ) @inject def main(service: Service = Provide[Container.service]) -> None: if __name__ == "__main__": container = Container() container.config.api_key.from_env("API_KEY", required=True) container.config.timeout.from_env("TIMEOUT", as_=int, default=5) container.wire(modules=[__name__]) main() # <-- dependency is injected automatically with container.api_client.override(mock.Mock()): main() # <-- overridden dependency is injected automatically When you call the ``main()`` function the ``Service`` dependency is assembled and injected automatically. When you do testing, you call the ``container.api_client.override()`` method to replace the real API client with a mock. When you call ``main()``, the mock is injected. You can override any provider with another provider. It also helps you in a re-configuring project for different environments: replace an API client with a stub on the dev or stage. With the ``Dependency Injector``, object assembling is consolidated in a container. Dependency injections are defined explicitly. This makes it easier to understand and change how an application works. Visit the docs to know more about the `Dependency injection and inversion of control in Python `_. %package help Summary: Development documents and examples for dependency-injector Provides: python3-dependency-injector-doc %description help ``Dependency Injector`` is a dependency injection framework for Python. It helps implement the dependency injection principle. Key features of the ``Dependency Injector``: - **Providers**. Provides ``Factory``, ``Singleton``, ``Callable``, ``Coroutine``, ``Object``, ``List``, ``Dict``, ``Configuration``, ``Resource``, ``Dependency``, and ``Selector`` providers that help assemble your objects. See `Providers `_. - **Overriding**. Can override any provider by another provider on the fly. This helps in testing and configuring dev/stage environment to replace API clients with stubs etc. See `Provider overriding `_. - **Configuration**. Reads configuration from ``yaml``, ``ini``, and ``json`` files, ``pydantic`` settings, environment variables, and dictionaries. See `Configuration provider `_. - **Resources**. Helps with initialization and configuring of logging, event loop, thread or process pool, etc. Can be used for per-function execution scope in tandem with wiring. See `Resource provider `_. - **Containers**. Provides declarative and dynamic containers. See `Containers `_. - **Wiring**. Injects dependencies into functions and methods. Helps integrate with other frameworks: Django, Flask, Aiohttp, Sanic, FastAPI, etc. See `Wiring `_. - **Asynchronous**. Supports asynchronous injections. See `Asynchronous injections `_. - **Typing**. Provides typing stubs, ``mypy``-friendly. See `Typing and mypy `_. - **Performance**. Fast. Written in ``Cython``. - **Maturity**. Mature and production-ready. Well-tested, documented, and supported. from dependency_injector import containers, providers from dependency_injector.wiring import Provide, inject class Container(containers.DeclarativeContainer): config = providers.Configuration() api_client = providers.Singleton( ApiClient, api_key=config.api_key, timeout=config.timeout, ) service = providers.Factory( Service, api_client=api_client, ) @inject def main(service: Service = Provide[Container.service]) -> None: if __name__ == "__main__": container = Container() container.config.api_key.from_env("API_KEY", required=True) container.config.timeout.from_env("TIMEOUT", as_=int, default=5) container.wire(modules=[__name__]) main() # <-- dependency is injected automatically with container.api_client.override(mock.Mock()): main() # <-- overridden dependency is injected automatically When you call the ``main()`` function the ``Service`` dependency is assembled and injected automatically. When you do testing, you call the ``container.api_client.override()`` method to replace the real API client with a mock. When you call ``main()``, the mock is injected. You can override any provider with another provider. It also helps you in a re-configuring project for different environments: replace an API client with a stub on the dev or stage. With the ``Dependency Injector``, object assembling is consolidated in a container. Dependency injections are defined explicitly. This makes it easier to understand and change how an application works. Visit the docs to know more about the `Dependency injection and inversion of control in Python `_. %prep %autosetup -n dependency-injector-4.41.0 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-dependency-injector -f filelist.lst %dir %{python3_sitearch}/* %files help -f doclist.lst %{_docdir}/* %changelog * Mon Apr 10 2023 Python_Bot - 4.41.0-1 - Package Spec generated