{ "info": { "author": "Zsolt Cserna", "author_email": "zsolt.cserna@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "deedee\n~~~~~~\nDependency inversion for python, the easy way\n\n\nNutshell\n--------\n\nDeedee provides an API which enables the developer to use late binding for\ndefault values in function definition.\n\nExample:\n\n\n.. code-block:: python\n\n import deedee\n\n class Database:\n def select(self, query):\n print(\"select\", query)\n\n\n @deedee.resolve\n def handler(param_a, param_b, database=deedee.context.database):\n print(param_a, param_b) # param_a and param_b are unchanged\n print(database) # this will print a database instance\n database.select(\"select * from table order by id\") # this call will be successful\n\n\n def main():\n # register the default value (which will be used when calling handler)\n deedee.context.register(\"database\", Database())\n\n # call the handler, the 3rd parameter will be the previously registered value\n handler(\"param_1\", \"param_2\")\n\n\n if __name__ == '__main__':\n main()\n\n\nIn python the binding of the default value happens at the function\ndefintion, so it is not possible to set the default parameter later on, the\nexpression after the '=' sign gets evaluated at the function definition.\n\nWith `deedee` this changes, so you can specify a reference instead, and later on, specify the value for that reference.\n\nWhen the function is called later on, the decorator `deedee.resolve` will\nresolve the reference of the default value.\n\nThis can be used to implement dependency injection and dependency inversion\npatterns without using any boilerplate classes or functions.\n\n\nFeatures\n--------\n* Lazy evaluation of the default parameters\n* Default value can be overriden by specifying it during the call (same behaviour as 'normal' default values)\n* It can be traced which function references to a given default parameter (soon)\n* It can be checked that all references can be resolved in the future, so it\n can be ensured that there will be no error with resolving during function\n calls\n* Context objects can be implemented by the user (it is not required to use deedee.context)\n* Annotations can be use freely, the library doesn't use or change them\n* Nearly straightforward implementation, good test coverage\n\n\nName\n----\nAccording to urban dictionary, deedee is:\n\n A person who is always there when you need them. A strong survivor who can make it through anything.\n\nIn deedee the values you are registering to a context behave like this \u2013 they are always there when you need them.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.github.com/csernazs/deedee", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "deedee", "package_url": "https://pypi.org/project/deedee/", "platform": "", "project_url": "https://pypi.org/project/deedee/", "project_urls": { "Homepage": "https://www.github.com/csernazs/deedee" }, "release_url": "https://pypi.org/project/deedee/0.1/", "requires_dist": null, "requires_python": "", "summary": "Deedee is a dependency inversion library", "version": "0.1" }, "last_serial": 3705278, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "8001e671b534c4fdaa23d1c3de78eea2", "sha256": "7ded2b86b85623efecbac66ea3caa621349afc4305b0ca076e3d9144d92a8a33" }, "downloads": -1, "filename": "deedee-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8001e671b534c4fdaa23d1c3de78eea2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5357, "upload_time": "2018-03-26T06:41:00", "url": "https://files.pythonhosted.org/packages/0b/76/8b9b9ff9d814251c26ab8bf76e8bca224c510a7aa8c13ab70d2c70c7aec3/deedee-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ec8e3735ad3ca0de0366e3b0b218680", "sha256": "25f1acaa45160402c0c8fcb45f1d88ae1a85526500ae997ba2eb5b24714a934b" }, "downloads": -1, "filename": "deedee-0.1.tar.gz", "has_sig": false, "md5_digest": "0ec8e3735ad3ca0de0366e3b0b218680", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4024, "upload_time": "2018-03-26T06:41:01", "url": "https://files.pythonhosted.org/packages/c5/71/be324239e2347f679a6686cbf0f45018ccb46f68b3eb7e7386255dc2de35/deedee-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8001e671b534c4fdaa23d1c3de78eea2", "sha256": "7ded2b86b85623efecbac66ea3caa621349afc4305b0ca076e3d9144d92a8a33" }, "downloads": -1, "filename": "deedee-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8001e671b534c4fdaa23d1c3de78eea2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5357, "upload_time": "2018-03-26T06:41:00", "url": "https://files.pythonhosted.org/packages/0b/76/8b9b9ff9d814251c26ab8bf76e8bca224c510a7aa8c13ab70d2c70c7aec3/deedee-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ec8e3735ad3ca0de0366e3b0b218680", "sha256": "25f1acaa45160402c0c8fcb45f1d88ae1a85526500ae997ba2eb5b24714a934b" }, "downloads": -1, "filename": "deedee-0.1.tar.gz", "has_sig": false, "md5_digest": "0ec8e3735ad3ca0de0366e3b0b218680", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4024, "upload_time": "2018-03-26T06:41:01", "url": "https://files.pythonhosted.org/packages/c5/71/be324239e2347f679a6686cbf0f45018ccb46f68b3eb7e7386255dc2de35/deedee-0.1.tar.gz" } ] }