{ "info": { "author": "Rahul Kumar", "author_email": "rahul@thoughtnirvana.com", "bugtrack_url": null, "classifiers": [], "description": "Augment\n-------\n\nPython decorators for contracts and augmenting OOP.\nfrom distutils.core import setup\n\n\nContracts.\n``````````\n\nThe syntax below should be self explanatory. It can be applied both to bound and unbound methods.\n\n::\n\n # Constraints on passed arguments.\n # Constraints can be callables or regular expressions.\n # Throws a `AugmentError` by default if contraints are violated.\n # Optionally, an error handler can be specified which receives the errors.\n @ensure_args(a=(lambda x: x > 10, 'must be greater than 10'),\n b=r'^?-\\d+(\\.\\d+)$',\n c=lambda x: x < 5) # `c` will be picked from `kwargs`.\n def foo(a, b, **kwargs):\n pass\n\n # Ensure at least one of the constraints is true.\n @ensure_one_of(a=lambda x: x, b=lambda x: x)\n def foo(a, b):\n pass\n\n # Ensures only one of the constraints is true.\n @ensure_one_of(exclusive=True, c=lambda x: x, d=lambda x: x)\n def foo(a, b):\n pass\n\n # Transform arguments.\n @transform_args(a=lambda x: x * x)\n def foo(a):\n pass\n\n # Bundling multiple constraints.\n # Contracts run in inside out order\n # i.e the one right above function will run first.\n # In this case, `@ensure_args...` will be the first to run.\n @transform_args(a=lambda x: x * x)\n @ensure_one_of(c=lambda x: x, d=lambda x: x)\n @ensure_args(a=lambda x: x > 10,\n b=lambda x: hasattr(x, '__getitem__'),\n c=lambda x: x < 5)\n def foo(a, b, c=4, d=None):\n pass\n\n\nFunction/method hooks.\n``````````````````````\n\nBasic function hooks to run on entering, leaving or both ways.\n\n::\n\n def login(root):\n print \"Logging in.\"\n\n def logout(root):\n print \"Logging out\"\n\n # `login` will run before entering `home`.\n # `logout` will run after exiting from `home`.\n # `root` param passed to `home` will be passed to `login`, `logout`.\n @enter(login)\n @leave(logout)\n def home(root):\n print \"Home page.\"\n\n\n def tracer():\n print \"tracing\"\n\n # `tracer` will run both before entering `home` and after\n # exiting `home`.\n @around(tracer)\n def inbox():\n print \"Inbox\"\n\nPlease note that the hooks(`login` and `logout`) above are passed the arguments passed to the wrapped method(`home`).\n\nMethod hooks should be accepting the same arguments as wrapped method.\n\n\nThey work the same on bound functions.\n\n::\n class Foo:\n def login(self):\n print \"Logging in.\"\n\n def logout(self):\n print \"Logging out\"\n\n @leave(logout)\n @enter(login)\n def home(self, test=None):\n print \"Home page.\"\n\n def tracer(self):\n print \"tracing\"\n\n @around(tracer)\n def inbox(self):\n print \"Inbox\"\n\n\nDynamic delgation.\n``````````````````\n\n::\n\n class Foo:\n def __init__(self):\n self.a = 'a'\n self.b = 'b'\n self.c = 'c'\n\n @delegate_to('foo_delegate', 'a', 'b')\n class Bar:\n def __init__(self):\n self.foo_delegate = Foo()\n b = Bar()\n # `a` and `b` will be delegated to `Foo`.\n print b.a\n print b.b\n # This will throw an AttributeError.\n print b.c", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/thoughtnirvana/augment", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "Augment", "package_url": "https://pypi.org/project/Augment/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Augment/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/thoughtnirvana/augment" }, "release_url": "https://pypi.org/project/Augment/0.4/", "requires_dist": null, "requires_python": null, "summary": "Python decorators for contracts and augmenting OOP.", "version": "0.4" }, "last_serial": 783802, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "bab2840b7386f96e487ea18df95bf97f", "sha256": "00f401d55af33f665dc4ad2bfbf76c4762b6475c0a5d078716f3f43d21668ebe" }, "downloads": -1, "filename": "Augment-0.1.tar.gz", "has_sig": false, "md5_digest": "bab2840b7386f96e487ea18df95bf97f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4359, "upload_time": "2011-11-10T08:54:26", "url": "https://files.pythonhosted.org/packages/80/32/0b35abebdb995a919fbbf14ab01ff699d3a9132a6a5e3216342921bcb080/Augment-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "95781a6874131ac1158720e729d4c616", "sha256": "95fd1ad4ef413356299848a15715d1b3b4511a479e643e9c9a2d3aefca57d70a" }, "downloads": -1, "filename": "Augment-0.2.tar.gz", "has_sig": false, "md5_digest": "95781a6874131ac1158720e729d4c616", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4355, "upload_time": "2011-11-10T09:07:46", "url": "https://files.pythonhosted.org/packages/ab/47/0976204c9fd75359753efd5392fa8a602c5d074b91d9bc6c04f12219fe7d/Augment-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "8e72146429061e53bcfc097c3a520d21", "sha256": "0af4995149188381f31642aa52ac5565925f541d737eac5dac6d19ffd17639ef" }, "downloads": -1, "filename": "Augment-0.3.tar.gz", "has_sig": false, "md5_digest": "8e72146429061e53bcfc097c3a520d21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4327, "upload_time": "2011-11-23T11:08:17", "url": "https://files.pythonhosted.org/packages/7d/22/51ac68978ee065846fe6a242b4cfb36adf1197ac0bb9cd4c631d06903c2f/Augment-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "289ad62be145842ee6d046ef6ab4631d", "sha256": "0003f7fa71905a64d6bf253fee3d2c079a8717f2d25e6931ed3b6c33b619d283" }, "downloads": -1, "filename": "Augment-0.4.tar.gz", "has_sig": false, "md5_digest": "289ad62be145842ee6d046ef6ab4631d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4504, "upload_time": "2011-11-30T13:10:11", "url": "https://files.pythonhosted.org/packages/6e/82/2a46aec22709c59a7ae07fa692e51826ade384fa4cfc094c16200bca5e94/Augment-0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "289ad62be145842ee6d046ef6ab4631d", "sha256": "0003f7fa71905a64d6bf253fee3d2c079a8717f2d25e6931ed3b6c33b619d283" }, "downloads": -1, "filename": "Augment-0.4.tar.gz", "has_sig": false, "md5_digest": "289ad62be145842ee6d046ef6ab4631d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4504, "upload_time": "2011-11-30T13:10:11", "url": "https://files.pythonhosted.org/packages/6e/82/2a46aec22709c59a7ae07fa692e51826ade384fa4cfc094c16200bca5e94/Augment-0.4.tar.gz" } ] }