{ "info": { "author": "BlueDynamics Alliance", "author_email": "dev@bluedynamics.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Python Software Foundation License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development" ], "description": "odict\n=====\n\nDictionary in which the *insertion* order of items is preserved (using an\ninternal double linked list). In this implementation replacing an existing\nitem keeps it at its original position.\n\nInternal representation: values of the dict.\n\n.. code-block:: python\n\n [pred_key, val, succ_key]\n\nThe sequence of elements uses as a double linked list. The ``links`` are dict\nkeys. ``self.lh`` and ``self.lt`` are the keys of first and last element\ninserted in the odict.\n\n\nMotivation\n----------\n\nWhen this package was created, ``collections.OrderedDict`` not existed yet.\n\nAnother problem is that ``dict`` cannot always be inherited from in conjunction\nwith other base classes. This may result in instance lay-out conflicts or other\nerrors. So ``odict`` is written in a way that let you alter the dictionary\nbase implementation easily.\n\n\nPerformance (Python 3.4)\n------------------------\n\nWhen running the benchmark script, you get results similar to the one below on\nrecent common hardware.\n\nAdding and deleting builtin ``dict`` objects\n\n+----------------+-------------+\n| Add 1000 | 0.63800ms |\n+----------------+-------------+\n| Delete 1000 | 0.36900ms |\n+----------------+-------------+\n| Add 10000 | 5.74600ms |\n+----------------+-------------+\n| Delete 10000 | 3.97000ms |\n+----------------+-------------+\n| Add 100000 | 69.40600ms |\n+----------------+-------------+\n| Delete 100000 | 47.30000ms |\n+----------------+-------------+\n| Add 1000000 | 807.09100ms |\n+----------------+-------------+\n| Delete 1000000 | 495.33400ms |\n+----------------+-------------+\n\nAdding and deleting ``collection.OrderedDict`` objects\n\n+----------------+---------------+\n| Add 1000 | 8.15200ms |\n+----------------+---------------+\n| Delete 1000 | 0.50800ms |\n+----------------+---------------+\n| Add 10000 | 91.45800ms |\n+----------------+---------------+\n| Delete 10000 | 7.10200ms |\n+----------------+---------------+\n| Add 100000 | 982.35500ms |\n+----------------+---------------+\n| Delete 100000 | 71.02300ms |\n+----------------+---------------+\n| Add 1000000 | 10222.78300ms |\n+----------------+---------------+\n| Delete 1000000 | 715.35100ms |\n+----------------+---------------+\n\nAdding and deleting ``odict`` objects provided by this package\n\n+----------------+--------------+\n| Add 1000 | 46.75600ms |\n+----------------+--------------+\n| Delete 1000 | 0.35700ms |\n+----------------+--------------+\n| Add 10000 | 23.97900ms |\n+----------------+--------------+\n| Delete 10000 | 4.79100ms |\n+----------------+--------------+\n| Add 100000 | 276.15900ms |\n+----------------+--------------+\n| Delete 100000 | 49.02700ms |\n+----------------+--------------+\n| Add 1000000 | 3244.68600ms |\n+----------------+--------------+\n| Delete 1000000 | 539.16500ms |\n+----------------+--------------+\n\nRelation ``dict : odict``\n\n+---------------------------+----------+\n| creating 1000 objects | 1:73.285 |\n+---------------------------+----------+\n| deleting 1000 objects | 1: 0.967 |\n+---------------------------+----------+\n| creating 10000 objects | 1: 4.173 |\n+---------------------------+----------+\n| deleting 10000 objects | 1: 1.207 |\n+---------------------------+----------+\n| creating 100000 objects | 1: 3.979 |\n+---------------------------+----------+\n| deleting 100000 objects | 1: 1.037 |\n+---------------------------+----------+\n| creating 1000000 objects | 1: 4.020 |\n+---------------------------+----------+\n| deleting 1000000 objects | 1: 1.088 |\n+---------------------------+----------+\n\nRelation ``OrderedDict : odict``\n\n+---------------------------+----------+\n| creating 1000 objects | 1: 5.736 |\n+---------------------------+----------+\n| deleting 1000 objects | 1: 0.703 |\n+---------------------------+----------+\n| creating 10000 objects | 1: 0.262 |\n+---------------------------+----------+\n| deleting 10000 objects | 1: 0.675 |\n+---------------------------+----------+\n| creating 100000 objects | 1: 0.281 |\n+---------------------------+----------+\n| deleting 100000 objects | 1: 0.690 |\n+---------------------------+----------+\n| creating 1000000 objects | 1: 0.317 |\n+---------------------------+----------+\n| deleting 1000000 objects | 1: 0.754 |\n+---------------------------+----------+\n\n\nUsage\n-----\n\nImport and create ordered dictionary.\n\n.. code-block:: python\n\n from odict import odict\n od = odict()\n\ntype conversion to ordinary ``dict``. This will fail.\n\n.. code-block:: pycon\n\n >>> dict(odict([(1, 1)]))\n {1: [nil, 1, nil]}\n\nThe reason for this is here -> http://bugs.python.org/issue1615701\n\nThe ``__init__`` function of ``dict`` checks wether arg is subclass of dict,\nand ignores overwritten ``__getitem__`` & co if so.\n\nThis was fixed and later reverted due to behavioural problems with ``pickle``.\n\nUse one of the following ways for type conversion.\n\n.. code-block:: pycon\n\n >>> dict(odict([(1, 1)]).items())\n {1: 1}\n\n >>> odict([(1, 1)]).as_dict()\n {1: 1}\n\nIt is possible to use abstract mixin class ``_odict`` to hook another dict base\nimplementation. This is useful i.e. when persisting to ZODB. Inheriting from\n``dict`` and ``Persistent`` at the same time fails.\n\n.. code-block:: python\n\n from persistent.dict import PersistentDict\n class podict(_odict, PersistentDict):\n\n def _dict_impl(self):\n return PersistentDict\n\n\nMisc\n----\n\nIn a C reimplementation of this data structure, things could be simplified\n(and speed up) a lot if given a value you can at the same time find its key.\nWith that, you can use normal C pointers.\n\n\nTestCoverage\n------------\n\n.. image:: https://travis-ci.org/bluedynamics/odict.svg?branch=master\n :target: https://travis-ci.org/bluedynamics/odict\n\nSummary of the test coverage report::\n\n Name Stmts Miss Cover\n -------------------------------------------\n src/odict/__init__.py 1 0 100%\n src/odict/pyodict.py 320 0 100%\n src/odict/tests.py 280 0 100%\n -------------------------------------------\n TOTAL 601 0 100%\n\nPython Versions\n---------------\n\n- Python 2.6+, 3.2+, pypy\n\n- May work with other versions (untested)\n\n\nContributors\n============\n\n- bearophile (Original Author)\n\n- Robert Niederreiter (Author)\n\n- Georg Bernhard\n\n- Florian Friesdorf\n\n- Jens Klein\n\nunder the `Python Software Foundation License `_.\n\n\nChanges\n=======\n\n1.7.0\n-----\n\n- Add ``swap``, ``insertbefore``, ``insertafter``, ``insertfirst`` and\n ``insertlast`` functions to ``odict``.\n [rnix]\n\n\n1.6.2\n-----\n\n- Use class name instead of 'odict()' in ``__repr__``.\n [rnix]\n\n\n1.6.1\n-----\n\n- pypi masness.\n [rnix]\n\n\n1.6.0\n-----\n\n- Compatible with Python 3 and pypy.\n [rnix]\n\n\n1.5.2\n-----\n\n- Fix permission problem in 1.5.1 release, some files were only rw by user.\n [jensens, 2016-11-25]\n\n\n1.5.1\n-----\n\n- Implement ``__copy__`` and ``__deepcopy__`` in order to work with Python 2.7.\n [rnix, 2012-10-15]\n\n- Use ``try/except`` instead of ``in`` in ``__contains__``.\n [rnix, 2012-10-15]\n\n\n1.5.0\n-----\n\n- Implement ``alter_key``.\n [rnix, 2012-05-18]\n\n\n1.4.4\n-----\n\n- Remove unused error variable.\n [rnix, 2011-11-28]\n\n- Add note on why to check with ``==`` and ``!=`` against ``_nil``.\n [rnix, 2011-11-28]\n\n\n1.4.3\n-----\n\n- Get rid of annoying warning about \"global\" usage in ``bench.py``.\n [jensens, 2011-09-20]\n\n\n1.4.2\n-----\n\n- More ``copy`` testing.\n [rnix, 2010-12-18]\n\n- Add ``has_key`` to odict.\n [rnix, 2010-12-18]\n\n\n1.4.1\n-----\n\n- Fix release, README.rst was missing, added MANIFEST.in file to include it.\n [jensens, 2010-11-29]\n\n\n1.4.0\n-----\n\n- Full test coverage.\n [chaoflow, rnix, 2010-08-17]\n\n- Code cleanup and optimizing.\n [chaoflow, rnix, 2010-08-17]\n\n\n1.3.2\n-----\n\n- Access ``dict`` API providing class via function ``_dict_impl()`` and\n provide odict logic as abstract base class ``_odict``.\n [rnix, 2010-07-08]\n\n\n1.3.1\n-----\n\n- Add test for bool evaluation.\n [rnix, 2010-04-21]\n\n\n1.3.0\n-----\n\n- Fix access to ``odict.lt`` and ``odict.lh`` properties. Now it's possible\n to overwrite ``__setattr__`` and ``__getattr__`` on ``odict`` subclass\n without hassle.\n [rnix, 2010-04-06]\n\n- Add ``sort`` function to odict.\n [rnix, 2010-03-03]\n\n\n1.2.6\n-----\n\n- Make ``odict`` serialize and deserialize properly.\n [gogo, 2010-01-12]\n\n\n1.2.5\n-----\n\n- Add ``as_dict`` function. Supports type conto ordinary ``dict``.\n [rnix, 2009-12-19]\n\n- Add benchmark script.\n [rnix, 2009-12-19]\n\n\n1.2.4\n-----\n\n- Do not check for ``key in self`` on ``__delitem__``, ``KeyError`` is raised\n properly anyway. Huge Speedup!\n [rnix, jensens, 2009-12-18]\n\n\n1.2.3\n-----\n\n- Move tests to seperate file and make egg testable with\n ``python setup.py test``.\n [rnix, 2009-12-07]\n\n- improve ``lt`` and ``lh`` properties to make ``odict`` work with\n ``copy.deepcopy``.\n [rnix, 2009-12-07]\n\n\n1.2.2\n-----\n\n- Use try/except instead of ``__iter__`` in ``__setitem__`` to determine if\n value was already set.\n [rnix, 2009-07-17]\n\n\n1.2.1\n-----\n\n- Add missing ``__len__`` and ``__contains__`` functions.\n [rnix, 2009-03-17]\n\n\n1.2.0\n-----\n\n- Eggified\n [rnix, 2009-03-17]\n\n\n< 1.2\n-----\n\n- http://code.activestate.com/recipes/498195/\n [bearophile, 2006-10-12]\n\n \n\n\nLicense\n=======\n\nPYTHON SOFTWARE FOUNDATION LICENSE VERSION 2\n--------------------------------------------\n\n1. This LICENSE AGREEMENT is between the Python Software Foundation\n(\"PSF\"), and the Individual or Organization (\"Licensee\") accessing and\notherwise using this software (\"Python\") in source or binary form and\nits associated documentation.\n\n2. Subject to the terms and conditions of this License Agreement, PSF\nhereby grants Licensee a nonexclusive, royalty-free, world-wide\nlicense to reproduce, analyze, test, perform and/or display publicly,\nprepare derivative works, distribute, and otherwise use Python\nalone or in any derivative version, provided, however, that PSF's\nLicense Agreement and PSF's notice of copyright, i.e., \"Copyright (c)\n2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation; All Rights\nReserved\" are retained in Python alone or in any derivative version\nprepared by Licensee.\n\n3. In the event Licensee prepares a derivative work that is based on\nor incorporates Python or any part thereof, and wants to make\nthe derivative work available to others as provided herein, then\nLicensee hereby agrees to include in any such work a brief summary of\nthe changes made to Python.\n\n4. PSF is making Python available to Licensee on an \"AS IS\"\nbasis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR\nIMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND\nDISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS\nFOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT\nINFRINGE ANY THIRD PARTY RIGHTS.\n\n5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON\nFOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS\nA RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,\nOR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n6. This License Agreement will automatically terminate upon a material\nbreach of its terms and conditions.\n\n7. Nothing in this License Agreement shall be deemed to create any\nrelationship of agency, partnership, or joint venture between PSF and\nLicensee. This License Agreement does not grant permission to use PSF\ntrademarks or trade name in a trademark sense to endorse or promote\nproducts or services of Licensee, or any third party.\n\n8. By copying, installing or otherwise using Python, Licensee\nagrees to be bound by the terms and conditions of this License\nAgreement.\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/bluedynamics/odict", "keywords": "odict dict ordered dictionary mapping collection tree", "license": "Python Software Foundation License", "maintainer": "", "maintainer_email": "", "name": "odict", "package_url": "https://pypi.org/project/odict/", "platform": "", "project_url": "https://pypi.org/project/odict/", "project_urls": { "Homepage": "https://github.com/bluedynamics/odict" }, "release_url": "https://pypi.org/project/odict/1.7.0/", "requires_dist": null, "requires_python": "", "summary": "Ordered Dictionary.", "version": "1.7.0" }, "last_serial": 5510821, "releases": { "1.2": [ { "comment_text": "", "digests": { "md5": "80ff13c125d184dcd3bf45163ccdf9a0", "sha256": "f5a87f979fd20e411698aa80bceaa5174e93f64c24a85f4ddf11bc1bb42b043d" }, "downloads": -1, "filename": "odict-1.2.tar.gz", "has_sig": false, "md5_digest": "80ff13c125d184dcd3bf45163ccdf9a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3954, "upload_time": "2009-03-17T11:42:18", "url": "https://files.pythonhosted.org/packages/d1/64/6525fa25059585d54b941f2e370444f161fb0cd5fd93d8a95965d170435d/odict-1.2.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "ef8d182495b87a0e1754c49e2231ac07", "sha256": "406a76fd420810639845f85a1c37441468ebf174260c965723592b46aa572153" }, "downloads": -1, "filename": "odict-1.2.1.tar.gz", "has_sig": false, "md5_digest": "ef8d182495b87a0e1754c49e2231ac07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4039, "upload_time": "2009-03-17T12:39:22", "url": "https://files.pythonhosted.org/packages/7f/4b/24c220e32f409a14c57fe41d8d19be43428dc4259ed780b63f8c1232fc34/odict-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "2b29ef15081637a6aae80c66afed6179", "sha256": "2e3301e3c2b0fd795ea1a054517ca6ad83df6d30fbe6f03c6b59a34d3a3c45bc" }, "downloads": -1, "filename": "odict-1.2.2.tar.gz", "has_sig": false, "md5_digest": "2b29ef15081637a6aae80c66afed6179", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4166, "upload_time": "2009-07-17T11:21:02", "url": "https://files.pythonhosted.org/packages/76/ff/8a8fb0a0eedf7fdd556e6af5d20667d3099e5453c3ddb2fd376970e1dfda/odict-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "4fc95a80de96a76cbfa9406d8bdfd132", "sha256": "330ffdc20f4f169b1e6fc1e29954c08ab906fa863f377195e391a7b77c453ade" }, "downloads": -1, "filename": "odict-1.2.3.tar.gz", "has_sig": false, "md5_digest": "4fc95a80de96a76cbfa9406d8bdfd132", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4393, "upload_time": "2009-12-07T18:07:08", "url": "https://files.pythonhosted.org/packages/9c/8d/cd7b54a372ddb66949a365b944b459da1ae82d877bce185e2e6561a414c9/odict-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "07723f2d9c32cb3222d7c8f07f03e746", "sha256": "43da17f772e68984ce0f6e4c800e9263db505147462b2abb29aa4878a106f8ae" }, "downloads": -1, "filename": "odict-1.2.4.tar.gz", "has_sig": false, "md5_digest": "07723f2d9c32cb3222d7c8f07f03e746", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4480, "upload_time": "2009-12-18T14:46:38", "url": "https://files.pythonhosted.org/packages/ba/b2/7d8d7582562d907b0f841cb00aa375fa9a1fb01952e9343a6c588dcdc5f7/odict-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "513bddee0675fd3c5d3cdb3e55da838c", "sha256": "f9590abee4164be42b8e21c5dde476b390b2ded1b3c9d4a1656aab87e8fbaf04" }, "downloads": -1, "filename": "odict-1.2.5.tar.gz", "has_sig": false, "md5_digest": "513bddee0675fd3c5d3cdb3e55da838c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6503, "upload_time": "2009-12-19T15:43:26", "url": "https://files.pythonhosted.org/packages/f7/ad/b33deb7bc7ce6b691e5a6776d5a6cd49d86f183657cb57262dbe79731879/odict-1.2.5.tar.gz" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "ee2cae969ed0cd24f0c6a96daed9230e", "sha256": "e0a600650ae5db45d2ab33012781362027d7895d32b2d9b4755190a03c9ca195" }, "downloads": -1, "filename": "odict-1.2.6.tar.gz", "has_sig": false, "md5_digest": "ee2cae969ed0cd24f0c6a96daed9230e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6727, "upload_time": "2010-01-12T12:06:01", "url": "https://files.pythonhosted.org/packages/62/83/f63888209c78eee98d060a5d43a7e53cd485977cab5b148a3c43400e91b6/odict-1.2.6.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "92d3d54f466516c9f588c8a32cdcc865", "sha256": "964a1466ec19557ba4612d0a97f53ae7b2caaf2bb5e5180d1194ee08294735eb" }, "downloads": -1, "filename": "odict-1.3.0.tar.gz", "has_sig": false, "md5_digest": "92d3d54f466516c9f588c8a32cdcc865", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7452, "upload_time": "2010-04-06T11:55:31", "url": "https://files.pythonhosted.org/packages/58/16/15b25919eff643c79899de211a99e14396d08aeadfe3ff4c666c065e8c20/odict-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "e27a295e044748dc72b2af3a73e2ebac", "sha256": "82b465742a875732f8088e4390115ddcca7306c5e8bdf8cf92f37ab6ddc4758e" }, "downloads": -1, "filename": "odict-1.3.1.tar.gz", "has_sig": false, "md5_digest": "e27a295e044748dc72b2af3a73e2ebac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7515, "upload_time": "2010-04-24T10:45:56", "url": "https://files.pythonhosted.org/packages/2b/19/95299aa27af2076125f134d7a65d040baa5457cd52886440f0467b14deb3/odict-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "baa6ab384e642497b55990a3082a1adf", "sha256": "5fe2191a07577b0159f02430e58adc4028bbe0505eaa7c0ea6d29c4bb99dc6f7" }, "downloads": -1, "filename": "odict-1.3.2.tar.gz", "has_sig": false, "md5_digest": "baa6ab384e642497b55990a3082a1adf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7849, "upload_time": "2010-07-08T15:04:39", "url": "https://files.pythonhosted.org/packages/a0/7d/e6e54c94b051f63ffb16f59ad002bd80741cc8bd5b18d4f45b5913f8cf31/odict-1.3.2.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "f9f46f31c89eeb33cc1ab65cfcc2a095", "sha256": "3cbdebea2bde564d209dc3b0695891ad39c7bbc235e27ffb1dc438f1ec27d73a" }, "downloads": -1, "filename": "odict-1.4.0.tar.gz", "has_sig": false, "md5_digest": "f9f46f31c89eeb33cc1ab65cfcc2a095", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6327, "upload_time": "2010-11-25T18:37:53", "url": "https://files.pythonhosted.org/packages/c3/30/988b28a0adc7233b766014407b2707c86db87fb5e6d37d6da38b7093ca2e/odict-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "b38e3301bfc05f53c3d033eb42ce3812", "sha256": "239cbe1cc830f6442dca70afba164aaff326bd68faa4f6b63b32b9db3388347e" }, "downloads": -1, "filename": "odict-1.4.1.tar.gz", "has_sig": false, "md5_digest": "b38e3301bfc05f53c3d033eb42ce3812", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7204, "upload_time": "2010-11-29T13:51:29", "url": "https://files.pythonhosted.org/packages/94/1f/84fbb9464ff22455f948307402bdd2c437df305060292b09938128e38be8/odict-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "308cc55ee155eaa9c486fdb5600ce376", "sha256": "1e42c0238299c9aa0b610841f95e88d83c5ace569f0c615d7cad4799b65e6b5e" }, "downloads": -1, "filename": "odict-1.4.2.tar.gz", "has_sig": false, "md5_digest": "308cc55ee155eaa9c486fdb5600ce376", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8180, "upload_time": "2011-09-15T07:57:50", "url": "https://files.pythonhosted.org/packages/15/f6/b806dea5ad402d6e6371c4aaa8370a2d76158b7833c0f10711ae5639c3f3/odict-1.4.2.tar.gz" } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "30a7332880e1cadd0c1da72e7daa20a4", "sha256": "f8391c2f2ead2338e07fb5e9dd2ba501475b967512e487f2f60ddc794b1d433d" }, "downloads": -1, "filename": "odict-1.4.3.tar.gz", "has_sig": false, "md5_digest": "30a7332880e1cadd0c1da72e7daa20a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8270, "upload_time": "2011-09-20T14:36:28", "url": "https://files.pythonhosted.org/packages/21/e6/f05798954bb0552b6bb767fb4e9a58585300eabb6aba2bdeb815f4200680/odict-1.4.3.tar.gz" } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "7d39e852ff93b2892cef600866f673d7", "sha256": "5024c7bd6f8f4ab7078a4510a0105327b050cdbde9088f53e324dc119253c529" }, "downloads": -1, "filename": "odict-1.4.4.tar.gz", "has_sig": false, "md5_digest": "7d39e852ff93b2892cef600866f673d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8464, "upload_time": "2011-12-13T16:06:18", "url": "https://files.pythonhosted.org/packages/49/3b/f19a6bf08a4310bf877fdb78d0f92150517d04671e03710b78abec413cb3/odict-1.4.4.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "43d4b2d5775245c6f11df12a09c7bfdb", "sha256": "5f102f7545364348b8a2b3312d32541f1e1c6911d762e9a6a568f82b17a5edd5" }, "downloads": -1, "filename": "odict-1.5.0.tar.gz", "has_sig": false, "md5_digest": "43d4b2d5775245c6f11df12a09c7bfdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8613, "upload_time": "2012-05-23T09:36:50", "url": "https://files.pythonhosted.org/packages/87/fa/1f2a8daecab6b36d5b06d3afdd7f7a2b65644f0796f2de6f6480ce986853/odict-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "77ded25c29035b68574383a08af2bdf1", "sha256": "0e9cb60b1c13df345de2dccd3237401ae8273cc1fc107ac987ea751bd7d86aac" }, "downloads": -1, "filename": "odict-1.5.1.tar.gz", "has_sig": false, "md5_digest": "77ded25c29035b68574383a08af2bdf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9420, "upload_time": "2012-10-17T15:43:59", "url": "https://files.pythonhosted.org/packages/3b/de/d36d525d16acbd7a71f18c6cc64f8345c9e608781980b8a921526b71e432/odict-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "74545aed0bf2903499b04b7bc763f0ba", "sha256": "de47105fd3746316ef8a984be7f0eab55b306d12f6825002eeede8f9398e7d76" }, "downloads": -1, "filename": "odict-1.5.2.tar.gz", "has_sig": false, "md5_digest": "74545aed0bf2903499b04b7bc763f0ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13265, "upload_time": "2016-11-25T07:16:48", "url": "https://files.pythonhosted.org/packages/5e/12/f4c112282274a51a2ca22904c0850ff3eb0cd7950a73047a337b91405a5d/odict-1.5.2.tar.gz" } ], "1.6.0": [], "1.6.1": [ { "comment_text": "", "digests": { "md5": "bd68b39ad8b1124ac68aeaae2b42b32c", "sha256": "7204023105a9e9ed4a2fd341ba60d06400ff4742e377ecc8853a2f3e8a2fdc16" }, "downloads": -1, "filename": "odict-1.6.1.tar.gz", "has_sig": false, "md5_digest": "bd68b39ad8b1124ac68aeaae2b42b32c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16370, "upload_time": "2017-06-07T10:28:47", "url": "https://files.pythonhosted.org/packages/93/a0/1c83771d6ba754cae84afa3a2bbdf757484c5df7e576c5de2d9420c6157d/odict-1.6.1.tar.gz" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "82e806bdefe400874d32bb712ab8887d", "sha256": "5a1ee42b279203fcff38d776f40c44a42dbab36a509047c1257449dca4ae1a2f" }, "downloads": -1, "filename": "odict-1.6.2.tar.gz", "has_sig": false, "md5_digest": "82e806bdefe400874d32bb712ab8887d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16445, "upload_time": "2017-06-15T11:57:00", "url": "https://files.pythonhosted.org/packages/ef/33/9b65092aaa03a43e90326dcf4d921516fe9e649a47eb928f3e19f961b050/odict-1.6.2.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "c1e8c3e90a8062eb9adc941605b50529", "sha256": "40ccbe7dbabb352bf857bffcce9b4079785c6d3a59ca591e8ab456678173c106" }, "downloads": -1, "filename": "odict-1.7.0.tar.gz", "has_sig": false, "md5_digest": "c1e8c3e90a8062eb9adc941605b50529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14773, "upload_time": "2019-07-10T08:43:32", "url": "https://files.pythonhosted.org/packages/8e/7a/f91973c9461557fd0936255bc15379a3f39e97176f435ee79b15115a40ac/odict-1.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c1e8c3e90a8062eb9adc941605b50529", "sha256": "40ccbe7dbabb352bf857bffcce9b4079785c6d3a59ca591e8ab456678173c106" }, "downloads": -1, "filename": "odict-1.7.0.tar.gz", "has_sig": false, "md5_digest": "c1e8c3e90a8062eb9adc941605b50529", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14773, "upload_time": "2019-07-10T08:43:32", "url": "https://files.pythonhosted.org/packages/8e/7a/f91973c9461557fd0936255bc15379a3f39e97176f435ee79b15115a40ac/odict-1.7.0.tar.gz" } ] }