Stores a model as a dictionary
Project description
django-modeldict
ModelDict is a very efficient way to store things like settings in your database. The entire model is transformed into a dictionary (lazily) as well as stored in your cache. It’s invalidated only when it needs to be (both in process and based on CACHE_BACKEND).
It was originally created by Disqus, but due to the inactivity we at YPlan have taken over maintenance on this fork.
Requirements
Tested with all combinations of:
- Python: 2.7, 3.5
- Django: 1.8, 1.9, 1.10
Install
Install it with pip:
pip install django-modeldict-yplan
Make sure you pip uninstall django-modeldict first if you’re upgrading from the original to this fork - the packages clash.
Example Usage
# You'll need a model with fields to use as key and value in the dict class Setting(models.Model): key = models.CharField(max_length=32) value = models.CharField(max_length=200) # Create the ModelDict... settings = ModelDict(Setting, key='key', value='value', instances=False) # And you can treat it like a normal dict: # Missing values = KeyError settings['foo'] >>> KeyError # Sets supported settings['foo'] = 'hello' # Fetch the current value using normal dictionary access settings['foo'] >>> 'hello' # ...or by normal model queries Setting.objects.get(key='foo').value >>> 'hello'
History
Pending release
- New release notes here
1.5.4 (2016-10-28)
- Fixed a race condition in threaded code. See https://github.com/YPlan/django-modeldict/pull/40 for a detailed explanation. Thanks @Jaidan.
1.5.3 (2016-09-20)
- Stop rounding time.time() down to the nearest integer, so we are more fine grained around expiration. It might also fix a subtle timing bug around re-fetching the remote cache unnecessarily.
1.5.2 (2016-07-31)
- Fixed update missing when _local_last_updated could be set even when it wasn’t updated
- Fixed update missing from integer rounding in time comparison
- Fixed CachedDict.__repr__ so it works for other subclasses of CachedDict than ModelDict (don’t assume self.model exists)
1.5.1 (2016-06-13)
- Fixed local cache never expiring if value was checked too often.
- Use Django’s cache.set_many for more efficient storage.
1.5.0 (2016-01-11)
- Forked by YPlan
- Fixed concurrency TOCTTOU bug for threaded Django servers.
- Stopped including the ‘tests’ directory in package
- Django 1.8 and 1.9 supported.
- Python 3 support added.
- Fixed setdefault() to return the value that was set/found, as per normal dict semantics. Thanks @olevinsky.
1.4.1 (2012-12-04)
- Last release by Disqus
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size django_modeldict_yplan-1.5.4-py2.py3-none-any.whl (13.5 kB) | File type Wheel | Python version 2.7 | Upload date | Hashes View |
Filename, size django-modeldict-yplan-1.5.4.tar.gz (14.9 kB) | File type Source | Python version None | Upload date | Hashes View |
Close
Hashes for django_modeldict_yplan-1.5.4-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 687cefe6bd6e464ad0d4c9336a24c045d3b90ea77fe184428403a0194b0f18b7 |
|
MD5 | b391d20d0b3dc8d577979fc8eaf51e3a |
|
BLAKE2-256 | bb25b04473021da2069a376c529e083db2ae5935be0348b705661bae5cd2000c |
Close
Hashes for django-modeldict-yplan-1.5.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f28014603f3bc603a6c850ea9639172ac8f2568a2c1636830994da0666e6804 |
|
MD5 | 8d32e723b6692a9b2b7f71cbd9bf9e63 |
|
BLAKE2-256 | a56e5e52237b08b887f8de42f7a8fdd0419365eb4047b0b92e5c53744c0a8dde |