Skip to main content

Stores a model as a dictionary

Project description

django-modeldict

https://img.shields.io/pypi/v/django-modeldict-yplan.svg https://travis-ci.org/adamchainz/django-modeldict.svg?branch=master

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.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)

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-modeldict-yplan-2.0.2.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

django_modeldict_yplan-2.0.2-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file django-modeldict-yplan-2.0.2.tar.gz.

File metadata

  • Download URL: django-modeldict-yplan-2.0.2.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for django-modeldict-yplan-2.0.2.tar.gz
Algorithm Hash digest
SHA256 68c5d1800799c4a67376ba036ccbc431270f66036d74127b4dd30726081d1536
MD5 45718492a0c8c41621e792410ebbf473
BLAKE2b-256 48308cf5adcc4f4fa6f5e49516f1c0f9db2d302c9110ef3fbfb108f458d5f1d5

See more details on using hashes here.

File details

Details for the file django_modeldict_yplan-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: django_modeldict_yplan-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3

File hashes

Hashes for django_modeldict_yplan-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 733e9c5464167d6cc72fa325b6540be872d6a63bc60a56a642bbd00fb076e358
MD5 1f2bf6c60cce056ef8ae25e4bbecfd31
BLAKE2b-256 d6fc3277e8f225d836824479fffbf8fccaf94613947d5da6e51c6d86aea222b3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page