{ "info": { "author": "Satoru Logic", "author_email": "satorulogic@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "cachelper\n##########\n\n.. image:: https://travis-ci.org/suzaku/cachelper.svg?branch=master\n :target: https://travis-ci.org/suzaku/cachelper\n.. image:: https://img.shields.io/pypi/v/cachelper.svg\n :target: https://pypi.python.org/pypi/cachelper\n\nUseful cache helpers in one package!\n\n.. image:: https://app.codesponsor.io/embed/MY7qFCdB7bDgiBqdjtV9ASYi/suzaku/cachelper.svg\n :width: 888px\n :height: 68px\n :alt: Sponsor\n :target: https://app.codesponsor.io/link/MY7qFCdB7bDgiBqdjtV9ASYi/suzaku/cachelper\n\nInstall\n*******\n\n.. code-block:: bash\n\n pip install cachelper\n\nHelpers\n*******\n\nIn memory cache\n===============\n\nmemoize\n---------------\n\nCaching function return values in memory.\n\n\n.. code-block:: python\n\n import cachelper\n\n @cachelper.memoize()\n def fibo(n):\n if n in (0, 1):\n return 1\n return fibo(n - 1) + fibo(n - 2)\n\n fibo(10)\n\nCache with Redis/Memcached\n==============================\n\nUsing the HelperMixin\n---------------------\n\n``HelperMixin`` can be used with any cache client classes that implement the following methods:\n\n- ``def get(self, key)``\n- ``def set(self, key, value, timeout=None)``\n- ``def delete(self, key)``\n- ``def get_many(self, keys)``\n- ``def set_many(self, mapping, timeout=None)``\n\nFor example, `RedisCache` from `werkzeug` is one such class:\n\n.. code-block:: python\n\n from redis import StrictRedis\n from werkzeug.contrib.cache import RedisCache as _RedisCache\n\n from cachelper import HelperMixin\n\n class RedisCache(_RedisCache, HelperMixin):\n '''werkzeug.contrib.cache.RedisCache mixed with HelperMixin'''\n\n def get_many(self, keys):\n return super().get_many(*keys)\n\n rds = StrictRedis()\n cache = RedisCache(rds)\n\nThis mixin defines these methods: ``call``, ``map``, ``__call__``.\nIf your class already defines methods of the same name, the mixin methods may not work correctly.\n\n\ncache decorator\n---------------\n\nAdd cache by decorating a function or method.\n\n.. code-block:: python\n\n @cache(\"key-{user_id}\", timeout=300)\n def get_name(user_id):\n # Fetch user name from database\n ...\n\nThe cache key template can also be a function which acts as a key factory:\n\n.. code-block:: python\n\n def name_key(user_id):\n return \"key-%s\" % user_id\n\n @cache(name_key, timeout=300)\n def get_name(user_id):\n # Fetch user name from database\n ...\n\nJust make sure the key factory function accepts the same parameters as the cached\nfunction and returns the key.\n\ncached function calls\n------------------------------\n\nSometimes we don't want to cache all calls to a specific function.\nSo the decorator is not suitable, we may cache the call instead the function in this case:\n\n\n.. code-block:: python\n\n def get_name(user_id):\n # Fetch user name from database\n ...\n\n user_id = 42\n key = \"key-{user_id}\".format(user_id=user_id)\n cache.call(lambda: get_name(user_id), key, timeout=300)\n\ncached multiple calls\n------------------------------\n\nFor most cache backends, it's much faster to get or set caches in bulk.\n\n.. code-block:: python\n\n def get_name(user_id):\n # Fetch user name from database\n ...\n\n user_ids = [1, 2, 42, 1984]\n names = cache.map(\"key-{user_id}\", get_name, user_ids, timeout=300)\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/suzaku/cachelper", "keywords": "cache", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "cachelper", "package_url": "https://pypi.org/project/cachelper/", "platform": "", "project_url": "https://pypi.org/project/cachelper/", "project_urls": { "Homepage": "https://github.com/suzaku/cachelper" }, "release_url": "https://pypi.org/project/cachelper/0.3.0/", "requires_dist": null, "requires_python": "", "summary": "A collection of cache helpers", "version": "0.3.0" }, "last_serial": 3154817, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "789b87cff252656df2d64abf794d10b0", "sha256": "6daf20f1c34789f74b6d112cb56f05b688c6b6833c484b093fa40af32e6680ab" }, "downloads": -1, "filename": "cachelper-0.1.0.tar.gz", "has_sig": false, "md5_digest": "789b87cff252656df2d64abf794d10b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1623, "upload_time": "2017-08-27T03:51:15", "url": "https://files.pythonhosted.org/packages/f5/74/3a2f4be9731c21c1c48b93067bd9fc5626af2b58ed47e2dfa3aac699e99c/cachelper-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "13854186b65f25d759a3fb8061adcec7", "sha256": "6fdc493c5178cf81cf3880636cd38376a7b36ee6d71ce465dafd73405db3c10f" }, "downloads": -1, "filename": "cachelper-0.1.1.tar.gz", "has_sig": false, "md5_digest": "13854186b65f25d759a3fb8061adcec7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1646, "upload_time": "2017-08-27T12:30:05", "url": "https://files.pythonhosted.org/packages/8e/f8/c59618b03f1d07caadeacc229feca0dc83b04b3b1bce382612cb138cc342/cachelper-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "e065066977150f8071ec55838e6725ff", "sha256": "8b411f3a38f3f67af9b2c11171b012bacbd2b4d7dd1bab08aa72993563a04857" }, "downloads": -1, "filename": "cachelper-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e065066977150f8071ec55838e6725ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1645, "upload_time": "2017-08-27T22:08:32", "url": "https://files.pythonhosted.org/packages/2a/9f/e199d738599485ddf63b7048c63db79f67a99772bced6f960171defbb6c9/cachelper-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "fd960ce80c7c7ac040617d70dd5768a8", "sha256": "7569b7a573dddf675a22b4c5e2a3cc8936b9867e657cf561a28d343c44b35dbf" }, "downloads": -1, "filename": "cachelper-0.1.3.tar.gz", "has_sig": false, "md5_digest": "fd960ce80c7c7ac040617d70dd5768a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2158, "upload_time": "2017-08-28T11:23:23", "url": "https://files.pythonhosted.org/packages/ba/df/98d5ea4b69dd29e66919da26e0b6e434b3ca02362476935b060eb29140f3/cachelper-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "e17de2935bc6d8c6205cd4ef60bdef52", "sha256": "3bedcc08c5aedc3f380c4217fb2586e47d9d2c0a3bb71187709e61bc90cb6cdf" }, "downloads": -1, "filename": "cachelper-0.1.4.tar.gz", "has_sig": false, "md5_digest": "e17de2935bc6d8c6205cd4ef60bdef52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3510, "upload_time": "2017-08-30T00:01:21", "url": "https://files.pythonhosted.org/packages/a4/b0/0edf305059cd5f4b7af1cf43c13be98a3e66a7deeef3612cc6f94cf3faa0/cachelper-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "2b05005847d41a8fa9144bcc1476c3f2", "sha256": "2c9db71fc6cbfb8b97ff96a76c2d6cc14de7c11a572030084dbe335fa355a73e" }, "downloads": -1, "filename": "cachelper-0.1.5.tar.gz", "has_sig": false, "md5_digest": "2b05005847d41a8fa9144bcc1476c3f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3516, "upload_time": "2017-08-30T11:13:05", "url": "https://files.pythonhosted.org/packages/cc/6f/7b349604d64af503376d44665efbf1183b07b17fddceafb2d41f907185fa/cachelper-0.1.5.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "29864d498bd04c493098e6c135672d0c", "sha256": "13d12534e076f9bdc0c08ab12a526f6858a4282222b859969ceeff893feeefc5" }, "downloads": -1, "filename": "cachelper-0.2.0.tar.gz", "has_sig": false, "md5_digest": "29864d498bd04c493098e6c135672d0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3430, "upload_time": "2017-09-02T07:46:46", "url": "https://files.pythonhosted.org/packages/8d/70/556f59c3b4e1884a00afb5871b820061bdca6f27543f89f6dd7913018832/cachelper-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "bf599f49beb278b9a8ebd3f9cd079f25", "sha256": "b61f1a1e55f3752cb9bd29512276b12483b37e043f55f719b868ac4a27014e67" }, "downloads": -1, "filename": "cachelper-0.3.0.tar.gz", "has_sig": false, "md5_digest": "bf599f49beb278b9a8ebd3f9cd079f25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3803, "upload_time": "2017-09-06T23:20:47", "url": "https://files.pythonhosted.org/packages/6c/cc/75392124b0df3c76708011240c7f70c27ab510b883f3d538c277f489fe2f/cachelper-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bf599f49beb278b9a8ebd3f9cd079f25", "sha256": "b61f1a1e55f3752cb9bd29512276b12483b37e043f55f719b868ac4a27014e67" }, "downloads": -1, "filename": "cachelper-0.3.0.tar.gz", "has_sig": false, "md5_digest": "bf599f49beb278b9a8ebd3f9cd079f25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3803, "upload_time": "2017-09-06T23:20:47", "url": "https://files.pythonhosted.org/packages/6c/cc/75392124b0df3c76708011240c7f70c27ab510b883f3d538c277f489fe2f/cachelper-0.3.0.tar.gz" } ] }