{"id":39907839,"url":"https://github.com/mwiatrzyk/pydio","last_synced_at":"2026-01-18T16:02:02.944Z","repository":{"id":62312184,"uuid":"548519767","full_name":"mwiatrzyk/pydio","owner":"mwiatrzyk","description":"Simple and functional dependency injection toolkit for Python","archived":false,"fork":false,"pushed_at":"2025-10-10T18:55:35.000Z","size":288,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-19T03:22:32.686Z","etag":null,"topics":["dependency-injection","di","framework","library","python","toolkit"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mwiatrzyk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-10-09T18:33:24.000Z","updated_at":"2025-10-10T18:55:39.000Z","dependencies_parsed_at":"2023-01-23T03:46:00.136Z","dependency_job_id":null,"html_url":"https://github.com/mwiatrzyk/pydio","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/mwiatrzyk/pydio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwiatrzyk%2Fpydio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwiatrzyk%2Fpydio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwiatrzyk%2Fpydio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwiatrzyk%2Fpydio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mwiatrzyk","download_url":"https://codeload.github.com/mwiatrzyk/pydio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mwiatrzyk%2Fpydio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28541068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dependency-injection","di","framework","library","python","toolkit"],"created_at":"2026-01-18T16:02:02.841Z","updated_at":"2026-01-18T16:02:02.937Z","avatar_url":"https://github.com/mwiatrzyk.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![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## Name\n\n**PyDio** (pronounced: *\"PAI-dee-o\"*) stands for **Python Dependency Injection tOolkit**.\n\n## About\n\nPyDio aims to be simple, yet still powerful, allowing you to feed dependencies\ninside your application in a flexible way. PyDio design is based on simple\nassumption that dependency injection can be achieved using a straightforward\n**key-to-function** mapping, where **key** specifies **type of object** you\nwant to 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## Disclaimer\n\n**PyDio** is an independent open-source project in the Python ecosystem. It\nis not affiliated with, sponsored by, or endorsed by any company, organization,\nor product of the same or similar name. Any similarity in names is purely\ncoincidental and does not imply any association.\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 \u003cmaciej.wiatrzyk@gmail.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwiatrzyk%2Fpydio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmwiatrzyk%2Fpydio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmwiatrzyk%2Fpydio/lists"}