{ "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 \"age\": [\"This field may not be null.\"]\n \"description\": [\"Ensure this field has no more than 100 characters.\"]\n }\n\ninto\n\n.. code:: python\n\n {\n \"code\" : 1001,\n \"message\" : \"Validation Failed\",\n \"errors\" : [\n {\n \"code\" : 2002,\n \"field\" : \"name\",\n \"message\" : \"This field is required.\"\n },\n {\n \"code\" : 2031,\n \"field\" : \"password\",\n \"message\" : \"This field may not be blank.\"\n },\n {\n \"code\" : 2023,\n \"field\" : \"age\",\n \"message\" : \"This field may not be null.\"\n },\n {\n \"code\" : 2041,\n \"field\" : \"description\",\n \"message\" : \"Ensure this field has no more than 100 characters.\"\n },\n ]\n }\n\nLibrary handles all `Django REST framework`_ built-in serializer validation.\n\nRequirements\n------------\n- Python (2.7, 3.4)\n- Django (1.8, 1.9)\n- Django REST framework (3.3)\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\n\nUsage\n-----\n\nSimply add a FriendlyErrorMessagesMixin to your serializer or model serializer class\n\n.. code:: python\n\n from rest_framework_friendly_errors.mixins import FriendlyErrorMessagesMixin\n\n class MySerializer(FriendlyErrorMessagesMixin, 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(FriendlyErrorMessagesMixin,\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(FriendlyErrorMessagesMixin,\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.friendly_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, 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: EmailField, 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, 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, RegexField, SlugField, URLField, UUIDField, IPAddressField\n\nField data is too long string\n\n- 2041: CharField, EmailField, 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, 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- 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 ", "description_content_type": null, "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", "package_url": "https://pypi.org/project/drf-friendly-errors/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/drf-friendly-errors/", "project_urls": null, "release_url": "https://pypi.org/project/drf-friendly-errors/0.13/", "requires_dist": null, "requires_python": "", "summary": "Extension for displaying serializer validation errors in Django Rest Framework", "version": "0.13" }, "last_serial": 2748928, "releases": { "0.10": [ { "comment_text": "", "digests": { "md5": "551a406d6e32bd35b9380936ad329915", "sha256": "79386ccb291eb55823ad915108409626249d63b62d3fd0de2f48b64ce6c21c0a" }, "downloads": -1, "filename": "drf_friendly_errors-0.10-py2-none-any.whl", "has_sig": false, "md5_digest": "551a406d6e32bd35b9380936ad329915", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7930, "upload_time": "2016-02-22T11:40:04", "url": "https://files.pythonhosted.org/packages/aa/20/9883aac4d80cf42bbd86b7c0789c877398ae902dd5f628951632254925c8/drf_friendly_errors-0.10-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "982f850c4f6c2d37c23f02ecf8529e4f", "sha256": "205442ca76010578e976f7def38aa4265ead54658d96634f4ad854c69fe45bde" }, "downloads": -1, "filename": "drf-friendly-errors-0.10.tar.gz", "has_sig": false, "md5_digest": "982f850c4f6c2d37c23f02ecf8529e4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5745, "upload_time": "2016-02-22T11:40:15", "url": "https://files.pythonhosted.org/packages/ba/eb/4ad2af0ab5245bb6c95cd679097de0f5976c41defeeeb25948ba491808f0/drf-friendly-errors-0.10.tar.gz" } ], "0.11": [ { "comment_text": "", "digests": { "md5": "a31455adad3bfc33a179d57ebb9a0994", "sha256": "d2aac21c9b2e3a80a2056290997fd1b864f9d4373faed7a3cb9a3bbd740046cb" }, "downloads": -1, "filename": "drf_friendly_errors-0.11-py2-none-any.whl", "has_sig": false, "md5_digest": "a31455adad3bfc33a179d57ebb9a0994", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8096, "upload_time": "2016-03-23T13:23:45", "url": "https://files.pythonhosted.org/packages/a6/63/9b3e63f9c2f827e1653a3a0275ddc30e4bc6e226ce87a28f79a072a35349/drf_friendly_errors-0.11-py2-none-any.whl" } ], "0.12": [ { "comment_text": "", "digests": { "md5": "662da7fe733c1c20452f4697d267bd92", "sha256": "7a561027312bbad0877ccb08d51c7f75dc806c0341c5df867e041295f7927ce4" }, "downloads": -1, "filename": "drf_friendly_errors-0.12-py2-none-any.whl", "has_sig": false, "md5_digest": "662da7fe733c1c20452f4697d267bd92", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8235, "upload_time": "2016-04-14T06:39:25", "url": "https://files.pythonhosted.org/packages/39/27/a3c5e25c991e4ea9ddc07e1f765df9f5c7769d6251743b36fd1deb0e3074/drf_friendly_errors-0.12-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cc18542ede9ffab1291d5e9f4419baa6", "sha256": "30c9a124becd0a877cb3c514422ddbb37c47e8ef426bdc2bd30a677c72f8672d" }, "downloads": -1, "filename": "drf-friendly-errors-0.12.tar.gz", "has_sig": false, "md5_digest": "cc18542ede9ffab1291d5e9f4419baa6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9047, "upload_time": "2016-04-14T06:39:38", "url": "https://files.pythonhosted.org/packages/16/86/d6dac6cb5f5b2805f1d5fc72a5a77f41ceb40697cf7d304f2f820fe111b2/drf-friendly-errors-0.12.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "c0f0d6b08d3480b8f2a92d60016e7644", "sha256": "050e1c7e51bd76ee29e2319599dffe948bba673a199fcd64bd98fd642c5a333a" }, "downloads": -1, "filename": "drf_friendly_errors-0.12.1-py2-none-any.whl", "has_sig": false, "md5_digest": "c0f0d6b08d3480b8f2a92d60016e7644", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8274, "upload_time": "2016-08-01T10:07:33", "url": "https://files.pythonhosted.org/packages/5a/0a/4fcfb30f9f922481887d2c658cc8bd02480399b7445e2046da79ed77ca5e/drf_friendly_errors-0.12.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9edae475bcac6a61b936c77b77410db4", "sha256": "982d55eb7075455bffcec2297046e7d847e08d405c6ba4bd2d0ce1f2e6ae70d1" }, "downloads": -1, "filename": "drf-friendly-errors-0.12.1.tar.gz", "has_sig": false, "md5_digest": "9edae475bcac6a61b936c77b77410db4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9070, "upload_time": "2016-08-01T10:07:36", "url": "https://files.pythonhosted.org/packages/41/68/e0b080af16497ab8a2051afaa2949bb294a52b4fcf8ba4bd6e3edf6bd9bf/drf-friendly-errors-0.12.1.tar.gz" } ], "0.13": [ { "comment_text": "", "digests": { "md5": "0bbd16d4fb03cb166b0e8e2eb32c74f5", "sha256": "3ac6b2d99040e6eefe0867faf233c961d6e0004a857d91f57802cbd73ba2d310" }, "downloads": -1, "filename": "drf_friendly_errors-0.13-py2-none-any.whl", "has_sig": false, "md5_digest": "0bbd16d4fb03cb166b0e8e2eb32c74f5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8266, "upload_time": "2017-04-03T09:13:13", "url": "https://files.pythonhosted.org/packages/0b/8f/f98a2ba9df9b62706bab16d6ed3de34db2005769ade2e1d271caf32679d7/drf_friendly_errors-0.13-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "02d18653e7abd8142c700592eacbcdc7", "sha256": "f56b225b1ac7f2724b9e0c19ccda87285b69f4b4e31a5bd6ffd51edeef41598c" }, "downloads": -1, "filename": "drf-friendly-errors-0.13.tar.gz", "has_sig": false, "md5_digest": "02d18653e7abd8142c700592eacbcdc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9186, "upload_time": "2017-04-03T09:13:15", "url": "https://files.pythonhosted.org/packages/3c/14/b5879dc5bf5d6bb18adf3366f428f8eb0116230d0fe09f3e920fb68eebdb/drf-friendly-errors-0.13.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "fccd84f3b50d6557ce4e8c6e9e731147", "sha256": "d112b0e8bd0c11abb06306a39dc6e3973336632fe2e7e8dc0dbd78982a884944" }, "downloads": -1, "filename": "drf_friendly_errors-0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "fccd84f3b50d6557ce4e8c6e9e731147", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7910, "upload_time": "2016-02-08T09:52:53", "url": "https://files.pythonhosted.org/packages/bd/97/a518a1d96dedebb4672bba04938a30296268468693004bae5e4b4a2f4088/drf_friendly_errors-0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ac97d5a8de7e397e51f7090166d8404", "sha256": "519834e85b09fa360cc192ed588e01d9702fb73ec5f5049ec65680ddc70291dc" }, "downloads": -1, "filename": "drf-friendly-errors-0.4.tar.gz", "has_sig": false, "md5_digest": "0ac97d5a8de7e397e51f7090166d8404", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5764, "upload_time": "2016-02-08T09:53:04", "url": "https://files.pythonhosted.org/packages/83/90/5510294eea6a451850f2a52d5fab8c49c448d8440616a51d3ec113eed97a/drf-friendly-errors-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "f43309aad60a54c7f9ad30689e4499a2", "sha256": "330002038449bc1c2ee3c964acffe45eff0f14b1059f3a04869330da2d167174" }, "downloads": -1, "filename": "drf_friendly_errors-0.5-py2-none-any.whl", "has_sig": false, "md5_digest": "f43309aad60a54c7f9ad30689e4499a2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7916, "upload_time": "2016-02-08T10:05:44", "url": "https://files.pythonhosted.org/packages/88/41/2b1fe3abca12836f6c5696f7456f6e733bfca1f058d0727dd2dbd79aeb2e/drf_friendly_errors-0.5-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7a57d99ca1219c84a414dd67b35eb31", "sha256": "78b53aad7e026c6bc0e5929c14de55a0eca854dcd7c61069b2e9d455728b0839" }, "downloads": -1, "filename": "drf-friendly-errors-0.5.tar.gz", "has_sig": false, "md5_digest": "d7a57d99ca1219c84a414dd67b35eb31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5764, "upload_time": "2016-02-08T10:05:55", "url": "https://files.pythonhosted.org/packages/b2/45/9e7f5921d14a6b09e8fdcc8dcc18e0f1719643721a75645cceaff1ad4b83/drf-friendly-errors-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "15e83551427e4a7235e80c339ae783b0", "sha256": "7cf133236dbb851eebb6a9dd817baa00bbd4ed9edb4f55b42f165a664673ad1e" }, "downloads": -1, "filename": "drf_friendly_errors-0.6-py2-none-any.whl", "has_sig": false, "md5_digest": "15e83551427e4a7235e80c339ae783b0", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 16978, "upload_time": "2016-02-08T15:53:33", "url": "https://files.pythonhosted.org/packages/0f/af/b4355dc530ff7ed64ab17471f2c221f9a2d485327ec4060c3f7f6c7a9ada/drf_friendly_errors-0.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17f01654f86af58cdfac83e9041fb1be", "sha256": "986bac55eae02ef64298bb73116ea4294785a84aee71b4d2a2fa7c6892d2c5aa" }, "downloads": -1, "filename": "drf-friendly-errors-0.6.tar.gz", "has_sig": false, "md5_digest": "17f01654f86af58cdfac83e9041fb1be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11873, "upload_time": "2016-02-08T15:53:39", "url": "https://files.pythonhosted.org/packages/03/a8/85791026772c67a6651c62d3e48400608f45633256611a442afcfe57aec1/drf-friendly-errors-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "ae0e453b72f293b574db493db923a0b5", "sha256": "b6ad6329bbac53f9b5342960c7276864f46fc99030996a4e2733ba22610e3d56" }, "downloads": -1, "filename": "drf_friendly_errors-0.7-py2-none-any.whl", "has_sig": false, "md5_digest": "ae0e453b72f293b574db493db923a0b5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 16964, "upload_time": "2016-02-09T16:17:42", "url": "https://files.pythonhosted.org/packages/2a/9b/c196985d3fa5bc5c9e44bae909b1dc64280195dad95a5e16634b74a0e464/drf_friendly_errors-0.7-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ffaaea35a9768546294c5ac8d5ba8b15", "sha256": "25ae2714c35706aac86317c3664419f5b34972b88707ef7f474f8cda3c0c80af" }, "downloads": -1, "filename": "drf-friendly-errors-0.7.tar.gz", "has_sig": false, "md5_digest": "ffaaea35a9768546294c5ac8d5ba8b15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11868, "upload_time": "2016-02-09T16:17:52", "url": "https://files.pythonhosted.org/packages/d5/9c/9aa4452dd91ebddab782baab22748f124db719e29abc51b9abc740004e67/drf-friendly-errors-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "55510566c25bd6441e61fcae440914f9", "sha256": "50cd33b4ad26292a054ff27cf05cfff570b29a943cac01ef408545127de24861" }, "downloads": -1, "filename": "drf_friendly_errors-0.8-py2-none-any.whl", "has_sig": false, "md5_digest": "55510566c25bd6441e61fcae440914f9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7925, "upload_time": "2016-02-11T19:42:09", "url": "https://files.pythonhosted.org/packages/41/78/d0b0cf955ba0c57eb383af9384325083f3cbcbd9e658c24d7ec07846ec14/drf_friendly_errors-0.8-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "594680ef0144a2162f7c87f20cbcf93c", "sha256": "d86fd82cd1ae56c799adcf31659108b3e8c0c007f90198dab4c587b9d719fe4e" }, "downloads": -1, "filename": "drf-friendly-errors-0.8.tar.gz", "has_sig": false, "md5_digest": "594680ef0144a2162f7c87f20cbcf93c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5736, "upload_time": "2016-02-11T19:42:14", "url": "https://files.pythonhosted.org/packages/82/6a/7e2c4da672124114f38dc17b6bba01c12a12ef63a10557632043431b590b/drf-friendly-errors-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "a3528b4126d986f0c99ee94acb56880d", "sha256": "b5b1420ea4e18f8826fb4732001863a2b6f74578afd0d73ba85e0325e30e54cb" }, "downloads": -1, "filename": "drf_friendly_errors-0.9-py2-none-any.whl", "has_sig": false, "md5_digest": "a3528b4126d986f0c99ee94acb56880d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7922, "upload_time": "2016-02-19T13:33:56", "url": "https://files.pythonhosted.org/packages/cf/35/8b92595eb587ef82bad3d080992a91244ade5628f4472d2ae71028fe1fa7/drf_friendly_errors-0.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9bfda9768c4ae239225fca8c492779a", "sha256": "0f97ad2f6390fda3830301be87ef8dd952eeb726df32b130a0204f0b2e9f2b9c" }, "downloads": -1, "filename": "drf-friendly-errors-0.9.tar.gz", "has_sig": false, "md5_digest": "f9bfda9768c4ae239225fca8c492779a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5746, "upload_time": "2016-02-19T13:34:00", "url": "https://files.pythonhosted.org/packages/57/a9/b31a341e8a01c43ed2591a6289bd4d74cadfd01fdcd596c70d40c5036d5e/drf-friendly-errors-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0bbd16d4fb03cb166b0e8e2eb32c74f5", "sha256": "3ac6b2d99040e6eefe0867faf233c961d6e0004a857d91f57802cbd73ba2d310" }, "downloads": -1, "filename": "drf_friendly_errors-0.13-py2-none-any.whl", "has_sig": false, "md5_digest": "0bbd16d4fb03cb166b0e8e2eb32c74f5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8266, "upload_time": "2017-04-03T09:13:13", "url": "https://files.pythonhosted.org/packages/0b/8f/f98a2ba9df9b62706bab16d6ed3de34db2005769ade2e1d271caf32679d7/drf_friendly_errors-0.13-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "02d18653e7abd8142c700592eacbcdc7", "sha256": "f56b225b1ac7f2724b9e0c19ccda87285b69f4b4e31a5bd6ffd51edeef41598c" }, "downloads": -1, "filename": "drf-friendly-errors-0.13.tar.gz", "has_sig": false, "md5_digest": "02d18653e7abd8142c700592eacbcdc7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9186, "upload_time": "2017-04-03T09:13:15", "url": "https://files.pythonhosted.org/packages/3c/14/b5879dc5bf5d6bb18adf3366f428f8eb0116230d0fe09f3e920fb68eebdb/drf-friendly-errors-0.13.tar.gz" } ] }