{ "info": { "author": "Tomasz \u0141aszczuk", "author_email": "t.laszczuk@futuremind.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Internet :: WWW/HTTP" ], "description": "DRF Friendly Errors\n===================\n\n**Extension for Django REST framework error display**\n\nOverview\n--------\n\nThis package extends default error JSON body providing configurable error codes\nand more consumable response structure.\n\nIt turns default JSON body of HTTP 400 response, which look like this:\n\n.. code:: python\n\n {\n \"name\": [\"This field is required.\"],\n \"password\": [\"This field may not be blank.\"]\n }\n\ninto\n\n.. code:: python\n\n {\n \"name\" : [\n {\n \"code\" : 2002,\n \"detail\" : \"This field is required.\"\n }\n ],\n \"password\" : [\n {\n \"code\" : 2031,\n \"detail\" : \"This field may not be blank.\"\n }\n ]\n }\n\nLibrary handles all `Django REST framework`_ built-in serializer validation.\n\nRequirements\n------------\n- Python (2.7, 3.5, 3.6, 3.7)\n- Django (<2.0, >=1.8)\n- Django REST framework (<3.9, >=3.5)\n\nInstallation\n------------\n\nBy running installation script\n\n.. code:: bash\n\n $ python setup.py install\n\nOr using pip\n\n.. code:: bash\n\n $ pip install drf-friendly-errors-mod\n\nUsage\n-----\n\nSimply add a ErrorMessagesMixin to your serializer or model serializer class\n\n.. code:: python\n\n from rest_framework_friendly_errors.mixins import ErrorMessagesMixin\n\n class MySerializer(ErrorMessagesMixin, ModelSerializer):\n\nIf you want to change default library settings and provide your own set of error codes just add following in your\nsettings.py\n\n.. code:: python\n\n FRIENDLY_ERRORS = {\n \"FIELD_ERRORS\": {\n 'CharField': {'required': 10, 'null':11, 'blank': 12, 'max_length': 13, 'min_length': 14}\n },\n \"VALIDATOR_ERRORS\": {\n 'UniqueValidator': 50\n },\n \"EXCEPTION_DICT\": {\n 'PermissionDenied': 100\n }\n }\n\nCustom serializer validation\n----------------------------\n\nIf you need custom field validation or validation for whole serializer register your validation in serializer class\n\n.. code:: python\n\n class PostSerializer(ErrorMessagesMixin,\n serializers.ModelSerializer):\n class Meta:\n model = Post\n\n def validate_title(self, value):\n if value[0] != value[0].upper():\n raise ValidationError('First letter must be an uppercase')\n return value\n\n def validate(self, attrs):\n category = attrs.get('category)\n title = attrs.get('title')\n if category and category not in title:\n raise ValidationError('Title has to include category')\n return attrs\n\n FIELD_VALIDATION_ERRORS = {'validate_title': 5000} # register your own validation method and assign it to error code\n NON_FIELD_ERRORS = {'Title has to include category': 8000} # register non field error messages and assign it to error code\n\nIf you want to raise field error in validate method use register_error method provided by a mixin\n\n.. code:: python\n\n class PostSerializer(ErrorMessagesMixin,\n serializers.ModelSerializer):\n class Meta:\n model = Post\n\n def validate(self, attrs):\n category = attrs.get('category')\n title = attrs.get('title')\n if category and category not in title:\n self.register_error(error_message='Title has to include category',\n error_code=8000,\n field_name='title')\n return attrs\n\nError codes not related to serializer validation\n------------------------------------------------\n\nTo turn other type of errors responses into friendly errors responses with error codes\nadd this exception handler to your REST_FRAMEWORK settings\n\n.. code:: python\n\n REST_FRAMEWORK = {\n 'EXCEPTION_HANDLER':\n 'rest_framework_friendly_errors.handlers.drf_exception_handler'\n }\n\nDefault error codes\n-------------------\n\nFollowing conventions were used:\n\n1xxx - Are reserved for non field errors\n\n2xxx - Are reserved for field errors\n\n3xxx - Are reserved for validator errors\n\n4xxx - Are reserved for other errors not related to serializer validation\n\nDefault field error codes\n-------------------------\n\nField is required\n\n- 2001: BooleanField, NullBooleanField\n- 2002: CharField, EmailField, PasswordField, RegexField, SlugField, URLField, UUIDField, FilePathField, IPAddressField\n- 2003: IntegerField, FloatField, DecimalField\n- 2004: ChoiceField, MultipleChoiceField\n- 2005: FileField, ImageField\n- 2006: ListField, DictField, JSONField\n- 2007: StringRequiredField, PrimaryKeyRelatedField, HyperlinkedRelatedField, SlugRelatedField, HyperlinkedIdentityField, ManyRelatedField\n- 2008: ReadOnlyField, HiddenField, ModelField, SerializerMethodField\n\nField data is invalid (invalid regex, string instead of number, date, etc.)\n\n- 2011: BooleanField, NullBooleanField\n- 2012: CharField, EmailField, PasswordField, RegexField, SlugField, URLField, UUIDField, IPAddressField\n- 2013: IntegerField, FloatField, DecimalField\n- 2014: FileField, ImageField\n- 2015: DateTimeField, DateField, TimeField, DurationField\n\nField data cannot be null\n\n- 2021: BooleanField, NullBooleanField\n- 2022: CharField, EmailField, PasswordField, RegexField, SlugField, URLField, UUIDField, FilePathField, IPAddressField\n- 2023: IntegerField, FloatField, DecimalField\n- 2024: ChoiceField, MultipleChoiceField\n- 2025: FileField, ImageField\n- 2026: ListField, DictField, JSONField\n- 2027: StringRequiredField, PrimaryKeyRelatedField, HyperlinkedRelatedField, SlugRelatedField, HyperlinkedIdentityField, ManyRelatedField\n- 2028: ReadOnlyField, HiddenField, ModelField, SerializerMethodField\n\nField data cannot be blank\n\n- 2031: CharField, EmailField, PasswordField, RegexField, SlugField, URLField, UUIDField, IPAddressField\n\nField data is too long string\n\n- 2041: CharField, EmailField, PasswordField, RegexField, SlugField, URLField, UUIDField, IPAddressField\n- 2042: IntegerField, FloatField, DecimalField\n- 2043: FileField, ImageField\n\nField data is too short string\n\n- 2051: CharField, EmailField, PasswordField, RegexField, SlugField, URLField, UUIDField, IPAddressField\n\nField data is too big number\n\n- 2061: IntegerField, FloatField, DecimalField\n\nField data is too small number\n\n- 2071: IntegerField, FloatField, DecimalField\n\nField data do not match any value from available choices\n\n- 2081: ChoiceField, MultipleChoiceField\n- 2082: FilePathField\n- 2083: ManyRelatedField\n\nField is empty\n\n- 2091: FileField, ImageField\n- 2092: MultipleChoiceField\n- 2093: ManyRelatedField\n\nFile has no name\n\n- 2101: FileField, ImageField\n\nFile is an invalid image\n\n- 2111: ImageField\n\nField is not a list\n\n- 2121: MultipleChoiceField\n- 2122: ListField\n- 2123: ManyRelatedField\n\nField is not a dict\n\n- 2131: DictField\n\nField is not a json\n\n- 2141: JSONField\n\nField does not exist (invalid hyperlink, primary key, etc.)\n\n- 2151: PrimaryKeyRelatedField, HyperlinkedRelatedField, SlugRelatedField, HyperlinkedIdentityField\n\nIncorrect type for relation key\n\n- 2161: PrimaryKeyRelatedField, HyperlinkedRelatedField, SlugRelatedField, HyperlinkedIdentityField\n\nCouldn't match url or name to a view\n\n- 2171: HyperlinkedRelatedField, HyperlinkedIdentityField\n\nExpected a DateTime, got Date\n\n- 2181: DateTimeField\n\nExcpected a Date, got DateTime\n\n- 2191: DateField\n\nToo many digits for defined Decimal\n\n- 2201: DecimalField\n\nToo many whole digits for defined Decimal\n\n- 2211: DecimalField\n\nToo many decimal digits for defined Decimal\n\n- 2221: DecimalField\n\nDefault built-in validators error codes\n---------------------------------------\n\n- UniqueValidator: 3001\n- UniqueTogetherValidator: 3003\n- UniqueForDateValidator: 3004\n- UniqueForMonthValidator: 3004\n- UniqueForYearValidator: 3005\n- RegexValidator: 3006\n- EmailValidator: 3007\n- URLValidator: 3008\n- MaxValueValidator: 3009\n- MinValueValidator: 3010\n- MaxLengthValidator: 3011\n- MinLengthValidator: 3012\n- DecimalValidator: 3013\n- validate_email: 3014\n- validate_slug: 3015\n- validate_unicode_slug: 3016\n- validate_ipv4_address: 3017\n- validate_ipv46_address: 3018\n- validate_comma_separated_integer_list: 3019\n- int_list_validator: 3020\n\nOther error codes not related to serializer validation\n------------------------------------------------------\n- Server Error: 4000\n- Parser Error (exception was raised by Parser class): 4001,\n- Authentication Failed (invalid credentials were provided): 4002,\n- Not Authenticated (no credentials were provided): 4003,\n- Not Found: 4004,\n- HTTP 404: 4004,\n- Permission Denied: 4005,\n- Method Not Allowed (invalid HTTP method): 4006,\n- Not Acceptable (Could not satisfy the request Accept header): 4007,\n- Unsupported Media-Type: 4008,\n- Throttled (Too many requests): 4009\n\nTests\n-----\n\nPull requests won't be accepted without passing tests. You can run the test suite with:\n\n.. code:: python\n\n python runtests.py\n\n.. _Django Rest framework: http://django-rest-framework.org/\n\nContributors\n------------\n- Geoffrey Leh\u00e9e \n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "drf-friendly-errors-mod", "package_url": "https://pypi.org/project/drf-friendly-errors-mod/", "platform": "", "project_url": "https://pypi.org/project/drf-friendly-errors-mod/", "project_urls": null, "release_url": "https://pypi.org/project/drf-friendly-errors-mod/0.13.10/", "requires_dist": null, "requires_python": "", "summary": "Extension for displaying serializer validation errors in Django Rest Framework", "version": "0.13.10" }, "last_serial": 4945592, "releases": { "0.13.1": [ { "comment_text": "", "digests": { "md5": "c35be2c6b89af87e8a581cd583cd7ebe", "sha256": "f6446dd10be5d17e10b11a1f067d5ea29b158f4becedefaead1c07401ae47add" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c35be2c6b89af87e8a581cd583cd7ebe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8504, "upload_time": "2019-03-05T14:27:45", "url": "https://files.pythonhosted.org/packages/dd/44/3ed6fc83887e4c01a83480730a28b11b34a30ffccc0f5176d4d102eb1fb1/drf_friendly_errors_mod-0.13.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "132543bd3c945e6f13b4b89e4654180e", "sha256": "7d192e99b022b243e45d70f8a330f3921305ec886faaf4825d4fe2faf8b33769" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.1.tar.gz", "has_sig": false, "md5_digest": "132543bd3c945e6f13b4b89e4654180e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9428, "upload_time": "2019-03-05T14:27:47", "url": "https://files.pythonhosted.org/packages/48/a2/3df48bbcebb19aee633d4356c73494918d0e0dec00f95dae1b14066d0d7d/drf-friendly-errors-mod-0.13.1.tar.gz" } ], "0.13.10": [ { "comment_text": "", "digests": { "md5": "e9140b878e76fc00c737d7662a8f384f", "sha256": "2fcc6f21b56dcd6a63dc03557c5cac315576a62aa0868992e679ef1aec1b0816" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.10-py3-none-any.whl", "has_sig": false, "md5_digest": "e9140b878e76fc00c737d7662a8f384f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11232, "upload_time": "2019-03-15T18:46:04", "url": "https://files.pythonhosted.org/packages/b6/f0/085893a15d94c6d398c05365a4598ac689031bd33af872e7a8d9bf972f4d/drf_friendly_errors_mod-0.13.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee75c70c5d5f421a21f6133ddcc1f94b", "sha256": "f329dc903eb2fd2979d5e8e5494199306de41db040997fe5ed30887aad0e9470" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.10.tar.gz", "has_sig": false, "md5_digest": "ee75c70c5d5f421a21f6133ddcc1f94b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10621, "upload_time": "2019-03-15T18:46:06", "url": "https://files.pythonhosted.org/packages/ec/54/a49ddb20f7edd00fb412061c96774870b0efa90ba3f6ca382014baf428cc/drf-friendly-errors-mod-0.13.10.tar.gz" } ], "0.13.2": [ { "comment_text": "", "digests": { "md5": "890581fa9ebf2d134ab624b86f90898c", "sha256": "679f46deda56183bef0d3cb94095b5722a17f40d493f590812f4a34420ff63ce" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.2-py3-none-any.whl", "has_sig": false, "md5_digest": "890581fa9ebf2d134ab624b86f90898c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11130, "upload_time": "2019-03-05T17:27:48", "url": "https://files.pythonhosted.org/packages/9d/bb/4fe94f0179063234200c52355f7b20ed86d4faded4597ee9b6e5a54c713f/drf_friendly_errors_mod-0.13.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5bbe1778855a62ab14eeba023123d6f", "sha256": "3678bf26cc895bdf8efac8277bdf430c42638677cd8b1a79a2abb117336555a5" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.2.tar.gz", "has_sig": false, "md5_digest": "d5bbe1778855a62ab14eeba023123d6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10556, "upload_time": "2019-03-05T17:27:49", "url": "https://files.pythonhosted.org/packages/f3/7b/56714d49957c8ec727757724737b1561ebdb1e741e8dcbfab3fa6fc6e48e/drf-friendly-errors-mod-0.13.2.tar.gz" } ], "0.13.3": [ { "comment_text": "", "digests": { "md5": "3ddf0435f93ef43026da83de33244c71", "sha256": "9657f0895b58c35c6397eb057b508cfe148b2f96213dbf5f827b6679452a4401" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3ddf0435f93ef43026da83de33244c71", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11153, "upload_time": "2019-03-06T14:14:34", "url": "https://files.pythonhosted.org/packages/a3/da/e868c724c376574ed235055ae0beaa4463b5d287135dd60034a222f3cb29/drf_friendly_errors_mod-0.13.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2f4ff6910ace9ea9458f83abf1a773bb", "sha256": "f006721e061c5776bc17aad0f56901d8a72863b532b6fb6ea8a935c367670de9" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.3.tar.gz", "has_sig": false, "md5_digest": "2f4ff6910ace9ea9458f83abf1a773bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10572, "upload_time": "2019-03-06T14:14:35", "url": "https://files.pythonhosted.org/packages/61/9b/6b6b355e3838803db6d689a7c1c5fe000778e20d6d7e4e739d988b4ed880/drf-friendly-errors-mod-0.13.3.tar.gz" } ], "0.13.4": [ { "comment_text": "", "digests": { "md5": "79f14ce3f4d67e2f66a7b4d27a0b27d7", "sha256": "3bafe318e790d4455ff5c841473699bbf99adaebbd90dfd8700d270784c659a5" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.4-py3-none-any.whl", "has_sig": false, "md5_digest": "79f14ce3f4d67e2f66a7b4d27a0b27d7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11166, "upload_time": "2019-03-13T12:20:00", "url": "https://files.pythonhosted.org/packages/4e/81/f29fb48517994fc465ba5b608ac547555186729b52970f8ac63300edad22/drf_friendly_errors_mod-0.13.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b6a8dd01fd7a58624bab623b24e4bcb1", "sha256": "cf740d6228204b9f46da6eeafbbe7c6ae5e73568e4e4b45b0847ea0c9c17cdc4" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.4.tar.gz", "has_sig": false, "md5_digest": "b6a8dd01fd7a58624bab623b24e4bcb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10573, "upload_time": "2019-03-13T12:20:02", "url": "https://files.pythonhosted.org/packages/d0/d5/a5f474642bfc4f72270556bf2fd469a5d7ee663a580529c6b6b274c15a82/drf-friendly-errors-mod-0.13.4.tar.gz" } ], "0.13.5": [ { "comment_text": "", "digests": { "md5": "69f0f05aa5fcd92c4096b7dab4c14180", "sha256": "2d97d5a411548ea2dd2d403b5955809ae56526590573dc54702acd59f1b7bba8" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.5-py3-none-any.whl", "has_sig": false, "md5_digest": "69f0f05aa5fcd92c4096b7dab4c14180", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11178, "upload_time": "2019-03-13T14:32:12", "url": "https://files.pythonhosted.org/packages/f7/7c/7c9a06f48b3e8ac15cbeba9dd3e75515d49514b23d0a6f35f1f895d413b9/drf_friendly_errors_mod-0.13.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c25a92a1c4967bbb2a53502038b138c4", "sha256": "80ac70bb7e5984bf9c548c693f79e38f04e786e8ed4a1445196a22e5623b48c6" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.5.tar.gz", "has_sig": false, "md5_digest": "c25a92a1c4967bbb2a53502038b138c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10590, "upload_time": "2019-03-13T14:32:13", "url": "https://files.pythonhosted.org/packages/94/99/77f039bce70530bd97a9fdea73b4cd570757755559996b1254dd14482c0c/drf-friendly-errors-mod-0.13.5.tar.gz" } ], "0.13.6": [ { "comment_text": "", "digests": { "md5": "c904c00a23f98512b7cc49d58ace497d", "sha256": "22762e090112c2a282f6dcbeda8107ec87a933a60fc362435e1d2697d3b00e95" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.6-py3-none-any.whl", "has_sig": false, "md5_digest": "c904c00a23f98512b7cc49d58ace497d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11205, "upload_time": "2019-03-13T17:57:15", "url": "https://files.pythonhosted.org/packages/70/09/ddc3e5037dadbb6c1c840d62a853a0ba2cda3293299a378564ad754e3f74/drf_friendly_errors_mod-0.13.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "650fea93036cc3c7db2220069325ec9d", "sha256": "b6e78b79befd4002343bf725435be6fda98d4dd2a1e0000bdda52c247e807c3d" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.6.tar.gz", "has_sig": false, "md5_digest": "650fea93036cc3c7db2220069325ec9d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10615, "upload_time": "2019-03-13T17:57:16", "url": "https://files.pythonhosted.org/packages/98/56/53fa41f668d3ebcc330abb3652fa6cf0c47a83f8089c6225506c1f8c13de/drf-friendly-errors-mod-0.13.6.tar.gz" } ], "0.13.7": [ { "comment_text": "", "digests": { "md5": "1b315ead9be8dc64e7ab380a9a5219af", "sha256": "0a276c153439998453fcd5a00ca2e0ecf5ff97a92378bcb9f9d4ee3f5916ac9b" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.7-py3-none-any.whl", "has_sig": false, "md5_digest": "1b315ead9be8dc64e7ab380a9a5219af", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11209, "upload_time": "2019-03-14T15:20:50", "url": "https://files.pythonhosted.org/packages/4c/61/8afe3d05c92f37f41a1ae0af7716af5af666c226ee25f4a6c89d160c7451/drf_friendly_errors_mod-0.13.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f4a7e4c480f10391a6af02657783ed25", "sha256": "d6cff5b4878b3ac7c5c55410f9fa2c0c5f84d261fb8c05edfd6b82b8a83f04ab" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.7.tar.gz", "has_sig": false, "md5_digest": "f4a7e4c480f10391a6af02657783ed25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10612, "upload_time": "2019-03-14T15:20:51", "url": "https://files.pythonhosted.org/packages/5c/54/521db0c543291abe321ab4ff55da7c97e6daf268105cfc35731bb1303e00/drf-friendly-errors-mod-0.13.7.tar.gz" } ], "0.13.8": [ { "comment_text": "", "digests": { "md5": "fc018cd4dc8d1d85bdc96770dfa58e31", "sha256": "d5290a89a27fad44bd781e064a9c81fd5d9bb9669967d5fdae3051759d9c6d92" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.8-py3-none-any.whl", "has_sig": false, "md5_digest": "fc018cd4dc8d1d85bdc96770dfa58e31", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11178, "upload_time": "2019-03-14T17:46:56", "url": "https://files.pythonhosted.org/packages/44/d7/1c2c7d92be9c757f2543d1b3a37e668f0a796b27d3cd049438b4389fb52e/drf_friendly_errors_mod-0.13.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80c056aae23ec5212beee6463e132d6f", "sha256": "1240c60a133190ccd4dde7c499dc27ab5b653df5c35f6cb134f64a4da1e78a01" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.8.tar.gz", "has_sig": false, "md5_digest": "80c056aae23ec5212beee6463e132d6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10582, "upload_time": "2019-03-14T17:47:00", "url": "https://files.pythonhosted.org/packages/67/73/90330d2a68e74a176c624a1a099c82dd5736d3c60e17988e59e4ec91be06/drf-friendly-errors-mod-0.13.8.tar.gz" } ], "0.13.9": [ { "comment_text": "", "digests": { "md5": "ad06a95b25bb1e6faa2a82e8479fddc3", "sha256": "acc44f4d22d695dc0343f11f00687d38eed46b3f64058fe77d90c0b6c67800df" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.9-py3-none-any.whl", "has_sig": false, "md5_digest": "ad06a95b25bb1e6faa2a82e8479fddc3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11220, "upload_time": "2019-03-14T18:52:38", "url": "https://files.pythonhosted.org/packages/de/e5/a887e173f1600226481360ee8d6f0750713d4df6dbea8f7674dafbe7f75c/drf_friendly_errors_mod-0.13.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3984b43879df5d265bb5a8573df6df88", "sha256": "113ebbe413fcd00cf93ae89ea133c43c01511b0dd14ea8e4b4569a6666d7c4dc" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.9.tar.gz", "has_sig": false, "md5_digest": "3984b43879df5d265bb5a8573df6df88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10617, "upload_time": "2019-03-14T18:52:40", "url": "https://files.pythonhosted.org/packages/cf/df/312b2b9bcefe76283f637048dfda671b50a787d209a19484f25269746e0d/drf-friendly-errors-mod-0.13.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e9140b878e76fc00c737d7662a8f384f", "sha256": "2fcc6f21b56dcd6a63dc03557c5cac315576a62aa0868992e679ef1aec1b0816" }, "downloads": -1, "filename": "drf_friendly_errors_mod-0.13.10-py3-none-any.whl", "has_sig": false, "md5_digest": "e9140b878e76fc00c737d7662a8f384f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11232, "upload_time": "2019-03-15T18:46:04", "url": "https://files.pythonhosted.org/packages/b6/f0/085893a15d94c6d398c05365a4598ac689031bd33af872e7a8d9bf972f4d/drf_friendly_errors_mod-0.13.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee75c70c5d5f421a21f6133ddcc1f94b", "sha256": "f329dc903eb2fd2979d5e8e5494199306de41db040997fe5ed30887aad0e9470" }, "downloads": -1, "filename": "drf-friendly-errors-mod-0.13.10.tar.gz", "has_sig": false, "md5_digest": "ee75c70c5d5f421a21f6133ddcc1f94b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10621, "upload_time": "2019-03-15T18:46:06", "url": "https://files.pythonhosted.org/packages/ec/54/a49ddb20f7edd00fb412061c96774870b0efa90ba3f6ca382014baf428cc/drf-friendly-errors-mod-0.13.10.tar.gz" } ] }