{ "info": { "author": "bofm", "author_email": "bofm@github.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy" ], "description": "Status\n======\n\nWORK IN PROGRESS\n----------------\n\nCaching\n=======\n\n|Build Status| |Coverage Status| |Python Versions|\n\nPython utils and decorators for c\u0430ching with TTL, maxsize and file-based storage.\n\nInstallation\n============\n\n``pip install caching``\n\nUsage\n=====\n\n.. code:: python\n\n from caching import Cache\n\n # File-based cache with unlimited ttl and maximum of 128 cached results\n @Cache(ttl=-1, maxsize=128, filepath='/tmp/mycache')\n def long_running_function(a, b, *args, c=None, **kwargs):\n pass\n\n # Memory-based cache with limited ttl and maxsize and \"least recently used\"\n # cache replacement policy.\n @Cache(ttl=60, maxsize=128, policy='LRU')\n def long_running_function(a, b, *args, c=None, **kwargs):\n pass\n\nAdvanced usage\n==============\n\n.. code:: python\n\n from caching import Cache\n\n # One cache for many functions\n\n cache = Cache(filepath='/tmp/mycache', ttl=3600, maxsize=1024)\n\n @cache\n def pow(x, y):\n return x**y\n\n @cache\n def factorial(n):\n if n == 0:\n return 1\n return n * factorial(n-1)\n\n\n # Caching the last result and returning it only in case of errors\n\n @Cache(maxsize=1, only_on_errors=(ConnectionError, TimeoutError))\n def api_request():\n \"\"\"Request some remote resource which sometimes become unavailable.\n If this functions raises ConnectionError or TimeoutError, then the\n last cached result will be returned, if available.\"\"\"\n\n\n # Custom cache key function\n\n @Cache(key=lambda x: x[0])\n def toupper(a):\n global call_count\n call_count += 1\n return str(a).upper()\n\n call_count = 0\n\n # The key function returns the same result for both 'aaa' and 'azz'\n # so the cached result from the first call is returned in the second call\n assert toupper('aaa') == toupper('azz') == 'AAA'\n assert call_count == 1\n\n\n # Using cache as a key-value store\n\n cache = Cache()\n\n try:\n result = cache[1]\n except KeyError:\n result = calculate_result(1)\n cache[1] = result\n assert 1 in cache\n assert cache[1] == result\n assert cache.get(1, None) == result\n assert cache.get(2, None) is None\n\n # Cleanup\n\n import os\n\n cache = Cache(filepath='/tmp/mycache')\n cache[1] = 'one'\n assert 1 in cache\n cache.clear() # empty the cache\n assert 1 not in cache\n assert list(cache.items()) == []\n assert os.path.isfile('/tmp/mycache')\n cache.remove() # Empty the cache and remove the underlying file\n assert not os.path.isfile('/tmp/mycache')\n\nFeatures\n========\n\n- [x] Memory and file based cache.\n- [x] TTL and maxsize.\n- [x] Works with ``*args``, ``**kwargs``.\n- [x] Works with mutable function arguments of the following types: ``dict``, ``list``, ``set``.\n- [x] FIFO, LRU and LFU cache replacement policies.\n- [x] Customizable cache key function.\n- [ ] Multiprocessing- and thread-safe.\n- [ ] Pluggable external caching backends (see Redis example).\n\n.. |Build Status| image:: https://travis-ci.org/bofm/python-caching.svg?branch=master\n :target: https://travis-ci.org/bofm/python-caching\n.. |Coverage Status| image:: https://coveralls.io/repos/github/bofm/python-caching/badge.svg\n :target: https://coveralls.io/github/bofm/python-caching\n.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/caching.svg\n :target: https://pypi.python.org/pypi/caching\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/bofm/python-caching/tarball/0.1.dev8", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/bofm/python-caching", "keywords": "cache,caching", "license": "", "maintainer": "", "maintainer_email": "", "name": "caching", "package_url": "https://pypi.org/project/caching/", "platform": "", "project_url": "https://pypi.org/project/caching/", "project_urls": { "Download": "https://github.com/bofm/python-caching/tarball/0.1.dev8", "Homepage": "https://github.com/bofm/python-caching" }, "release_url": "https://pypi.org/project/caching/0.1.dev8/", "requires_dist": null, "requires_python": "", "summary": "Python utils and decorators for c\u0430ching with TTL, maxsize and file-based storage.", "version": "0.1.dev8" }, "last_serial": 3424385, "releases": { "0.1.dev1": [ { "comment_text": "", "digests": { "md5": "2dd1cc3663884287a73a738dda7b5272", "sha256": "f28da5dc1c918b89594533d161b69250a26f0f62a49768dc93dad88bd291aea2" }, "downloads": -1, "filename": "caching-0.1.dev1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2dd1cc3663884287a73a738dda7b5272", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7166, "upload_time": "2017-07-31T12:29:43", "url": "https://files.pythonhosted.org/packages/40/f9/bbe9fb5da40bda099e80c568c6ecb02eddbc9755bc7540e83f80aca4e45c/caching-0.1.dev1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ef8466f33c3cc0cbbb0f11a552dd6d8", "sha256": "bca21ab3c30ce0a21c401532deb4fd532c69df05493840d9af591e3212652cb0" }, "downloads": -1, "filename": "caching-0.1.dev1.tar.gz", "has_sig": false, "md5_digest": "5ef8466f33c3cc0cbbb0f11a552dd6d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5696, "upload_time": "2017-07-31T12:29:44", "url": "https://files.pythonhosted.org/packages/9c/61/d8477ee8cc11ff6f0b2522893d1b6a8f2af72b0582d2b44dba55cc513aab/caching-0.1.dev1.tar.gz" } ], "0.1.dev2": [ { "comment_text": "", "digests": { "md5": "44a9eda1f156e9b46316e0ab828a0985", "sha256": "5c44dbb05d33cb17637e46a415e2fc8a0c0a85d2f0dba0e9b339d59c556861b8" }, "downloads": -1, "filename": "caching-0.1.dev2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "44a9eda1f156e9b46316e0ab828a0985", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7405, "upload_time": "2017-07-31T15:35:30", "url": "https://files.pythonhosted.org/packages/61/65/e52f51bd4a068af6c657f4bc55e7a9a2df641766941619e676714b23a503/caching-0.1.dev2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ea8a7a368f52d6b91fedf604fc57b85", "sha256": "9331b81035ca0f2173e3358f2cb341a63d4ab09043d29ad9737c0203356077cf" }, "downloads": -1, "filename": "caching-0.1.dev2.tar.gz", "has_sig": false, "md5_digest": "9ea8a7a368f52d6b91fedf604fc57b85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5858, "upload_time": "2017-07-31T15:35:31", "url": "https://files.pythonhosted.org/packages/b3/59/0cb90373c4aab13738a602cf823ce8ce9c0f514cc543bb4975bdc6baf69f/caching-0.1.dev2.tar.gz" } ], "0.1.dev3": [ { "comment_text": "", "digests": { "md5": "1bb14684b37e607cda948e1b0d176e42", "sha256": "284f4c8fb4205069274ede1fbf68a8104c44e8ef4df6c0fa453539c3e6c66162" }, "downloads": -1, "filename": "caching-0.1.dev3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1bb14684b37e607cda948e1b0d176e42", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7407, "upload_time": "2017-07-31T16:56:26", "url": "https://files.pythonhosted.org/packages/47/f9/9e873399dc010fd08c1b8f6537002dad1932f99c50eadbfc020c4469bf54/caching-0.1.dev3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22f6c9cb0df0576b08922127b15a4f46", "sha256": "3ee4ed953399840a09782787727eec39a6de28232beade63357239b5847a751e" }, "downloads": -1, "filename": "caching-0.1.dev3.tar.gz", "has_sig": false, "md5_digest": "22f6c9cb0df0576b08922127b15a4f46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5856, "upload_time": "2017-07-31T16:56:27", "url": "https://files.pythonhosted.org/packages/66/e4/a578566ed7d55767dcb37056fab011293b95afaf3a9715804e0c3086f432/caching-0.1.dev3.tar.gz" } ], "0.1.dev4": [ { "comment_text": "", "digests": { "md5": "1e65a49f93d35b29322cb1b599532173", "sha256": "eb2947d26ce8314fd0968c1a15c73e946d8263350783fa062189baababae7fcf" }, "downloads": -1, "filename": "caching-0.1.dev4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e65a49f93d35b29322cb1b599532173", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8297, "upload_time": "2017-08-02T17:52:31", "url": "https://files.pythonhosted.org/packages/d2/99/84c735549bb34ec013dce1eaf43a1ec8727c83098d0d455ada5be7466d33/caching-0.1.dev4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "313ba2b25bdac3bdccb8a89a8e29505d", "sha256": "96d44003e271a3918a8871b17e2d7080a006c5a2bf7e2e223ed8ffb69d0396f1" }, "downloads": -1, "filename": "caching-0.1.dev4.tar.gz", "has_sig": false, "md5_digest": "313ba2b25bdac3bdccb8a89a8e29505d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6660, "upload_time": "2017-08-02T17:52:32", "url": "https://files.pythonhosted.org/packages/29/db/7cf4e25992e1ccec808dba8b82540eb459a10df8b315af67d8a5ed709d7a/caching-0.1.dev4.tar.gz" } ], "0.1.dev5": [ { "comment_text": "", "digests": { "md5": "d7781094c3896c5628f6527ad010cef0", "sha256": "60db5be399f747536011a209add90dcabb83a4956204366668b1510554404f15" }, "downloads": -1, "filename": "caching-0.1.dev5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d7781094c3896c5628f6527ad010cef0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8299, "upload_time": "2017-08-02T19:02:25", "url": "https://files.pythonhosted.org/packages/e4/db/48fbf5f94242dc73b6ee86e76315ad614ec2824bfdf901197f8ff280ac26/caching-0.1.dev5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ac79c5cc05e15def120ea1746fd42a84", "sha256": "be6320e1ea078992e5f9ed995b5cac1db43e93e55341fc58f26dd645ce063b3c" }, "downloads": -1, "filename": "caching-0.1.dev5.tar.gz", "has_sig": false, "md5_digest": "ac79c5cc05e15def120ea1746fd42a84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6657, "upload_time": "2017-08-02T19:02:26", "url": "https://files.pythonhosted.org/packages/d6/c2/df079e2e84d8b9311bf3d068f1000caa9230ecb3bc65d1f6ebcc34839c27/caching-0.1.dev5.tar.gz" } ], "0.1.dev6": [ { "comment_text": "", "digests": { "md5": "1e907147cacbfbfa650cd6c7f99957c6", "sha256": "3ac09da56862a4342dd4d937bd06b9554ace96ca00904967e11b6dbe3db07e76" }, "downloads": -1, "filename": "caching-0.1.dev6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e907147cacbfbfa650cd6c7f99957c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8339, "upload_time": "2017-08-02T21:15:30", "url": "https://files.pythonhosted.org/packages/ff/8d/2b10c604f3e1a70af6cb4da89396b04aa1d3063da5da8be9808226f2915b/caching-0.1.dev6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "34b42be4ff699b135481ff44484a7087", "sha256": "f765081e1c8a1ddc7bc5ef5bb077f0ed4c0f8658d786de29cd25c4eacc71bd7c" }, "downloads": -1, "filename": "caching-0.1.dev6.tar.gz", "has_sig": false, "md5_digest": "34b42be4ff699b135481ff44484a7087", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6668, "upload_time": "2017-08-02T21:15:31", "url": "https://files.pythonhosted.org/packages/c7/96/d074b2a9af96c474c96f44e4c592ba2f8e618aab85825864b3dc353ff101/caching-0.1.dev6.tar.gz" } ], "0.1.dev8": [ { "comment_text": "", "digests": { "md5": "255c6feba773b82776b61d486fb9180d", "sha256": "eb64221cdf8de7379b8b8b0f1a7b345e8ece0d16962108eb08e266e2091353d8" }, "downloads": -1, "filename": "caching-0.1.dev8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "255c6feba773b82776b61d486fb9180d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8854, "upload_time": "2017-12-17T22:23:35", "url": "https://files.pythonhosted.org/packages/a5/bf/12d4d013aa511b7ce4d31a937604d1028c6116f40fdf6d0522286fa5787c/caching-0.1.dev8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "277895cb5583474c20a51f3052c2e209", "sha256": "c9622fa163965cfaf770380271c870be3d62c452de0b8fd654c2b456d81e836f" }, "downloads": -1, "filename": "caching-0.1.dev8.tar.gz", "has_sig": false, "md5_digest": "277895cb5583474c20a51f3052c2e209", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7026, "upload_time": "2017-12-17T22:23:36", "url": "https://files.pythonhosted.org/packages/c6/7a/322066773e60e11e0f2e132530f8a854b786e3efa679eea03dfb7a7ac372/caching-0.1.dev8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "255c6feba773b82776b61d486fb9180d", "sha256": "eb64221cdf8de7379b8b8b0f1a7b345e8ece0d16962108eb08e266e2091353d8" }, "downloads": -1, "filename": "caching-0.1.dev8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "255c6feba773b82776b61d486fb9180d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8854, "upload_time": "2017-12-17T22:23:35", "url": "https://files.pythonhosted.org/packages/a5/bf/12d4d013aa511b7ce4d31a937604d1028c6116f40fdf6d0522286fa5787c/caching-0.1.dev8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "277895cb5583474c20a51f3052c2e209", "sha256": "c9622fa163965cfaf770380271c870be3d62c452de0b8fd654c2b456d81e836f" }, "downloads": -1, "filename": "caching-0.1.dev8.tar.gz", "has_sig": false, "md5_digest": "277895cb5583474c20a51f3052c2e209", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7026, "upload_time": "2017-12-17T22:23:36", "url": "https://files.pythonhosted.org/packages/c6/7a/322066773e60e11e0f2e132530f8a854b786e3efa679eea03dfb7a7ac372/caching-0.1.dev8.tar.gz" } ] }