{ "info": { "author": "Derrick Gilland", "author_email": "dgilland@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "cacheout\n********\n\n|version| |travis| |coveralls| |license|\n\n\nA caching library for Python.\n\n\nLinks\n=====\n\n- Project: https://github.com/dgilland/cacheout\n- Documentation: https://cacheout.readthedocs.io\n- PyPI: https://pypi.python.org/pypi/cacheout/\n- TravisCI: https://travis-ci.org/dgilland/cacheout\n\n\nFeatures\n========\n\n- In-memory caching using dictionary backend\n- Cache manager for easily accessing multiple cache objects\n- Reconfigurable cache settings for runtime setup when using module-level cache objects\n- Maximum cache size enforcement\n- Default cache TTL (time-to-live) as well as custom TTLs per cache entry\n- Bulk set, get, and delete operations\n- Bulk get and delete operations filtered by string, regex, or function\n- Memoization decorators\n- Thread safe\n- Multiple cache implementations:\n\n - FIFO (First In, First Out)\n - LIFO (Last In, First Out)\n - LRU (Least Recently Used)\n - MRU (Most Recently Used)\n - LFU (Least Frequently Used)\n - RR (Random Replacement)\n\n\nRoadmap\n=======\n\n- Layered caching (multi-level caching)\n- Cache event listener support (e.g. on-get, on-set, on-delete)\n- Cache statistics (e.g. cache hits/misses, cache frequency, etc)\n\n\nRequirements\n============\n\n- Python >= 3.4\n\n\nQuickstart\n==========\n\nInstall using pip:\n\n\n::\n\n pip install cacheout\n\n\nLet's start with some basic caching by creating a cache object:\n\n.. code-block:: python\n\n from cacheout import Cache\n\n cache = Cache()\n\n\nBy default the ``cache`` object will have a maximum size of ``256`` and default TTL expiration turned off. These values can be set with:\n\n.. code-block:: python\n\n cache = Cache(maxsize=256, ttl=0, timer=time.time, default=None) # defaults\n\n\nSet a cache key using ``cache.set()``:\n\n.. code-block:: python\n\n cache.set(1, 'foobar')\n\n\nGet the value of a cache key with ``cache.get()``:\n\n.. code-block:: python\n\n assert cache.get(1) == 'foobar'\n\n\nGet a default value when cache key isn't set:\n\n.. code-block:: python\n\n assertcache.get(2) is None\n assert cache.get(2, default=False) is False\n assert 2 not in cache\n\n\nProvide cache values using a default callable:\n\n.. code-block:: python\n\n assert 2 not in cache\n assert cache.get(2, default=lambda key: key) == 2\n assert cache.get(2) == 2\n assert 2 in cache\n\n\nProvide a global default:\n\n.. code-block:: python\n\n cache2 = Cache(default=True)\n assert cache2.get('missing') is True\n assert 'missing' not in cache2\n\n cache3 = Cache(default=lambda key: key)\n assert cache3.get('missing') == 'missing'\n assert 'missing' in cache3\n\n\nSet the TTL (time-to-live) expiration per entry:\n\n.. code-block:: python\n\n cache.set(3, {'data': {}}, ttl=1)\n assert cache.get(3) == {'data': {}}\n time.sleep(1)\n assert cache.get(3) is None\n\n\nMemoize a function where cache keys are generated from the called function parameters:\n\n.. code-block:: python\n\n @cache.memoize()\n def func(a, b):\n pass\n\n\nProvide a TTL for the memoized function and incorporate argument types into generated cache keys:\n\n.. code-block:: python\n\n @cache.memoize(ttl=5, typed=True)\n def func(a, b):\n pass\n\n # func(1, 2) has different cache key than func(1.0, 2.0), whereas,\n # with \"typed=False\" (the default), they would have the same key\n\n\nAccess the original memoized function:\n\n.. code-block:: python\n\n @cache.memoize()\n def func(a, b):\n pass\n\n func.uncached(1, 2)\n\n\nGet a copy of the entire cache with ``cache.copy()``:\n\n.. code-block:: python\n\n assert cache.copy() == {1: 'foobar', 2: ('foo', 'bar', 'baz')}\n\n\nDelete a cache key with ``cache.delete()``:\n\n.. code-block:: python\n\n cache.delete(1)\n assert cache.get(1) is None\n\n\nClear the entire cache with ``cache.clear()``:\n\n.. code-block:: python\n\n cache.clear()\n assert len(cache) == 0\n\n\nPerform bulk operations with ``cache.set_many()``, ``cache.get_many()``, and ``cache.delete_many()``:\n\n.. code-block:: python\n\n cache.set_many({'a': 1, 'b': 2, 'c': 3})\n assert cache.get_many(['a', 'b', 'c']) == {'a': 1, 'b': 2, 'c': 3}\n cache.delete_many(['a', 'b', 'c'])\n assert cache.count() == 0\n\n\nUse complex filtering in ``cache.get_many()`` and ``cache.delete_many()``:\n\n.. code-block:: python\n\n import re\n cache.set_many({'a_1': 1, 'a_2': 2, '123': 3, 'b': 4})\n\n cache.get_many('a_*') == {'a_1': 1, 'a_2': 2}\n cache.get_many(re.compile(r'\\d')) == {'123': 3}\n cache.get_many(lambda key: '2' in key) == {'a_2': 2, '123': 3}\n\n cache.delete_many('a_*')\n assert dict(cache.items()) == {'123': 3, 'b': 4}\n\n\nReconfigure the cache object after creation with ``cache.configure()``:\n\n.. code-block:: python\n\n cache.configure(maxsize=1000, ttl=5 * 60)\n\n\nGet keys, values, and items from the cache with ``cache.keys()``, ``cache.values()``, and ``cache.items()``:\n\n.. code-block:: python\n\n cache.set_many({'a': 1, 'b': 2, 'c': 3})\n assert list(cache.keys()) == ['a', 'b', 'c']\n assert list(cache.values()) == [1, 2, 3]\n assert list(cache.items()) == [('a', 1), ('b', 2), ('c', 3)]\n\n\nIterate over cache keys:\n\n.. code-block:: python\n\n for key in cache:\n print(key, cache.get(key))\n # 'a' 1\n # 'b' 2\n # 'c' 3\n\n\nCheck if key exists with ``cache.has()`` and ``key in cache``:\n\n.. code-block:: python\n\n assert cache.has('a')\n assert 'a' in cache\n\n\nManage multiple caches using ``CacheManager``:\n\n.. code-block:: python\n\n from cacheout import CacheManager\n\n cacheman = CacheManager({'a': {'maxsize': 100},\n 'b': {'maxsize': 200, 'ttl': 900},\n 'c': {})\n\n cacheman['a'].set('key1', 'value1')\n value = cacheman['a'].get('key')\n\n cacheman['b'].set('key2', 'value2')\n assert cacheman['b'].maxsize == 200\n assert cacheman['b'].ttl == 900\n\n cacheman['c'].set('key3', 'value3')\n\n cacheman.clear_all()\n for name, cache in cacheman:\n assert name in cacheman\n assert len(cache) == 0\n\n\nFor more details, see the full documentation at https://cacheout.readthedocs.io.\n\n\n\n.. |version| image:: https://img.shields.io/pypi/v/cacheout.svg?style=flat-square\n :target: https://pypi.python.org/pypi/cacheout/\n\n.. |travis| image:: https://img.shields.io/travis/dgilland/cacheout/master.svg?style=flat-square\n :target: https://travis-ci.org/dgilland/cacheout\n\n.. |coveralls| image:: https://img.shields.io/coveralls/dgilland/cacheout/master.svg?style=flat-square\n :target: https://coveralls.io/r/dgilland/cacheout\n\n.. |license| image:: https://img.shields.io/pypi/l/cacheout.svg?style=flat-square\n :target: https://pypi.python.org/pypi/cacheout/\n\nChangelog\n=========\n\n\nv0.11.2 (2019-09-30)\n--------------------\n\n- Fix bug in ``LFUCache`` that would result cache growing beyond ``maxsize`` limit.\n\n\nv0.11.1 (2019-01-09)\n--------------------\n\n- Fix issue with asyncio support in memoization decorators that caused a ``RuntimeError: await wasn't used with future`` when certain types of async functions were used inside the memoized function.\n\n\nv0.11.0 (2018-10-19)\n--------------------\n\n- Add asyncio support to memoization decorators so they can decorate coroutines.\n\n\nv0.10.3 (2018-08-01)\n--------------------\n\n- Expose ``typed`` argument of underlying ``*Cache.memoize()`` in ``memoize()`` and ``*_memoize()`` decorators.\n\n\nv0.10.2 (2018-07-31)\n--------------------\n\n- Fix bug in ``LRUCache.get()`` where supplying a ``default`` value would result in a ``KeyError``.\n\n\nv0.10.1 (2018-07-15)\n--------------------\n\n- Support Python 3.7.\n\n\nv0.10.0 (2018-04-03)\n--------------------\n\n- Modify behavior of ``default`` argument to ``Cache.get()`` so that if ``default`` is a callable and the cache key is missing, then it will be called and its return value will be used as the value for cache key and subsequently be set as the value for the key in the cache. (**breaking change**)\n- Add ``default`` argument to ``Cache()`` that can be used to override the value for ``default`` in ``Cache.get()``.\n\n\nv0.9.0 (2018-03-31)\n-------------------\n\n- Merge functionality of ``Cache.get_many_by()`` into ``Cache.get_many()`` and remove ``Cache.get_many_by()``. (**breaking change**).\n- Merge functionality of ``Cache.delete_many_by()`` into ``Cache.delete_many()`` and remove ``Cache.delete_many_by()``. (**breaking change**).\n\n\nv0.8.0 (2018-03-30)\n-------------------\n\n- Add ``Cache.get_many_by()``.\n- Add ``Cache.delete_many_by()``.\n- Make ``Cache.keys()`` and ``Cache.values()`` return dictionary view objects instead of yielding items. (**breaking change**)\n\n\nv0.7.0 (2018-02-22)\n-------------------\n\n- Changed default cache ``maxsize`` from ``300`` to ``256``. (**breaking change**)\n- Add ``Cache.memoize()`` decorator.\n- Add standalone memoization decorators:\n\n - ``memoize``\n - ``fifo_memoize``\n - ``lfu_memoize``\n - ``lifo_memoize``\n - ``lru_memoize``\n - ``mru_memoize``\n - ``rr_memoize``\n\n\nv0.6.0 (2018-02-05)\n-------------------\n\n- Add ``LIFOCache``\n- Add ``FIFOCache`` as an alias of ``Cache``.\n\n\nv0.5.0 (2018-02-04)\n-------------------\n\n- Add ``LFUCache``\n- Delete expired items before popping an item in ``Cache.popitem()``.\n\n\nv0.4.0 (2018-02-02)\n-------------------\n\n- Add ``MRUCache``\n- Add ``RRCache``\n- Add ``Cache.popitem()``.\n- Rename ``Cache.expirations()`` to ``Cache.expire_times()``. (**breaking change**)\n- Rename ``Cache.count()`` to ``Cache.size()``. (**breaking change**)\n- Remove ``minimum`` arguement from ``Cache.evict()``. (**breaking change**)\n\n\nv0.3.0 (2018-01-31)\n-------------------\n\n- Add ``LRUCache``.\n- Add ``CacheManager.__repr__()``.\n- Make threading lock usage in ``Cache`` more fine-grained and eliminate redundant locking.\n- Fix missing thread-safety in ``Cache.__len__()`` and ``Cache.__contains__()``.\n\n\nv0.2.0 (2018-01-30)\n-------------------\n\n- Rename ``Cache.setup()`` to ``Cache.configure()``. (**breaking change**)\n- Add ``CacheManager`` class.\n\n\nv0.1.0 (2018-01-28)\n-------------------\n\n- Add ``Cache`` class.\n\nLicense\n=======\n\nThe MIT License (MIT)\n\nCopyright (c) 2018, Derrick Gilland\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\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/dgilland/cacheout", "keywords": "cacheout cache caching memoize memoization fifo lifo lfu lru mru", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "cacheout", "package_url": "https://pypi.org/project/cacheout/", "platform": "", "project_url": "https://pypi.org/project/cacheout/", "project_urls": { "Homepage": "https://github.com/dgilland/cacheout" }, "release_url": "https://pypi.org/project/cacheout/0.11.2/", "requires_dist": [ "coverage ; extra == 'dev'", "flake8 ; extra == 'dev'", "pylint ; extra == 'dev'", "pytest ; extra == 'dev'", "pytest-cov ; extra == 'dev'", "Sphinx ; extra == 'dev'", "sphinx-rtd-theme ; extra == 'dev'", "tox ; extra == 'dev'", "twine ; extra == 'dev'", "wheel ; extra == 'dev'" ], "requires_python": "", "summary": "A caching library for Python", "version": "0.11.2" }, "last_serial": 5910034, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "455991f9c59d951f33502f9f3993a9a5", "sha256": "612cf2f1b6b1069a48d0e8493fea6fc172f53d36d83faa0aa285f8c58745139d" }, "downloads": -1, "filename": "cacheout-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "455991f9c59d951f33502f9f3993a9a5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8464, "upload_time": "2018-01-29T05:46:38", "url": "https://files.pythonhosted.org/packages/80/28/57e954dec782ecae9c790b9afad8dd581c148856d3673f374d1a6096a2f6/cacheout-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e0008a3841ca7d6276f44e75a978714", "sha256": "09c842a5cbf523c2f19527cce69db46ec292e0f7791a9aaba2d9977a2ef1d154" }, "downloads": -1, "filename": "cacheout-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5e0008a3841ca7d6276f44e75a978714", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17517, "upload_time": "2018-01-29T05:46:39", "url": "https://files.pythonhosted.org/packages/a1/2a/77e0cea894d839ccff92ae0e238365ccd5af54f54eb96d1ac06c035e1c62/cacheout-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "36c1903908592a10f47c0f67400ecf9c", "sha256": "80f2c6f5e0bd99dfdfca46382a3ab84923a815b8c43ee06d9b2ced48bec873a3" }, "downloads": -1, "filename": "cacheout-0.10.0-py3-none-any.whl", "has_sig": false, "md5_digest": "36c1903908592a10f47c0f67400ecf9c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15253, "upload_time": "2018-04-04T02:23:10", "url": "https://files.pythonhosted.org/packages/d1/21/47f46504d6975a49eb7ffe2c5ef8608291c998002b752fb441b9b325c323/cacheout-0.10.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f238293c8e06dba797357a226c9ae842", "sha256": "80babf4aa016e48b300695e268d01cf122f6596af12bd08674f0a0bca88e4038" }, "downloads": -1, "filename": "cacheout-0.10.0.tar.gz", "has_sig": false, "md5_digest": "f238293c8e06dba797357a226c9ae842", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31144, "upload_time": "2018-04-04T02:23:11", "url": "https://files.pythonhosted.org/packages/55/53/174d22efca97c2c7f48ef142790e0949d8348779f083f8b265d5bb1b9974/cacheout-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "e3c48c11bed1a3e9d03f835fec7d4e21", "sha256": "8b03c2175fa79b432ae627314e0cba44d62131b23e355c22147170be806c111f" }, "downloads": -1, "filename": "cacheout-0.10.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e3c48c11bed1a3e9d03f835fec7d4e21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16004, "upload_time": "2018-07-15T19:50:22", "url": "https://files.pythonhosted.org/packages/a1/48/3ca0ea54a231bb62298a11ac52f736bed3c06cddc67e0d3f75a23443b70e/cacheout-0.10.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f56a41fa19556b44c7c32b84d918045d", "sha256": "e8eecc8a5042c6d0e220eac4ec4c6d9d5e9ad5bd5177bef7f91cc532af4d5baa" }, "downloads": -1, "filename": "cacheout-0.10.1.tar.gz", "has_sig": false, "md5_digest": "f56a41fa19556b44c7c32b84d918045d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29617, "upload_time": "2018-07-15T19:50:23", "url": "https://files.pythonhosted.org/packages/6f/e0/efa447c254b67af1ef77f6470e2ae1031edceefb62f72ddc560fbe27b246/cacheout-0.10.1.tar.gz" } ], "0.10.2": [ { "comment_text": "", "digests": { "md5": "f42fa6a3e2fc7f77862ad792970efc3b", "sha256": "0832ec705bc3c642e04a793d52c61d7a9578957b6e82f48b563013d594c2e543" }, "downloads": -1, "filename": "cacheout-0.10.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f42fa6a3e2fc7f77862ad792970efc3b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16132, "upload_time": "2018-07-31T21:51:40", "url": "https://files.pythonhosted.org/packages/4a/57/5f69dfb0d06fd8cc4bc2ebcaa4d7de008d2572fd329a8022fafc67b971d3/cacheout-0.10.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70df27552f48d89ee4cb4b879ed6ff55", "sha256": "c888c328bfc2cfa3f5dd12f88dd8885fefc05566a8bff25d2df75028cf8b5deb" }, "downloads": -1, "filename": "cacheout-0.10.2.tar.gz", "has_sig": false, "md5_digest": "70df27552f48d89ee4cb4b879ed6ff55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29809, "upload_time": "2018-07-31T21:51:41", "url": "https://files.pythonhosted.org/packages/2a/ed/56f91769e923ec7818f91ad5e7a6fe8ecf8be58e481361d5e88132db1851/cacheout-0.10.2.tar.gz" } ], "0.10.3": [ { "comment_text": "", "digests": { "md5": "f04baad97922c9892c75a71c9de84ec7", "sha256": "17f01672d3b830a36d1098c1e84e48da234ce505d1a18fd66978f552ddd767a4" }, "downloads": -1, "filename": "cacheout-0.10.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f04baad97922c9892c75a71c9de84ec7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16275, "upload_time": "2018-08-02T02:05:51", "url": "https://files.pythonhosted.org/packages/82/dd/806f781f77c46592a5aa1cbc0041a4151378925e4b06db4c4f92d27599d5/cacheout-0.10.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22f44c72f8df16d317ef309ba2c873ac", "sha256": "3ecf7e38f8bee31e092b28435270fc063eea2e6840e05f6d8beb869b1fc3efbd" }, "downloads": -1, "filename": "cacheout-0.10.3.tar.gz", "has_sig": false, "md5_digest": "22f44c72f8df16d317ef309ba2c873ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29938, "upload_time": "2018-08-02T02:05:52", "url": "https://files.pythonhosted.org/packages/eb/d6/68f1632e563af44a730b3712a91cf634a6be5b20b1f372c59919867e20e6/cacheout-0.10.3.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "13d1106a5eae126255f7034d1173322c", "sha256": "35d4874fcfbd443d3bbf17a7b18a7b0ff9d141a027bb002937203ebf6762bc00" }, "downloads": -1, "filename": "cacheout-0.11.0-py3-none-any.whl", "has_sig": false, "md5_digest": "13d1106a5eae126255f7034d1173322c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16564, "upload_time": "2018-10-19T19:01:53", "url": "https://files.pythonhosted.org/packages/8e/4f/07c535f3ffc9554c2ac47587bdbbb56f2d6b255bcba9e398603a2b63fc1a/cacheout-0.11.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6aa9054410fedc39d31ac5d4a132b7bd", "sha256": "96519de0e9969016fee6daec26b7481f560e04b98f2fda76488cb1fbe852d64e" }, "downloads": -1, "filename": "cacheout-0.11.0.tar.gz", "has_sig": false, "md5_digest": "6aa9054410fedc39d31ac5d4a132b7bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30424, "upload_time": "2018-10-19T19:01:55", "url": "https://files.pythonhosted.org/packages/b6/3b/5681ee42b52fe5eb0c704335561f2c510bbe7573429228c5be1e69a81d14/cacheout-0.11.0.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "141686c49f4cdf4fb3a115865fcb8cc0", "sha256": "619a72406cdb2690d5929fea8f39a77e361fdf7804f8e39f9c630ea3e21717b4" }, "downloads": -1, "filename": "cacheout-0.11.1-py3-none-any.whl", "has_sig": false, "md5_digest": "141686c49f4cdf4fb3a115865fcb8cc0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17737, "upload_time": "2019-01-09T16:38:27", "url": "https://files.pythonhosted.org/packages/7e/43/071767c0f3b59d8a130bc38c7b9ef649209f9cfcd046c28c98ad2982f463/cacheout-0.11.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b792a527adb1a794e7070f819517fc94", "sha256": "21be804df68fc34a235362ef38a8718ecee25c9f4a75a10b5d5396c17fe88ff3" }, "downloads": -1, "filename": "cacheout-0.11.1.tar.gz", "has_sig": false, "md5_digest": "b792a527adb1a794e7070f819517fc94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30744, "upload_time": "2019-01-09T16:38:28", "url": "https://files.pythonhosted.org/packages/20/23/abef59db4c04e90e07d867e1344744bea7ab6efcb2b7cb2f1ad416131462/cacheout-0.11.1.tar.gz" } ], "0.11.2": [ { "comment_text": "", "digests": { "md5": "3bec6a85c89a0558bf03b150092dfdfa", "sha256": "402e2a8a4630ec1180ca744e31c0f0b483131f7b23949809fcde67a19a30b5a6" }, "downloads": -1, "filename": "cacheout-0.11.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3bec6a85c89a0558bf03b150092dfdfa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17725, "upload_time": "2019-10-01T02:24:07", "url": "https://files.pythonhosted.org/packages/20/2e/14a0c372f5d9fa031ffb62bec6dcb1b50541cdd9330a5910b4eb4fcf91dc/cacheout-0.11.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "621fd3c15b99c9d53ca29d8a6edb52e6", "sha256": "bc87d1a2f21be500a8a21f1c0440777172033711dd5727ab14bac901eea1902c" }, "downloads": -1, "filename": "cacheout-0.11.2.tar.gz", "has_sig": false, "md5_digest": "621fd3c15b99c9d53ca29d8a6edb52e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30697, "upload_time": "2019-10-01T02:24:09", "url": "https://files.pythonhosted.org/packages/66/9c/a5dafb053491409b18b0c2fb0512620942209a3cada60925c97e41baf5e6/cacheout-0.11.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "10989361d882d7d7cb5a127155a829aa", "sha256": "0f3b97164b29a90c6796d421ca3970de867b7c4bb93e51de0e4be3120783c870" }, "downloads": -1, "filename": "cacheout-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "10989361d882d7d7cb5a127155a829aa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9693, "upload_time": "2018-01-30T06:20:12", "url": "https://files.pythonhosted.org/packages/9d/9f/dda04df05c486d1a1e9f63c8dfb6c0f03938e46e5018f6e8c7f0b86b71f3/cacheout-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2aa359ca4e74a1bf081b0b75e02e80f0", "sha256": "24e61759f7ca41d1961f51cb97eac8b8d0930050f3236b1c216fb772b24b9b10" }, "downloads": -1, "filename": "cacheout-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2aa359ca4e74a1bf081b0b75e02e80f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20329, "upload_time": "2018-01-30T06:20:13", "url": "https://files.pythonhosted.org/packages/47/00/ca195effd42be45776d915f7c890509c7476ea176638097b4489f47e676e/cacheout-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b979592c0e91de4b3b9dfe7c92ecfca2", "sha256": "86730423efcfcef51257f11702a0fc6130b18df87bba72f5be21b9d9ad445cf4" }, "downloads": -1, "filename": "cacheout-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b979592c0e91de4b3b9dfe7c92ecfca2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11606, "upload_time": "2018-01-31T05:23:19", "url": "https://files.pythonhosted.org/packages/b4/26/059b0b09f9f2df2e92c3d0295b80c3783ef93b2a52891020c5e91ab25eb8/cacheout-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5bd2f1b425bde1de3fe5742a0087c1ba", "sha256": "86047039afa433e34c08a33fb3d33d48ab2c6fbc112a5b439d762eaff6747abf" }, "downloads": -1, "filename": "cacheout-0.3.0.tar.gz", "has_sig": false, "md5_digest": "5bd2f1b425bde1de3fe5742a0087c1ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21986, "upload_time": "2018-01-31T05:23:20", "url": "https://files.pythonhosted.org/packages/17/3d/94a256035d650ed4e1b389658e78009dc8c3c6121581399a9f458556535e/cacheout-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "e0d945fa1b377d2f84ad3c7c898a2391", "sha256": "470f153ab3b42befe0811d9f26cf28a5586be0f28a03cd61b63144944bc7e05c" }, "downloads": -1, "filename": "cacheout-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e0d945fa1b377d2f84ad3c7c898a2391", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12948, "upload_time": "2018-02-02T07:43:32", "url": "https://files.pythonhosted.org/packages/df/46/5d1c66eb18261b7b0b860f8ec7f7d0e7ead4e616b30c13dd868da86cca1d/cacheout-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "343606b49c6d266ea2810702e6e678be", "sha256": "5d1309e3cb0fb232909f8cd97d63c1fe3ba71ebb2399c9212c61ad20ebd3462a" }, "downloads": -1, "filename": "cacheout-0.4.0.tar.gz", "has_sig": false, "md5_digest": "343606b49c6d266ea2810702e6e678be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23098, "upload_time": "2018-02-02T07:43:33", "url": "https://files.pythonhosted.org/packages/16/1f/e3c908f88347c8d49aef061f1fad90cce3e02900e3ae7595169b34bb9477/cacheout-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5b536cf62a62bd051fa8dbfd510aa3bd", "sha256": "405ec3082e6adbcaf4795220cf0dac72700dfb2a36c3857b7de35dd407054057" }, "downloads": -1, "filename": "cacheout-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b536cf62a62bd051fa8dbfd510aa3bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13939, "upload_time": "2018-02-04T21:36:57", "url": "https://files.pythonhosted.org/packages/cb/d5/cf5d24ef83e1cf4d148c6c43ba7b04ae4ae9a582c0173f7e0c8acb1af074/cacheout-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e95bad64f4c95f5d776c76a1ed86fb92", "sha256": "0ee5299837a2047e9ded453cda147eb42fbd6c53d1e8553e723f28647fae196b" }, "downloads": -1, "filename": "cacheout-0.5.0.tar.gz", "has_sig": false, "md5_digest": "e95bad64f4c95f5d776c76a1ed86fb92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24433, "upload_time": "2018-02-04T21:36:58", "url": "https://files.pythonhosted.org/packages/a0/b6/c071c0dfa50e7990afda126cff3b03de0493890dbdd19c7b20d477e059dc/cacheout-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "dcb517df703d323c2a5b3578f20692da", "sha256": "693434195d7792eab291d723993e8b1d0a8d1c900939250be69996cd1bdc6016" }, "downloads": -1, "filename": "cacheout-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "dcb517df703d323c2a5b3578f20692da", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14838, "upload_time": "2018-02-05T22:01:30", "url": "https://files.pythonhosted.org/packages/ca/70/c6fcdc4afceda02f5b40a564a25db70bd37c2513879820cfb847f5e36009/cacheout-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d4c6e3b146676f48a2d159ba7ede12f", "sha256": "738f49cc70e7de2c295a6d880db834288e71255765556d961ede0995e002f82b" }, "downloads": -1, "filename": "cacheout-0.6.0.tar.gz", "has_sig": false, "md5_digest": "9d4c6e3b146676f48a2d159ba7ede12f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25451, "upload_time": "2018-02-05T22:01:31", "url": "https://files.pythonhosted.org/packages/65/b2/571e055be0291a7f06ad3a7df9011acc341dcad4ec6902ddd0303d52ab5d/cacheout-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "cfa657179635e0d9d24252f9860f1b8c", "sha256": "8587b699b374ec8497dadc132693f0a07579c9f31073ff4483d6969660eefde7" }, "downloads": -1, "filename": "cacheout-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cfa657179635e0d9d24252f9860f1b8c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17424, "upload_time": "2018-02-22T05:09:55", "url": "https://files.pythonhosted.org/packages/dd/55/402405cc6fd620bcbf112bed3693427aa0fa0a87d123e489d23934130863/cacheout-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "196f2df597431589995036c2159928ee", "sha256": "391bef82d270765144ee72881168fb513ebf64e5c2d75747ebe48f58430e3fce" }, "downloads": -1, "filename": "cacheout-0.7.0.tar.gz", "has_sig": false, "md5_digest": "196f2df597431589995036c2159928ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28754, "upload_time": "2018-02-22T05:09:56", "url": "https://files.pythonhosted.org/packages/d3/da/d569288423e5c32f2299bbd0efc720c1bb0a7034dfcec9798acc1400d8dd/cacheout-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "fd4928456e0bd950e944bc43d323cd09", "sha256": "b9b1d6ffdee60c00c8814074f887b83bbf961c563b2b5552940509411c4ac179" }, "downloads": -1, "filename": "cacheout-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fd4928456e0bd950e944bc43d323cd09", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18197, "upload_time": "2018-03-31T03:10:23", "url": "https://files.pythonhosted.org/packages/e8/5c/788918f8b935ffa3629f0ca5b50ef0c11b6ce0c46f31fc7bf3ab86608c04/cacheout-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fadec126f27aa6562ffa6a25f9d6f40d", "sha256": "f058aa0fb4534eae2efa32c6f036bb2a851358715fcf367792764c5222bc6437" }, "downloads": -1, "filename": "cacheout-0.8.0.tar.gz", "has_sig": false, "md5_digest": "fadec126f27aa6562ffa6a25f9d6f40d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30194, "upload_time": "2018-03-31T03:10:24", "url": "https://files.pythonhosted.org/packages/ac/f0/e2c98df3dbc4554b53b00b3b62575af1399b23d15b1d2eaabb72777b995e/cacheout-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "da41066f3888df33e3a73bb9d4fc255e", "sha256": "6126b141e839fa64e08d1d4de97876bf87e238775fa6ca7db52f20f76959c6f7" }, "downloads": -1, "filename": "cacheout-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "da41066f3888df33e3a73bb9d4fc255e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18354, "upload_time": "2018-03-31T04:26:18", "url": "https://files.pythonhosted.org/packages/6c/4c/ef14a34086b64acab54bc3cbbe5b9dfc22116b711a8e115ddc12e4452243/cacheout-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46fb733ec8ec6ba949cd9aa55165a7ec", "sha256": "39a9dfbd5951ef5da0e729ea679740b3035114dc5d38d75b566b5e45e7565559" }, "downloads": -1, "filename": "cacheout-0.9.0.tar.gz", "has_sig": false, "md5_digest": "46fb733ec8ec6ba949cd9aa55165a7ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30368, "upload_time": "2018-03-31T04:26:20", "url": "https://files.pythonhosted.org/packages/8e/fa/757b8fa428bffef185df256f4ac647110e4b8a34611f3727e4d5fd3e210e/cacheout-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3bec6a85c89a0558bf03b150092dfdfa", "sha256": "402e2a8a4630ec1180ca744e31c0f0b483131f7b23949809fcde67a19a30b5a6" }, "downloads": -1, "filename": "cacheout-0.11.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3bec6a85c89a0558bf03b150092dfdfa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17725, "upload_time": "2019-10-01T02:24:07", "url": "https://files.pythonhosted.org/packages/20/2e/14a0c372f5d9fa031ffb62bec6dcb1b50541cdd9330a5910b4eb4fcf91dc/cacheout-0.11.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "621fd3c15b99c9d53ca29d8a6edb52e6", "sha256": "bc87d1a2f21be500a8a21f1c0440777172033711dd5727ab14bac901eea1902c" }, "downloads": -1, "filename": "cacheout-0.11.2.tar.gz", "has_sig": false, "md5_digest": "621fd3c15b99c9d53ca29d8a6edb52e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30697, "upload_time": "2019-10-01T02:24:09", "url": "https://files.pythonhosted.org/packages/66/9c/a5dafb053491409b18b0c2fb0512620942209a3cada60925c97e41baf5e6/cacheout-0.11.2.tar.gz" } ] }