{ "info": { "author": "Mattias Linnap", "author_email": "mattias@linnap.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "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", "Topic :: Database", "Topic :: Internet :: WWW/HTTP" ], "description": "# django-partial-index\n\n[![Build Status](https://api.travis-ci.org/mattiaslinnap/django-partial-index.svg?branch=master)](https://travis-ci.org/mattiaslinnap/django-partial-index)\n[![PyPI version](https://badge.fury.io/py/django-partial-index.svg)](https://pypi.python.org/pypi/django-partial-index/)\n\nPartial (sometimes also called filtered or conditional) index support for Django.\n\nWith partial indexes, only some subset of the rows in the table have corresponding index entries.\nThis can be useful for optimizing index size and query speed, and to add unique constraints for only selected rows.\n\nMore info on partial indexes:\n\n* https://www.postgresql.org/docs/current/static/indexes-partial.html\n* https://sqlite.org/partialindex.html\n\n\n## Partial indexes now included in Django\n\nSince the release of [Django 2.2 LTS](https://docs.djangoproject.com/en/2.2/releases/2.2/) in April 2019,\npartial indexes are now supported by standard Django.\n\nThese are called [index conditions](https://docs.djangoproject.com/en/2.2/ref/models/indexes/#condition) there.\n\nThe django-partial-index package will live on in maintenance mode.\n\nIt can be useful if you are maintaining a project on and older version of Django, or wish to migrate django-partial-index indexes to Django 2.2 style on your own schedule.\n\n## Install\n\n`pip install django-partial-index`\n\nRequirements:\n\n* Django 1.11, 2.0, 2.1 or 2.2,\n* Python 2.7, 3.4, 3.5, 3.6 or 3.7 (as supported by the Django version),\n* PostgreSQL or SQLite database backend. (Partial indexes are not supported on MySQL, and require major hackery on Oracle.)\n\nAll Python versions which Django supports are also supported by this package. These are:\n\n* Django 1.11 - Python 2.7 and 3.4 - 3.7,\n* Django 2.0 - Python 3.4 - 3.7,\n* Django 2.1 - Python 3.5 - 3.7,\n* Django 2.2 - Python 3.5 - 3.7.\n\n\n## Usage\n\nSet up a PartialIndex and insert it into your model's class-based Meta.indexes list:\n\n```python\nfrom partial_index import PartialIndex, PQ\n\nclass MyModel(models.Model):\n class Meta:\n indexes = [\n PartialIndex(fields=['user', 'room'], unique=True, where=PQ(deleted_at__isnull=True)),\n PartialIndex(fields=['created_at'], unique=False, where=PQ(is_complete=False)),\n ]\n```\n\nThe `PQ` uses the exact same syntax and supports all the same features as Django's `Q` objects ([see Django docs for a full tutorial](https://docs.djangoproject.com/en/1.11/topics/db/queries/#complex-lookups-with-q-objects)). It is provided for compatibility with Django 1.11.\n\nOf course, these (unique) indexes could be created by a handwritten [RunSQL migration](https://docs.djangoproject.com/en/1.11/ref/migration-operations/#runsql).\nBut the constraints are part of the business logic, and best kept close to the model definitions.\n\n### Partial unique constraints\n\nWith `unique=True`, this can be used to create unique constraints for a subset of the rows.\n\nFor example, you might have a model that has a deleted_at field to mark rows as archived instead of deleting them forever.\nYou wish to add unique constraints on \"alive\" rows, but allow multiple copies in the archive.\n[Django's unique_together](https://docs.djangoproject.com/en/1.11/ref/models/options/#unique-together) is not sufficient here, as that cannot\ndistinguish between the archived and alive rows.\n\n```python\nfrom partial_index import PartialIndex, PQ\n\nclass RoomBooking(models.Model):\n user = models.ForeignKey(User)\n room = models.ForeignKey(Room)\n deleted_at = models.DateTimeField(null=True, blank=True)\n\n class Meta:\n # unique_together = [('user', 'room')] - Does not allow multiple deleted rows. Instead use:\n indexes = [\n PartialIndex(fields=['user', 'room'], unique=True, where=PQ(deleted_at__isnull=True))\n ]\n```\n\n### Partial non-unique indexes\n\nWith `unique=False`, partial indexes can be used to optimise lookups that return only a small subset of the rows.\n\nFor example, you might have a job queue table which keeps an archive of millions of completed jobs. Among these are a few pending jobs,\nwhich you want to find with a `.filter(is_complete=0)` query.\n\n```python\nfrom partial_index import PartialIndex, PQ\n\nclass Job(models.Model):\n created_at = models.DateTimeField(auto_now_add=True)\n is_complete = models.IntegerField(default=0)\n\n class Meta:\n indexes = [\n PartialIndex(fields=['created_at'], unique=False, where=PQ(is_complete=0))\n ]\n```\n\nCompared to an usual full index on the `is_complete` field, this can be significantly smaller in disk and memory use, and faster to update.\n\n### Referencing multiple fields in the condition\n\nWith `F`-expressions, you can create conditions that reference multiple fields:\n\n```python\nfrom partial_index import PartialIndex, PQ, PF\n\nclass NotTheSameAgain(models.Model):\n a = models.IntegerField()\n b = models.IntegerField()\n\n class Meta:\n indexes = [\n PartialIndex(fields=['a', 'b'], unique=True, where=PQ(a=PF('b'))),\n ]\n```\n\nThis PartialIndex allows multiple copies of `(2, 3)`, but only a single copy of `(2, 2)` to exist in the database.\n\nThe `PF` uses the exact same syntax and supports all the same features as Django's `F` expressions ([see Django docs for a full tutorial](https://docs.djangoproject.com/en/1.11/ref/models/expressions/#f-expressions)). It is provided for compatibility with Django 1.11.\n\n### Unique validation on ModelForms\n\nUnique partial indexes are validated by the PostgreSQL and SQLite databases. When they reject an INSERT or UPDATE, Django raises a `IntegrityError` exception. This results in a `500 Server Error` status page in the browser if not handled before the database query is run.\n\nModelForms perform unique validation before saving an object, and present the user with a descriptive error message.\n\nAdding an index does not modify the parent model's unique validation, so partial index validations are not handled by them by default. To add that to your model, include the `ValidatePartialUniqueMixin` in your model definition:\n\n```python\nfrom partial_index import PartialIndex, PQ, ValidatePartialUniqueMixin\n\nclass MyModel(ValidatePartialUniqueMixin, models.Model):\n class Meta:\n indexes = [\n PartialIndex(fields=['user', 'room'], unique=True, where=PQ(deleted_at__isnull=True)),\n ]\n```\n\nNote that it should be added on the model itself, not the ModelForm class.\n\nAdding the mixin for non-unique partial indexes is unnecessary, as they cannot cause database IntegrityErrors.\n\n### Text-based where-conditions (deprecated)\n\nText-based where-conditions are deprecated and will be removed in the next release (0.6.0) of django-partial-index.\n\nThey are still supported in version 0.5.0 to simplify upgrading existing projects to the `PQ`-based indexes. New projects should not use them.\n\n\n```python\nfrom partial_index import PartialIndex\n\nclass TextExample(models.Model):\n class Meta:\n indexes = [\n PartialIndex(fields=['user', 'room'], unique=True, where='deleted_at IS NULL'),\n PartialIndex(fields=['created_at'], unique=False, where_postgresql='is_complete = false', where_sqlite='is_complete = 0')\n ]\n```\n\n\n## Version History\n\n### 0.6.0 (latest)\n* Add support for Django 2.2.\n* Document (already existing) support for Django 2.1 and Python 3.7.\n\n### 0.5.2\n* Fix makemigrations for Django 1.11.\n* Make sure PQ and PF are imported directly from partial_index in migration files.\n\n### 0.5.1\n* Fix README formatting in PyPI.\n\n### 0.5.0\n* Add support for Q-object based where-expressions.\n* Deprecate support for text-based where-expressions. These will be removed in version 0.6.0.\n* Add ValidatePartialUniqueMixin for model classes. This adds partial unique index validation for ModelForms, avoiding an IntegrityError and instead showing an error message as with usual unique_together constraints.\n\n### 0.4.0\n* Add support for Django 2.0.\n\n### 0.3.0\n* Add support for separate `where_postgresql=''` and `where_sqlite=''` predicates, when the expression has different syntax on the two\n database backends and you wish to support both.\n\n### 0.2.1\n* Ensure that automatically generated index names depend on the \"unique\" and \"where\" parameters. Otherwise two indexes with the same fields would be considered identical by Django.\n\n### 0.2.0\n* Fully tested SQLite and PostgreSQL support.\n* Tests for generated SQL statements, adding and removing indexes, and that unique constraints work when inserting rows into the db tables.\n* Python 2.7, 3.4-3.6 support.\n\n### 0.1.1\n* Experimental SQLite support.\n\n### 0.1.0\n* First release, working but untested PostgreSQL support.\n\n## Future plans\n\n* Add a validation mixin for DRF Serializers.\n* Remove support for text-based where conditions.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/mattiaslinnap/django-partial-index/archive/0.6.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mattiaslinnap/django-partial-index", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "django-partial-index", "package_url": "https://pypi.org/project/django-partial-index/", "platform": "", "project_url": "https://pypi.org/project/django-partial-index/", "project_urls": { "Download": "https://github.com/mattiaslinnap/django-partial-index/archive/0.6.0.tar.gz", "Homepage": "https://github.com/mattiaslinnap/django-partial-index" }, "release_url": "https://pypi.org/project/django-partial-index/0.6.0/", "requires_dist": null, "requires_python": "", "summary": "PostgreSQL and SQLite partial indexes for Django models", "version": "0.6.0" }, "last_serial": 5498201, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e4f3f10a3f39ff9af8904958488f7e14", "sha256": "075737daed4096b4e4748a7e0638c881424ebc0a237a680fe9825a33dc5a1592" }, "downloads": -1, "filename": "django_partial_index-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e4f3f10a3f39ff9af8904958488f7e14", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5658, "upload_time": "2017-08-05T22:10:52", "url": "https://files.pythonhosted.org/packages/1d/4b/2c18368dc4b593ac7dc1ce18a04ea22bc2756ca22cf066658151d8ea399e/django_partial_index-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f38f15509de9dfac06c619c5c5c5ec9", "sha256": "6103cbffd567a867622517a6d042ed7433bada0748a46ace63f625d55249dfed" }, "downloads": -1, "filename": "django-partial-index-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1f38f15509de9dfac06c619c5c5c5ec9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3270, "upload_time": "2017-08-05T22:10:55", "url": "https://files.pythonhosted.org/packages/27/ae/5b6b23f2bb7055be4066d321d0dcc0529967919d1e54781b99eb0ec2c147/django-partial-index-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a44e07075e88838aa4b2fb72d3faffc5", "sha256": "4e15eb7c38872d451d5a9905b2480ff97714c437f77095df2ecb480b02a69ba2" }, "downloads": -1, "filename": "django_partial_index-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a44e07075e88838aa4b2fb72d3faffc5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 6092, "upload_time": "2017-08-06T15:06:40", "url": "https://files.pythonhosted.org/packages/62/98/36702d8977f1828be28b6304e7d419821c408a7d2803ea20fd61bb011736/django_partial_index-0.1.1-py2.py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "917b0e2a1b1b30287679041fa9d97234", "sha256": "930f7b9acbf3ccef6971fd0b97ffe57debedf177e2665f5c3738b15968fb11dc" }, "downloads": -1, "filename": "django_partial_index-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "917b0e2a1b1b30287679041fa9d97234", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 6560, "upload_time": "2017-08-06T23:09:13", "url": "https://files.pythonhosted.org/packages/fe/64/a567f11a61e4a65aec0b3ee4b107e2a61289942bd78b85369b7063cebaf5/django_partial_index-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebc7ebe3a738218c1bb016b7ab1331c2", "sha256": "e3510eb1364c7d121f67b27deebe13749471862763d9ef783154d912f9c967f1" }, "downloads": -1, "filename": "django-partial-index-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ebc7ebe3a738218c1bb016b7ab1331c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3797, "upload_time": "2017-08-06T23:08:40", "url": "https://files.pythonhosted.org/packages/47/2e/fb970501f82b71a17698a0e098b04fd3283937f2957f50b6343935ee6283/django-partial-index-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b832b9aa199d7fa4df04a515ac17cf91", "sha256": "fd07d464a5b0cd8c0b2afacef9b926b16b981b9cfe6c48985c64511a3d0a7eb5" }, "downloads": -1, "filename": "django_partial_index-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b832b9aa199d7fa4df04a515ac17cf91", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 7426, "upload_time": "2017-08-07T08:32:05", "url": "https://files.pythonhosted.org/packages/d4/ca/b21ceea0344b7612e0300cf75f23ae00fd180600476e2713b1a06171b1ef/django_partial_index-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "484089a7faea77b01121cfe3ebdcddf6", "sha256": "c859f54be3b899400e814b60ddf21dc1eb5cdf33dc8b9e3c7dd5e90797817d61" }, "downloads": -1, "filename": "django-partial-index-0.2.1.tar.gz", "has_sig": false, "md5_digest": "484089a7faea77b01121cfe3ebdcddf6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4418, "upload_time": "2017-08-07T08:32:03", "url": "https://files.pythonhosted.org/packages/0c/ae/139d7008d71d65fa627bb9c6a7d42801fbd81ad85bb01d3cffba72d0a6e4/django-partial-index-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b0b2da41c846a8465c52d98bb417a30e", "sha256": "469b19ac27229a1e7f94085d134ffb5aebbafc75704cb8f88149a5ac33a9ff49" }, "downloads": -1, "filename": "django_partial_index-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b0b2da41c846a8465c52d98bb417a30e", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 8925, "upload_time": "2017-08-07T10:07:20", "url": "https://files.pythonhosted.org/packages/77/7e/eb4ed6750bf50da0daf9a0c0f9bae2d240acab3a30b05ef3b80d499487cf/django_partial_index-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c328f0c57df1aeb7271312f05aaf04c8", "sha256": "120395537b57338951c49b150a88aa61f527496ad60259806441e326a8acabba" }, "downloads": -1, "filename": "django-partial-index-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c328f0c57df1aeb7271312f05aaf04c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5375, "upload_time": "2017-08-07T10:07:17", "url": "https://files.pythonhosted.org/packages/0a/7d/a62405a7c1950e8a27ae71d5bfb7b725095c35f614820b9e7920bb173e7b/django-partial-index-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "0f4d940575378d74a5c4435f42c19af0", "sha256": "f8f295c2fcdef6d1995f9802486761ea8af660560577f528e1c24e48a1e7030f" }, "downloads": -1, "filename": "django_partial_index-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0f4d940575378d74a5c4435f42c19af0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9266, "upload_time": "2018-01-05T19:15:57", "url": "https://files.pythonhosted.org/packages/6a/a5/4f386f3884b12ef6a22044ecd9462726e579b7c4a0b8be0830e6dbbbf63f/django_partial_index-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4324f25b22556b81bfce37885cf0a882", "sha256": "7ace7ef42d7003135eeb4626bc07222eceb590531d8ca0288dc7edb201bf6120" }, "downloads": -1, "filename": "django-partial-index-0.4.0.tar.gz", "has_sig": false, "md5_digest": "4324f25b22556b81bfce37885cf0a882", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5672, "upload_time": "2018-01-05T19:16:05", "url": "https://files.pythonhosted.org/packages/54/f7/1823eddf3aca4858221a7ddd1c24c910ba62b3e0bb315046f1981f4c6645/django-partial-index-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "96cc6bd85725c9373c3a81c382cd6469", "sha256": "d9503c141469dbd91891b300e1b09df0f7958b73c712141a800e071f1e0b40f1" }, "downloads": -1, "filename": "django_partial_index-0.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "96cc6bd85725c9373c3a81c382cd6469", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10053, "upload_time": "2018-07-05T10:58:34", "url": "https://files.pythonhosted.org/packages/23/1c/143f8c8e75d2ff7a5809958b61bbd509e921b6dc0725f82b1888d53cdc3f/django_partial_index-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4da9f737c88af45c0678f7d98810edcf", "sha256": "9b8757d4587e1501c1fe3b1fc1dae70d7aefb4794ce94f2a9129fee7e9405638" }, "downloads": -1, "filename": "django-partial-index-0.5.0.tar.gz", "has_sig": false, "md5_digest": "4da9f737c88af45c0678f7d98810edcf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9058, "upload_time": "2018-07-05T10:58:32", "url": "https://files.pythonhosted.org/packages/dc/2a/f2d6797f13cd39614c793de03984217f468e14c88957306c3aa87a7395c5/django-partial-index-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "6cdad233773e377b54db329d26297026", "sha256": "7d81b6c5090537703e18160c50fd6d5dd23223fcaf02444cb8a1f75e7d3a49b0" }, "downloads": -1, "filename": "django_partial_index-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6cdad233773e377b54db329d26297026", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10098, "upload_time": "2018-07-05T11:03:18", "url": "https://files.pythonhosted.org/packages/70/33/99f3b93bb6ff2a67a7d03905bc889ef3a6194e6db2d67708cc3cb701e4c2/django_partial_index-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd81aabfa62620a02784fe81c7df62a9", "sha256": "11f1dc3bc43e3686534e5e9d9f3e5904907931a39dff3f885faa9e404651740c" }, "downloads": -1, "filename": "django-partial-index-0.5.1.tar.gz", "has_sig": false, "md5_digest": "fd81aabfa62620a02784fe81c7df62a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9141, "upload_time": "2018-07-05T11:03:15", "url": "https://files.pythonhosted.org/packages/c6/e8/8cbe79a48b256c29628f89ef3b705f46c95a3c861447871c0bbcb2356c09/django-partial-index-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "66f80b2fc67bd7de50c42f31b78b11a4", "sha256": "1eae3c5274b7729e92b33bf06abe95b55288c2718904384907e18f88c3d82155" }, "downloads": -1, "filename": "django_partial_index-0.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "66f80b2fc67bd7de50c42f31b78b11a4", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10520, "upload_time": "2018-07-15T15:51:51", "url": "https://files.pythonhosted.org/packages/76/57/97ae8951e79e8e01152e80e5d53143c478c4c83dafa6b04cf46005aec319/django_partial_index-0.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d331de145142d9511d5c368d161f4d0", "sha256": "8a805b52971a58cb78c925dbb976fecf59c662a1c767846061444a2587247804" }, "downloads": -1, "filename": "django-partial-index-0.5.2.tar.gz", "has_sig": false, "md5_digest": "8d331de145142d9511d5c368d161f4d0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11476, "upload_time": "2018-07-15T15:51:49", "url": "https://files.pythonhosted.org/packages/dc/26/e04ef9c2e2876bb3dd63823c8633edac6c1352701a6d629251ea41df5535/django-partial-index-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "00d39e24257c15d16277f5442cef6a73", "sha256": "77dde49b20560fc489ec7270484926fc175795d852344df9421f7feec283f783" }, "downloads": -1, "filename": "django_partial_index-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00d39e24257c15d16277f5442cef6a73", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11966, "upload_time": "2019-07-07T21:53:52", "url": "https://files.pythonhosted.org/packages/69/84/5ffd927bc2805d62386804bf107d6ddef0fe75f305087347fb0a717874eb/django_partial_index-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74850829055428b0b5e83712a3968e4b", "sha256": "c3c3b31c4fc73f772edd5ad3b8421cb410b5a5d681b45fc6d6956587952a5edb" }, "downloads": -1, "filename": "django-partial-index-0.6.0.tar.gz", "has_sig": false, "md5_digest": "74850829055428b0b5e83712a3968e4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10044, "upload_time": "2019-07-07T21:53:53", "url": "https://files.pythonhosted.org/packages/ca/0c/debd3f67abb4508e449e938c1e172dec1aac4ff7fff9d15048a32e8d41a0/django-partial-index-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "00d39e24257c15d16277f5442cef6a73", "sha256": "77dde49b20560fc489ec7270484926fc175795d852344df9421f7feec283f783" }, "downloads": -1, "filename": "django_partial_index-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00d39e24257c15d16277f5442cef6a73", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11966, "upload_time": "2019-07-07T21:53:52", "url": "https://files.pythonhosted.org/packages/69/84/5ffd927bc2805d62386804bf107d6ddef0fe75f305087347fb0a717874eb/django_partial_index-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74850829055428b0b5e83712a3968e4b", "sha256": "c3c3b31c4fc73f772edd5ad3b8421cb410b5a5d681b45fc6d6956587952a5edb" }, "downloads": -1, "filename": "django-partial-index-0.6.0.tar.gz", "has_sig": false, "md5_digest": "74850829055428b0b5e83712a3968e4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10044, "upload_time": "2019-07-07T21:53:53", "url": "https://files.pythonhosted.org/packages/ca/0c/debd3f67abb4508e449e938c1e172dec1aac4ff7fff9d15048a32e8d41a0/django-partial-index-0.6.0.tar.gz" } ] }