{ "info": { "author": "Stephane \"Twidi\" Angel", "author_email": "s.angel@twidi.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.11", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "|PyPI Version| |Build Status| |Doc Status|\n\ndjango-extended-choices\n=======================\n\nA little application to improve Django choices\n----------------------------------------------\n\n``django-extended-choices`` aims to provide a better and more readable\nway of using choices_ in Django_.\n\nInstallation\n------------\n\nYou can install directly via pip (since version ``0.3``)::\n\n $ pip install django-extended-choices\n\nOr from the Github_ repository (``master`` branch by default)::\n\n $ git clone git://github.com/twidi/django-extended-choices.git\n $ cd django-extended-choices\n $ sudo python setup.py install\n\nUsage\n-----\n\nThe aim is to replace this:\n\n.. code-block:: python\n\n STATE_ONLINE = 1\n STATE_DRAFT = 2\n STATE_OFFLINE = 3\n\n STATE_CHOICES = (\n (STATE_ONLINE, 'Online'),\n (STATE_DRAFT, 'Draft'),\n (STATE_OFFLINE, 'Offline'),\n )\n\n STATE_DICT = dict(STATE_CHOICES)\n\n class Content(models.Model):\n title = models.CharField(max_length=255)\n content = models.TextField()\n state = models.PositiveSmallIntegerField(choices=STATE_CHOICES, default=STATE_DRAFT)\n\n def __unicode__(self):\n return u'Content \"%s\" (state=%s)' % (self.title, STATE_DICT[self.state])\n\n print(Content.objects.filter(state=STATE_ONLINE))\n\nby this:\n\n.. code-block:: python\n\n from extended_choices import Choices\n\n STATES = Choices(\n ('ONLINE', 1, 'Online'),\n ('DRAFT', 2, 'Draft'),\n ('OFFLINE', 3, 'Offline'),\n )\n\n class Content(models.Model):\n title = models.CharField(max_length=255)\n content = models.TextField()\n state = models.PositiveSmallIntegerField(choices=STATES, default=STATES.DRAFT)\n\n def __unicode__(self):\n return u'Content \"%s\" (state=%s)' % (self.title, STATES.for_value(self.state).display)\n\n print(Content.objects.filter(state=STATES.ONLINE))\n\n\nAs you can see there is only one declaration for all states with, for each state, in order:\n\n* the pseudo-constant name which can be used (``STATES.ONLINE`` replaces the previous ``STATE_ONLINE``)\n* the value to use in the database - which could equally be a string\n* the name to be displayed - and you can wrap the text in ``ugettext_lazy()`` if you need i18n\n\nAnd then, you can use:\n\n* ``STATES``, or ``STATES.choices``, to use with ``choices=`` in fields declarations\n* ``STATES.for_constant(constant)``, to get the choice entry from the constant name\n* ``STATES.for_value(constant)``, to get the choice entry from the key used in database\n* ``STATES.for_display(constant)``, to get the choice entry from the displayable value (can be useful in some case)\n\nEach choice entry obtained by ``for_constant``, ``for_value`` and ``for_display`` return a tuple as\ngiven to the ``Choices`` constructor, but with additional attributes:\n\n.. code-block:: python\n\n >>> entry = STATES.for_constant('ONLINE')\n >>> entry == ('ONLINE', 1, 'Online')\n True\n >>> entry.constant\n 'ONLINE'\n >>> entry.value\n 1\n >>> entry.display\n 'Online'\n\nThese attributes are chainable (with a weird example to see chainability):\n\n.. code-block:: python\n\n >>> entry.constant.value\n 1\n >>> entry.constant.value.value.display.constant.display\n 'Online'\n\nTo allow this, we had to remove support for ``None`` values. Use empty strings instead.\n\nNote that constants can be accessed via a dict key (``STATES['ONLINE']`` for example) if\nyou want to fight your IDE that may warn you about undefined attributes.\n\n\nYou can check whether a value is in a ``Choices`` object directly:\n\n.. code-block:: python\n\n >>> 1 in STATES\n True\n >>> 42 in STATES\n False\n\n\nYou can even iterate on a ``Choices`` objects to get choices as seen by Django:\n\n.. code-block:: python\n\n >>> for choice in STATES:\n ... print(choice)\n (1, 'Online')\n (2, 'Draft')\n (3, 'Offline')\n\nTo get all choice entries as given to the ``Choices`` object, you can use the ``entries``\nattribute:\n\n.. code-block:: python\n\n >>> for choice_entry in STATES.entries:\n ... print(choice_entry)\n ('ONLINE', 1, 'Online'),\n ('DRAFT', 2, 'Draft'),\n ('OFFLINE', 3, 'Offline'),\n\nOr the following dicts, using constants, values or display names, as keys, and the matching\nchoice entry as values:\n\n* ``STATES.constants``\n* ``STATES.values``\n* ``STATES.displays``\n\n\n.. code-block:: python\n\n >>> STATES.constants['ONLINE'] is STATES.for_constant('ONLINE')\n True\n >>> STATES.values[2] is STATES.for_value(2)\n True\n >>> STATES.displays['Offline'] is STATES.for_display('Offline')\n True\n\n\nIf you want these dicts to be ordered, you can pass the dict class to use to the\n``Choices`` constructor:\n\n.. code-block:: python\n\n from collections import OrderedDict\n STATES = Choices(\n ('ONLINE', 1, 'Online'),\n ('DRAFT', 2, 'Draft'),\n ('OFFLINE', 3, 'Offline'),\n dict_class = OrderedDict\n )\n\nSince version ``1.1``, the new ``OrderedChoices`` class is provided, that is exactly that:\na ``Choices`` using ``OrderedDict`` by default for ``dict_class``. You can directly import\nit from ``extended_choices``.\n\nYou can check if a constant, value, or display name exists:\n\n.. code-block:: python\n\n >>> STATES.has_constant('ONLINE')\n True\n >>> STATES.has_value(1)\n True\n >>> STATES.has_display('Online')\n True\n\nYou can create subsets of choices within the same ``Choices`` instance:\n\n.. code-block:: python\n\n >>> STATES.add_subset('NOT_ONLINE', ('DRAFT', 'OFFLINE',))\n >>> STATES.NOT_ONLINE\n (2, 'Draft')\n (3, 'Offline')\n\nNow, ``STATES.NOT_ONLINE`` is a real ``Choices`` instance, with a subset of the main ``STATES``\nconstants.\n\nYou can use it to generate choices for when you only want a subset of choices available:\n\n.. code-block:: python\n\n offline_state = models.PositiveSmallIntegerField(\n choices=STATES.NOT_ONLINE,\n default=STATES.DRAFT\n )\n\nAs the subset is a real ``Choices`` instance, you have the same attributes and methods:\n\n.. code-block:: python\n\n >>> STATES.NOT_ONLINE.for_constant('OFFLINE').value\n 3\n >>> STATES.NOT_ONLINE.for_value(1).constant\n Traceback (most recent call last):\n ...\n KeyError: 3\n >>> list(STATES.NOT_ONLINE.constants.keys())\n ['DRAFT', 'OFFLINE']\n >>> STATES.NOT_ONLINE.has_display('Online')\n False\n\nYou can create as many subsets as you want, reusing the same constants if needed:\n\n.. code-block:: python\n\n STATES.add_subset('NOT_OFFLINE', ('ONLINE', 'DRAFT'))\n\nIf you want to check membership in a subset you could do:\n\n.. code-block:: python\n\n def is_online(self):\n # it's an example, we could have just tested with STATES.ONLINE\n return self.state not in STATES.NOT_ONLINE\n\n\nIf you want to filter a queryset on values from a subset, you can use ``values``, but as ``values`` is a dict, ``keys()`` must be user:\n\n.. code-block:: python\n\n Content.objects.filter(state__in=STATES.NOT_ONLINE.values.keys())\n\nYou can add choice entries in many steps using ``add_choices``, possibly creating subsets at\nthe same time.\n\nTo construct the same ``Choices`` as before, we could have done:\n\n.. code-block:: python\n\n STATES = Choices()\n STATES.add_choices(\n ('ONLINE', 1, 'Online')\n )\n STATES.add_choices(\n ('DRAFT', 2, 'Draft'),\n ('OFFLINE', 3, 'Offline'),\n name='NOT_ONLINE'\n )\n\nYou can also pass the ``argument`` to the ``Choices`` constructor to create a subset with all\nthe choices entries added at the same time (it will call ``add_choices`` with the name and the\nentries)\n\nThe list of existing subset names is in the ``subsets`` attributes of the parent ``Choices``\nobject.\n\nIf you want a subset of the choices but not save it in the original ``Choices`` object, you can\nuse ``extract_subset`` instead of ``add_subset``\n\n.. code-block:: python\n\n >>> subset = STATES.extract_subset('DRAFT', 'OFFLINE')\n >>> subset\n (2, 'Draft')\n (3, 'Offline')\n\n\nAs for a subset created by ``add_subset``, you have a real ``Choices`` object, but not accessible\nfrom the original ``Choices`` object.\n\nNote that in ``extract_subset``, you pass the strings directly, not in a list/tuple as for the\nsecond argument of ``add_subset``.\n\nAdditional attributes\n---------------------\n\nEach tuple must contain three elements. But you can pass a dict as a fourth one and each entry of this dict will be saved as an attribute\nof the choice entry\n\n.. code-block:: python\n\n >>> PLANETS = Choices(\n ... ('EARTH', 'earth', 'Earth', {'color': 'blue'}),\n ... ('MARS', 'mars', 'Mars', {'color': 'red'}),\n ... )\n >>> PLANETS.EARTH.color\n 'blue'\n\n\nAuto display/value\n------------------\n\nWe provide two classes to eases the writing of your choices, attended you don't need translation on the display value.\n\nAutoChoices\n'''''''''''\n\nIt's the simpler and faster version: you just past constants and:\n\n- the value saved in database will be constant lower cased\n- the display value will be the constant with ``_`` replaced by spaces, and the first letter capitalized\n\n.. code-block:: python\n\n >>> from extended_choices import AutoChoices\n >>> PLANETS = AutoChoices('EARTH', 'MARS')\n >>> PLANETS.EARTH.value\n 'earth'\n >>> PLANETS.MARS.display\n 'Mars'\n\nIf you want to pass additional attributes, pass a tuple with the dict as a last element:\n\n\n.. code-block:: python\n\n >>> PLANETS = AutoChoices(\n ... ('EARTH', {'color': 'blue'}),\n ... ('MARS', {'color': 'red'}),\n ... )\n >>> PLANETS.EARTH.value\n 'earth'\n >>> PLANETS.EARTH.color\n 'blue'\n\n\nYou can change the transform function used to convert the constant to the value to be saved and the display value, by passing\n``value_transform`` and ``display_transform`` functions to the constructor.\n\n.. code-block:: python\n\n >>> PLANETS = AutoChoices(\n ... 'EARTH', 'MARS',\n ... value_transform=lambda const: 'planet_' + const.lower().\n ... display_transform=lambda const: 'Planet: ' + const.lower().\n ... )\n >>> PLANETS.EARTH.value\n 'planet_earth'\n >>> PLANETS.MARS.display\n 'Planet: mars'\n\n\nIf you find yourself repeting these transform functions you can have a base class that defines these function, as class attributes:\n\n.. code-block:: python\n\n >>> class MyAutoChoices(AutoChoices):\n ... value_transform=staticmethod(lambda const: const.upper())\n ... display_transform=staticmethod(lambda const: const.lower())\n\n >>> PLANETS = MyAutoChoices('EARTH', 'MARS')\n >>> PLANETS.EARTH.value\n 'EARTH'\n >>> PLANETS.MARS.dispay\n 'mars'\n\nOf course you can still override the functions by passing them to the constructor.\n\nIf you want, for an entry, force a specific value, you can do it by simply passing it as a second argument:\n\n.. code-block:: python\n\n >>> PLANETS = AutoChoices(\n ... 'EARTH',\n ... ('MARS', 'red-planet'),\n ... )\n >>> PLANETS.MARS.value\n 'red-planet'\n\nAnd then if you want to set the display, pass a third one:\n\n.. code-block:: python\n\n >>> PLANETS = AutoChoices(\n ... 'EARTH',\n ... ('MARS', 'red-planet', 'Red planet'),\n ... )\n >>> PLANETS.MARS.value\n 'red-planet'\n >>> PLANETS.MARS.display\n 'Red planet'\n\n\nTo force a display value but let the db value to be automatically computed, use ``None`` for the second argument:\n\n.. code-block:: python\n\n >>> PLANETS = AutoChoices(\n ... 'EARTH',\n ... ('MARS', None, 'Red planet'),\n ... )\n >>> PLANETS.MARS.value\n 'mars'\n >>> PLANETS.MARS.display\n 'Red planet'\n\n\nAutoDisplayChoices\n''''''''''''''''''\n\nIn this version, you have to define the value to save in database. The display value will be composed like in ``AutoChoices``\n\n.. code-block:: python\n\n >>> from extended_choices import AutoDisplayChoices\n >>> PLANETS = AutoDisplayChoices(\n ... ('EARTH', 1),\n ... ('MARS', 2),\n ... )\n >>> PLANETS.EARTH.value\n 1\n >>> PLANETS.MARS.display\n 'Mars'\n\nIf you want to pass additional attributes, pass a tuple with the dict as a last element:\n\n\n.. code-block:: python\n\n >>> PLANETS = AutoDisplayChoices(\n ... ('EARTH', 'earth', {'color': 'blue'}),\n ... ('MARS', 'mars', {'color': 'red'}),\n ... )\n >>> PLANETS.EARTH.value\n 1\n >>> PLANETS.EARTH.display\n 'Earth'\n >>> PLANETS.EARTH.color\n 'blue'\n\n\nAs in ``AutoChoices``, you can change the transform function for the value to display by passing ``display_transform`` to the\nconstructor.\n\nIf you want, for an entry, force a specific display, you can do it by simply passing it as a third argument:\n\n.. code-block:: python\n\n >>> PLANETS = AutoChoices(\n ... ('EARTH', 1),\n ... ('MARS', 2, 'Red planet'),\n ... )\n >>> PLANETS.MARS.display\n 'Red planet'\n\nNotes\n-----\n\n* You also have a very basic field (``NamedExtendedChoiceFormField```) in ``extended_choices.fields`` which accept constant names instead of values\n* Feel free to read the source to learn more about this little Django app.\n* You can declare your choices where you want. My usage is in the ``models.py`` file, just before the class declaration.\n\nCompatibility\n-------------\n\nThe version ``1.0`` provided a totally new API, and compatibility with the previous one\n(``0.4.1``) was removed in ``1.1``. The last version with the compatibility was ``1.0.7``.\n\nIf you need this compatibility, you can use a specific version by pinning it in your requirements.\n\nLicense\n-------\n\nAvailable under the BSD_ License. See the ``LICENSE`` file included\n\nPython/Django versions support\n------------------------------\n\n\n+----------------+-------------------------------------------------+\n| Django version | Python versions |\n+----------------+-------------------------------------------------+\n| 1.8, 1.9, 1.10 | 2.7, 3.4, 3.5 |\n+----------------+-------------------------------------------------+\n| 1.11 | 2.7, 3.4, 3.5, 3.6 |\n+----------------+-------------------------------------------------+\n| 2.0 | 3.4, 3.5, 3.6, 3.7 |\n+----------------+-------------------------------------------------+\n| 2.1, 2.2 | 3.5, 3.6, 3.7 |\n+----------------+-------------------------------------------------+\n\n\nTests\n-----\n\nTo run tests from the code source, create a virtualenv or activate one, install Django, then::\n\n python -m extended_choices.tests\n\n\nWe also provides some quick doctests in the code documentation. To execute them::\n\n python -m extended_choices\n\n\nNote: the doctests will work only in python version not display `u` prefix for strings.\n\n\nSource code\n-----------\n\nThe source code is available on Github_.\n\n\nDeveloping\n----------\n\nIf you want to participate in the development of this library, you'll need ``Django``\ninstalled in your virtualenv. If you don't have it, simply run::\n\n pip install -r requirements-dev.txt\n\nDon't forget to run the tests ;)\n\nFeel free to propose a pull request on Github_!\n\nA few minutes after your pull request, tests will be executed on TravisCi_ for all the versions\nof python and Django we support.\n\n\nDocumentation\n-------------\n\nYou can find the documentation on ReadTheDoc_\n\nTo update the documentation, you'll need some tools::\n\n pip install -r requirements-makedoc.txt\n\nThen go to the ``docs`` directory, and run::\n\n make html\n\nAuthor\n------\nWritten by Stephane \"Twidi\" Angel (http://twidi.com), originally for http://www.liberation.fr\n\n.. _choices: http://docs.djangoproject.com/en/1.5/ref/models/fields/#choices\n.. _Django: http://www.djangoproject.com/\n.. _Github: https://github.com/twidi/django-extended-choices\n.. _TravisCi: https://travis-ci.org/twidi/django-extended-choices/pull_requests\n.. _ReadTheDoc: http://django-extended-choices.readthedocs.org\n.. _BSD: http://opensource.org/licenses/BSD-3-Clause\n\n.. |PyPI Version| image:: https://img.shields.io/pypi/v/django-extended-choices.png\n :target: https://pypi.python.org/pypi/django-extended-choices\n :alt: PyPI Version\n.. |Build Status| image:: https://travis-ci.org/twidi/django-extended-choices.png\n :target: https://travis-ci.org/twidi/django-extended-choices\n :alt: Build Status on Travis CI\n.. |Doc Status| image:: https://readthedocs.org/projects/django-extended-choices/badge/?version=latest\n :target: http://django-extended-choices.readthedocs.org\n :alt: Documentation Status on ReadTheDoc\n\n.. image:: https://d2weczhvl823v0.cloudfront.net/twidi/django-extended-choices/trend.png\n :alt: Bitdeli badge\n :target: https://bitdeli.com/free\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/twidi/django-extended-choices", "keywords": "redis,orm,jobs,queue", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-extended-choices", "package_url": "https://pypi.org/project/django-extended-choices/", "platform": "any", "project_url": "https://pypi.org/project/django-extended-choices/", "project_urls": { "Homepage": "https://github.com/twidi/django-extended-choices" }, "release_url": "https://pypi.org/project/django-extended-choices/1.3.3/", "requires_dist": [ "six", "django; extra == 'dev'", "django; extra == 'doc'", "sphinx; extra == 'doc'", "sphinxcontrib-napoleon; extra == 'doc'", "sphinx-rtd-theme; extra == 'doc'" ], "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "summary": "Little helper application to improve django choices (for fields)", "version": "1.3.3" }, "last_serial": 5152080, "releases": { "0.3.0": [ { "comment_text": "", "digests": { "md5": "97e17d237a6ab4382989dd8ea2f7ee12", "sha256": "4565a9713e50b95947a1727754838c6220e30334969b68a491c4b5ab67b51cc7" }, "downloads": -1, "filename": "django-extended-choices-0.3.0.tar.gz", "has_sig": false, "md5_digest": "97e17d237a6ab4382989dd8ea2f7ee12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18300, "upload_time": "2013-07-22T03:28:32", "url": "https://files.pythonhosted.org/packages/04/70/f4e1488515894d29ff1daed59f5aefe38ce286abf53f90aa9501902ad8c6/django-extended-choices-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "08e9baef0f391945d20e37aa5556cd9d", "sha256": "67acee65350d13b3efe061f16cda5a4baeeae466820f46fec1eaace6eb70acb7" }, "downloads": -1, "filename": "django-extended-choices-0.3.1.tar.gz", "has_sig": false, "md5_digest": "08e9baef0f391945d20e37aa5556cd9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21316, "upload_time": "2015-04-02T23:47:25", "url": "https://files.pythonhosted.org/packages/e5/e3/f5d570967412075d49d99ca96c519559db9c91411f69924b6f54cd9e8506/django-extended-choices-0.3.1.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "a25be9fdcfcaea5a337156ade6946d26", "sha256": "690c116694675a217497df9ed8f92eab620b33d8020ba368f500820f45fe24e6" }, "downloads": -1, "filename": "django-extended-choices-0.4.1.tar.gz", "has_sig": false, "md5_digest": "a25be9fdcfcaea5a337156ade6946d26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21920, "upload_time": "2015-04-03T01:06:35", "url": "https://files.pythonhosted.org/packages/bd/17/e04d2f0b0b5de53bc952627afdce44e99605006d99e254469c56e317641c/django-extended-choices-0.4.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "0f47f14ed4ed35818b2c36724cf2f028", "sha256": "0add4b47112c193b675a33edc7a944a1645f9c269274b01fb3ee906660000b88" }, "downloads": -1, "filename": "django-extended-choices-1.0.tar.gz", "has_sig": false, "md5_digest": "0f47f14ed4ed35818b2c36724cf2f028", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33705, "upload_time": "2015-05-02T20:32:27", "url": "https://files.pythonhosted.org/packages/85/35/4999234a63504faf97d692742f979f97bfd8b81df21fd790c21fa77f9ce0/django-extended-choices-1.0.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "f72e2fb37fe649125ee78a6c648a1819", "sha256": "162d23033aceb6d64016f8b2e0a71a78f15bbcda8b682e99a14c3b9228154b7c" }, "downloads": -1, "filename": "django-extended-choices-1.0.2.tar.gz", "has_sig": false, "md5_digest": "f72e2fb37fe649125ee78a6c648a1819", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20137, "upload_time": "2015-05-02T21:30:45", "url": "https://files.pythonhosted.org/packages/42/3e/a79f1211a60f2f46fcc16ceb827d033aea72062fa742b4e677e3075a8bc1/django-extended-choices-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "98eb3b55263a089c373d64b873d37b2f", "sha256": "375764ce5956dcfe5d2c1b28f8cc36288af6a0366a01d161e40129b8885693c2" }, "downloads": -1, "filename": "django-extended-choices-1.0.3.tar.gz", "has_sig": false, "md5_digest": "98eb3b55263a089c373d64b873d37b2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20665, "upload_time": "2015-05-05T12:46:36", "url": "https://files.pythonhosted.org/packages/b2/47/a28b71170e341ae9518e00de27e8cc3d7c6235e81aaa4ceb51d70c1618a4/django-extended-choices-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "0a626d92d2dc11109f54ad1c3cc2b30d", "sha256": "11f2c8b899a4364ed57a26855e6fb8fde014f9f90981852db19aa043caf8d9ed" }, "downloads": -1, "filename": "django-extended-choices-1.0.4.tar.gz", "has_sig": false, "md5_digest": "0a626d92d2dc11109f54ad1c3cc2b30d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21049, "upload_time": "2015-05-05T16:12:25", "url": "https://files.pythonhosted.org/packages/77/bc/ffa10d1cde7ff8e9dc12d184fc19bdcb3aec822a47bf487c187f2c055940/django-extended-choices-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "4c0978f49ddab91c32c20ee916c1e201", "sha256": "fd10287a834773878b1e68af3f52d36106366813fddac40fca351f3f0d2f0499" }, "downloads": -1, "filename": "django_extended_choices-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "4c0978f49ddab91c32c20ee916c1e201", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 28297, "upload_time": "2015-10-14T21:23:48", "url": "https://files.pythonhosted.org/packages/20/ff/521f51954581588cd111b436877fd53eb1bc1542bc1fb8124e686f0b8edf/django_extended_choices-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b68e894bfc797f722d608e66ba50333", "sha256": "e370f4a5d473c0a5d0b6bbd0f99f19619434ecfa3af76e83f236e397d4f4a92c" }, "downloads": -1, "filename": "django-extended-choices-1.0.5.tar.gz", "has_sig": false, "md5_digest": "7b68e894bfc797f722d608e66ba50333", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26405, "upload_time": "2015-10-14T21:23:43", "url": "https://files.pythonhosted.org/packages/28/e0/b35bde83c2ecd436736a8a61cedae55a2162a2b67d3c34ab177d122b8317/django-extended-choices-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "4b3799e756c74f0aad2d2a03c0236ab8", "sha256": "e1f10774ba1a4bdb289186987255585836e2e22233d305ce82f74e45241f882d" }, "downloads": -1, "filename": "django_extended_choices-1.0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "4b3799e756c74f0aad2d2a03c0236ab8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 28237, "upload_time": "2016-02-12T14:46:13", "url": "https://files.pythonhosted.org/packages/ff/f6/c010feea6b48526c26b798d2f601a4bf28fd20cdd429eae2890e4f127a86/django_extended_choices-1.0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b706ee3331c31627e1fe5ceada93b9a3", "sha256": "b7ee522b265a271b96d273cacbc457324dce971535ca72ef74f9118a7412c360" }, "downloads": -1, "filename": "django-extended-choices-1.0.6.tar.gz", "has_sig": false, "md5_digest": "b706ee3331c31627e1fe5ceada93b9a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25282, "upload_time": "2016-02-12T14:46:06", "url": "https://files.pythonhosted.org/packages/65/c6/b20f5d5bbafc0e51def1b9a99e135cd9aa0ff8398e77fe43fbe31bf0ae1c/django-extended-choices-1.0.6.tar.gz" } ], "1.0.6.dev1": [ { "comment_text": "", "digests": { "md5": "0d0851a47cf6bfdcee7ec2018dcdbb2b", "sha256": "c97567d0924d536576487d5b33f03289552a2a23625160797d0414eeae1f0354" }, "downloads": -1, "filename": "django_extended_choices-1.0.6.dev1-py2-none-any.whl", "has_sig": false, "md5_digest": "0d0851a47cf6bfdcee7ec2018dcdbb2b", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 28310, "upload_time": "2016-02-12T11:03:04", "url": "https://files.pythonhosted.org/packages/51/5a/4dc3b83bb5f5cba8ac05a3795bc487b6d23f8ab7b9fbde9c75fc187bf7c3/django_extended_choices-1.0.6.dev1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "790b8e8e9e5456fef53ea87facbe9a9f", "sha256": "4665e4c1165329833369f301a14d40baa8b9440b251aaee691816fc5ea61ab1a" }, "downloads": -1, "filename": "django-extended-choices-1.0.6.dev1.tar.gz", "has_sig": false, "md5_digest": "790b8e8e9e5456fef53ea87facbe9a9f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25291, "upload_time": "2016-02-12T11:02:56", "url": "https://files.pythonhosted.org/packages/85/e6/e081319c81e60ab258837152ef5577291bfe54c8a0b9b66e8059ac520d0c/django-extended-choices-1.0.6.dev1.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "225140a196366e2b20fc3c79e7d542e5", "sha256": "6624baa1017e77f16f5f5b5b140df82899a97608b9da0f4c0300688c56e05b9e" }, "downloads": -1, "filename": "django_extended_choices-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "225140a196366e2b20fc3c79e7d542e5", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 28386, "upload_time": "2016-03-14T14:59:28", "url": "https://files.pythonhosted.org/packages/d9/a7/fa0169e2ad675c5d54bbe272af23bec98c697dc4cfd5cb97b96583e36002/django_extended_choices-1.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "152ec6046ef353243da5be78134b3673", "sha256": "21c99d102ee31af66cb47297dc0b49ddaf8c55e24f1b4c1f78414595891f1cb3" }, "downloads": -1, "filename": "django-extended-choices-1.0.7.tar.gz", "has_sig": false, "md5_digest": "152ec6046ef353243da5be78134b3673", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25511, "upload_time": "2016-03-14T14:59:14", "url": "https://files.pythonhosted.org/packages/a0/99/e026e43cd8cc49051fd677c96e38d3f6ab36b7d55eeaa30263c8bb7debf8/django-extended-choices-1.0.7.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "06a0688ed4dbd8f5dfae49c4a2bbc46c", "sha256": "1543aee7cadc3c6d3aaf2f99bdd4f28b10f0b6fa41fe7059df72266e3d889eb5" }, "downloads": -1, "filename": "django_extended_choices-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "06a0688ed4dbd8f5dfae49c4a2bbc46c", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 27148, "upload_time": "2016-11-03T17:20:04", "url": "https://files.pythonhosted.org/packages/27/de/b9f5d4711d3de9e9544cc158728704824c192ccbd92a04526ab2ccbec36f/django_extended_choices-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a00c332bfd0f263ba690bf5eed59299e", "sha256": "fc9ca46d4fa25331939c37aa381f9efd01b288cff88a3fea6cb2f7d1c4efbfe0" }, "downloads": -1, "filename": "django-extended-choices-1.1.tar.gz", "has_sig": false, "md5_digest": "a00c332bfd0f263ba690bf5eed59299e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24273, "upload_time": "2016-11-03T17:20:00", "url": "https://files.pythonhosted.org/packages/b5/c3/60edd38fbaeeb4b4d4703fe2b713de32203dcdfa4a46f3603ab2e83b2e6a/django-extended-choices-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "c1bdb953effd35822103bccac1891e36", "sha256": "6cafeefd0586c2a536b662914c9be3a17857adec05f737faa17fb313626c7dbb" }, "downloads": -1, "filename": "django_extended_choices-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c1bdb953effd35822103bccac1891e36", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 27185, "upload_time": "2016-11-03T18:00:29", "url": "https://files.pythonhosted.org/packages/8f/f6/bc7c7879bfe1f1f731561c9760ae3266da7f0af686a0289eb93dfdb2fe6c/django_extended_choices-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f252187ca21692edaa8c2dbec8ec069f", "sha256": "5a4d1b0a1af3a8a1257b4f061ebf8f685437de68644bc0bd48ec616e48571d51" }, "downloads": -1, "filename": "django-extended-choices-1.1.1.tar.gz", "has_sig": false, "md5_digest": "f252187ca21692edaa8c2dbec8ec069f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24288, "upload_time": "2016-11-03T18:00:26", "url": "https://files.pythonhosted.org/packages/a2/13/c335ece473af3b28fb87149ee4cc4b0b8ea0040471bc22c3eebc19d8f508/django-extended-choices-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "9bc0e98c3f4bb3d1dc74b00087d7509f", "sha256": "2ae2895cf0a73b673b6747b11b7707bfe35b761b31ecb5782a44361b9138e0ef" }, "downloads": -1, "filename": "django-extended-choices-1.1.2.tar.gz", "has_sig": false, "md5_digest": "9bc0e98c3f4bb3d1dc74b00087d7509f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21733, "upload_time": "2017-09-20T10:55:49", "url": "https://files.pythonhosted.org/packages/3b/48/1acf5bb24577d46c86c3550b105e2ca8b61a4729561d31fe0adc058b42ce/django-extended-choices-1.1.2.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "f8ac16375677c0f166f2d08a1e2f1ee1", "sha256": "e9a98ea0e6f6bc2cad09e41adb06202faf11c3ad129a1b641291c14f4a9a43b6" }, "downloads": -1, "filename": "django_extended_choices-1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f8ac16375677c0f166f2d08a1e2f1ee1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 31657, "upload_time": "2018-02-01T16:24:13", "url": "https://files.pythonhosted.org/packages/16/be/19115b0466ebd02f2f22ec77678327cd329213e0ebefe826890ddaf0c304/django_extended_choices-1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aea19e3aa5eae0246a0fa61c19083e20", "sha256": "dc2510225136f3a85b594c155c8e3b574850edd79f945c942ef2efac2dd457cc" }, "downloads": -1, "filename": "django-extended-choices-1.2.tar.gz", "has_sig": false, "md5_digest": "aea19e3aa5eae0246a0fa61c19083e20", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 24699, "upload_time": "2018-02-01T16:24:15", "url": "https://files.pythonhosted.org/packages/6e/f6/e285dd0c4e97a602213a7628b2e2536240bb2ac79d4b315ec72401d55f54/django-extended-choices-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "83a38031349312ebb240edf9e57d7853", "sha256": "8d239e48351230eee68805d698e0f5a61c5aba625242785b6444972058528259" }, "downloads": -1, "filename": "django_extended_choices-1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "83a38031349312ebb240edf9e57d7853", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 33213, "upload_time": "2018-02-17T22:42:39", "url": "https://files.pythonhosted.org/packages/7d/79/99aa992f2ed6b4653b01c8789310a570b2594c681a65d958623f3b67f25a/django_extended_choices-1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "40c60c2591287d1337cd42038aafccf7", "sha256": "a60071f8381e449da24273775e6833e6d7a6f388bed615a3a4467016cb4d76f5" }, "downloads": -1, "filename": "django-extended-choices-1.3.tar.gz", "has_sig": false, "md5_digest": "40c60c2591287d1337cd42038aafccf7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 28856, "upload_time": "2018-02-17T22:42:41", "url": "https://files.pythonhosted.org/packages/de/12/01823e8bebbe6c6f8130de8e6bc73211c950de181d297e045553b50e286a/django-extended-choices-1.3.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "cf37ed0d50c9d08ccd11dcce40947a0f", "sha256": "dd1764015006cb602659854f43244773be466efab55fad018fadaff3531a7480" }, "downloads": -1, "filename": "django_extended_choices-1.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cf37ed0d50c9d08ccd11dcce40947a0f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 33287, "upload_time": "2019-01-17T14:48:05", "url": "https://files.pythonhosted.org/packages/85/d4/24a10cb81f1ea9b072e5995ea67540501bfd30e06fd585b80d36a1bd1230/django_extended_choices-1.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e039518b3a24be3527895e0ae6f25f39", "sha256": "99eaabc3deb609f3d75ec0cb589b97f29b2fbdc148246ce23d87c554a3e3673f" }, "downloads": -1, "filename": "django-extended-choices-1.3.1.tar.gz", "has_sig": false, "md5_digest": "e039518b3a24be3527895e0ae6f25f39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 26113, "upload_time": "2019-01-17T14:48:07", "url": "https://files.pythonhosted.org/packages/6d/15/3b3810e715cf40e39ddbcdfa6e96607f83fae9bf5e009132613093ad0279/django-extended-choices-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "ae47b7e488f6ae74103038f124f10178", "sha256": "7d95674d593d4ccf5c6393e83a787d8e55377e3efd88fa0ff5dc29f6f81d9a49" }, "downloads": -1, "filename": "django_extended_choices-1.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ae47b7e488f6ae74103038f124f10178", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 33382, "upload_time": "2019-02-25T17:55:13", "url": "https://files.pythonhosted.org/packages/dd/df/acd49d132e67eb72e4e0ffac4180ef7854d2c79e31647f679b76cfd745c9/django_extended_choices-1.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "471d9c6224ee782618703c1150decf98", "sha256": "22c4d500d6ded58b270c4b314c82b894649011c4205935878875219048b6181d" }, "downloads": -1, "filename": "django-extended-choices-1.3.2.tar.gz", "has_sig": false, "md5_digest": "471d9c6224ee782618703c1150decf98", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 26151, "upload_time": "2019-02-25T17:55:15", "url": "https://files.pythonhosted.org/packages/9e/2d/887822f98766a2dc589e11da8150229b54412008950b30538e33da4966d7/django-extended-choices-1.3.2.tar.gz" } ], "1.3.3": [ { "comment_text": "", "digests": { "md5": "99776ae9d39ca56fca8e9930dfd85476", "sha256": "609cafc2feaf352cb92b3978a6e71fcb267dd2d3281ffa964d736b9bf71ec34b" }, "downloads": -1, "filename": "django_extended_choices-1.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "99776ae9d39ca56fca8e9930dfd85476", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 33390, "upload_time": "2019-04-16T21:03:18", "url": "https://files.pythonhosted.org/packages/58/ed/6685229dbeaa370a65bc84f51841d97aab4cce311379f2ca1b62293acbcd/django_extended_choices-1.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfcf9b87c1381eea3cc5785ce20fcc2b", "sha256": "13c1edfb5fe8da112720f1b006866aa7142e0f62a828728e5afa638da5980387" }, "downloads": -1, "filename": "django-extended-choices-1.3.3.tar.gz", "has_sig": false, "md5_digest": "cfcf9b87c1381eea3cc5785ce20fcc2b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 26156, "upload_time": "2019-04-16T21:03:20", "url": "https://files.pythonhosted.org/packages/62/30/d77e437af6678c69cbf0eb9605f85b7ef70f80cfccbd6b40a0239802fbf2/django-extended-choices-1.3.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "99776ae9d39ca56fca8e9930dfd85476", "sha256": "609cafc2feaf352cb92b3978a6e71fcb267dd2d3281ffa964d736b9bf71ec34b" }, "downloads": -1, "filename": "django_extended_choices-1.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "99776ae9d39ca56fca8e9930dfd85476", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 33390, "upload_time": "2019-04-16T21:03:18", "url": "https://files.pythonhosted.org/packages/58/ed/6685229dbeaa370a65bc84f51841d97aab4cce311379f2ca1b62293acbcd/django_extended_choices-1.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfcf9b87c1381eea3cc5785ce20fcc2b", "sha256": "13c1edfb5fe8da112720f1b006866aa7142e0f62a828728e5afa638da5980387" }, "downloads": -1, "filename": "django-extended-choices-1.3.3.tar.gz", "has_sig": false, "md5_digest": "cfcf9b87c1381eea3cc5785ce20fcc2b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 26156, "upload_time": "2019-04-16T21:03:20", "url": "https://files.pythonhosted.org/packages/62/30/d77e437af6678c69cbf0eb9605f85b7ef70f80cfccbd6b40a0239802fbf2/django-extended-choices-1.3.3.tar.gz" } ] }