{
"info": {
"author": "Nathan Shafer",
"author_email": "nate-pypi@lotech.org",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Framework :: Django",
"Framework :: Django :: 1.11",
"Framework :: Django :: 2.1",
"Framework :: Django :: 2.2",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7"
],
"description": ".. image:: https://travis-ci.org/nshafer/django-hashid-field.svg?branch=master\n :target: https://travis-ci.org/nshafer/django-hashid-field\n.. image:: https://badge.fury.io/py/django-hashid-field.svg\n :target: https://badge.fury.io/py/django-hashid-field\n\nDjango Hashid Field\n====================\n\nA custom Model Field that uses the `Hashids `_ `library `_\nto obfuscate an IntegerField or AutoField. It can be used in new models or dropped in place of an existing IntegerField,\nexplicit AutoField, or an automatically generated AutoField.\n\nFeatures\n--------\n\n* Stores IDs as integers in the database\n* Allows lookups and filtering by hashid string or Hashid object and (optionally) integer.\n* Can enable integer lookups globally or per-field\n* Can be used as sort key\n* Can drop-in replace an existing IntegerField (HashidField) or AutoField (HashidAutoField)\n* Allows specifying a salt globally\n* Supports custom *salt*, *min_length*, *alphabet* and *allow_int_lookup* settings per field\n* Supports Django REST Framework Serializers\n* Supports exact ID searches in Django Admin when field is specified in search_fields.\n* Supports common filtering lookups, such as ``__iexact``, ``__contains``, ``__icontains``, though matching is the same as ``__exact``.\n* Supports subquery lookups with ``field__in=queryset``\n* Supports hashing operations so the fields can be used in Dictionaries and Sets.\n\nRequirements\n------------\n\nThis module is tested and known to work with:\n\n* Python 2.7, 3.6, 3.7\n* Django 1.11, 2.1, 2.2\n* Hashids 1.2\n* Django REST Framework 3.9\n\nDjango versions <= 1.10 and 2.0 will still work for the time being in version 2.1.x, but are deprecated and not tested.\n\nInstallation\n------------\n\nInstall the package (preferably in a virtualenv):\n\n.. code-block:: bash\n\n $ pip install django-hashid-field\n\nConfigure a global SALT for all HashidFields to use by default in your settings.py.\n\n.. code-block:: python\n\n HASHID_FIELD_SALT = \"a long and secure salt value that is not the same as SECRET_KEY\"\n # Note: You can generate a secure key with:\n # from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\n\nAdd it to your model\n\n.. code-block:: python\n\n from hashid_field import HashidField\n\n class Book(models.Model):\n reference_id = HashidField()\n\nMigrate your database\n\n.. code-block:: bash\n\n $ ./manage.py makemigrations\n $ ./manage.py migrate\n\nUpgrading\n------------\n\n**Potentially breaking changes in 2.0.0** depending on your usage and configuration, specifically if you rely on\ninteger lookups (now off by default) or exceptions for invalid lookup values.\n\nPlease see the `Change Log `_\n\nBasic Usage\n-----------\n\nUse your field like you would any other, for the most part. You can assign integers:\n\n.. code-block:: python\n\n >>> b = Book()\n >>> b.reference_id = 123\n >>> b.reference_id\n Hashid(123): OwLxW8D\n\nYou can assign valid hashids. It's valid only if it can be decoded into an integer based on your settings:\n\n.. code-block:: python\n\n >>> b.reference_id = 'r8636LO'\n >>> b.reference_id\n Hashid(456): r8636LO\n\nYou can access your field with either hashid strings or Hashid objects:\n\n.. code-block:: python\n\n >>> Book.objects.filter(reference_id='OwLxW8D')\n ]>\n >>> b = Book.objects.get(reference_id='OwLxW8D')\n >>> b\n \n >>> h = b.reference_id\n >>> h\n Hashid(123): OwLxW8D\n >>> Book.objects.filter(reference_id=h)\n \n\nYou can lookup objects with integers if you set ``HASHID_FIELD_ALLOW_INT_LOOKUP = True`` or ``allow_int_lookup=True``\nas a parameter to the field.\n\n.. code-block:: python\n\n reference_id = HashidField(allow_int_lookup=True)\n\nNow integer lookups are allowed. Useful if migrating an existing AutoField to a HashidAutoField, but you need to allow\nlookups with older integers.\n\n.. code-block:: python\n\n >>> Book.objects.filter(reference_id=123)\n ]>\n\nThe objects returned from a HashidField are an instance of the class Hashid, and allow basic access to the original\ninteger or the hashid:\n\n.. code-block:: python\n\n >>> from hashid_field import Hashid\n >>> h = Hashid(123)\n >>> h.id\n 123\n >>> h.hashid\n 'Mj3'\n >>> print(h)\n Mj3\n >>> repr(h)\n 'Hashid(123): Mj3'\n\nHashid Auto Field\n-----------------\n\nAlong with ``HashidField`` there is also a ``HashidAutoField`` that works in the same way, but that auto-increments just\nlike an ``AutoField``.\n\n.. code-block:: python\n\n from hashid_field import HashidAutoField\n\n class Book(models.Model):\n serial_id = HashidAutoField(primary_key=True)\n\nThe only difference is that if you don't assign a value to it when you save, it will auto-generate a value from your\ndatabase, just as an AutoField would do. Please note that ``HashidAutoField`` inherits from ``AutoField`` and there can\nonly be one ``AutoField`` on a model at a time.\n\n.. code-block:: python\n\n >>> b = Book()\n >>> b.save()\n >>> b.serial_id\n Hashid(1): AJEM7LK\n\nIt can be dropped into an existing model that has an auto-created AutoField (all models do by default) as long as you\ngive it the same name and set ``primary_key=True``. So if you have this model:\n\n.. code-block:: python\n\n class Author(models.Model):\n name = models.CharField(max_length=40)\n\nThen Django has created a field for you called 'id' automatically. We just need to override that by specifying our own\nfield with *primary_key* set to True.\n\n.. code-block:: python\n\n class Author(models.Model):\n id = HashidAutoField(primary_key=True)\n name = models.CharField(max_length=40)\n\nAnd now you can use the 'id' or 'pk' attributes on your model instances:\n\n.. code-block:: python\n\n >>> a = Author.objects.create(name=\"John Doe\")\n >>> a.id\n Hashid(60): N8VNa8z\n >>> Author.objects.get(pk='N8VNa8z')\n \n\nGlobal Settings\n---------------\n\nHASHID_FIELD_SALT\n~~~~~~~~~~~~~~~~~\n\nYou can optionally set a global Salt to be used by all HashFields and HashidAutoFields in your project. Do not use the\nsame string as your SECRET_KEY, as this could lead to your SECRET_KEY being exposed to an attacker.\nPlease note that changing this value will cause all HashidFields to change their values, and any previously published\nIDs will become invalid.\nCan be overridden by the field definition.\n\n:Type: string\n:Default: \"\"\n:Example:\n .. code-block:: python\n\n HASHID_FIELD_SALT = \"a long and secure salt value that is not the same as SECRET_KEY\"\n\nHASHID_FIELD_ALLOW_INT_LOOKUP\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAllow lookups or fetches of fields using the underlying integer that's stored in the database.\nDisabled by default to prevent users from being to do a sequential scan of objects by pulling objects by\nintegers (1, 2, 3) instead of Hashid strings (\"Ba9p1AG\", \"7V9gk9Z\", \"wro12zm\").\nCan be overriden by the field definition.\n\n:Type: boolean\n:Default: False\n:Example:\n .. code-block:: python\n\n HASHID_FIELD_ALLOW_INT_LOOKUP = True\n\nHASHID_FIELD_LOOKUP_EXCEPTION\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nBy default any invalid hashid strings or integer lookups when integer lookups are turned off will result in an\nEmptyResultSet being returned. Enable this to instead throw a ValueError exception (similar to the behavior prior to 2.0).\n\n:Type: boolean\n:Default: False\n:Example:\n .. code-block:: python\n\n HASHID_FIELD_LOOKUP_EXCEPTION = True\n\n\n\nField Parameters\n----------------\n\nBesides the standard field options, there are settings you can tweak that are specific to HashidField and\nAutoHashidField.\n\n**Please note** that changing any of the values for ``salt``, ``min_length`` or ``alphabet`` *will* affect the\nobfuscation of the integers that are stored in the database, and will change what are considered \"valid\" hashids.\nIf you have links or URLs that include your HashidField values, then they will stop working after changing any of these\nvalues. It's highly advised that you don't change any of these settings once you publish any references to your field.\n\nsalt\n~~~~\n\n:Type: string\n:Default: settings.HASHID_FIELD_SALT, \"\"\n:Example:\n .. code-block:: python\n\n reference_id = HashidField(salt=\"Some salt value\")\n\nmin_length\n~~~~~~~~~~\n\n:Type: int\n:Default: 7\n:Note: This defaults to 7 for the field since the maximum IntegerField value can be encoded in 7 characters with\n the default *alphabet* setting of 62 characters.\n:Example:\n .. code-block:: python\n\n reference_id = HashidField(min_length=15)\n\nalphabet\n~~~~~~~~\n\n:Type: string of characters (16 minimum)\n:Default: Hashids.ALPHABET, which is \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\"\n:Example:\n .. code-block:: python\n\n # Only use numbers and lower-case letters\n reference_id = HashidField(alphabet=\"0123456789abcdefghijklmnopqrstuvwxyz\")\n\nallow_int_lookup\n~~~~~~~~~~~~~~~~\n\n:Type: boolean\n:Default: settings.HASHID_FIELD_ALLOW_INT_LOOKUP, False\n:Example:\n .. code-block:: python\n\n reference_id = HashidField(allow_int_lookup=True)\n\n\nHashid Class\n------------\n\nOperations with a HashidField or HashidAutoField return a ``Hashid`` object. This simple class does the heavy lifting of\nconverting integers and hashid strings back and forth. There shouldn't be any need to instantiate these manually.\n\nMethods\n~~~~~~~\n\n\\__init__(id, salt='', min_length=0, alphabet=Hashids.ALPHABET):\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n:id: **REQUIRED** Integer you wish to *encode*\n:salt: Salt to use. **Default**: ''\n:min_length: Minimum length of encoded hashid string. **Default**: 0\n:alphabet: The characters to use in the encoded hashid string. **Default**: Hashids.ALPHABET\n\nRead-Only Properties\n~~~~~~~~~~~~~~~~~~~~\n\nid\n^^\n\n:type: Int\n:value: The *decoded* integer\n\nhashid\n^^^^^^\n\n:type: String\n:value: The *encoded* hashid string\n\nhashids\n^^^^^^^\n\n:type: Hashids()\n:value: The instance of the Hashids class that is used to *encode* and *decode*\n\n\nDjango REST Framework Integration\n=================================\n\nIf you wish to use a HashidField or HashidAutoField with a DRF ModelSerializer, there is one extra step that you must\ntake. Automatic declaration of any Hashid*Fields will result in an ImproperlyConfigured exception being thrown. You\nmust explicitly declare them in your Serializer, as there is no way for the generated field to know how to work with\na Hashid*Field, specifically what 'salt', 'min_length' and 'alphabet' to use, and can lead to very difficult errors or\nbehavior to debug, or in the worst case, corruption of your data. Here is an example:\n\n.. code-block:: python\n\n from rest_framework import serializers\n from hashid_field.rest import HashidSerializerCharField\n\n\n class BookSerializer(serializers.ModelSerializer):\n reference_id = HashidSerializerCharField(source_field='library.Book.reference_id')\n\n class Meta:\n model = Book\n fields = ('id', 'reference_id')\n\n\n class AuthorSerializer(serializers.ModelSerializer):\n id = HashidSerializerCharField(source_field='library.Author.id', read_only=True)\n\n class Meta:\n model = Author\n fields = ('id', 'name')\n\nThe ``source_field`` allows the HashidSerializerCharField to copy the 'salt', 'min_length' and 'alphabet' settings from\nthe given field at ``app_name.model_name.field_name`` so that it can be defined in just one place. Explicit settings are\nalso possible:\n\n.. code-block:: python\n\n reference_id = HashidSerializerCharField(salt=\"a different salt\", min_length=10, alphabet=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\")\n\nIf nothing is given, then the field will use the same global settings as a Hashid*Field. It is very important that the\noptions for the serializer field matches the model field, or else strange errors or data corruption can occur.\n\nHashidSerializerCharField will serialize the value into a Hashids string, but will deserialize either a Hashids string or\ninteger and save it into the underlying Hashid*Field properly. There is also a HashidSerializerIntegerField that will\nserialize the Hashids into an un-encoded integer as well.\n\nPrimary Key Related Fields\n--------------------------\n\nAny models that have a ForeignKey to another model that uses a Hashid*Field as its Primary Key will need to explicitly\ndefine how the\n`PrimaryKeyRelatedField `_\nshould serialize and deserialize the resulting value using the ``pk_field`` argument. If you don't you will get an error\nsuch as \"Hashid(60): N8VNa8z is not JSON serializable\". We have to tell DRF how to serialize/deserialize Hashid*Fields.\n\nFor the given ``Author`` model defined\nabove that has an ``id = HashidAutoField(primary_key=True)`` set, your BookSerializer should look like the following.\n\n.. code-block:: python\n\n from rest_framework import serializers\n from hashid_field.rest import HashidSerializerCharField\n\n\n class BookSerializer(serializers.ModelSerializer):\n author = serializers.PrimaryKeyRelatedField(\n pk_field=HashidSerializerCharField(source_field='library.Author.id'),\n read_only=True)\n\n class Meta:\n model = Book\n fields = ('id', 'author')\n\nMake sure you pass the source field to the HashidSerializer*Field so that it can copy the 'salt', 'min_length' and 'alphabet'\nas described above.\n\nThis example sets ``read_only=True`` but you can explicitly define a ``queryset`` or override ``get_queryset(self)`` to allow\nread-write behavior.\n\n.. code-block:: python\n\n author = serializers.PrimaryKeyRelatedField(\n pk_field=HashidSerializerCharField(source_field='library.Author.id'),\n queryset=Author.objects.all())\n\nFor a ManyToManyField, you must also remember to pass ``many=True`` to the ``PrimaryKeyRelatedField``.\n\n\nHashidSerializerCharField\n-------------------------\n\nSerialize a Hashid\\*Field to a Hashids string, de-serialize either a valid Hashids string or integer into a\nHashid\\*Field.\n\nParameters\n~~~~~~~~~~\n\nsource_field\n^^^^^^^^^^^^\n\nA 3-field dotted notation of the source field to load matching 'salt', 'min_length' and 'alphabet' settings from. Must\nbe in the format of \"app_name.model_name.field_name\". Example: \"library.Book.reference_id\".\n\nsalt, min_length, alphabet\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSee `Field Parameters`_\n\n\nHashidSerializerIntegerField\n----------------------------\n\nSerialize a Hashid\\*Field to an integer, de-serialize either a valid Hashids string or integer into a\nHashid\\*Field. See `HashidSerializerCharField`_ for parameters.\n\nDevelopment\n===========\n\nHere are some rough instructions on how to set up a dev environment to develop this module. Modify as needed. The\nsandbox is a django project that uses django-hashid-id, and is useful for developing features with.\n\n- ``git clone https://github.com/nshafer/django-hashid-field.git && cd django-hashid-field``\n- ``mkvirtualenv -a . -p /usr/bin/python3 -r sandbox/requirements.txt django-hashid-field``\n- ``python setup.py develop``\n- ``sandbox/manage.py migrate``\n- ``sandbox/manage.py createsuperuser``\n- ``sandbox/manage.py loaddata authors books editors``\n- ``sandbox/manage.py runserver``\n- ``python runtests.py``\n\nFor any pull requests, clone the repo and push to it, then create the PR.\n\nTo install the latest development version, use:\n\n```\npip install git+https://github.com/nshafer/django-hashid-field.git\n```\n\nLICENSE\n=======\n\nMIT License. You may use this in commercial and non-commercial projects with proper attribution.\nPlease see the `LICENSE `_\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/nshafer/django-hashid-field",
"keywords": "django hashids hashid",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "django-hashid-field",
"package_url": "https://pypi.org/project/django-hashid-field/",
"platform": "",
"project_url": "https://pypi.org/project/django-hashid-field/",
"project_urls": {
"Homepage": "https://github.com/nshafer/django-hashid-field"
},
"release_url": "https://pypi.org/project/django-hashid-field/2.1.6/",
"requires_dist": [
"Django (>1.7)",
"hashids (>=1.2.0)"
],
"requires_python": "",
"summary": "A Hashids obfuscated Django Model Field",
"version": "2.1.6"
},
"last_serial": 5064134,
"releases": {
"0.1.6": [
{
"comment_text": "",
"digests": {
"md5": "f7706855c66e3c450ac3bcae7655ef82",
"sha256": "41d0b4ffad25dd43a391f9c9627a10d9b062d0a28cd5bf380c8b02a5bf2a8bad"
},
"downloads": -1,
"filename": "django_hashid_field-0.1.6-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f7706855c66e3c450ac3bcae7655ef82",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 11387,
"upload_time": "2016-10-04T20:03:50",
"url": "https://files.pythonhosted.org/packages/a9/b5/58847fef390b3bbf13b31bd1fd23c3ad1a1a08a773edaf60e7e19d6905c5/django_hashid_field-0.1.6-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "bc3e3c6fa9c3b7cf48e7e0783e13c1c5",
"sha256": "3abc524b1399df31a9c7c71528ca5d0e1b489f368946898e935fb1c9f6c68f1f"
},
"downloads": -1,
"filename": "django-hashid-field-0.1.6.tar.gz",
"has_sig": false,
"md5_digest": "bc3e3c6fa9c3b7cf48e7e0783e13c1c5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7069,
"upload_time": "2016-10-04T20:03:52",
"url": "https://files.pythonhosted.org/packages/5f/b7/574dbc5d7d30e4defe07994f61925339363b8387d7d0670a07b9d5c1f72f/django-hashid-field-0.1.6.tar.gz"
}
],
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "9b7036cb7d4ab9b0da2bbf39108e3818",
"sha256": "aac70dcb1803307aba96de2cf13be4e165482922d28b8495c037f127b2cb0182"
},
"downloads": -1,
"filename": "django_hashid_field-1.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "9b7036cb7d4ab9b0da2bbf39108e3818",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 10147,
"upload_time": "2016-12-27T20:04:54",
"url": "https://files.pythonhosted.org/packages/a8/2b/239bf1fbc83fa6230f4c6e316f3bf9b3d2646b5650decac43be97355232e/django_hashid_field-1.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "825b052633cf14092867f3337bb0260c",
"sha256": "29ffc06caaca4904084b6bba4f096aea24d2212857def1a497627399a24ca8c1"
},
"downloads": -1,
"filename": "django-hashid-field-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "825b052633cf14092867f3337bb0260c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7493,
"upload_time": "2016-12-27T20:04:55",
"url": "https://files.pythonhosted.org/packages/3a/9b/90ba8f4b8d5d4b845a582a10fb38206007c57c3da9e5dbef59561c87abcd/django-hashid-field-1.0.0.tar.gz"
}
],
"1.0.1": [
{
"comment_text": "",
"digests": {
"md5": "429bf136ac170e484b308402434868f0",
"sha256": "38e7ecc914485facb77511d79780fb74957984382bf6ebef15f2987aabd9077d"
},
"downloads": -1,
"filename": "django_hashid_field-1.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "429bf136ac170e484b308402434868f0",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 10473,
"upload_time": "2016-12-28T17:42:23",
"url": "https://files.pythonhosted.org/packages/b4/6f/c3ad18743cd773d98b07b1a01cfa44217183a44fd2e836efa005d1b1bd24/django_hashid_field-1.0.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "22c60c040371d4d6a04e36c4ef608f80",
"sha256": "af7ea30d8e2ae525e2be6d4495079f1bef7b74e5871a914057e72ef60cd5fe71"
},
"downloads": -1,
"filename": "django-hashid-field-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "22c60c040371d4d6a04e36c4ef608f80",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7657,
"upload_time": "2016-12-28T17:42:25",
"url": "https://files.pythonhosted.org/packages/21/85/557e0c0f1b746bdd45dbebcd2ca48aa488c7792811587f473611214ac4ca/django-hashid-field-1.0.1.tar.gz"
}
],
"1.1.0": [
{
"comment_text": "",
"digests": {
"md5": "ec2ecf001afdae315ab55fa6e3b6a085",
"sha256": "952bfdc1de873a8472d4ae01f12580a0aee5053cd5bf4860cca0b67c86c629d1"
},
"downloads": -1,
"filename": "django_hashid_field-1.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "ec2ecf001afdae315ab55fa6e3b6a085",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 13344,
"upload_time": "2017-01-25T18:48:16",
"url": "https://files.pythonhosted.org/packages/33/80/940d49e037533901684a4aff7aaf7fdd930c8c27a37908d3251b9e35e38b/django_hashid_field-1.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8c4edaaa90dd081ae3887c04da4237a0",
"sha256": "25cdc66395862da8b5126a6beeb39dae4cf396ff8b7cb462a0f0b07f16b34d05"
},
"downloads": -1,
"filename": "django-hashid-field-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "8c4edaaa90dd081ae3887c04da4237a0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 9428,
"upload_time": "2017-01-25T18:48:18",
"url": "https://files.pythonhosted.org/packages/1f/7e/b3bcf1032a8388599d8df15c71a254a067cafc364d38848e7aa40eedefa3/django-hashid-field-1.1.0.tar.gz"
}
],
"1.2.0": [
{
"comment_text": "",
"digests": {
"md5": "f03e3ba8950b73376294f8f9d9f1a622",
"sha256": "f4cde1b766674f2423bada7105c1a2874be2640cf36d5e44fe01efdaa224f6f4"
},
"downloads": -1,
"filename": "django_hashid_field-1.2.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "f03e3ba8950b73376294f8f9d9f1a622",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 14772,
"upload_time": "2017-02-21T23:41:11",
"url": "https://files.pythonhosted.org/packages/2e/e3/579263753389dd7af79e1fd46e8f537c954c2dbca5c81a1d6bd8cc723c34/django_hashid_field-1.2.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "89023b30aa876c0e481b136808c5a1b5",
"sha256": "1953a5e68e19fabcb0a41ff95360e329bd8a4a017fb9e1c6c546630330097c3d"
},
"downloads": -1,
"filename": "django-hashid-field-1.2.0.tar.gz",
"has_sig": false,
"md5_digest": "89023b30aa876c0e481b136808c5a1b5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14146,
"upload_time": "2017-02-21T23:41:13",
"url": "https://files.pythonhosted.org/packages/65/59/f30125b11c12ccfb69bb8ef25f52abbf949cbaea7638486b2244e93412ed/django-hashid-field-1.2.0.tar.gz"
}
],
"1.2.1": [
{
"comment_text": "",
"digests": {
"md5": "1a6055d1728b5f2863b47d48af07e225",
"sha256": "de5e3ba521f14cc8917cbaef435cf2adf55c16635abcd20cf4a6f7aea7edc999"
},
"downloads": -1,
"filename": "django_hashid_field-1.2.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "1a6055d1728b5f2863b47d48af07e225",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 14982,
"upload_time": "2017-03-23T18:23:05",
"url": "https://files.pythonhosted.org/packages/62/dd/b5a8713bdc92d38227c76702a29fca81720a165722a3d13d866df4d76e4a/django_hashid_field-1.2.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d3f76ce1fc7e6c255f03a3ec64fcae1d",
"sha256": "6cdeb0eeedc6552265360fa1b4b91661953c13b0673a95b07fbab39354aff0a8"
},
"downloads": -1,
"filename": "django-hashid-field-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "d3f76ce1fc7e6c255f03a3ec64fcae1d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14397,
"upload_time": "2017-03-23T18:23:07",
"url": "https://files.pythonhosted.org/packages/6f/e0/a0a806228d4f7862179f889bb400daaf3a7a11365cb42fe0535b46a198ca/django-hashid-field-1.2.1.tar.gz"
}
],
"1.2.2": [
{
"comment_text": "",
"digests": {
"md5": "b2da8c51c70fc4bbd0c2b7d3c696dac2",
"sha256": "3fe1a7598c8b3eaed75266785da63041cb0123b6542f6b8b68543c120d81590a"
},
"downloads": -1,
"filename": "django_hashid_field-1.2.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "b2da8c51c70fc4bbd0c2b7d3c696dac2",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 15192,
"upload_time": "2017-06-13T19:55:38",
"url": "https://files.pythonhosted.org/packages/80/0d/2da8c56ab72c24e79db258fd35d12dc2a2274d5d9c3ce906b5107dc0f072/django_hashid_field-1.2.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "fc3d38523dd5481d3fc26d096672c7fb",
"sha256": "e2a7032efd685eca22c4c9d2dac7b09bec8efec4d4b66b5241dfeaac001d3333"
},
"downloads": -1,
"filename": "django-hashid-field-1.2.2.tar.gz",
"has_sig": false,
"md5_digest": "fc3d38523dd5481d3fc26d096672c7fb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14683,
"upload_time": "2017-06-13T19:55:40",
"url": "https://files.pythonhosted.org/packages/fd/1d/84304db28f4c1e534089da0c1e5f574548028e8e51e9ede3abcf5fcbddb8/django-hashid-field-1.2.2.tar.gz"
}
],
"1.2.3": [
{
"comment_text": "",
"digests": {
"md5": "bbb378fa51d471cec613df9974286630",
"sha256": "39bf18375843a8e0d83400e8cfb9533a07f146b3b0c40b0ebdaef2714a6af4d8"
},
"downloads": -1,
"filename": "django_hashid_field-1.2.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "bbb378fa51d471cec613df9974286630",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 15197,
"upload_time": "2017-07-22T18:29:23",
"url": "https://files.pythonhosted.org/packages/d7/84/03f8db578457846953ae6ac91e077fad972dd3d8384dab7cfc520a18aac3/django_hashid_field-1.2.3-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9811c70b13626e786fcfe5b2ad26e2df",
"sha256": "1c0cc010938da67ca6e3f4ccef54caf1692ad1141a7c79005567903299c11b35"
},
"downloads": -1,
"filename": "django-hashid-field-1.2.3.tar.gz",
"has_sig": false,
"md5_digest": "9811c70b13626e786fcfe5b2ad26e2df",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 14696,
"upload_time": "2017-07-22T18:29:24",
"url": "https://files.pythonhosted.org/packages/4c/36/e48188cb961c78a7d399f2db6c7148c99107ac3e808d20b8349a8c10df31/django-hashid-field-1.2.3.tar.gz"
}
],
"1.3.0": [
{
"comment_text": "",
"digests": {
"md5": "d54d49c4abe1c44b7c30d6f0577529fa",
"sha256": "f415a159aebd668f0f77e3e24057811875f98cdd65dbb0309349c2c84c92eaef"
},
"downloads": -1,
"filename": "django_hashid_field-1.3.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "d54d49c4abe1c44b7c30d6f0577529fa",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 18369,
"upload_time": "2017-09-25T22:07:46",
"url": "https://files.pythonhosted.org/packages/71/23/d44db0f71e57c0c237b15551df2c6dec289ce596c7337fa107416d79e623/django_hashid_field-1.3.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "cbb50c816a2f77dd5a6ed65bbe6ac54c",
"sha256": "e4359219d299015f66ecc750f6c6893bab2a6a6690d9b70d7dfee6b37b5e467b"
},
"downloads": -1,
"filename": "django-hashid-field-1.3.0.tar.gz",
"has_sig": false,
"md5_digest": "cbb50c816a2f77dd5a6ed65bbe6ac54c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 17448,
"upload_time": "2017-09-25T22:07:47",
"url": "https://files.pythonhosted.org/packages/fd/f6/ac0bf6df5df2b54bd9426a3653ef412d91314981596b079cee8b06aca41b/django-hashid-field-1.3.0.tar.gz"
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "bb85977a0bb97d70aa821a608e2c2359",
"sha256": "26f362c059e1c92b41359c32072077c59039d9a60e5fb46d7fd66e47d09794ec"
},
"downloads": -1,
"filename": "django_hashid_field-2.0.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "bb85977a0bb97d70aa821a608e2c2359",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 19896,
"upload_time": "2017-10-04T17:12:57",
"url": "https://files.pythonhosted.org/packages/54/d6/a2faad5a870380f6c9640c67ea1784d30c6c64d27fcc58ef4cbfa16df709/django_hashid_field-2.0.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b811cf0f9f0e195b12eee98385f4a414",
"sha256": "a619493189c093be0fda5f18359f4ce6c9be612f2db13ff2cdb06b252f7ff38e"
},
"downloads": -1,
"filename": "django-hashid-field-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "b811cf0f9f0e195b12eee98385f4a414",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18825,
"upload_time": "2017-10-04T17:12:59",
"url": "https://files.pythonhosted.org/packages/56/58/fe789c344ef2a80197a15dcc69a42ff7c4b534e06d732a0030e6729251f5/django-hashid-field-2.0.0.tar.gz"
}
],
"2.0.1": [
{
"comment_text": "",
"digests": {
"md5": "5b7dcd5248047db8884396312fc498ad",
"sha256": "18946395d2320a81e3d017f674fd3a0afca855e36d2e4da818929eea18b61ceb"
},
"downloads": -1,
"filename": "django_hashid_field-2.0.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5b7dcd5248047db8884396312fc498ad",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 19901,
"upload_time": "2017-10-04T17:19:39",
"url": "https://files.pythonhosted.org/packages/4d/de/6407220ba8bab7434bdbd96e1ed80518a7175e5bc0e624e36fe778a38ca7/django_hashid_field-2.0.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "1efbb16bf92ccd34a8d161f6a66c185b",
"sha256": "2b98119d5d15c92297e80d1976f0f093dbd2428220ec650a69ff9fdc98c9696d"
},
"downloads": -1,
"filename": "django-hashid-field-2.0.1.tar.gz",
"has_sig": false,
"md5_digest": "1efbb16bf92ccd34a8d161f6a66c185b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18840,
"upload_time": "2017-10-04T17:19:42",
"url": "https://files.pythonhosted.org/packages/90/bc/104fb87005c5cf7f1c10aff5d3fee71c0abab7641650f014ee0a6263ad9c/django-hashid-field-2.0.1.tar.gz"
}
],
"2.1.0": [
{
"comment_text": "",
"digests": {
"md5": "3893aa5c17471852c90c8f4fa8ed47bc",
"sha256": "e8c1d01060159a3d292881b3742ccd8505ed3edcf004052fbb31fae3dff683bd"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "3893aa5c17471852c90c8f4fa8ed47bc",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 20008,
"upload_time": "2017-12-11T00:25:10",
"url": "https://files.pythonhosted.org/packages/6d/af/ece41c327130bb7494193c9c0dc07b0607339c70c89b07c675329d1f6e60/django_hashid_field-2.1.0-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "c48bb96d1d886f40ee44aec5ede4db99",
"sha256": "9d72324688e5e50d424fac9cdc102cf7a69cbcd47085329328443d6ffada65ab"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.0.tar.gz",
"has_sig": false,
"md5_digest": "c48bb96d1d886f40ee44aec5ede4db99",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18952,
"upload_time": "2017-12-11T00:25:13",
"url": "https://files.pythonhosted.org/packages/3e/bc/17655a7aaa0548b761a9dd07ffb8c3458bf8d40a0b1bcc7a1f45da58601e/django-hashid-field-2.1.0.tar.gz"
}
],
"2.1.1": [
{
"comment_text": "",
"digests": {
"md5": "5522750324a7303c6d6a420a064df5eb",
"sha256": "801344c038b94701bfbe6026fd931748fcee4c070207b7922e3baa38ba402ae3"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.1-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "5522750324a7303c6d6a420a064df5eb",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 20217,
"upload_time": "2018-03-15T22:40:50",
"url": "https://files.pythonhosted.org/packages/6e/c3/75c9736e8dcca1b101f5465b0347b0db44a05ed770ac6c34967718485e36/django_hashid_field-2.1.1-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8bbf703b62c7e506cfbe49aa74cd1029",
"sha256": "d545c08a5683c195a6e81f4290b16c55be7b365365755bcef83e1607771b49a3"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.1.tar.gz",
"has_sig": false,
"md5_digest": "8bbf703b62c7e506cfbe49aa74cd1029",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19177,
"upload_time": "2018-03-15T22:40:52",
"url": "https://files.pythonhosted.org/packages/69/0a/f991d192ba5cbe9d0e240f8a2efe339e014dedd7595890f316889a47b15a/django-hashid-field-2.1.1.tar.gz"
}
],
"2.1.2": [
{
"comment_text": "",
"digests": {
"md5": "8cccf409391039dadbba52a0418d7084",
"sha256": "851823deb159ee44fd3e8cbd404224af5d1689fe25ff44836dddeb02fdef05cd"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "8cccf409391039dadbba52a0418d7084",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 14073,
"upload_time": "2018-09-11T20:11:16",
"url": "https://files.pythonhosted.org/packages/fb/01/a2ba7f46b7978cb8a3587e68eeb3a7433dd5c0f958c296e59d5eced454ea/django_hashid_field-2.1.2-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "341fdb76ce4bfd9245abc884a7881127",
"sha256": "f400f2022e734caa1668e93682cb3df420532bc9ad2487fcd5ee3d17e46ff2e1"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.2.tar.gz",
"has_sig": false,
"md5_digest": "341fdb76ce4bfd9245abc884a7881127",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 15936,
"upload_time": "2018-09-11T20:11:18",
"url": "https://files.pythonhosted.org/packages/1f/96/151779ca8cf3569c3c9071be29f7d84059d77d3532ba479ae89b7e162447/django-hashid-field-2.1.2.tar.gz"
}
],
"2.1.4": [
{
"comment_text": "",
"digests": {
"md5": "32333f6633e85a3eaa64cecd858a6dc4",
"sha256": "62e267728e07754e7f7b2dbb780bc2444e23bd7d58430c67415ebefc7997def3"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.4-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "32333f6633e85a3eaa64cecd858a6dc4",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 20505,
"upload_time": "2018-10-05T15:20:55",
"url": "https://files.pythonhosted.org/packages/b0/ed/705fda8e989478ff8294a6327017673d79ef6334ef1b85b656bb6537483d/django_hashid_field-2.1.4-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b699078b6622807327f6536e4da42f4e",
"sha256": "969bf9074005c8852d2374a5727d1118762f0c4ecd9a1d453b1d198ead09989f"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.4.tar.gz",
"has_sig": false,
"md5_digest": "b699078b6622807327f6536e4da42f4e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19628,
"upload_time": "2018-10-05T15:20:56",
"url": "https://files.pythonhosted.org/packages/1e/fd/46d1e2f22d16805b876c086ec62cedc5cc952fe278e0c63980f6a5efa830/django-hashid-field-2.1.4.tar.gz"
}
],
"2.1.5": [
{
"comment_text": "",
"digests": {
"md5": "17eff16f51df296b6048b78eaaff4c38",
"sha256": "c667f5f679a53131964f012fb9b8838f85fd6ae081aa83944b79954dc36fba3f"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.5-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "17eff16f51df296b6048b78eaaff4c38",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 20508,
"upload_time": "2018-10-31T17:59:53",
"url": "https://files.pythonhosted.org/packages/b5/d6/49d95e0f367598f9099bf61e99bc37a04836ff72c43d16ce933162cedbc2/django_hashid_field-2.1.5-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "90893e8ca6135bb6ac7fbb076be2db93",
"sha256": "3bbd3026b6d75bd1ca0bb61f4b82e3c7f802c408d4fcf31c9ea8965aa858309e"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.5.tar.gz",
"has_sig": false,
"md5_digest": "90893e8ca6135bb6ac7fbb076be2db93",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19644,
"upload_time": "2018-10-31T17:59:54",
"url": "https://files.pythonhosted.org/packages/c1/4b/9f1baffc67ce75006944083e761cd61d6c26361f99d753af6471792e2829/django-hashid-field-2.1.5.tar.gz"
}
],
"2.1.6": [
{
"comment_text": "",
"digests": {
"md5": "fb5e342ee60ba3b849fe30357de5f1e6",
"sha256": "9aceb2db2800be1efa03d0559a91dba62d458ff4fc9dfee59c7a0719a503f307"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.6-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "fb5e342ee60ba3b849fe30357de5f1e6",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 20509,
"upload_time": "2019-04-02T16:40:21",
"url": "https://files.pythonhosted.org/packages/2c/65/6c908d9bfd0cc11460d166ac13ee709797a2ec8c6a0f4e7fc3f0bb3c70f0/django_hashid_field-2.1.6-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9c619c7af5883280bad1e66b11a30e49",
"sha256": "6b82365da20d06eee062ee5823fc972e61d670f016dd99cedbe1dcf6cc0dc73a"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.6.tar.gz",
"has_sig": false,
"md5_digest": "9c619c7af5883280bad1e66b11a30e49",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19640,
"upload_time": "2019-04-02T16:40:23",
"url": "https://files.pythonhosted.org/packages/24/7c/2fee5604119bd7bf1460e5432121dc613a6177e0b4618601b34603c7ce79/django-hashid-field-2.1.6.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "fb5e342ee60ba3b849fe30357de5f1e6",
"sha256": "9aceb2db2800be1efa03d0559a91dba62d458ff4fc9dfee59c7a0719a503f307"
},
"downloads": -1,
"filename": "django_hashid_field-2.1.6-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "fb5e342ee60ba3b849fe30357de5f1e6",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 20509,
"upload_time": "2019-04-02T16:40:21",
"url": "https://files.pythonhosted.org/packages/2c/65/6c908d9bfd0cc11460d166ac13ee709797a2ec8c6a0f4e7fc3f0bb3c70f0/django_hashid_field-2.1.6-py2.py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "9c619c7af5883280bad1e66b11a30e49",
"sha256": "6b82365da20d06eee062ee5823fc972e61d670f016dd99cedbe1dcf6cc0dc73a"
},
"downloads": -1,
"filename": "django-hashid-field-2.1.6.tar.gz",
"has_sig": false,
"md5_digest": "9c619c7af5883280bad1e66b11a30e49",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19640,
"upload_time": "2019-04-02T16:40:23",
"url": "https://files.pythonhosted.org/packages/24/7c/2fee5604119bd7bf1460e5432121dc613a6177e0b4618601b34603c7ce79/django-hashid-field-2.1.6.tar.gz"
}
]
}