{ "info": { "author": "DISQUS", "author_email": "opensource@disqus.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 7 - Inactive", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development" ], "description": "================\ndjango-modeldict\n================\n\n.. image:: https://img.shields.io/pypi/v/django-modeldict-yplan.svg\n :target: https://pypi.python.org/pypi/django-modeldict-yplan\n\n.. image:: https://travis-ci.org/adamchainz/django-modeldict.svg?branch=master\n :target: https://travis-ci.org/adamchainz/django-modeldict\n\n**Retired: this project is no longer maintained.** I (Adam Johnson) no longer\nhave time to continue maintaining this. I was doing so to support\n`gargoyle-yplan `__, a fork for my\nex-employer YPlan. If you'd like to sponsor ongoing maintenance or take it over\nyourself, please contact me@adamj.eu.\n\n``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``).\n\nIt was originally created by `Disqus `_, but due to the inactivity we at YPlan have taken over maintenance on this fork.\n\nRequirements\n------------\n\nTested with all combinations of:\n\n* Python: 3.6\n* Django: 1.11, 2.0, 2.1, 2.2\n\nPython 3.4+ supported.\n\nInstall\n-------\n\nInstall it with **pip**:\n\n.. code-block:: bash\n\n pip install django-modeldict-yplan\n\nMake sure you ``pip uninstall django-modeldict`` first if you're upgrading from the original to this fork - the packages clash.\n\nExample Usage\n-------------\n\n.. code-block:: python\n\n # You'll need a model with fields to use as key and value in the dict\n class Setting(models.Model):\n key = models.CharField(max_length=32)\n value = models.CharField(max_length=200)\n\n # Create the ModelDict...\n settings = ModelDict(Setting, key='key', value='value', instances=False)\n\n # And you can treat it like a normal dict:\n\n # Missing values = KeyError\n settings['foo']\n >>> KeyError\n\n # Sets supported\n settings['foo'] = 'hello'\n\n # Fetch the current value using normal dictionary access\n settings['foo']\n >>> 'hello'\n\n # ...or by normal model queries\n Setting.objects.get(key='foo').value\n >>> 'hello'\n\n\n\n\n=======\nHistory\n=======\n\nPending release\n---------------\n\n.. Add new release notes below here\n\n2.0.3 (2019-05-17)\n------------------\n\n* **Retired: this project is no longer maintained.** I (Adam Johnson) no longer\n have time to continue maintaining this. I was doing so to support\n `gargoyle-yplan `__, a fork for my\n ex-employer YPlan. If you'd like to sponsor ongoing maintenance or take it\n over yourself, please contact me@adamj.eu.\n\n2.0.2 (2019-04-28)\n------------------\n\n* Tested with Django 2.2. No changes were needed for compatibility.\n\n2.0.1 (2019-02-15)\n------------------\n\n* No functional changes. This is a re-release of version 2.0.0 to fix immutable\n metadata on PyPI so that Pip on Python 2 doesn't pick up the Python 3 only\n 2.X series. **Version 2.0.0 will be pulled from PyPI on 2019-03-01.**\n\n2.0.0 (2019-01-29)\n------------------\n\n**This version is due to be pulled from PyPI, please use version 2.0.1 as per\nits above release note.**\n\n* Drop Python 2 support, only Python 3.4+ is supported now.\n* Drop Django 1.8, 1.9, and 1.10 support. Only Django 1.11+ is supported now.\n* Remove ``iteritems()``, ``iterkeys()``, and ``itervalues()`` methods from\n ``ModelDict``, and move ``items()``, ``keys()``, and ``values()`` to Python 3\n semantics, returning iterators rather than lists.\n* Include LICENSE file in wheel.\n* Tested with Django 2.1. No changes were needed for compatibility.\n\n1.5.4 (2016-10-28)\n------------------\n\n* Fixed a race condition in threaded code. See https://github.com/adamchainz/django-modeldict/pull/40 for a detailed\n explanation. Thanks @Jaidan.\n\n1.5.3 (2016-09-20)\n------------------\n\n* Stop rounding ``time.time()`` down to the nearest integer, so we are more fine grained around expiration. It might\n also fix a subtle timing bug around re-fetching the remote cache unnecessarily.\n\n1.5.2 (2016-07-31)\n------------------\n\n* Fixed update missing when ``_local_last_updated`` could be set even when it\n wasn't updated\n* Fixed update missing from integer rounding in time comparison\n* Fixed ``CachedDict.__repr__`` so it works for other subclasses of\n ``CachedDict`` than ``ModelDict`` (don't assume ``self.model`` exists)\n\n1.5.1 (2016-06-13)\n------------------\n\n* Fixed local cache never expiring if value was checked too often.\n* Use Django's ``cache.set_many`` for more efficient storage.\n\n1.5.0 (2016-01-11)\n------------------\n\n* Forked by YPlan\n* Fixed concurrency TOCTTOU bug for threaded Django servers.\n* Stopped including the 'tests' directory in package\n* Django 1.8 and 1.9 supported.\n* Python 3 support added.\n* Fixed ``setdefault()`` to return the value that was set/found, as per normal dict semantics. Thanks @olevinsky.\n\n1.4.1 (2012-12-04)\n------------------\n\n* Last release by Disqus\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/adamchainz/django-modeldict", "keywords": "", "license": "Apache License 2.0", "maintainer": "Adam Johnson", "maintainer_email": "me@adamj.eu", "name": "django-modeldict-yplan", "package_url": "https://pypi.org/project/django-modeldict-yplan/", "platform": "", "project_url": "https://pypi.org/project/django-modeldict-yplan/", "project_urls": { "Homepage": "https://github.com/adamchainz/django-modeldict" }, "release_url": "https://pypi.org/project/django-modeldict-yplan/2.0.3/", "requires_dist": [ "Django (>=1.11)" ], "requires_python": ">=3.4", "summary": "Stores a model as a dictionary", "version": "2.0.3" }, "last_serial": 5283984, "releases": { "1.4.2": [], "1.5.0": [ { "comment_text": "", "digests": { "md5": "cf95522cbe770a8de8cb519a97b8152a", "sha256": "7ab4e58e3cadd287e9aed68363d9475b14b11e2317e45f9398288321dd126bda" }, "downloads": -1, "filename": "django_modeldict_yplan-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf95522cbe770a8de8cb519a97b8152a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 11567, "upload_time": "2016-01-11T15:59:16", "url": "https://files.pythonhosted.org/packages/0f/85/94bce2a4891ef160ba7d72ed79abbdfb97f29de09f2cf0ddf4d0cafad562/django_modeldict_yplan-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b0b6949533d22eec157e12e6630236c4", "sha256": "c3b64ab145964f77f70a46fa87e7d85113150a8fd91ecf25b1a24ffd9cb88488" }, "downloads": -1, "filename": "django-modeldict-yplan-1.5.0.tar.gz", "has_sig": false, "md5_digest": "b0b6949533d22eec157e12e6630236c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12987, "upload_time": "2016-01-11T15:59:03", "url": "https://files.pythonhosted.org/packages/ca/e3/3293b141d7dfa5a09aa4b91594c7f1875a22ea6cef4e762de3576a1146f0/django-modeldict-yplan-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "b5972fb8b28a3e3857e6f2f739694f73", "sha256": "e1758fe3b6df4719354e16fe66919a9589616481c798e4c40d1df8a6fb4926b0" }, "downloads": -1, "filename": "django_modeldict_yplan-1.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b5972fb8b28a3e3857e6f2f739694f73", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 12519, "upload_time": "2016-06-13T12:12:26", "url": "https://files.pythonhosted.org/packages/2b/4d/aca1c47e0ca64155c3b63551803fd18e63a01b6af2755f7366e6bc0e5b9f/django_modeldict_yplan-1.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a25333b49b6d0a2bd4f394806342092", "sha256": "e637cd274dbfe300ce40c742651d306e06a3cae49fd199391379b878a0d084c1" }, "downloads": -1, "filename": "django-modeldict-yplan-1.5.1.tar.gz", "has_sig": false, "md5_digest": "1a25333b49b6d0a2bd4f394806342092", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13947, "upload_time": "2016-06-13T12:12:21", "url": "https://files.pythonhosted.org/packages/1d/e9/d359e936a6e40d164f99b0ef4d31bfb4a4b8e38502936fbd04bc4197412a/django-modeldict-yplan-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "8d516be577bef8626575d4155097709f", "sha256": "97c646e405a955ef4238c2aa342ccc00a26ce55f122f5d162665b984dbae6237" }, "downloads": -1, "filename": "django_modeldict_yplan-1.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8d516be577bef8626575d4155097709f", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13068, "upload_time": "2016-07-31T15:16:51", "url": "https://files.pythonhosted.org/packages/dd/39/da4ba405654ede3f1ef14a73d1b675fcf25b8b71918aed7571bf91af37b0/django_modeldict_yplan-1.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "757c33d34b6af69e715ab993813ddfd9", "sha256": "90faf7b7df1300abec7994d8e9104d6d1cbce8dfe9b4e1a926751182017586b3" }, "downloads": -1, "filename": "django-modeldict-yplan-1.5.2.tar.gz", "has_sig": false, "md5_digest": "757c33d34b6af69e715ab993813ddfd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14432, "upload_time": "2016-07-31T15:16:48", "url": "https://files.pythonhosted.org/packages/07/9f/2335ce9142cedcb18dd265468390f5dab72d0c6dccbd725964fbd8a40412/django-modeldict-yplan-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "4275fc5213ffe91fb866b13bca1fd68a", "sha256": "b6144e9cb5cb03c206290ab73d954975387dc01ffb6bad2cfa06af06d9816dc0" }, "downloads": -1, "filename": "django_modeldict_yplan-1.5.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4275fc5213ffe91fb866b13bca1fd68a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13283, "upload_time": "2016-09-20T14:20:21", "url": "https://files.pythonhosted.org/packages/82/7d/89fc713b7e535e3b1a0857d86246d5a9c14e3847dbe5851f7a04d8c8d67c/django_modeldict_yplan-1.5.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46467a6b39f9ccfac49a0708cda3b161", "sha256": "ec67aa9bf6e689b3d468a770e38b90dd4b4b4ccb7ddd034d041836924b910eb6" }, "downloads": -1, "filename": "django-modeldict-yplan-1.5.3.tar.gz", "has_sig": false, "md5_digest": "46467a6b39f9ccfac49a0708cda3b161", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14657, "upload_time": "2016-09-20T14:20:19", "url": "https://files.pythonhosted.org/packages/5f/0a/a966b1d10546465b66728e0e4ce4c5908442a60fdd456e396692bdbf8bc6/django-modeldict-yplan-1.5.3.tar.gz" } ], "1.5.4": [ { "comment_text": "", "digests": { "md5": "b391d20d0b3dc8d577979fc8eaf51e3a", "sha256": "687cefe6bd6e464ad0d4c9336a24c045d3b90ea77fe184428403a0194b0f18b7" }, "downloads": -1, "filename": "django_modeldict_yplan-1.5.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b391d20d0b3dc8d577979fc8eaf51e3a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13452, "upload_time": "2016-10-28T12:59:06", "url": "https://files.pythonhosted.org/packages/bb/25/b04473021da2069a376c529e083db2ae5935be0348b705661bae5cd2000c/django_modeldict_yplan-1.5.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d32e723b6692a9b2b7f71cbd9bf9e63", "sha256": "0f28014603f3bc603a6c850ea9639172ac8f2568a2c1636830994da0666e6804" }, "downloads": -1, "filename": "django-modeldict-yplan-1.5.4.tar.gz", "has_sig": false, "md5_digest": "8d32e723b6692a9b2b7f71cbd9bf9e63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14867, "upload_time": "2016-10-28T12:59:02", "url": "https://files.pythonhosted.org/packages/a5/6e/5e52237b08b887f8de42f7a8fdd0419365eb4047b0b92e5c53744c0a8dde/django-modeldict-yplan-1.5.4.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "9077283d8a58a1505abe9015638532a3", "sha256": "6a783ab535b8e547cc4e192dbc0b99959f0ed6e705349ac437b9eba3761aa55c" }, "downloads": -1, "filename": "django_modeldict_yplan-2.0.1-py3-none-any.whl", "has_sig": true, "md5_digest": "9077283d8a58a1505abe9015638532a3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 15452, "upload_time": "2019-02-15T14:32:27", "url": "https://files.pythonhosted.org/packages/59/9a/866349a11236879cec67172fea32d6a2de744342d1770045c90304b5ea57/django_modeldict_yplan-2.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f59c1f51933dc525d36b4a5634192638", "sha256": "1d3fe67fccb557676ef2adae946853f498e15382a7d45440ac8a60c0f5107096" }, "downloads": -1, "filename": "django-modeldict-yplan-2.0.1.tar.gz", "has_sig": true, "md5_digest": "f59c1f51933dc525d36b4a5634192638", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 13760, "upload_time": "2019-02-15T14:32:29", "url": "https://files.pythonhosted.org/packages/fb/a6/3b8bcaa8d40822ce70e7980bf630f991e483c8137399712e830494962333/django-modeldict-yplan-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "1f2bf6c60cce056ef8ae25e4bbecfd31", "sha256": "733e9c5464167d6cc72fa325b6540be872d6a63bc60a56a642bbd00fb076e358" }, "downloads": -1, "filename": "django_modeldict_yplan-2.0.2-py3-none-any.whl", "has_sig": true, "md5_digest": "1f2bf6c60cce056ef8ae25e4bbecfd31", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 15473, "upload_time": "2019-04-28T18:59:37", "url": "https://files.pythonhosted.org/packages/d6/fc/3277e8f225d836824479fffbf8fccaf94613947d5da6e51c6d86aea222b3/django_modeldict_yplan-2.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "45718492a0c8c41621e792410ebbf473", "sha256": "68c5d1800799c4a67376ba036ccbc431270f66036d74127b4dd30726081d1536" }, "downloads": -1, "filename": "django-modeldict-yplan-2.0.2.tar.gz", "has_sig": true, "md5_digest": "45718492a0c8c41621e792410ebbf473", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 13802, "upload_time": "2019-04-28T18:59:41", "url": "https://files.pythonhosted.org/packages/48/30/8cf5adcc4f4fa6f5e49516f1c0f9db2d302c9110ef3fbfb108f458d5f1d5/django-modeldict-yplan-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "3cc87f4b2caff0af6362335a3434c9cb", "sha256": "309b593db6ff68a0d338a55669604eb7dfc133c3c52bebfa0bd0239ca1a47ffd" }, "downloads": -1, "filename": "django_modeldict_yplan-2.0.3-py3-none-any.whl", "has_sig": true, "md5_digest": "3cc87f4b2caff0af6362335a3434c9cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 15644, "upload_time": "2019-05-17T20:52:39", "url": "https://files.pythonhosted.org/packages/bc/85/e0c1bba526a210680f224669ffda7cd4ed6e4897f4f36c57b6f2d3d7a9ee/django_modeldict_yplan-2.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84e2aa2c7b01b48556041c2c505022a1", "sha256": "7c7780045e6122b555c2867ad84cfe99d3f71f53dd83ac0c336723701f7576aa" }, "downloads": -1, "filename": "django-modeldict-yplan-2.0.3.tar.gz", "has_sig": true, "md5_digest": "84e2aa2c7b01b48556041c2c505022a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 14045, "upload_time": "2019-05-17T20:52:41", "url": "https://files.pythonhosted.org/packages/71/45/6f35f19a30775c7a8d0cb82972cc4dd2c8d22d817b52d51bded0ecdb9a1a/django-modeldict-yplan-2.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3cc87f4b2caff0af6362335a3434c9cb", "sha256": "309b593db6ff68a0d338a55669604eb7dfc133c3c52bebfa0bd0239ca1a47ffd" }, "downloads": -1, "filename": "django_modeldict_yplan-2.0.3-py3-none-any.whl", "has_sig": true, "md5_digest": "3cc87f4b2caff0af6362335a3434c9cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 15644, "upload_time": "2019-05-17T20:52:39", "url": "https://files.pythonhosted.org/packages/bc/85/e0c1bba526a210680f224669ffda7cd4ed6e4897f4f36c57b6f2d3d7a9ee/django_modeldict_yplan-2.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84e2aa2c7b01b48556041c2c505022a1", "sha256": "7c7780045e6122b555c2867ad84cfe99d3f71f53dd83ac0c336723701f7576aa" }, "downloads": -1, "filename": "django-modeldict-yplan-2.0.3.tar.gz", "has_sig": true, "md5_digest": "84e2aa2c7b01b48556041c2c505022a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 14045, "upload_time": "2019-05-17T20:52:41", "url": "https://files.pythonhosted.org/packages/71/45/6f35f19a30775c7a8d0cb82972cc4dd2c8d22d817b52d51bded0ecdb9a1a/django-modeldict-yplan-2.0.3.tar.gz" } ] }