{ "info": { "author": "Rapha\u00ebl Barrois", "author_email": "raphael.barrois+extypes@polytechnique.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "extypes\n=======\n\nThis project provides a few enhanced types for Python:\n\n* A \"constrained set\" (ordered or not)\n* That's all for now.\n\n\nIt also provides extensions for Django (1.7 - 1.10).\n\n\nIt has been fully tested with all versions of Python from 2.7 to 3.4; and is distributed under the BSD license.\n\n\nLinks\n-----\n\n* Package on PyPI: http://pypi.python.org/pypi/extypes\n* Repository and issues on GitHub: http://github.com/rbarrois/extypes\n* Doc on https://extypes.readthedocs.io/ (not available yet)\n\n\nGetting started\n---------------\n\nIntall the package from PyPI, using pip:\n\n.. code-block:: sh\n\n $ pip install extypes\n\nOr from GitHub:\n\n.. code-block:: sh\n\n $ git clone git://github.com/rbarrois/extypes\n $ cd extypes\n $ python setup.py install\n\n\nTo check that everything went fine, fire a Python shell and import ``extypes``:\n\n\n.. code-block:: python\n\n import extypes\n\n\nIntroduction\n------------\n\n``extypes`` provides a new type, ``ConstrainedSet``.\n\nThis is a ``set()``-like object, but values can only be taken from a\nspecific set of options.\n\n\nA ``ConstrainedSet`` is declared in a manner very similar to ``collections.namedtuple``:\n\n.. code-block:: python\n\n import extypes\n Foods = extypes.ConstrainedSet(['eggs', 'spam', 'bacon'])\n\nThis will declare a new class, ``Foods``, whose instances are ``ConstrainedSet`` that only accept\noptions among ``'eggs'``, ``'spam'`` and ``'bacon'``.\n\n\nThose objects can be used as simple ``set()`` objects:\n\n.. code-block:: pycon\n\n >>> import extypes\n >>> Foods = extypes.ConstrainedSet(['eggs', 'spam', 'bacon'])\n >>> meat = Foods(['spam', 'bacon'])\n >>> fresh = Foods(['bacon', 'eggs'])\n >>> 'eggs' in meat\n False\n >>> 'eggs' in fresh\n True\n >>> meat & fresh\n Foods(['bacon'])\n\nAs a ``set()`` object, they are mutable:\n\n.. code-block:: pycon\n\n >>> import extypes\n >>> Foods = extypes.ConstrainedSet(['eggs', 'spam', 'bacon'])\n >>> meat = Foods(['spam', 'bacon'])\n >>> meat.remove('spam')\n >>> meat\n Foods(['bacon'])\n\nAnd iterable:\n\n.. code-block:: pycon\n\n >>> import extypes\n >>> Foods = extypes.ConstrainedSet(['eggs', 'spam', 'bacon'])\n >>> meat = Foods(['bacon', 'spam'])\n >>> list(meat)\n ['spam', 'bacon']\n\nBut only valid options are accepted:\n\n.. code-block:: pycon\n\n >>> Foods = extypes.ConstrainedSet(['eggs', 'spam', 'bacon'])\n >>> greens = Foods(['spinach']\n Traceback (most recent call last):\n ...\n ValueError: Invalid keys ['spinach'], please use a value in ['spam', 'bacon', 'eggs'].\n\n\nExtensions: Django\n------------------\n\n``extypes`` also provides custom fields for Django - compatible with Django 1.7 and upwards.\n\n.. code-block:: python\n\n from django.db import models\n import extypes\n import extypes.django\n\n Foods = extypes.ConstrainedSet(['eggs', 'spam', 'bacon'])\n\n class Fridge(models.Model):\n contents = extypes.django.SetField(choices=Foods)\n\nThis field will simply behave as a simple ``ConstrainedSet``.\n\n.. code-block:: pycon\n\n >>> fridge = Fridge(contents=['bacon'])\n >>> fridge.contents.add('eggs')\n >>> fridge.save()\n\n\nIt is displayed in forms as a multiple choice field.\nIn the database, it is saved as a ``|``-separated list of enabled values\n(in the above example, the field is stored as ``|eggs|bacon|``).\n\n.. note:: ``extypes.django.SetField`` can also receive a choice-like list:\n\n .. code-block:: python\n\n class Fridge(models.Model):\n contents = extypes.django.SetField(choices=[('eggs', \"Eggs\"), ('spam', \"Spam\"), ('bacon', \"Yummy bacon\")])\n\n\n In that case, the field definition is available at ``Fridge.contents.set_definition``:\n\n .. code-block:: pycon\n\n >>> f = Fridge(contents=Fridge.contents.set_definition(['eggs', 'spam']))\n >>> f.get_contents_display()\n \"Eggs, Spam\"\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/rbarrois/extypes", "keywords": "types,datastructure,structure", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "extypes", "package_url": "https://pypi.org/project/extypes/", "platform": "", "project_url": "https://pypi.org/project/extypes/", "project_urls": { "Homepage": "https://github.com/rbarrois/extypes" }, "release_url": "https://pypi.org/project/extypes/2.0.0/", "requires_dist": null, "requires_python": "", "summary": "Enhancements over Python's standard types", "version": "2.0.0" }, "last_serial": 4839236, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "0e69b3da17fd73269b6ddbdc2bffb556", "sha256": "4dab07d9ddcc519a4e140ba401dc3970556bda446ca817250c41339c352e6d26" }, "downloads": -1, "filename": "extypes-0.1.0.tar.gz", "has_sig": false, "md5_digest": "0e69b3da17fd73269b6ddbdc2bffb556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5436, "upload_time": "2014-11-16T19:02:38", "url": "https://files.pythonhosted.org/packages/de/fe/3f5ee325fb30a9b19e28b3c9da41517098d5fa88c4617e57177c51c3b73a/extypes-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c29192659dbb2dacd88eaa06194252b1", "sha256": "3892b8fab6d1b03bfd33118070d3947e84c3fc88f155c4699db2dca4fb8aa4aa" }, "downloads": -1, "filename": "extypes-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c29192659dbb2dacd88eaa06194252b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5619, "upload_time": "2015-03-16T23:06:37", "url": "https://files.pythonhosted.org/packages/23/af/7c9b3655333ab08c40cbc4299cd9581958125058f800b08b475e973b38cc/extypes-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "4566e4c3d3b770fe3697b40c9b69fc5c", "sha256": "2583f77d4c4358a007ef9adce48d8f1f21ba758aad673f29b3ac96a4c5d8850d" }, "downloads": -1, "filename": "extypes-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "4566e4c3d3b770fe3697b40c9b69fc5c", "packagetype": "bdist_wheel", "python_version": "3.3", "requires_python": null, "size": 6360, "upload_time": "2015-08-04T20:29:06", "url": "https://files.pythonhosted.org/packages/26/ca/59c59cc13e373bf891db73b3b84a88d1380e272fae91ffc48aa12a48d915/extypes-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86be5e060b53c9be43f012965f1def6b", "sha256": "619f20441360e467f08147063768f9a0f611a79a5c3126669302820ff4074049" }, "downloads": -1, "filename": "extypes-0.2.1.tar.gz", "has_sig": false, "md5_digest": "86be5e060b53c9be43f012965f1def6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5620, "upload_time": "2015-03-17T00:04:34", "url": "https://files.pythonhosted.org/packages/f7/f1/2544ba28de2a9a45c0818113aaee46baf9c402bc9c851e43f1b122098dd6/extypes-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "5c7572a3f6675a4fda76577506eed9c2", "sha256": "e01e981edab9843c42f3e0509a0162bf0cd0276265f9f6d7f851618d432dd1b0" }, "downloads": -1, "filename": "extypes-0.2.2.tar.gz", "has_sig": false, "md5_digest": "5c7572a3f6675a4fda76577506eed9c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5653, "upload_time": "2015-12-17T12:45:18", "url": "https://files.pythonhosted.org/packages/1c/db/42d79876edb863ed57b71e3c0651a6f4a04d1dd50d51006a447c0c336f34/extypes-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f24fdd5ba6eb07193b4652ccfdaaeb14", "sha256": "43c4cafd4d8e817b684018569ec4dff51922ae33ee4de61b3d7da62e7f720573" }, "downloads": -1, "filename": "extypes-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "f24fdd5ba6eb07193b4652ccfdaaeb14", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 6225, "upload_time": "2016-03-12T11:34:12", "url": "https://files.pythonhosted.org/packages/68/f5/8869fa6fde99f84611f33e67c12e2deb2fc5406badaa1c6445dbeda55275/extypes-0.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ccab70bfde1bff63d361a5875584fa17", "sha256": "c073a03425accbb9dbc367d9d66871691a9dd9ba7020b0c5d3b074c9b452501d" }, "downloads": -1, "filename": "extypes-0.2.3.tar.gz", "has_sig": false, "md5_digest": "ccab70bfde1bff63d361a5875584fa17", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5502, "upload_time": "2016-03-12T11:34:00", "url": "https://files.pythonhosted.org/packages/43/1a/ad22179e771417e27b70e8a62fad1468df3305ce659938dcf1c36298f5e7/extypes-0.2.3.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "0c7782754352042d8c45be8c926c8fad", "sha256": "dbd4598a67df242bd14c0cd8e11d736fc9a6d09730fd7401a9dfbe0b91d5a40f" }, "downloads": -1, "filename": "extypes-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0c7782754352042d8c45be8c926c8fad", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 6406, "upload_time": "2016-08-09T17:20:22", "url": "https://files.pythonhosted.org/packages/3a/95/de9af3f5ac9067b043e6bd3311eab34d6338a6537bc5d964fef1b75ad265/extypes-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca6e8533325f47364f2a5c793b040ca3", "sha256": "bd94a327aacbca0f31bf963364183b966f35f3c1ef9823be61e993bcc1271e2f" }, "downloads": -1, "filename": "extypes-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ca6e8533325f47364f2a5c793b040ca3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5775, "upload_time": "2016-08-09T17:20:20", "url": "https://files.pythonhosted.org/packages/ab/36/30aeb1af739faedc546f74464e296fe6d9cdaf4d08944d938317bb315bba/extypes-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "9cf64352e1ba76d935b8c36a7658509d", "sha256": "34e3ac90b0d1b7f2d68d851ed1ba0bd94eaad06b07c74adb4b6cbaefed28346e" }, "downloads": -1, "filename": "extypes-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9cf64352e1ba76d935b8c36a7658509d", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 6441, "upload_time": "2016-08-10T13:53:04", "url": "https://files.pythonhosted.org/packages/77/a4/a2eefad5012190950bce53d8f59f5a7072f7dd45bd52b10bd23324c2d34f/extypes-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15b29b4456efb7d394223df9e497a610", "sha256": "e5032caf22fe249f146c429bbd39e78380e3713242edc6ce38f4e47fa13d171d" }, "downloads": -1, "filename": "extypes-1.0.1.tar.gz", "has_sig": false, "md5_digest": "15b29b4456efb7d394223df9e497a610", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5808, "upload_time": "2016-08-10T13:53:01", "url": "https://files.pythonhosted.org/packages/2c/bb/c9cd89854dbee776d81ee0c356a6b44eb8a9ba18caaebc122b1eeb80ce92/extypes-1.0.1.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "dd9acdc32c82c80d6c5a1146ed25ecc8", "sha256": "a58468eee18e1608bff86d28fbe900b6a1af210eea026003ab7b41b1874dcba0" }, "downloads": -1, "filename": "extypes-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dd9acdc32c82c80d6c5a1146ed25ecc8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6887, "upload_time": "2019-02-19T10:45:29", "url": "https://files.pythonhosted.org/packages/b5/fc/9fcaca281c7c90520656f8fdbcb1a6efa65c9a53c46385ec233a0458ae32/extypes-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f86006382c42b930e152458c6540b7c6", "sha256": "10bf455305c7e4a54bd9a5fe04a148fa2b6e33d1a7c3ce937d239fb1907f34b0" }, "downloads": -1, "filename": "extypes-2.0.0.tar.gz", "has_sig": false, "md5_digest": "f86006382c42b930e152458c6540b7c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11459, "upload_time": "2019-02-19T10:45:31", "url": "https://files.pythonhosted.org/packages/7f/7b/4ecf5dd02431375d4906ae58cd9bd5af1d1e6a5239f6c44fd65aec5d99e9/extypes-2.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dd9acdc32c82c80d6c5a1146ed25ecc8", "sha256": "a58468eee18e1608bff86d28fbe900b6a1af210eea026003ab7b41b1874dcba0" }, "downloads": -1, "filename": "extypes-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dd9acdc32c82c80d6c5a1146ed25ecc8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6887, "upload_time": "2019-02-19T10:45:29", "url": "https://files.pythonhosted.org/packages/b5/fc/9fcaca281c7c90520656f8fdbcb1a6efa65c9a53c46385ec233a0458ae32/extypes-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f86006382c42b930e152458c6540b7c6", "sha256": "10bf455305c7e4a54bd9a5fe04a148fa2b6e33d1a7c3ce937d239fb1907f34b0" }, "downloads": -1, "filename": "extypes-2.0.0.tar.gz", "has_sig": false, "md5_digest": "f86006382c42b930e152458c6540b7c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11459, "upload_time": "2019-02-19T10:45:31", "url": "https://files.pythonhosted.org/packages/7f/7b/4ecf5dd02431375d4906ae58cd9bd5af1d1e6a5239f6c44fd65aec5d99e9/extypes-2.0.0.tar.gz" } ] }