{ "info": { "author": "Timm Wagener", "author_email": "wagenertimm@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "===========================\nImmutable default arguments\n===========================\n\n.. image:: https://img.shields.io/pypi/v/immutable-default-args.svg\n :target: https://pypi.python.org/pypi/immutable-default-args\n :alt: PyPI Package\n\n.. image:: https://img.shields.io/pypi/pyversions/immutable-default-args.svg\n :target: https://pypi.python.org/pypi/immutable-default-args\n :alt: PyPI Python Versions\n\n.. image:: https://img.shields.io/pypi/l/immutable-default-args.svg\n :target: https://pypi.python.org/pypi/immutable-default-args\n :alt: PyPI Package License\n\n.. image:: https://travis-ci.org/timmwagener/immutable_default_args.svg?branch=develop\n :target: https://travis-ci.org/timmwagener/immutable_default_args\n :alt: Current build status for Travis CI\n\n.. image:: https://ci.appveyor.com/api/projects/status/l67sbo0uis1kyxe9?svg=true\n :target: https://ci.appveyor.com/project/timmwagener/immutable-default-args\n :alt: Current build status for AppVeyor\n\n.. image:: https://landscape.io/github/timmwagener/immutable_default_args/develop/landscape.svg?style=flat\n :target: https://landscape.io/github/timmwagener/immutable_default_args/develop\n :alt: Code Health\n\n----\n\nThis module provides facilities for turning mutable default function arguments\ninto immutable ones. It is fairly lightweight and has no non-standard dependencies.\nYou can install this package with the standard ``pip`` command::\n\n $ pip install immutable_default_args\n\nThe issue with `mutable argument default values `_ is pretty well known in Python.\nBasically mutable default values are assigned once at define time and can then\nbe modified within the function body which might come as a surprise.\nHere is the example from the `stackoverfow `_ thread::\n\n def foo(a=[]):\n a.append(5)\n return a\n\n >>> foo()\n [5]\n >>> foo()\n [5, 5]\n >>> foo()\n [5, 5, 5]\n ...\n\nThe default way of preventing this behaviour is to use ``None`` as the default\nand check for it in the function body, like so::\n\n def foo(a=None):\n a = a if (type(a) is list) else []\n a.append(5)\n return a\n\n >>> foo()\n [5]\n >>> foo()\n [5]\n ...\n\nUsage\n-----\n\nThis package aims to offer two additional options to fix this issue:\n\n* With a handy function decorator ``@fix_mutable_kwargs`` to fix a certain function.\n* With a metaclass ``ImmutableDefaultArguments`` to fix all *methods*, *classmethods* and *staticmethods* at once.\n\nUsing the decorator::\n\n from immutable_default_args import fix_mutable_kwargs\n\n @fix_mutable_kwargs\n def foo(a=[]):\n a.append(5)\n return a\n\n >>> foo()\n [5]\n >>> foo()\n [5]\n ...\n\nIt doesn't matter if the iterable is empty or not::\n\n @fix_mutable_kwargs\n def foo(a=[1, 2, {'key': 'value'}, 3, 4]):\n a.append(5)\n return a\n\n >>> foo()\n [1, 2, {'key': 'value'}, 3, 4, 5]\n >>> foo()\n [1, 2, {'key': 'value'}, 3, 4, 5]\n ...\n\nFixing all mutable default values for all methods of an object via the\n``ImmutableDefaultArguments`` metaclass::\n\n class Foo(object):\n\n __metaclass__ = ImmutableDefaultArguments # Py2 syntax\n\n def foo(self, a=[]):\n a.append(5)\n return a\n\n @classmethod # staticmethods work as well\n def foo_classmethod(cls, a=[]):\n a.append(5)\n return a\n\n instance_of_foo = Foo()\n >>> instance_of_foo.foo()\n [5]\n >>> instance_of_foo.foo()\n [5]\n ...\n >>> Foo.foo_classmethod()\n [5]\n >>> Foo.foo_classmethod()\n [5]\n\nCompatibility\n-------------\n\nThe ``immutable_default_args`` package is tested against Py2/3 and is supported\nfrom *Py2.7* upstream.\n\nChangelog\n---------\n\n0.0.8 *(08.05.2016)*\n********************\n* Add .landscape.yml and badges and more jazz.\n\n0.0.7 *(08.05.2016)*\n********************\n* Add *CI* and badges and all that jazz.\n\n0.0.5 *(08.05.2016)*\n********************\n* Fixed documentation\n\n0.0.2 *(08.05.2016)*\n********************\n* Added ``@fix_mutable_kwargs`` decorator\n* Refactorings/Cleanup\n\n0.0.1 *(08.05.2016)*\n********************\n* First release. Included only ``ImmutableDefaultArguments`` metaclass\n\nLicense\n-------\n\nYou are free to do whatever you like with the code. Please note that I am not\naccountable for anything that might have happened as a result of executing the\ncode from the ``immutable_default_args`` package....ever.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://timmwagener.com/", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "immutable_default_args", "package_url": "https://pypi.org/project/immutable_default_args/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/immutable_default_args/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://timmwagener.com/" }, "release_url": "https://pypi.org/project/immutable_default_args/0.0.9/", "requires_dist": null, "requires_python": null, "summary": "Very small package to automatically safeguard mutable function arguments, preventing them from being modified.", "version": "0.0.9" }, "last_serial": 2105507, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "0684b62e2641116e765e85a162ce9735", "sha256": "822693d2f1259178c9b3c61eaa6d77e717263fc2d07ad7e907eb8217b6cd0a5c" }, "downloads": -1, "filename": "immutable_default_args-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0684b62e2641116e765e85a162ce9735", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4644, "upload_time": "2016-05-05T21:48:26", "url": "https://files.pythonhosted.org/packages/6b/f9/d5e6ed4528823f751438b676026df4ff5d5f8bd3d2c1a74c6ef03276a3d8/immutable_default_args-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "106e58280289078c83ca021bca7e3706", "sha256": "12f4aefe7421914732c375e53a45f830a90a16ebde6e6c233f3669959f06e281" }, "downloads": -1, "filename": "immutable_default_args-0.0.1.zip", "has_sig": false, "md5_digest": "106e58280289078c83ca021bca7e3706", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5906, "upload_time": "2016-05-05T21:48:20", "url": "https://files.pythonhosted.org/packages/86/61/cc0a6df013eb73e04d5968de3ee34c45bd772fcf3b90ce0219f5ffdb14c6/immutable_default_args-0.0.1.zip" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "0dbbde04569a5356c34438a496edbc18", "sha256": "8c74af3f8d1bce1d4cfa688df68f5307376e4f282a164f1a6e740fd872e0db2b" }, "downloads": -1, "filename": "immutable_default_args-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0dbbde04569a5356c34438a496edbc18", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8065, "upload_time": "2016-05-08T16:59:59", "url": "https://files.pythonhosted.org/packages/b0/ec/8125b82078e6c6d67d66fd9a478f8e504bfc058d7ab2c773bed56364a168/immutable_default_args-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb00fff0ab798b6967512040628aa320", "sha256": "19d356dfc0b688a020739a50549d1186a4c54d4337bed641a901901676a9b0d6" }, "downloads": -1, "filename": "immutable_default_args-0.0.2.zip", "has_sig": false, "md5_digest": "bb00fff0ab798b6967512040628aa320", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7257, "upload_time": "2016-05-08T16:59:28", "url": "https://files.pythonhosted.org/packages/ae/d7/c1217da8bf757d8fb9a8eacf2680b31315ecc9f766aced8a0aea8803591e/immutable_default_args-0.0.2.zip" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "1c8cf13bcc90588968f62483606722b2", "sha256": "3d34b47631ab0794492ed02d6d3365a36a0d9daa5087b4cd6c4ca6f40dee726e" }, "downloads": -1, "filename": "immutable_default_args-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1c8cf13bcc90588968f62483606722b2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 8062, "upload_time": "2016-05-08T17:03:41", "url": "https://files.pythonhosted.org/packages/7a/6e/4244e6d33b7e214835450b96292cd76a77638192160f5df05d8780410913/immutable_default_args-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ff13cc369e0425d676371d8c746dbe1", "sha256": "f023dc08d25c8e3561fbbd87d713922753f19b1aa028cc46ab32d4f899c6cfa5" }, "downloads": -1, "filename": "immutable_default_args-0.0.3.zip", "has_sig": false, "md5_digest": "6ff13cc369e0425d676371d8c746dbe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7255, "upload_time": "2016-05-08T17:03:15", "url": "https://files.pythonhosted.org/packages/f4/f9/35a3fdd95a87cc6aa5873918a36ce29c7056a76113a68c724921547eb8dd/immutable_default_args-0.0.3.zip" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "e580d1fc665dd09ac76ed74092e6f365", "sha256": "7c9c1cfb2da1fa580478d1a01dde5addd871f0b4c3078d35aab74ae5ca68cdc1" }, "downloads": -1, "filename": "immutable_default_args-0.0.4.zip", "has_sig": false, "md5_digest": "e580d1fc665dd09ac76ed74092e6f365", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8637, "upload_time": "2016-05-08T17:30:04", "url": "https://files.pythonhosted.org/packages/52/e4/4642b9c66ee1781b5f4031de75ba4ccc8772e941521cfc23f1ed74cabb2a/immutable_default_args-0.0.4.zip" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "2f597669fdcad93b26fc6d8d4055485e", "sha256": "19c1404c33d404f56b7094fc974799e99d23423aff000e5927a6cf57152fb0f3" }, "downloads": -1, "filename": "immutable_default_args-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2f597669fdcad93b26fc6d8d4055485e", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9483, "upload_time": "2016-05-08T17:37:45", "url": "https://files.pythonhosted.org/packages/59/a3/bde9f5e75d2e7070f3bff0f1ec4188c5dbae6186b8132456b06ae90db476/immutable_default_args-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a2921f255c1982f975f3adf82ae5499", "sha256": "2229618730085b720f7ee862216a2dbf2660adac81bad4f8a98cd65584b8ba09" }, "downloads": -1, "filename": "immutable_default_args-0.0.5.zip", "has_sig": false, "md5_digest": "3a2921f255c1982f975f3adf82ae5499", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8717, "upload_time": "2016-05-08T17:37:35", "url": "https://files.pythonhosted.org/packages/57/6a/7effbd3dd409af2b6f19b7001b79dc5459a497a8e455668889c7c51f98a5/immutable_default_args-0.0.5.zip" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "e36528c01898a4f89ea94a4c783273a2", "sha256": "a03d5f0313d56d7e94014d81eb6e85325b24e41e1294dc2b74bf86f2190d3bd1" }, "downloads": -1, "filename": "immutable_default_args-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e36528c01898a4f89ea94a4c783273a2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10183, "upload_time": "2016-05-08T19:45:48", "url": "https://files.pythonhosted.org/packages/16/94/c02fdc037578dc093c2e05f14b24635a762606c323516a26148572464a7d/immutable_default_args-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "919b685bd70f3bb48867a47cda8257f2", "sha256": "530a9732bf6f7eb0d71eeaf4087351819112dd2e7e7732b4583d68e1125e2d74" }, "downloads": -1, "filename": "immutable_default_args-0.0.7.zip", "has_sig": false, "md5_digest": "919b685bd70f3bb48867a47cda8257f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10688, "upload_time": "2016-05-08T19:45:42", "url": "https://files.pythonhosted.org/packages/1a/5d/7840de06cd4f62283b2f8d2546cea3da97e0d470d65568e2ffcebecb2d54/immutable_default_args-0.0.7.zip" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "fc76ee881fb8ccbbfe94e28c2805c015", "sha256": "c8c31dbc0170dc16fd41ddc66e6125f0f12934213bd7e68b48304851f7238271" }, "downloads": -1, "filename": "immutable_default_args-0.0.8.zip", "has_sig": false, "md5_digest": "fc76ee881fb8ccbbfe94e28c2805c015", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9731, "upload_time": "2016-05-08T21:34:33", "url": "https://files.pythonhosted.org/packages/fb/f4/ae2849535800d5d69b84a4f1b00888bb968cdf191d63a409384902f08f19/immutable_default_args-0.0.8.zip" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "612b7f22e04087898af697fdb99d0472", "sha256": "04cee62099c0e77bc54517fd2754cbdc83ef1305c292209a6933784dea0c7203" }, "downloads": -1, "filename": "immutable_default_args-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "612b7f22e04087898af697fdb99d0472", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 9078, "upload_time": "2016-05-08T21:37:53", "url": "https://files.pythonhosted.org/packages/0b/28/8bb34cbc27a39399b6c427fafa741283362914d28cfdb14445c913fe8ab4/immutable_default_args-0.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46526e34560a8e1ceafdf21b9567e9c6", "sha256": "eb7bec293c4041c00e465a5c4ba63d16f25910cf21b3689c9476d4d93d39d80d" }, "downloads": -1, "filename": "immutable_default_args-0.0.9.zip", "has_sig": false, "md5_digest": "46526e34560a8e1ceafdf21b9567e9c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9737, "upload_time": "2016-05-08T21:37:23", "url": "https://files.pythonhosted.org/packages/2f/78/ca0bb2d629c253e4da283169dd813efb7408d16075dc38055835ebd3bc17/immutable_default_args-0.0.9.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "612b7f22e04087898af697fdb99d0472", "sha256": "04cee62099c0e77bc54517fd2754cbdc83ef1305c292209a6933784dea0c7203" }, "downloads": -1, "filename": "immutable_default_args-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "612b7f22e04087898af697fdb99d0472", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 9078, "upload_time": "2016-05-08T21:37:53", "url": "https://files.pythonhosted.org/packages/0b/28/8bb34cbc27a39399b6c427fafa741283362914d28cfdb14445c913fe8ab4/immutable_default_args-0.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46526e34560a8e1ceafdf21b9567e9c6", "sha256": "eb7bec293c4041c00e465a5c4ba63d16f25910cf21b3689c9476d4d93d39d80d" }, "downloads": -1, "filename": "immutable_default_args-0.0.9.zip", "has_sig": false, "md5_digest": "46526e34560a8e1ceafdf21b9567e9c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9737, "upload_time": "2016-05-08T21:37:23", "url": "https://files.pythonhosted.org/packages/2f/78/ca0bb2d629c253e4da283169dd813efb7408d16075dc38055835ebd3bc17/immutable_default_args-0.0.9.zip" } ] }