Stores a model as a dictionary
Project description
django-modeldict
Retired: this project is no longer maintained. I (Adam Johnson) no longer have time to continue maintaining this. I was doing so to support gargoyle-yplan, a fork for my ex-employer YPlan. If you’d like to sponsor ongoing maintenance or take it over yourself, please contact me@adamj.eu.
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: 3.6
Django: 1.11, 2.0, 2.1, 2.2
Python 3.4+ supported.
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
2.0.3 (2019-05-17)
Retired: this project is no longer maintained. I (Adam Johnson) no longer have time to continue maintaining this. I was doing so to support gargoyle-yplan, a fork for my ex-employer YPlan. If you’d like to sponsor ongoing maintenance or take it over yourself, please contact me@adamj.eu.
2.0.2 (2019-04-28)
Tested with Django 2.2. No changes were needed for compatibility.
2.0.1 (2019-02-15)
No functional changes. This is a re-release of version 2.0.0 to fix immutable metadata on PyPI so that Pip on Python 2 doesn’t pick up the Python 3 only 2.X series. Version 2.0.0 will be pulled from PyPI on 2019-03-01.
2.0.0 (2019-01-29)
This version is due to be pulled from PyPI, please use version 2.0.1 as per its above release note.
Drop Python 2 support, only Python 3.4+ is supported now.
Drop Django 1.8, 1.9, and 1.10 support. Only Django 1.11+ is supported now.
Remove iteritems(), iterkeys(), and itervalues() methods from ModelDict, and move items(), keys(), and values() to Python 3 semantics, returning iterators rather than lists.
Include LICENSE file in wheel.
Tested with Django 2.1. No changes were needed for compatibility.
1.5.4 (2016-10-28)
Fixed a race condition in threaded code. See https://github.com/adamchainz/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.
Source Distribution
Built Distribution
Hashes for django-modeldict-yplan-2.0.3.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c7780045e6122b555c2867ad84cfe99d3f71f53dd83ac0c336723701f7576aa |
|
MD5 | 84e2aa2c7b01b48556041c2c505022a1 |
|
BLAKE2b-256 | 71456f35f19a30775c7a8d0cb82972cc4dd2c8d22d817b52d51bded0ecdb9a1a |
Hashes for django_modeldict_yplan-2.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 309b593db6ff68a0d338a55669604eb7dfc133c3c52bebfa0bd0239ca1a47ffd |
|
MD5 | 3cc87f4b2caff0af6362335a3434c9cb |
|
BLAKE2b-256 | bc85e0c1bba526a210680f224669ffda7cd4ed6e4897f4f36c57b6f2d3d7a9ee |