Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mailgun/expiringdict
Dictionary with auto-expiring values for caching purposes.
https://github.com/mailgun/expiringdict
Last synced: 4 days ago
JSON representation
Dictionary with auto-expiring values for caching purposes.
- Host: GitHub
- URL: https://github.com/mailgun/expiringdict
- Owner: mailgun
- License: apache-2.0
- Created: 2013-07-08T21:17:50.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-07-12T21:35:12.000Z (4 months ago)
- Last Synced: 2024-07-31T20:50:51.801Z (3 months ago)
- Language: Python
- Size: 32.2 KB
- Stars: 343
- Watchers: 61
- Forks: 76
- Open Issues: 29
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- License: LICENSE
Awesome Lists containing this project
README
Expiring Dict
-------------.. image:: https://travis-ci.org/mailgun/expiringdict.svg?branch=master
:target: https://travis-ci.org/mailgun/expiringdict.. image:: https://coveralls.io/repos/github/mailgun/expiringdict/badge.svg?branch=master
:target: https://coveralls.io/github/mailgun/expiringdict?branch=masterChangeLog_
expiringdict is a Python caching library. The core of the library is ExpiringDict class which
is an ordered dictionary with auto-expiring values for caching purposes. Expiration happens on
any access, object is locked during cleanup from expired values. ExpiringDict can not store
more than `max_len` elements - the oldest will be deleted.**Note:** Iteration over dict and also keys() do not remove expired values!
.. _ChangeLog: ./CHANGELOG.rst
Installation
------------If you wish to install from PyPi:
.. code-block:: bash
pip install expiringdict
If you wish to download the source and install from GitHub:
.. code-block:: bash
git clone [email protected]:mailgun/expiringdict.git
python setup.py installor to install with test dependencies (`Nose `_, `Mock `_, `coverage `_) run from the directory above:
.. code-block:: bash
pip install -e expiringdict[test]
To run tests with coverage:
.. code-block:: bash
nosetests --with-coverage --cover-package=expiringdict
Usage
-----Create a dictionary with capacity for 100 elements and elements expiring in 10 seconds:
.. code-block:: py
from expiringdict import ExpiringDict
cache = ExpiringDict(max_len=100, max_age_seconds=10)put and get a value there:
.. code-block:: py
cache["key"] = "value"
cache.get("key")copy from dict or OrderedDict:
.. code-block:: py
from expiringdict import ExpiringDict
my_dict=dict()
my_dict['test'] = 1
cache = ExpiringDict(max_len=100, max_age_seconds=10, items=my_dict)
assert cache['test'] == 1copy from another ExpiringDict, with or without new length and timeout:
.. code-block:: py
from expiringdict import ExpiringDict
cache_hour = ExpiringDict(max_len=100, max_age_seconds=3600)
cache_hour['test'] = 1
cache_hour_copy = ExpiringDict(max_len=None, max_age_seconds=None, items=cache_hour)
cache_minute_copy = ExpiringDict(max_len=None, max_age_seconds=60, items=cache_hour)
assert cache_minute_copy['test'] == 1pickle :
.. code-block:: py
import dill
from expiringdict import ExpiringDict
cache = ExpiringDict(max_len=100, max_age_seconds=10)
cache['test'] = 1
pickled_cache = dill.dumps(cache)
unpickled_cache = dill.loads(cache)
assert unpickled_cache['test'] == 1