{ "info": { "author": "Tiemo Kieft", "author_email": "pypi@isogram.nl", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Django injector\n\nDjango injector is an app for Django that integrates [injector](https://github.com/alecthomas/injector)\nwith Django.\n\nInjector is a simple and easy to use dependency injection framework.\n\n\n## Installation\n\n```\n$ pip install django_injector\n```\n\nThen add `django_injector` to `INSTALLED_APPS` and `'django_injector.middleware.inject_request_middleware'`\nto `MIDDLEWARE` in your Django configuration.\n\n\n## Configuration\n`django_injector` uses the module mechanism from injector. Desired modules should be\nlisted in the `INJECTOR_MODULES` setting, each item must be either a subclass of `injector.Module`\nor a callable that can receive a binder as its only argument.\n\nModules are loaded when the app is loaded.\n\n\n## Usage\n\nTo use the injector decorate functions or methods with `django_injector.inject`. Decorated\nmethods or functions can receive additional, non-injected, arguments, they should be listed\n**before** injected arguments.\n\n\n## Example\nThis is an example of a view function that receives a `request` from Django and\nan injected argument.\n\n```python\nfrom django_injector import inject\n\nfrom my_app.services import SomeService\n\n\n@inject\ndef my_view(request, some_service: SomeService):\n \"\"\"Will receive a `request` from Django and `some_service` from the injector.\"\"\"\n return some_service.do_something(request)\n```\n\n## Request scope\n\nA custom [Injector scope](https://injector.readthedocs.io/en/latest/terminology.html#scope) is provided \u2013\nit's the request scope. Types bound in the request scope share instances during handling a single request\nbut don't cross request handling boundary. It's similar to\n[Flask-Injector's request scope](https://github.com/alecthomas/flask_injector).\n\nThe request scope depends on only single request being handled by a single thread (green threads,\nwhen gevent or Eventlet monkey patching is used, are also supported) at a time.\n\nExample:\n\n```python\nfrom django_injector import request_scope\nfrom django_injector import inject\n\nclass Service:\n pass\n\n\nclass RequiresService:\n @inject\n def __init__(self, service: Service):\n self.service = service\n\n\nclass AlsoRequiresService:\n @inject\n def __init__(self, service: Service):\n self.service = service\n\n\n@inject\ndef my_view(request, service: Service, rs: RequiresService, ars: AlsoRequiresService):\n # The same Service instance everywhere\n assert service is rs.service\n assert rs.service is ars.service\n # ...\n```\n\n\n## Builtin bindings\n\nOne can inject `django.http.HttpRequest` and it'll be the same object as the `request` argument inside\nthe views. The binding can be used to provide `HttpRequest` deep in the object hierarchy without\nhaving to pass it manually.\n\nExample:\n\n```python\nfrom django.http import HttpRequest\nfrom django_injector import inject\n\n\nclass RequiresRequest:\n @inject\n def __init__(self, request: HttpRequest):\n self.request = request\n\n\n@inject\ndef my_view(request, rr: RequiresRequest):\n # The same request everywhere\n assert rr.request is request\n # ...\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/blubber/django_injector", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "django-injector", "package_url": "https://pypi.org/project/django-injector/", "platform": "", "project_url": "https://pypi.org/project/django-injector/", "project_urls": { "Homepage": "https://github.com/blubber/django_injector" }, "release_url": "https://pypi.org/project/django-injector/0.1.1/", "requires_dist": [ "injector" ], "requires_python": "", "summary": "Integrate injector with Django", "version": "0.1.1" }, "last_serial": 5824552, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "4d02f8965ab9d84f4f2e132caee7e4c6", "sha256": "8b615e29d3592ebe4474278ab9c971d967d2eb8752ebb31c989ac56f301e850d" }, "downloads": -1, "filename": "django_injector-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4d02f8965ab9d84f4f2e132caee7e4c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3628, "upload_time": "2019-05-08T10:59:15", "url": "https://files.pythonhosted.org/packages/7f/e1/e08ab4ee14666c112353c1d21295cc1d1957ce891ba7bb699231535afb4c/django_injector-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b60a1beed0919f09bf6fd42fccadd1f6", "sha256": "ab43e68e8859a6d353debea024fed950a098414645d0a45e82b9a1f0c34ccb2b" }, "downloads": -1, "filename": "django_injector-0.0.1.tar.gz", "has_sig": false, "md5_digest": "b60a1beed0919f09bf6fd42fccadd1f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1891, "upload_time": "2019-05-08T10:59:17", "url": "https://files.pythonhosted.org/packages/9c/46/6c15f5e18575db76ef4612da291c2000d72b9a7007a275d5464f0076d312/django_injector-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "7ce62b62bc6cd057c11379272d05ca2a", "sha256": "e12e0ae83be51c4e0913ba761f918248adbec8a02399e41eba2bee7489a66d52" }, "downloads": -1, "filename": "django_injector-0.0.2.tar.gz", "has_sig": false, "md5_digest": "7ce62b62bc6cd057c11379272d05ca2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5467, "upload_time": "2019-08-20T06:09:06", "url": "https://files.pythonhosted.org/packages/c5/e5/97f4e8f05430319068bc07966aa3bad27010ec9048b67cb9cc660bc1ebc8/django_injector-0.0.2.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "ad10dffa2acdc07ed8257b3696752cab", "sha256": "231098e91a2a2cf9a06ae9855f833ec3d86ad0bd49b20ecde426ae87d2500b87" }, "downloads": -1, "filename": "django_injector-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ad10dffa2acdc07ed8257b3696752cab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9697, "upload_time": "2019-09-13T07:35:11", "url": "https://files.pythonhosted.org/packages/10/ee/7f07c5882d349147874d23345afc9f2cf9b5e108e0f2cfabf4a732529c6b/django_injector-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5bf8ebb4a06608b7ae379a3dd96be2f7", "sha256": "86967d928356b9c048c6be2b3d65771b570bc3ab08e984327618a32ad51d297c" }, "downloads": -1, "filename": "django_injector-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5bf8ebb4a06608b7ae379a3dd96be2f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5487, "upload_time": "2019-09-13T07:35:15", "url": "https://files.pythonhosted.org/packages/f3/c2/023c20d16ead09a4beb69e4aca59da4401857c63082be64792bc3995cc11/django_injector-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "33d483b927af54b0ec88d2be246cd761", "sha256": "de9a7f6d541f12542df50d92b60b8f750aab02f88667c29f21bf893cbaf4cc4c" }, "downloads": -1, "filename": "django_injector-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "33d483b927af54b0ec88d2be246cd761", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9705, "upload_time": "2019-09-13T08:55:45", "url": "https://files.pythonhosted.org/packages/4f/b3/ebe1e3f73a19cd8ea507da2b0ab96da2a28e7fb0eb16baa7b919823ad281/django_injector-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "026b3b4eabc2221aac8f66bf51a6f861", "sha256": "4d99f8ade5efce73f76d27345c03f094edf89fe96021497daa42527c10f43696" }, "downloads": -1, "filename": "django_injector-0.1.1.tar.gz", "has_sig": false, "md5_digest": "026b3b4eabc2221aac8f66bf51a6f861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5585, "upload_time": "2019-09-13T08:55:50", "url": "https://files.pythonhosted.org/packages/bf/61/e501b06f49b478373eb9ce341c4c898b26b7602720479a9254c6796a4306/django_injector-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "33d483b927af54b0ec88d2be246cd761", "sha256": "de9a7f6d541f12542df50d92b60b8f750aab02f88667c29f21bf893cbaf4cc4c" }, "downloads": -1, "filename": "django_injector-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "33d483b927af54b0ec88d2be246cd761", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9705, "upload_time": "2019-09-13T08:55:45", "url": "https://files.pythonhosted.org/packages/4f/b3/ebe1e3f73a19cd8ea507da2b0ab96da2a28e7fb0eb16baa7b919823ad281/django_injector-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "026b3b4eabc2221aac8f66bf51a6f861", "sha256": "4d99f8ade5efce73f76d27345c03f094edf89fe96021497daa42527c10f43696" }, "downloads": -1, "filename": "django_injector-0.1.1.tar.gz", "has_sig": false, "md5_digest": "026b3b4eabc2221aac8f66bf51a6f861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5585, "upload_time": "2019-09-13T08:55:50", "url": "https://files.pythonhosted.org/packages/bf/61/e501b06f49b478373eb9ce341c4c898b26b7602720479a9254c6796a4306/django_injector-0.1.1.tar.gz" } ] }