![PyPI](https://img.shields.io/pypi/v/pydio)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pydio)
![PyPI - License](https://img.shields.io/pypi/l/pydio)
![PyPI - Downloads](https://img.shields.io/pypi/dm/pydio)
[![codecov](https://codecov.io/gh/mwiatrzyk/pydio/branch/master/graph/badge.svg?token=Y6DJDSOR6M)](https://codecov.io/gh/mwiatrzyk/pydio)
# PyDio
Simple and functional dependency injection toolkit for Python.
## About
PyDio aims to be simple, yet still powerful, allowing you to feed
dependencies inside your application in a flexible way. PyDio design is based
on simple assumption, that dependency injection can be achieved using simple
**key-to-function** map, where **key** specifies **type of object** you want
to inject and **function** is a **factory** function that creates
**instances** of that type.
In PyDio, this is implemented using **providers** and **injectors**. You use
providers to configure your **key-to-function** mapping, and then you use
injectors to perform a **lookup** of a specific key and creation of the final
object.
Here's a simple example:
```python
import abc
from pydio.api import Provider, Injector
provider = Provider()
@provider.provides('greet')
def make_greet():
return 'Hello, world!'
def main():
injector = Injector(provider)
greet_message = injector.inject('greet')
print(greet_message)
if __name__ == '__main__':
main()
```
Now you can save the snippet from above as ``example.py`` file and execute
to see the output:
```shell
$ python example.py
Hello, world!
```
## Key features
* Support for any hashable keys: class objects, strings, ints etc.
* Support for any type of object factories: function, coroutine, generator,
asynchronous generator.
* Automatic resource management via generator-based factories
(similar to pytest's fixtures)
* Multiple environment support: testing, development, production etc.
* Limiting created object's lifetime to user-defined scopes: global,
application, use-case etc.
* No singletons used, so there is no global state...
* ...but you still can create global injector on your own if you need it :-)
## Installation
You can install PyDio using one of following methods:
1) From PyPI (for stable releases):
```shell
$ pip install PyDio
```
2) From test PyPI (for stable and development releases):
```shell
$ pip install -i https://test.pypi.org/simple/ PyDio
```
3) Directly from source code repository (for all releases):
```shell
$ pip install git+https://gitlab.com/zef1r/PyDio.git@[branch-or-tag]
```
## Documentation
You have two options available:
1) Visit [PyDio's ReadTheDocs](https://pydio.readthedocs.io/en/latest/) site.
2) Take a tour around [functional tests](https://github.com/mwiatrzyk/pydio/tree/master/tests/functional).
## License
This project is released under the terms of the MIT license.
See [LICENSE.txt](https://github.com/mwiatrzyk/pydio/blob/master/LICENSE.txt) for more details.
## Author
Maciej Wiatrzyk <maciej.wiatrzyk@gmail.com>
Raw data
{
"_id": null,
"home_page": "https://github.com/mwiatrzyk/pydio",
"name": "pydio",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7.2,<4",
"maintainer_email": "",
"keywords": "dependency,injection,di,framework,toolkit,tool,library",
"author": "Maciej Wiatrzyk",
"author_email": "maciej.wiatrzyk@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/24/44/d0eb2f9d54d32eea446f80c471dbabfc6fb9e6b45c590ee2bbbe4abf4a54/pydio-0.4.1.tar.gz",
"platform": null,
"description": "![PyPI](https://img.shields.io/pypi/v/pydio)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pydio)\n![PyPI - License](https://img.shields.io/pypi/l/pydio)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/pydio)\n[![codecov](https://codecov.io/gh/mwiatrzyk/pydio/branch/master/graph/badge.svg?token=Y6DJDSOR6M)](https://codecov.io/gh/mwiatrzyk/pydio)\n\n# PyDio\n\nSimple and functional dependency injection toolkit for Python.\n\n## About\n\nPyDio aims to be simple, yet still powerful, allowing you to feed\ndependencies inside your application in a flexible way. PyDio design is based\non simple assumption, that dependency injection can be achieved using simple\n**key-to-function** map, where **key** specifies **type of object** you want\nto inject and **function** is a **factory** function that creates\n**instances** of that type.\n\nIn PyDio, this is implemented using **providers** and **injectors**. You use\nproviders to configure your **key-to-function** mapping, and then you use\ninjectors to perform a **lookup** of a specific key and creation of the final\nobject.\n\nHere's a simple example:\n\n```python\nimport abc\n\nfrom pydio.api import Provider, Injector\n\nprovider = Provider()\n\n@provider.provides('greet')\ndef make_greet():\n return 'Hello, world!'\n\ndef main():\n injector = Injector(provider)\n greet_message = injector.inject('greet')\n print(greet_message)\n\nif __name__ == '__main__':\n main()\n```\n\nNow you can save the snippet from above as ``example.py`` file and execute\nto see the output:\n\n```shell\n$ python example.py\nHello, world!\n```\n\n## Key features\n\n* Support for any hashable keys: class objects, strings, ints etc.\n* Support for any type of object factories: function, coroutine, generator,\n asynchronous generator.\n* Automatic resource management via generator-based factories\n (similar to pytest's fixtures)\n* Multiple environment support: testing, development, production etc.\n* Limiting created object's lifetime to user-defined scopes: global,\n application, use-case etc.\n* No singletons used, so there is no global state...\n* ...but you still can create global injector on your own if you need it :-)\n\n## Installation\n\nYou can install PyDio using one of following methods:\n\n1) From PyPI (for stable releases):\n\n ```shell\n $ pip install PyDio\n ```\n\n2) From test PyPI (for stable and development releases):\n\n ```shell\n $ pip install -i https://test.pypi.org/simple/ PyDio\n ```\n\n3) Directly from source code repository (for all releases):\n\n ```shell\n $ pip install git+https://gitlab.com/zef1r/PyDio.git@[branch-or-tag]\n ```\n\n## Documentation\n\nYou have two options available:\n\n1) Visit [PyDio's ReadTheDocs](https://pydio.readthedocs.io/en/latest/) site.\n\n2) Take a tour around [functional tests](https://github.com/mwiatrzyk/pydio/tree/master/tests/functional).\n\n## License\n\nThis project is released under the terms of the MIT license.\n\nSee [LICENSE.txt](https://github.com/mwiatrzyk/pydio/blob/master/LICENSE.txt) for more details.\n\n## Author\n\nMaciej Wiatrzyk <maciej.wiatrzyk@gmail.com>\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Simple and functional dependency injection toolkit for Python",
"version": "0.4.1",
"project_urls": {
"Documentation": "https://pydio.readthedocs.io",
"Homepage": "https://github.com/mwiatrzyk/pydio",
"Repository": "https://github.com/mwiatrzyk/pydio"
},
"split_keywords": [
"dependency",
"injection",
"di",
"framework",
"toolkit",
"tool",
"library"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "54bd9f72b6743879b38dab8be599401396c90b354b624e5f14427634b05320c2",
"md5": "982bb089d46f64b9837fa804d28345e1",
"sha256": "8af3df9804feaefe6e540aebb11b5f83ca8e32eba7babf52c32a88963932df16"
},
"downloads": -1,
"filename": "pydio-0.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "982bb089d46f64b9837fa804d28345e1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7.2,<4",
"size": 14526,
"upload_time": "2023-05-12T11:01:38",
"upload_time_iso_8601": "2023-05-12T11:01:38.830885Z",
"url": "https://files.pythonhosted.org/packages/54/bd/9f72b6743879b38dab8be599401396c90b354b624e5f14427634b05320c2/pydio-0.4.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2444d0eb2f9d54d32eea446f80c471dbabfc6fb9e6b45c590ee2bbbe4abf4a54",
"md5": "5e61f47f63b3ee7e54207403c396b4b6",
"sha256": "3034a3d3227acf121af8dedccb638baf0970dc6383a71d90e74daa7697e9a96b"
},
"downloads": -1,
"filename": "pydio-0.4.1.tar.gz",
"has_sig": false,
"md5_digest": "5e61f47f63b3ee7e54207403c396b4b6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7.2,<4",
"size": 11754,
"upload_time": "2023-05-12T11:01:46",
"upload_time_iso_8601": "2023-05-12T11:01:46.807565Z",
"url": "https://files.pythonhosted.org/packages/24/44/d0eb2f9d54d32eea446f80c471dbabfc6fb9e6b45c590ee2bbbe4abf4a54/pydio-0.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-12 11:01:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mwiatrzyk",
"github_project": "pydio",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"circle": true,
"tox": true,
"lcname": "pydio"
}