{ "info": { "author": "Samuel James", "author_email": "samuelvarejames@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "timed-lru-cache\n===============\n\nA time constraint LRUCache Implementation\n\nInstallation\n~~~~~~~~~~~~\n\n``pip install timedLruCache``\n\nSummary\n~~~~~~~\n\nThe timed LRUCache is a dict-like container that is also size limited.\nIt uses the prune method when instantiated with time to remove time\nexpired objects.\n\nExample\n~~~~~~~\n\nSimple LRUCache\n^^^^^^^^^^^^^^^\n\n.. code:: python\n\n from lrucache.lru_cache import LRUCache\n\n lru = LRUCache(maxSize=4)\n lru.insert_key_value(\"a\", 99)\n\n lru.insert_key_value(\"b\", 202)\n lru[\"c\"] = 203\n lru[\"d\"] = 204\n lru[\"e\"] = 205\n\n lru.get_value(\"a\")\n lru.get(\"a\", None)\n\n print(lru)\n print(lru.values())\n\n # LRUCache(timeout=None, size=4, data={'b': 202, 'c': 203, 'd': 204, 'e': 205})\n # [202, 203, 204, 205]\n\n # insert into lrucache\n lru.insert_key_value(\"j\", 302)\n # or\n lru[\"k\"] = 403\n\n # retrieve from the lrucache\n lru.get_value(\"z\")\n # or\n lru.get(\"z\", None)\n\n # delete from the lrucache\n lru.delete_key(\"z\")\n # or\n lru.pop(\"z\", None)\n\nTest memoization: Sample use with the decorator\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n from lrucache.lru_cache import LRUCache\n from lrucache.memoize_decorator import memoized_cache\n\n @memoized_cache(cache=LRUCache(maxSize=5))\n def get_random(max_value):\n import random\n return random.random() * max_value\n\n print(get_random(1)) # 0.6869437097681024\n print(get_random(1)) # 0.6869437097681024\n print(get_random(3)) # 1.2792457326076399\n print(get_random(4)) # 1.9216226691107239\n print(get_random(5)) # 3.442601057826532\n print(get_random(5)) # 3.442601057826532\n print(get_random(7)) # 0.6831533160972438\n print(get_random(8)) # 7.40200570325546\n print(get_random(1)) # 0.37636284785825047\n\n\n print(get_random.misses)\n # => 7\n print(get_random.hits)\n # => 2\n\n # cache info\n get_random.cache_info()\n # => memoized_cache(hits=2, misses=7, maxsize=5, currsize=5)\n\n # check the cache stored key, value, items pairs\n print(get_random.cache.keys())\n # => dict_keys([-5205072475343462643, 8575776084210548143, -2238842041537299568, -8811688270097994377, 2613783748954017437])\n\n print(get_random.cache.values())\n # => [1.9216226691107239, 3.442601057826532, 0.6831533160972438, 7.40200570325546, 0.37636284785825047]\n\n print(get_random.cache.items())\n # => [\n # (-5205072475343462643, 1.9216226691107239), (8575776084210548143, 3.442601057826532), \n # (-2238842041537299568, 0.6831533160972438), (-8811688270097994377, 7.40200570325546), \n # (2613783748954017437, 0.37636284785825047)\n # ]\n\n\n # Simple report on performance\n # check report before get_random.reset() \n report = f'Hit %: {(float(get_random.hits) / (get_random.hits + get_random.misses))}'\n print(report)\n # => Hit %: 0.2222222222222222\n\n # reset hits and misses count to zero.\n get_random.reset()\n\nTest time constraint\n^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n from time import sleep\n from lrucache.lru_cache import LRUCache\n\n timed_lru = LRUCache(maxSize=4, timeout=10)\n\n timed_lru[\"a\"] = 202\n timed_lru[\"b\"] = 203\n timed_lru[\"c\"] = 204\n timed_lru[\"d\"] = 205\n timed_lru[\"e\"] = 206\n\n # cache size remains 4, after inserting 5 items into cache.\n print(timed_lru) # LRUCache(timeout=10, size=4, data={'b': 203, 'c': 204, 'd': 205, 'e': 206})\n\n sleep(60)\n # cache should be empty after 60s as it clears its entry after 10s (timeout)\n timed_lru[\"d\"] = 203\n timed_lru[\"e\"] = 204\n timed_lru[\"f\"] = 205\n timed_lru[\"g\"] = 206\n timed_lru[\"h\"] = 207\n\n # cache now has new entries\n print(timed_lru) # LRUCache(timeout=10, size=4, data={'e': 204, 'f': 205, 'g': 206, 'h': 207})\n\n sleep(30)\n # cache entry expires after 10s and as a result we have nothing in the cache (data = {}).\n print(timed_lru) # LRUCache(timeout=10, size=4, data={})\n timed_lru.stop_timer()\n\nSample Usage with the decorator (maxSize and timeout)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code:: python\n\n @memoized_cache(cache=LRUCache(maxSize=5, timeout=5))\n def get_random(max_value):\n import random\n return random.random() * max_value\n\n get_random(1)\n get_random(1)\n get_random(3)\n get_random(4)\n get_random(5)\n get_random(5)\n get_random(7)\n get_random(8)\n get_random(1)\n\n get_random.cache_info() # memoized_cache(hits=2, misses=7, maxsize=5, currsize=5)\n\n print(get_random.cache.values())\n # => [2.108203625973244, 0.2784180276772963, 3.9932738384806856, 1.2462533799577011, 0.8501249397423805]\n\n print(get_random.cache.items()) # [(7793041093296417556, 2.108203625973244), (-5573334794002472495, 0.2784180276772963), (6169942939433972205, 3.9932738384806856), (-179359314705978364, 1.2462533799577011), (2135404498036021478, 0.8501249397423805)]\n\n print(get_random.cache.keys())\n # dict_keys([7793041093296417556, -5573334794002472495, 6169942939433972205, -179359314705978364, 2135404498036021478])\n\n print(get_random.cache.values())\n # [2.108203625973244, 0.2784180276772963, 3.9932738384806856, 1.2462533799577011, 0.8501249397423805]\n\n sleep(20)\n get_random.cache_info() # memoized_cache(hits=2, misses=7, maxsize=5, currsize=0)\n\n # stop the timer\n get_random.cache.stop_timer()", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/andela-sjames/timed-lru-cache", "keywords": "timed lru cache implementation", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "timedLruCache", "package_url": "https://pypi.org/project/timedLruCache/", "platform": "", "project_url": "https://pypi.org/project/timedLruCache/", "project_urls": { "Homepage": "https://github.com/andela-sjames/timed-lru-cache" }, "release_url": "https://pypi.org/project/timedLruCache/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "A time constraint LRUCache Implementation", "version": "1.0.1" }, "last_serial": 5317239, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "93c0deba1e58490aeae006a7798605ba", "sha256": "ed1fb8087d8ea4b9292c426a347be6bde04fe6cf79530cca2dc77f41f384a50b" }, "downloads": -1, "filename": "timedLruCache-1.0.0.tar.gz", "has_sig": false, "md5_digest": "93c0deba1e58490aeae006a7798605ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6261, "upload_time": "2019-05-25T10:15:57", "url": "https://files.pythonhosted.org/packages/67/82/8806dce391a57a16c196d5354e54932403e7773ce91f339682f32be0da43/timedLruCache-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "c7c6e2dce755fcd42eed30a048e78057", "sha256": "64819a807d24dd1b598e77c95db22d4b8ccae694621e6a0a3f1f89cb51e25c37" }, "downloads": -1, "filename": "timedLruCache-1.0.1.tar.gz", "has_sig": false, "md5_digest": "c7c6e2dce755fcd42eed30a048e78057", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6269, "upload_time": "2019-05-25T20:15:26", "url": "https://files.pythonhosted.org/packages/fe/ca/9f8458c74aab252d3fc3da7d3212b3fddc6145f1978632b5c4ab0ae4f5e1/timedLruCache-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c7c6e2dce755fcd42eed30a048e78057", "sha256": "64819a807d24dd1b598e77c95db22d4b8ccae694621e6a0a3f1f89cb51e25c37" }, "downloads": -1, "filename": "timedLruCache-1.0.1.tar.gz", "has_sig": false, "md5_digest": "c7c6e2dce755fcd42eed30a048e78057", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6269, "upload_time": "2019-05-25T20:15:26", "url": "https://files.pythonhosted.org/packages/fe/ca/9f8458c74aab252d3fc3da7d3212b3fddc6145f1978632b5c4ab0ae4f5e1/timedLruCache-1.0.1.tar.gz" } ] }