{ "info": { "author": "Thomas Gl\u00e4\u00dfle", "author_email": "t_glaessle@gmx.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Software Development" ], "description": "pydicti\n-------\n|Tests| |Coverage| |Version| |License|\n\nInstallation\n~~~~~~~~~~~~\n\nYou can install the newest version of *pydicti* from PyPI_:\n\n.. code:: bash\n\n pip install pydicti\n\nAlternatively, you can just take the file ``pydicti.py`` and redistribute\nit with your application.\n\n.. _PyPI: https://pypi.python.org/pypi/pydicti/\n\n\nOverview\n~~~~~~~~\n\n- ``class dicti``: default case insensitive dictionary type\n- ``class odicti``: ordered case insensitive dictionary type\n- ``def build_dicti``: create a case insensitive dictionary class\n- ``def Dicti``: create a case insensitive copy of a dictionary\n\ndicti\n=====\n\nObjects of type ``dicti`` are dictionaries that feature case insensitive\nitem access:\n\n.. code:: python\n\n >>> d = dicti(Hello='foo', world='bar')\n >>> d['heLLO']\n 'foo'\n >>> 'WOrld' in d\n True\n\nInternally however, the keys retain their original case:\n\n.. code:: python\n\n >>> sorted(d.keys())\n ['Hello', 'world']\n\nodicti\n======\n\nThe type ``odicti`` instanciates order-preserving case insensitive\ndictionaries:\n\n.. code:: python\n\n >>> odicti(zip('abc', range(3)))\n Dicti(OrderedDict([('a', 0), ('b', 1), ('c', 2)]))\n\n\nbuild_dicti\n===========\n\nWith ``build_dicti`` you can create custom case insensitive dictionaries.\nThis function is what is used to create the ``pydicti.dicti`` and\n``pydicti.odicti`` types. Note that calling ``build_dicti`` several times\nwith the same argument will result in identical types:\n\n.. code:: python\n\n >>> build_dicti(dict) is dicti\n True\n >>> build_dicti(OrderedDict) is odicti\n True\n\n``build_dicti`` uses subclassing to inherit the semantics of the given base\ndictionary type:\n\n.. code:: python\n\n >>> issubclass(odicti, OrderedDict)\n True\n\nDicti\n=====\n\nThe function ``Dicti`` is convenient for creating case insensitive\ncopies of dictionary instances:\n\n.. code:: python\n\n >>> o = OrderedDict(zip('abcdefg', range(7)))\n >>> oi = Dicti(o)\n >>> type(oi) is odicti\n True\n\n\nJSON\n~~~~\n\nThe subclassing approach allows to plug your dictionary instance into\nplaces where typechecking with ``isinstance`` is used, like in the json_\nmodule:\n\n.. code:: python\n\n >>> import json\n >>> d == json.loads(json.dumps(d), object_hook=dicti)\n True\n\n.. _json: http://docs.python.org/3.3/library/json.html\n\nYou can use ``json.loads(s, object_pairs_hook=odicti)`` to\ndeserialize ordered dictionaries.\n\n\nPitfalls\n~~~~~~~~\n\nThe equality comparison tries preserves the semantics of the base type as\nwell as reflexitivity. This has impact on the transitivity of the\ncomparison operator:\n\n.. code:: python\n\n >>> i = dicti(oi)\n >>> roi = odicti(reversed(list(oi.items())))\n >>> roi == i and i == oi\n True\n >>> oi != roi and roi != oi # NOT transitive!\n True\n >>> oi == i and i == oi # reflexive\n True\n\nThe `coercion rules`_ in python allow this to work pretty well when\nperforming comparisons between types that are subclasses of each other. Be\ncareful otherwise, however.\n\n.. _`coercion rules`: http://docs.python.org/2/reference/datamodel.html#coercion-rules\n\n\nLicense\n~~~~~~~\n\nCopyright \u00a9 2013 Thomas Gl\u00e4\u00dfle \n\nThis work is free. You can redistribute it and/or modify it under the\nterms of the Do What The Fuck You Want To Public License, Version 2, as\npublished by Sam Hocevar. See the COPYING file for more details.\n\nThis program is free software. It comes without any warranty, to the\nextent permitted by applicable law.\n\n\n.. Badges:\n\n.. |Version| image:: https://img.shields.io/pypi/v/pydicti.svg\n :target: https://pypi.python.org/pypi/pydicti\n :alt: Latest Version\n\n.. |Tests| image:: https://api.travis-ci.org/coldfix/pydicti.svg?branch=master\n :target: https://travis-ci.org/coldfix/pydicti\n :alt: Test Status\n\n.. |Coverage| image:: https://coveralls.io/repos/coldfix/pydicti/badge.svg?branch=master\n :target: https://coveralls.io/r/coldfix/pydicti\n :alt: Coverage\n\n.. |License| image:: https://img.shields.io/pypi/l/pydicti.svg\n :target: https://github.com/coldfix/pydicti/blob/master/COPYING\n :alt: License\n\nCHANGELOG\n~~~~~~~~~\n\n1.1.3\n=====\nDate: 28.06.2019\n\n- avoid key recomputation in ``__setitem__``\n\n\n1.1.2\n=====\nDate: 28.06.2019\n\n- leave item order invariant under assignment in odicti (#2)\n- leave key case invariant under assignment\n\n\n1.1.1\n=====\nDate: 25.03.2019\n\n- fix deprecated MutableMapping import (error on py38)\n\n\n1.1.0\n=====\nDate: 19.03.2019\n\n- drop py2.6 support\n- fix version number in long_description\n\n\n1.0.0\n=====\nDate: 19.03.2019\n\n- make str representation more dict-like\n- misc cleanup\n\n\n0.0.6\n=====\nDate: 08.09.2016\n\n- fix UnicodeDecodeError in setup when UTF-8 is not the default encoding\n\n\n0.0.5\n=====\nDate: 18.05.2016\n\n- fix pickling on py 3.5\n- the 'name' parameter to build_dicti can now be a qualname\n\n\n0.0.4\n=====\nDate: 01.02.2014\n\n- add coverage reports\n- use more extensive unit tests\n- add support for pickle\n\n\n0.0.3\n=====\nDate: 26.01.2014\n\n- add support for python26\n- make dependency on ``OrderedDict`` optional\n- migrate to setuptools in order to use testing commands\n- support `ordereddict.OrderedDict`_ as fallback\n\n.. _`ordereddict.OrderedDict`: https://pypi.python.org/pypi/ordereddict/1.1\n\n0.0.2\n=====\nDate: 29.12.2013\n\n- fix ``dicti.pop``\n- support ``deepcopy(dicti)``\n- make nosetest automatically execute the doctests\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/coldfix/pydicti", "keywords": "", "license": "WTFPL", "maintainer": "", "maintainer_email": "", "name": "pydicti", "package_url": "https://pypi.org/project/pydicti/", "platform": "", "project_url": "https://pypi.org/project/pydicti/", "project_urls": { "Homepage": "https://github.com/coldfix/pydicti" }, "release_url": "https://pypi.org/project/pydicti/1.1.3/", "requires_dist": null, "requires_python": ">=2.7", "summary": "Case insensitive derivable dictionary", "version": "1.1.3" }, "last_serial": 5461492, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "fe941bfc93c4a17ff56eea30872be735", "sha256": "9e058f08b4415a795caa209d598b489a921bedae1a0087a7f05d60efeb11ea57" }, "downloads": -1, "filename": "pydicti-0.0.1.tar.gz", "has_sig": false, "md5_digest": "fe941bfc93c4a17ff56eea30872be735", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5188, "upload_time": "2013-09-18T04:36:14", "url": "https://files.pythonhosted.org/packages/cb/3f/432a74cbd02e3ee134d368c9f942c94e30e0aa526ccdf2c83c5f333244f2/pydicti-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2c3cafd3e0c5213cb02d696d5bc23337", "sha256": "c51efda9abd40521db966715febcd76fd119cf1040d4f9d46ee44c1e842c3b72" }, "downloads": -1, "filename": "pydicti-0.0.2.tar.gz", "has_sig": false, "md5_digest": "2c3cafd3e0c5213cb02d696d5bc23337", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5619, "upload_time": "2013-12-30T03:33:09", "url": "https://files.pythonhosted.org/packages/ae/1a/988cf840d138739a61a70b4d745f6dadd35e5fe952b1352345706ba717eb/pydicti-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "558c8ef0c82e23aa06e722587ee369d5", "sha256": "d6e93b5ed1d1089d574a2c821b96abb5442f719049fb937eb56eb485579b6a98" }, "downloads": -1, "filename": "pydicti-0.0.3.tar.gz", "has_sig": false, "md5_digest": "558c8ef0c82e23aa06e722587ee369d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7350, "upload_time": "2014-01-26T20:52:50", "url": "https://files.pythonhosted.org/packages/e0/9c/6d80cff56e4895768d4860e4a8df9d00f834b24e475144df28ec9915007a/pydicti-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "51e26be0567c871bfc7a14d57d919aa9", "sha256": "64d2f336ad0718ac0a05f6a482716d908b25b4b0040255653033b62f15098bef" }, "downloads": -1, "filename": "pydicti-0.0.4.tar.gz", "has_sig": false, "md5_digest": "51e26be0567c871bfc7a14d57d919aa9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9069, "upload_time": "2014-02-01T18:01:20", "url": "https://files.pythonhosted.org/packages/9e/51/d75727ae18c8348c5794f8653131cf99857b1acd86839783162e8c2b1246/pydicti-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "e17040e6f502a3d5d35cf5731432d2c0", "sha256": "17739351a2edba3a300d2e2297a96ab926a146a74cdb6939ea6a1bcce1a31750" }, "downloads": -1, "filename": "pydicti-0.0.5.tar.gz", "has_sig": false, "md5_digest": "e17040e6f502a3d5d35cf5731432d2c0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9289, "upload_time": "2016-05-18T02:28:43", "url": "https://files.pythonhosted.org/packages/cc/62/5069447ae8829fcbeeaf4789af9a513bd8b97fe70d7e4011b85b5bf156f1/pydicti-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "6d2c7c8626767abf806369b63a1a3b57", "sha256": "a0baae52458bcd6ea2ed32ffc52d6e17e68f294ca62b3dea58ee6b12e25e2636" }, "downloads": -1, "filename": "pydicti-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6d2c7c8626767abf806369b63a1a3b57", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8686, "upload_time": "2019-02-18T16:39:30", "url": "https://files.pythonhosted.org/packages/f7/73/002b0c5f5a09eed5ab10b72d999e464179067fbe8cb35f4129bb48b9d0c1/pydicti-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a3a8c25a59a927af76e4e1772c6d363", "sha256": "ee16421ba371ce335a885c9207cc335aa1286dfecbf0ff53a2c318f3ca0e0a51" }, "downloads": -1, "filename": "pydicti-0.0.6.tar.gz", "has_sig": false, "md5_digest": "3a3a8c25a59a927af76e4e1772c6d363", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9467, "upload_time": "2016-09-08T08:54:44", "url": "https://files.pythonhosted.org/packages/62/26/56add5903115061e7a84131c5d5bc34813be99bd622a1aa5ae76c7587f3b/pydicti-0.0.6.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "49be8d3dd93d9294d530759cd5125a0f", "sha256": "6a721287e28a58aa431a617cee8015835c1f9dd6606bd673f29468f591ce8616" }, "downloads": -1, "filename": "pydicti-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "49be8d3dd93d9294d530759cd5125a0f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.6", "size": 8209, "upload_time": "2019-03-19T21:15:19", "url": "https://files.pythonhosted.org/packages/96/0d/f3c5d089a10d2e05d2728957892dc1b12a12daecc5299e611bf90291c35f/pydicti-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c0bc3ce9c4ab55ad4318093575b60cc", "sha256": "eae348ba241318089dba02699f1490a032c4df8191145eda2f80f8f9fa7b970a" }, "downloads": -1, "filename": "pydicti-1.0.0.tar.gz", "has_sig": false, "md5_digest": "0c0bc3ce9c4ab55ad4318093575b60cc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 9438, "upload_time": "2019-03-19T21:03:40", "url": "https://files.pythonhosted.org/packages/de/d0/cbb802b2c4107d54d6d04cc9b34c390e10c6d6990876c0282d678669ed21/pydicti-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9d197919a3c43d34a79b7913a5dc71b5", "sha256": "f48f7222b30196829b6abb3157ed48e7abab9d9ac50a0b49b52d9a9bf093277d" }, "downloads": -1, "filename": "pydicti-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d197919a3c43d34a79b7913a5dc71b5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7541, "upload_time": "2019-03-19T21:22:24", "url": "https://files.pythonhosted.org/packages/d3/8e/42c918317e10b890b3bac9b14afa6cfcb013e4adebfdd2951b4150ff34b5/pydicti-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "110220b6230b485ff6bae690c7bbe7f5", "sha256": "9b873deaf8b5aca6a30a035389331919b3242f8b45440e3de85b5e6ba0491f62" }, "downloads": -1, "filename": "pydicti-1.1.0.tar.gz", "has_sig": false, "md5_digest": "110220b6230b485ff6bae690c7bbe7f5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9298, "upload_time": "2019-03-19T21:22:25", "url": "https://files.pythonhosted.org/packages/9e/75/b6048819a773d10646b6ed716d03d5100b3b58e1249de1c5c60a94fc4849/pydicti-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "42f84402d3ab85bc46f13a29f8274ff9", "sha256": "9e5ccded3779ae0320d883f36eb78ac1ed5f13a3498f26bf903516c315ac0db8" }, "downloads": -1, "filename": "pydicti-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "42f84402d3ab85bc46f13a29f8274ff9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7594, "upload_time": "2019-03-25T00:34:20", "url": "https://files.pythonhosted.org/packages/91/e1/ef5ef5988242b51aa6a6f7ab672a4f8f3bea9439052177e1927e33a540f9/pydicti-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89f87c0f83516b8b7c672ab92a528aa4", "sha256": "3faf6e4d82f2aaab5d711f04aa2fef2dd1d3f371c7dc4931415d77d5e95bee05" }, "downloads": -1, "filename": "pydicti-1.1.1.tar.gz", "has_sig": false, "md5_digest": "89f87c0f83516b8b7c672ab92a528aa4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9381, "upload_time": "2019-03-25T00:34:21", "url": "https://files.pythonhosted.org/packages/e6/0e/c8baa4548a4bfd6f1969ff2c8961abfdf6e1c7e5745f811b664247ae6c8c/pydicti-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "55e219ccb9cdb2504a5e4a0156afa70e", "sha256": "4a8e06cb1895d4295caa09ca52b3371fb7bbec6d085dcb9cc367e9d146e3344d" }, "downloads": -1, "filename": "pydicti-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "55e219ccb9cdb2504a5e4a0156afa70e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7653, "upload_time": "2019-06-28T12:42:55", "url": "https://files.pythonhosted.org/packages/f4/69/d8f787d695e7e9e5a0d4f786820b88c07385379724498c6042e043dcae0f/pydicti-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54e9184fa3f3db2cfd5a9f6250e5b576", "sha256": "ca62561a643050e9bf6bba7c053de3c01fa050d6518ead3758487486e3ab269a" }, "downloads": -1, "filename": "pydicti-1.1.2.tar.gz", "has_sig": false, "md5_digest": "54e9184fa3f3db2cfd5a9f6250e5b576", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9439, "upload_time": "2019-06-28T12:42:59", "url": "https://files.pythonhosted.org/packages/ea/46/dee372a3c77ed94e9f0736e46e7c0c4c0bec1acfe1d74df42022c149d55f/pydicti-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "9f9b419ab2047cd6450b0ef346c24c89", "sha256": "588fef0b3f10596abf568c91c756753b5d0300af24a080649b9c942fcfa1c4ba" }, "downloads": -1, "filename": "pydicti-1.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f9b419ab2047cd6450b0ef346c24c89", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7693, "upload_time": "2019-06-28T12:42:57", "url": "https://files.pythonhosted.org/packages/3c/b4/b69a7b606b451a5f93210e425c7e946cd6c6d57d75522ced713bc7e49327/pydicti-1.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b02ed35da91e400f1f17a57ab02ba06b", "sha256": "eea50576baa751a9b6b862f09f081c47d557e0298623ca8742851da72b00eec4" }, "downloads": -1, "filename": "pydicti-1.1.3.tar.gz", "has_sig": false, "md5_digest": "b02ed35da91e400f1f17a57ab02ba06b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9497, "upload_time": "2019-06-28T12:43:01", "url": "https://files.pythonhosted.org/packages/79/8a/10b78bd45eec6fceb71b2b379321d0a511df3d9495d8c15994070b79dba3/pydicti-1.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9f9b419ab2047cd6450b0ef346c24c89", "sha256": "588fef0b3f10596abf568c91c756753b5d0300af24a080649b9c942fcfa1c4ba" }, "downloads": -1, "filename": "pydicti-1.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9f9b419ab2047cd6450b0ef346c24c89", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7", "size": 7693, "upload_time": "2019-06-28T12:42:57", "url": "https://files.pythonhosted.org/packages/3c/b4/b69a7b606b451a5f93210e425c7e946cd6c6d57d75522ced713bc7e49327/pydicti-1.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b02ed35da91e400f1f17a57ab02ba06b", "sha256": "eea50576baa751a9b6b862f09f081c47d557e0298623ca8742851da72b00eec4" }, "downloads": -1, "filename": "pydicti-1.1.3.tar.gz", "has_sig": false, "md5_digest": "b02ed35da91e400f1f17a57ab02ba06b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9497, "upload_time": "2019-06-28T12:43:01", "url": "https://files.pythonhosted.org/packages/79/8a/10b78bd45eec6fceb71b2b379321d0a511df3d9495d8c15994070b79dba3/pydicti-1.1.3.tar.gz" } ] }