Object Cacher
Simple cacher for your objects. Store copy of objects in memory (or pickle in file) and returns copy of that objects. Function arguments it is a cache key.
>>> from object_cacher import ObjectCacher >>> @ObjectCacher(timeout=5) ... def test(*args): ... print ('Real call') ... return args ... >>> test(1,2,3) Real call (1, 2, 3)>>> test(1,2,3) (1, 2, 3)>>> test(1,2,3,4) Real call (1, 2, 3, 4)>>> test(1,2,3,4) ... (1, 2, 3, 4)
Makes cache for results of hard functions or methods. For example you have remote RESTful api with a lot of dictionaries. You may cache it:
>>> from urllib import urlopen
>>> from object_cacher import ObjectCacher
>>> @ObjectCacher(timeout=60)
... def get_api():
... print "This real call"
... return urlopen('https://api.github.com/').read()
...
>>> get_api()
This real call
'{"current_user_url":"https://api.github.com/user", ...'
>>> get_api()
'{"current_user_url":"https://api.github.com/user", ...'
As result you made http request only once.
For methods you may use it like this:
>>> from urllib import urlopen
>>> from object_cacher import ObjectCacher
>>> class API(object):
... @ObjectCacher(timeout=60, ignore_self=True)
... def get_methods(self):
... print "Real call"
... return urlopen('https://api.github.com/').read()
...
>>> a = API()
>>> a.get_methods()
Real call
'{"current_user_url":"https://api.github.com/user", ...'
>>> b = API()
>>> b.get_methods()
'{"current_user_url":"https://api.github.com/user", ...'
If ignore_self parameter is set, cache will be shared by all instances. Otherwise cache for instances will be split.
Also you may use persistent cache. The “ObjectPersistentCacher” class-decorator makes file-based pickle-serialized cache storage. When you want to keep cache after rerun you must determine cache id:
>>> from urllib import urlopen
>>> from object_cacher import ObjectCacher
>>> class API(object):
... @ObjectPersistentCacher(timeout=60, ignore_self=True, oid='com.github.api.listofmethods')
... def get_methods(self):
... print "Real call"
... return urlopen('https://api.github.com/').read()
...
>>> a = API()
>>> a.get_methods()
Real call
'{"current_user_url":"https://api.github.com/user", ...'
>>> b = API()
>>> b.get_methods()
'{"current_user_url":"https://api.github.com/user", ...'
That is keep cache after rerun.
You may change cache dir for ObjectPersistentCacher via changing ‘CACHE_DIR’ class-property.
>>> ObjectPersistentCacher.CACHE_DIR = '/var/tmp/my_cache'
Installation
You may install from pypi
pip install object_cacher
or manual
python setup.py install
Metadata
Release files for object_cacher 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| object-cacher-0.3.1.tar.gz | 3.8 kB | Without provenance | Details for object-cacher-0.3.1.tar.gz |
Release files / object-cacher-0.3.1.tar.gz
| Download URL | object-cacher-0.3.1.tar.gz |
|---|---|
| Size | 3.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
69996f88ac2bef118c1f2ac2ec0c8761caeec26762577eed915e478284f028c0
|
|
BLAKE2b-256 checksum How to use checksums |
843a3bbd47ab4a2062c721fc8b1ee09c60c11027f45d3f2653c59724ca3736b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for object_cacher 0.3.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.