This project has been archived by its maintainers, and is no longer receiving any updates.
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
Metadata
Release files for django-modeldict-yplan 2.0.3
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 | |
|---|---|---|---|---|
| django-modeldict-yplan-2.0.3.tar.gz | 14.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_modeldict_yplan-2.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.7 kB
Release files / django-modeldict-yplan-2.0.3.tar.gz
| Download URL | django-modeldict-yplan-2.0.3.tar.gz |
|---|---|
| Size | 14.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7c7780045e6122b555c2867ad84cfe99d3f71f53dd83ac0c336723701f7576aa
|
|
BLAKE2b-256 checksum How to use checksums |
71456f35f19a30775c7a8d0cb82972cc4dd2c8d22d817b52d51bded0ecdb9a1a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
|
Release files / django_modeldict_yplan-2.0.3-py3-none-any.whl
| Download URL | django_modeldict_yplan-2.0.3-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
309b593db6ff68a0d338a55669604eb7dfc133c3c52bebfa0bd0239ca1a47ffd
|
|
BLAKE2b-256 checksum How to use checksums |
bc85e0c1bba526a210680f224669ffda7cd4ed6e4897f4f36c57b6f2d3d7a9ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
|
Security for django-modeldict-yplan 2.0.3
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.