{
"info": {
"author": "d.muth",
"author_email": "d.muth@gmx.net",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Topic :: Software Development :: Libraries"
],
"description": "# ArgResolver v0.3.3\n\n[](https://travis-ci.org/HazardDede/argresolver)\n\nResolver is a simple decorator for resolving (missing) arguments at runtime.\nIt performs various tasks from looking up arguments from the environment variable scope to simple service dependency injection.\n\n1\\. [Resolver](#resolver) \n1.1\\. [Environment](#environment) \n1.2\\. [Map](#map) \n1.3\\. [Chain](#chain) \n\n\n\n## 1\\. Resolver\n\n\n\n### 1.1\\. Environment\n\n```python\n# We inject arguments from the environment variables scope to a simple function\n# We use a `prefix` to minimize clashes with other components\n# username will have a correponding DB_USERNAME, same for password and database\n\nfrom argresolver import Environment\nfrom argresolver.utils import modified_environ # We use it to alter the environment variables\n\n@Environment()\ndef connect(host, user, password):\n print(\"Connecting: {user}:{password}@{host}\".format(**locals()))\n\nwith modified_environ(PASSWORD='my_pass'):\n connect('localhost', 'admin')\n# Prints: Connecting: admin:my_pass@localhost\n```\n\n```python\n# We inject arguments from the environment variables scope \n# to an instance __init__.\n# We use a `prefix` to minimize clashes with other components that have a username / password.\n# Argument username will have a correponding DB_USERNAME, same for password and database\n\nfrom argresolver import Environment\nfrom argresolver.utils import modified_environ # We use it to alter the environment variables\n\nclass Connection:\n @Environment(prefix='DB')\n def __init__(self, username, password, database='default'):\n self.username = username\n self.password = password\n self.database = database\n\n def __str__(self):\n # Hint: In a real world example you won't put your password in here ;-)\n return \"Connection(username='{self.username}', password='{self.password}'\"\\\n \", database='{self.database}')\".format(self=self)\n\nwith modified_environ(DB_USERNAME='admin', DB_PASSWORD='secret'):\n conn = Connection()\nprint(str(conn)) # Connection(username='admin', password='secret', database='default')\n```\n\n\n\n### 1.2\\. Map\n\n```python\n# We use the Map resolver to override an argument's default value \n# that is better suited for our needs.\n\nfrom argresolver import Map\n\n# Let's assume we cannot touch this code...\nclass Foo:\n def __init__(self, arg1, arg2='I_dont_like_this_default'):\n self.arg1 = arg1\n self.arg2 = arg2\n\n def __str__(self):\n return \"Foo(arg1='{self.arg1}', arg2='{self.arg2}')\".format(self=self)\n\n# But we can alter the class and wrap a resolver around the class __init__ \nFoo.__init__ = Map(dict(arg2=\"better_default\"), default_override=True)(Foo.__init__)\n\nfoo = Foo(\"this is arg1\")\nprint(str(foo)) # Foo(arg1='this is arg1', arg2='better_default')\n```\n\n\n\n### 1.3\\. Chain\n\n```python\n# We do some automatic dependency injection with fallback\n\nfrom argresolver import Chain, Const, Map\n\ninject = Chain(\n Map(dict(service1=\"Service1\", service2=\"Service2\")), \n Const(\"Fallback Service\")\n)\n\nclass Orchestration:\n @inject\n def business_process1(self, service1, service2):\n print(\"Calling service:\", service1)\n print(\"Calling service:\", service2)\n\n @inject\n def business_process2(self, service1, service3):\n print(\"Calling service:\", service1)\n print(\"Calling service:\", service3)\n\norchester = Orchestration()\norchester.business_process1()\n# Prints:\n# Calling service: Service1\n# Calling service: Service2\n\norchester.business_process2()\n# Prints:\n# Calling service: Service1\n# Calling service: Fallback Service\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/HazardDede/argresolver",
"keywords": "args arguments injection resolve resolver",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "argresolver",
"package_url": "https://pypi.org/project/argresolver/",
"platform": "",
"project_url": "https://pypi.org/project/argresolver/",
"project_urls": {
"Documentation": "https://github.com/HazardDede/argresolver/blob/master/README.md",
"Homepage": "https://github.com/HazardDede/argresolver",
"Source": "https://github.com/HazardDede/argresolver/",
"Tracker": "https://github.com/HazardDede/argresolver/issues"
},
"release_url": "https://pypi.org/project/argresolver/0.3.3/",
"requires_dist": null,
"requires_python": ">=3.4",
"summary": "Resolve missing arguments at runtime",
"version": "0.3.3"
},
"last_serial": 4470656,
"releases": {
"0.2.3": [
{
"comment_text": "",
"digests": {
"md5": "c665f684ba99c40807b8d3b6146d42d0",
"sha256": "1b5a0b1e7401848e28a56c7b332258f0fc82a980b9d4e3c177fac420284aa572"
},
"downloads": -1,
"filename": "argresolver-0.2.3.tar.gz",
"has_sig": false,
"md5_digest": "c665f684ba99c40807b8d3b6146d42d0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.4",
"size": 7603,
"upload_time": "2018-06-14T07:58:44",
"url": "https://files.pythonhosted.org/packages/fc/dd/27026dbec2e04de999e0e8faf16cc3c8218d8823c9325e5c390d560b58b5/argresolver-0.2.3.tar.gz"
}
],
"0.3.0": [
{
"comment_text": "",
"digests": {
"md5": "4552b6c23cff2d3f77fdf21b92cc4ed7",
"sha256": "71f8bbc1701d9344ff25e6cb4ecbe2465a026e596ad2310e77da08832028bd26"
},
"downloads": -1,
"filename": "argresolver-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "4552b6c23cff2d3f77fdf21b92cc4ed7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.4",
"size": 8758,
"upload_time": "2018-07-15T19:19:29",
"url": "https://files.pythonhosted.org/packages/d9/bd/5c159e485cde77032e16b6f91e10f10b09454c02f0bd51ef86571911282b/argresolver-0.3.0.tar.gz"
}
],
"0.3.1": [
{
"comment_text": "",
"digests": {
"md5": "609c20e47a9722e3539baf3524c4b90d",
"sha256": "4f7886172fecda3131c17e136eeae1114c7b2fca2fe71280ba02032f6d22b00c"
},
"downloads": -1,
"filename": "argresolver-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "609c20e47a9722e3539baf3524c4b90d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.4",
"size": 8778,
"upload_time": "2018-10-16T19:08:21",
"url": "https://files.pythonhosted.org/packages/9d/70/1a51d3420baa7079900140e594bc23f8cbc3c21da7e9df86968aa8aa5823/argresolver-0.3.1.tar.gz"
}
],
"0.3.2": [
{
"comment_text": "",
"digests": {
"md5": "b83306622900b514e31c58478db533da",
"sha256": "9b5759d2a16905c19c72b0ed8f8f7780c7a1cb3fc96012aae9e614673db03956"
},
"downloads": -1,
"filename": "argresolver-0.3.2.tar.gz",
"has_sig": false,
"md5_digest": "b83306622900b514e31c58478db533da",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.4",
"size": 8781,
"upload_time": "2018-11-08T19:04:48",
"url": "https://files.pythonhosted.org/packages/35/c5/a1760de4a2327de93f09fd023a2832112356741313f0342ff315cedb0f7b/argresolver-0.3.2.tar.gz"
}
],
"0.3.3": [
{
"comment_text": "",
"digests": {
"md5": "b98030fc31cf33d3223e3be143e86853",
"sha256": "36c8b393dfdacd29af7447417f9aefc710deee0f8fb3b073fba1c9617762a1e7"
},
"downloads": -1,
"filename": "argresolver-0.3.3.tar.gz",
"has_sig": false,
"md5_digest": "b98030fc31cf33d3223e3be143e86853",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.4",
"size": 8776,
"upload_time": "2018-11-09T20:06:54",
"url": "https://files.pythonhosted.org/packages/14/b7/09f76a529291de674a226e5e0b42082042f7ba9559c8e2fc58fea9c112fb/argresolver-0.3.3.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "b98030fc31cf33d3223e3be143e86853",
"sha256": "36c8b393dfdacd29af7447417f9aefc710deee0f8fb3b073fba1c9617762a1e7"
},
"downloads": -1,
"filename": "argresolver-0.3.3.tar.gz",
"has_sig": false,
"md5_digest": "b98030fc31cf33d3223e3be143e86853",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.4",
"size": 8776,
"upload_time": "2018-11-09T20:06:54",
"url": "https://files.pythonhosted.org/packages/14/b7/09f76a529291de674a226e5e0b42082042f7ba9559c8e2fc58fea9c112fb/argresolver-0.3.3.tar.gz"
}
]
}