{ "info": { "author": "Ingmar Steen", "author_email": "iksteen@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# component-injector\n> A modern component / dependency injector for python 3.6+.\n\nThis library provides a framework-agnostic component (or dependency)\ninjector that injects registered components into your function calls.\nThe components to insert are identified by looking at the called\nfunction argument annotations.\n\nWhen registering a component, all its base classes are registered as\nwell unless you explicitly disable that. You can also choose to only\nregister base classes that are not already registered with the\ninjector.\n\nIt provides local scopes where you can register additional components\nor override existing components. After exiting the scope, the registry\nwill return to the state it was in before entering the scope.\n\n## Compatibility\n\n`component-injector` is compatible with python 3.6+ using the\nbackported `contextvars` and `dataclasses` packages.\n\nThe scopes are thread-safe and when using python 3.7 also safe for for\nuse with asyncio tasks.\n\n## Installation\n\n`component-injector` is available from pypi:\n\n```sh\npip install component-injector\n```\n\n## Usage example\n\nHere's a small demo on how to use the injector:\n\n```\nfrom component_injector import Injector\n\ninjector = Injector()\n\nclass O:\n pass\n\n@injector.inject\ndef consumer_of_o(o: O) -> None:\n print(o)\n\ninjector.register(O())\nconsumer_of_o() # 'o' wil be the registered instance.\n\nconsumer_of_o(O()) # 'o' will be this new instance.\n```\n\n_For more examples and usage, please refer to\n[demo.py](https://github.com/iksteen/component-injector/blob/master/demo.py)\nand\n[async_demo.py](https://github.com/iksteen/component-injector/blob/master/async_demo.py)._\n\n## Development setup\n\nFor development purposes, you can clone the repository and use\n[poetry](https://poetry.eustace.io/) to install and maintain the\ndependencies. There is no test suite. The project comes with a set of\npre-commit hooks that can format (isort, black) and check your code\n(mypy, flake8) automatically.\n\n```sh\ngit clone git@github.com:iksteen/component-injector.git\ncd component-injector\npoetry run pre-commit install\n```\n\n## Release History\n\n* 1.1.1\n * Fix incorrect type registration when not registering bases.\n * Fix typo in documentation (thanks @trbs!).\n\n* 1.1.0\n * Add documentation.\n * Add support for component factories. Asynchronous factories are\n supported as well when injecting into asynchronous functions.\n\n* 1.0.2\n * Fix bug where already bound arguments were overwritten.\n\n* 1.0.1\n * Fix links to examples.\n\n* 1.0.0\n * Initial Release.\n\n## Meta\n\nIngmar Steen \u2013 [@iksteen](https://twitter.com/iksteen)\n\nDistributed under the MIT license. See ``LICENSE`` for more information.\n\n[https://github.com/iksteen/](https://github.com/iksteen/)\n\n## Contributing\n\n1. Fork it ()\n2. Create your feature branch (`git checkout -b feature/fooBar`)\n3. Commit your changes (`git commit -am 'Add some fooBar'`)\n4. Push to the branch (`git push origin feature/fooBar`)\n5. Create a new Pull Request\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.github.com/iksteen/component-injector", "keywords": "", "license": "MIT", "maintainer": "Ingmar Steen", "maintainer_email": "iksteen@gmail.com", "name": "component-injector", "package_url": "https://pypi.org/project/component-injector/", "platform": "", "project_url": "https://pypi.org/project/component-injector/", "project_urls": { "Documentation": "https://component-injector.readthedocs.org/", "Homepage": "https://www.github.com/iksteen/component-injector", "Repository": "https://www.github.com/iksteen/component-injector.git" }, "release_url": "https://pypi.org/project/component-injector/1.1.1/", "requires_dist": [ "contextvars (>=2.3,<3.0); python_version < \"3.7\"", "dataclasses (>=0.6.0,<0.7.0); python_version < \"3.7\"" ], "requires_python": ">=3.6,<4.0", "summary": "A modern component / dependency injector for python 3.6+.", "version": "1.1.1" }, "last_serial": 4837073, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "174906236c5291348920cfe0f8e3618d", "sha256": "cfe837b326ef28569aa70b397aa4ba313e78d176b6a17e6f81ef23cb1a9e84a6" }, "downloads": -1, "filename": "component_injector-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "174906236c5291348920cfe0f8e3618d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4773, "upload_time": "2019-02-16T17:13:04", "url": "https://files.pythonhosted.org/packages/ac/13/17e76217419f29d6eb22d9eb474668873fcfafeb20edcb3ab0804457ea64/component_injector-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37bd274141a79da76a37fa71b6e20f27", "sha256": "376f230787ee51822a9247f15ab9b2076218bd18fa8dc3b4005a404d6740089d" }, "downloads": -1, "filename": "component-injector-1.0.0.tar.gz", "has_sig": false, "md5_digest": "37bd274141a79da76a37fa71b6e20f27", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3259, "upload_time": "2019-02-16T17:13:02", "url": "https://files.pythonhosted.org/packages/a3/76/eac4f28b594456239306dcd5cb48bfd7da647c69f01332246d4a17a3ceea/component-injector-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2227ea6f9919127f384264c3bc2bed8f", "sha256": "9e752ea33dbfa4269f13e3e433cbde98a164cb6d31486203e6af03a543329e6e" }, "downloads": -1, "filename": "component_injector-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2227ea6f9919127f384264c3bc2bed8f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4783, "upload_time": "2019-02-16T17:23:58", "url": "https://files.pythonhosted.org/packages/6c/da/42bf79628a451406d093dabde584d2e1336451384c57d11eb039843574a7/component_injector-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de0dc36b0c85b86bdb9c44cf6009130c", "sha256": "dac3a337fe9a2a0f06efb74f7a3dd993b1834999cb86fbe66ce09018b8fc5e91" }, "downloads": -1, "filename": "component-injector-1.0.1.tar.gz", "has_sig": false, "md5_digest": "de0dc36b0c85b86bdb9c44cf6009130c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3279, "upload_time": "2019-02-16T17:23:57", "url": "https://files.pythonhosted.org/packages/db/1f/734035972b4013652f413de8783686812480f528ce8325792dca3712d9be/component-injector-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "5e221c9cdf57dbe5d2be3dfe333ab2f8", "sha256": "fd381927efd925063703a596848cee08d89e049696ff0a9cdef5a4100b281938" }, "downloads": -1, "filename": "component_injector-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5e221c9cdf57dbe5d2be3dfe333ab2f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 4813, "upload_time": "2019-02-16T17:29:03", "url": "https://files.pythonhosted.org/packages/7c/78/5885df5874e1f5a06c396a749b819f3bd10186596ba931f782a3ff432352/component_injector-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c98a5da87fc128d43d0a467f463bdecd", "sha256": "950514e9eb3422c64635afff1b015b1759d73e3676cd457872103c7b824d458b" }, "downloads": -1, "filename": "component-injector-1.0.2.tar.gz", "has_sig": false, "md5_digest": "c98a5da87fc128d43d0a467f463bdecd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 3308, "upload_time": "2019-02-16T17:29:01", "url": "https://files.pythonhosted.org/packages/54/18/aaf476f0851b6f521dc2252f4d4423ce9c6869b758ecd95e8f93d2d47109/component-injector-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "19a5807fde3150df697f289a121604a0", "sha256": "58e8d25e831427121228fe56f3d81f2cce581e27ada88a98ce279b0f880a8715" }, "downloads": -1, "filename": "component_injector-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "19a5807fde3150df697f289a121604a0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 14277, "upload_time": "2019-02-17T23:06:09", "url": "https://files.pythonhosted.org/packages/af/80/696a067b719b05e298567f4f55a8e4e7e4e59066d82e495236c767faec02/component_injector-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "577c16d1a7a34701cea42bb606711ae5", "sha256": "20cb91b17a2e2f4a324e061abaf7c676104eb2cc233b30a56513320cee301a62" }, "downloads": -1, "filename": "component-injector-1.1.0.tar.gz", "has_sig": false, "md5_digest": "577c16d1a7a34701cea42bb606711ae5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5491, "upload_time": "2019-02-17T23:06:07", "url": "https://files.pythonhosted.org/packages/eb/71/968ba5c49c2b38d0453a3089765595b82791cd90597cc2699dbc8b9e5636/component-injector-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "f2e189918b723d288a1b6c0f3cc36709", "sha256": "d90dd9aba90dbb2d86d1a5096e922566708fda598cfb9837a2504a3c4e130b5d" }, "downloads": -1, "filename": "component_injector-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f2e189918b723d288a1b6c0f3cc36709", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 14327, "upload_time": "2019-02-18T21:22:47", "url": "https://files.pythonhosted.org/packages/30/b7/7a4a191dd2a88c8095bd8ea9a2b3d8d9d766081b4d65dba4c3f9f218571d/component_injector-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8125456b4fcc2cbc340d26a4eaeba10b", "sha256": "1ad14f3f06c7c434af44bd4c659051a97135423d139305c37076329f530c78b1" }, "downloads": -1, "filename": "component-injector-1.1.1.tar.gz", "has_sig": false, "md5_digest": "8125456b4fcc2cbc340d26a4eaeba10b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5537, "upload_time": "2019-02-18T21:22:45", "url": "https://files.pythonhosted.org/packages/40/1f/c2f60b68e6aabfaab669356c2615a2417502bcaf1d7a22999cdb74a131b1/component-injector-1.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f2e189918b723d288a1b6c0f3cc36709", "sha256": "d90dd9aba90dbb2d86d1a5096e922566708fda598cfb9837a2504a3c4e130b5d" }, "downloads": -1, "filename": "component_injector-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f2e189918b723d288a1b6c0f3cc36709", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 14327, "upload_time": "2019-02-18T21:22:47", "url": "https://files.pythonhosted.org/packages/30/b7/7a4a191dd2a88c8095bd8ea9a2b3d8d9d766081b4d65dba4c3f9f218571d/component_injector-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8125456b4fcc2cbc340d26a4eaeba10b", "sha256": "1ad14f3f06c7c434af44bd4c659051a97135423d139305c37076329f530c78b1" }, "downloads": -1, "filename": "component-injector-1.1.1.tar.gz", "has_sig": false, "md5_digest": "8125456b4fcc2cbc340d26a4eaeba10b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 5537, "upload_time": "2019-02-18T21:22:45", "url": "https://files.pythonhosted.org/packages/40/1f/c2f60b68e6aabfaab669356c2615a2417502bcaf1d7a22999cdb74a131b1/component-injector-1.1.1.tar.gz" } ] }