{ "info": { "author": "Terji Petersen", "author_email": "terji78@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "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": "Recursively convert ``list`` to ``tuple``, ``set`` to ``frozenset``,\n``dict`` to ``mappingproxy`` etc.\n\nExample usage:\n\n.. code-block:: python\n\n import freezedata\n\n data = [{'a': [1,2,3], 'b': {1,2,3}}, {1:1, 2:2, 3:3}]\n frozendata = freezedata.freeze_data(data)\n print(frozendata)\n >> (mappingproxy({'a': (1, 2, 3), 'b': frozenset({1, 2, 3})}),\n mappingproxy({1: 1, 2: 2, 3: 3}))\n\nThis is a read-only data structure, that is; there is no direct way to alter this\ndata structure from within ``frozendata`` itself (without using some special modules (``gc``,\n``inspect``)).\n\nFor example:\n\n.. code-block:: python\n\n frozendata[0]['a'][0] = 4\n >> TypeError: 'tuple' object does not support item assignment\n del frozendata[1][1]\n >> TypeError: 'mappingproxy' object does not support item deletion\n\n*Notice*: Since a ``mappingproxy`` is not hashable, frozen data\nstructures containing ``mappingproxy`` (i.e. based on ``dict``) will not be\nhashable either:\n\n.. code-block:: python\n\n hash(frozendata)\n >> TypeError: unhashable type: 'mappingproxy'\n\nOn the other hand, if the frozen data structure contains only hashable elements, the whole\nstructure will be hashable (and immutable) as well:\n\n.. code-block:: python\n\n frozendata = freezedata.freeze_data([[1,2,3], {4,5,6}])\n print(frozendata)\n >> ((1, 2, 3), frozenset({4, 5, 6}))\n hash(frozendata)\n >> -11948691520864899\n\nRelaxing requirements (accepting functions, modules, classes and instances):\n----------------------------------------------------------------------------\n\nFunctions, modules, (user-created) classes and instances are mutable in Python, and therefore\nneither immutable or read-only. By default, using these will result in errors, but setting\nparameter ``allow`` as one, several or all of ``functions``, ``modules`` , ``classes``\nand ``instances``, these can be used in the new new data structure.\n\n**Functions** have mutable attributes in Python, but sometimes you still want a function in a\nnew data structure that won't affect the parent data structure / parent function.\nBy setting ``allow='functions'`` or ``allow=['functions']``, the new data structure will\ncontain a *copy* of the included functions and its public attributes:\n\n.. code-block:: python\n\n def func(n):\n return n*2\n func.a = 'a'\n data = [func]\n frozendata = freezedata.freeze_data(data, allow='functions')\n data[0] == frozendata[0]\n >> False\n frozendata[0].a = 'b'\n print(data[0].a, frozendata[0].a)\n >> a b\n\n**modules** will be converted to a ``namedtuple``, if you're freezing a module.\nIf a module is in the data structure, but it's not top level, an error will by default be raised.\nIf ``allow={'modules'}`` is set, non-top-level modules will be allowed and kept *unchanged*.\n\n**classes and class instances** may be converted into ``namedtuple`` and used in the\nfrozen data structure by setting ``allow={'classes', 'instances}`` or only one, e.g.\n``allow={'classes'}``, as needed. By converting to ``namedtuple``, information may be lost, as\nattributes with leading underscores will be ignored:\n\n.. code-block:: python\n\n class Test:\n a = 1\n def __init__(self, a):\n self.a = a\n test = Test(2)\n frozendata = freezedata.freeze_data([Test, test], allow={'classes', 'instances'})\n print(frozendata)\n >> (Test(a=1), Test(a=2))\n print(type(frozendata[0]), type(frozendata[1]))\n >> # two namedtuples", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/topper-123/freezedata", "keywords": null, "license": "MIT License", "maintainer": null, "maintainer_email": null, "name": "freezedata", "package_url": "https://pypi.org/project/freezedata/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/freezedata/", "project_urls": { "Homepage": "https://github.com/topper-123/freezedata" }, "release_url": "https://pypi.org/project/freezedata/2.2.7/", "requires_dist": null, "requires_python": null, "summary": "Recursively convert lists to tuples, sets to frozensets, dicts to mappingproxy etc.", "version": "2.2.7" }, "last_serial": 2729246, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "3aa0dc7d16c934ffa9db3e9e52b53f02", "sha256": "776463c2524e9da5311d03496f46575c4f2713bc64ef733ff96f8af719ec297d" }, "downloads": -1, "filename": "freezedata-1.0.tar.gz", "has_sig": false, "md5_digest": "3aa0dc7d16c934ffa9db3e9e52b53f02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3061, "upload_time": "2017-03-04T22:36:04", "url": "https://files.pythonhosted.org/packages/19/4f/739381729f16f291a3e72adc993869d073d8ba5d6fde0f93a1cf820e770c/freezedata-1.0.tar.gz" } ], "2.0": [], "2.1": [ { "comment_text": "", "digests": { "md5": "0b5ad3a44dbf951c4bb7fb967bba1aed", "sha256": "1cc7b0eb616cd3fc6ece5401ce60f9962ff6982afbca87bca5cc402f2fac7094" }, "downloads": -1, "filename": "freezedata-2.1.tar.gz", "has_sig": false, "md5_digest": "0b5ad3a44dbf951c4bb7fb967bba1aed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3719, "upload_time": "2017-03-05T12:17:54", "url": "https://files.pythonhosted.org/packages/25/93/b8000b8c313454fc3600c90ac54eb5845cda7456d57acad9badb2b4efac2/freezedata-2.1.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "bbb966a5f5d59056ccc396bd310a59cc", "sha256": "eaeaa39448850df395744171e32d9abdcfb0169c189ad420a288717fef0d9117" }, "downloads": -1, "filename": "freezedata-2.2.tar.gz", "has_sig": false, "md5_digest": "bbb966a5f5d59056ccc396bd310a59cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3740, "upload_time": "2017-03-06T10:59:19", "url": "https://files.pythonhosted.org/packages/19/73/6074ca07601a1435b4ff532103728dca9e217e83e10855fc70fe93f8e6d0/freezedata-2.2.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "36377d6e663163aacba5447460ffbadd", "sha256": "f7ca64c436732af9365778a421bcfa9f3fe0d452ac43697085e20c2c42715415" }, "downloads": -1, "filename": "freezedata-2.2.1.tar.gz", "has_sig": false, "md5_digest": "36377d6e663163aacba5447460ffbadd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3750, "upload_time": "2017-03-06T11:03:49", "url": "https://files.pythonhosted.org/packages/3d/88/f0a6cf68e04c123e86c8bf279057af87880efeb65fdfa6c5b2507a53f542/freezedata-2.2.1.tar.gz" } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "93d4f7b94b3ef6af090feff9a73a6320", "sha256": "6069f130df2cce7afba2c7a579c1414bcbdc6575d4962d562cbb7ac661bb6317" }, "downloads": -1, "filename": "freezedata-2.2.2.tar.gz", "has_sig": false, "md5_digest": "93d4f7b94b3ef6af090feff9a73a6320", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3851, "upload_time": "2017-03-06T11:17:26", "url": "https://files.pythonhosted.org/packages/fc/08/576c7c6213227d229c85d425008f9aa655a57aecb51295014b16205dd46c/freezedata-2.2.2.tar.gz" } ], "2.2.3": [ { "comment_text": "", "digests": { "md5": "ebf617ecb8156cf34e40eadbcc719309", "sha256": "ba747b10251c96b9cc1eaddc50d5b7f8d3da3b13f777d812d5256a3fe24ec478" }, "downloads": -1, "filename": "freezedata-2.2.3.tar.gz", "has_sig": false, "md5_digest": "ebf617ecb8156cf34e40eadbcc719309", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3857, "upload_time": "2017-03-06T11:26:47", "url": "https://files.pythonhosted.org/packages/9e/f0/cdf6e76c924a17454d51211201d199d3dfd71f7a2f69f4cfb7d017a14c78/freezedata-2.2.3.tar.gz" } ], "2.2.4": [ { "comment_text": "", "digests": { "md5": "c1c822d5fd18e5eb5c65135ae56734b3", "sha256": "cf6c480fd6d427e87a65f5217f9bda26727d6e33f649c073b95d8a8230d6ab83" }, "downloads": -1, "filename": "freezedata-2.2.4.tar.gz", "has_sig": false, "md5_digest": "c1c822d5fd18e5eb5c65135ae56734b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4926, "upload_time": "2017-03-08T22:01:36", "url": "https://files.pythonhosted.org/packages/fd/4e/f93bade32f1d11c463ea5546d78a4d03a046ae0650a2609bd77df82ddf78/freezedata-2.2.4.tar.gz" } ], "2.2.5": [ { "comment_text": "", "digests": { "md5": "4bb817dc78d7c3977c6c569c8e29466a", "sha256": "48030dc3cdb573fb1acaba77978cfb4da005af6cbcba53cd53647f1f3d27914d" }, "downloads": -1, "filename": "freezedata-2.2.5.tar.gz", "has_sig": false, "md5_digest": "4bb817dc78d7c3977c6c569c8e29466a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5071, "upload_time": "2017-03-08T22:41:55", "url": "https://files.pythonhosted.org/packages/13/a7/684c88c8320b309fd1cac3c2129a350d268d0f6b4c9bf47ee616804e10ca/freezedata-2.2.5.tar.gz" } ], "2.2.6": [ { "comment_text": "", "digests": { "md5": "b8657688ad01080dad0f6e5379419019", "sha256": "79599fbd0658a3810aeb8a51c976a25003afcfee4e51473fd63cae2bc0aa3afb" }, "downloads": -1, "filename": "freezedata-2.2.6.tar.gz", "has_sig": false, "md5_digest": "b8657688ad01080dad0f6e5379419019", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4999, "upload_time": "2017-03-12T21:49:30", "url": "https://files.pythonhosted.org/packages/6f/1f/4f1b170fd50fd5812878b7dc200f4f5fa61560499b7dfc763abb18e85a0f/freezedata-2.2.6.tar.gz" } ], "2.2.7": [ { "comment_text": "", "digests": { "md5": "98b8860a2c5d0786c90e7e8929b330b4", "sha256": "a0cd528810f77f236964b1a411d7bc4aa8de6a46107221cc493431d24a1062de" }, "downloads": -1, "filename": "freezedata-2.2.7.tar.gz", "has_sig": false, "md5_digest": "98b8860a2c5d0786c90e7e8929b330b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5010, "upload_time": "2017-03-24T21:23:54", "url": "https://files.pythonhosted.org/packages/56/21/701fbed7bd230e0be78f1fe272e19d97d3db69e4a578b8a4dccda8453d91/freezedata-2.2.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "98b8860a2c5d0786c90e7e8929b330b4", "sha256": "a0cd528810f77f236964b1a411d7bc4aa8de6a46107221cc493431d24a1062de" }, "downloads": -1, "filename": "freezedata-2.2.7.tar.gz", "has_sig": false, "md5_digest": "98b8860a2c5d0786c90e7e8929b330b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5010, "upload_time": "2017-03-24T21:23:54", "url": "https://files.pythonhosted.org/packages/56/21/701fbed7bd230e0be78f1fe272e19d97d3db69e4a578b8a4dccda8453d91/freezedata-2.2.7.tar.gz" } ] }