Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-drf-standardized-errors for
openSUSE:Factory checked in at 2026-04-12 17:53:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-drf-standardized-errors (Old)
and /work/SRC/openSUSE:Factory/.python-drf-standardized-errors.new.21863
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-drf-standardized-errors"
Sun Apr 12 17:53:01 2026 rev:2 rq:1346178 version:0.15.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-drf-standardized-errors/python-drf-standardized-errors.changes
2025-04-30 19:05:56.638232388 +0200
+++
/work/SRC/openSUSE:Factory/.python-drf-standardized-errors.new.21863/python-drf-standardized-errors.changes
2026-04-12 17:53:04.413026301 +0200
@@ -1,0 +2,12 @@
+Sun Apr 12 12:37:23 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 0.15.0:
+ * add support for python 3.13
+ * add support for django 5.2
+ * add support for DRF 3.16
+ * Unhandled exceptions now return a generic error message by
+ default. This avoids unintentionally leaking
+ sensitive data included in the exception message.
+- remove fix-test.patch (obsolete)
+
+-------------------------------------------------------------------
Old:
----
drf_standardized_errors-0.14.1.tar.gz
fix-test.patch
New:
----
drf_standardized_errors-0.15.0.tar.gz
----------(Old B)----------
Old: sensitive data included in the exception message.
- remove fix-test.patch (obsolete)
----------(Old E)----------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-drf-standardized-errors.spec ++++++
--- /var/tmp/diff_new_pack.fl8HSM/_old 2026-04-12 17:53:05.977089990 +0200
+++ /var/tmp/diff_new_pack.fl8HSM/_new 2026-04-12 17:53:05.977089990 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-drf-standardized-errors
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,17 +17,15 @@
Name: python-drf-standardized-errors
-Version: 0.14.1
+Version: 0.15.0
Release: 0
Summary: Standardize your API error responses
License: MIT
URL: https://github.com/ghazi-git/drf-standardized-errors
Source:
https://files.pythonhosted.org/packages/source/d/drf-standardized-errors/drf_standardized_errors-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM
https://github.com/ghazi-git/drf-standardized-errors/pull/96 fix
test_openapi_utils
-Patch: fix-test.patch
-BuildRequires: python-rpm-macros
BuildRequires: %{python_module flit-core >= 3.2}
BuildRequires: %{python_module pip}
+BuildRequires: python-rpm-macros
# SECTION test requirements
BuildRequires: %{python_module Django >= 3.2}
BuildRequires: %{python_module django-filter}
++++++ drf_standardized_errors-0.14.1.tar.gz ->
drf_standardized_errors-0.15.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/.github/workflows/tests.yml
new/drf_standardized_errors-0.15.0/.github/workflows/tests.yml
--- old/drf_standardized_errors-0.14.1/.github/workflows/tests.yml
2024-03-24 17:07:14.178439100 +0100
+++ new/drf_standardized_errors-0.15.0/.github/workflows/tests.yml
2025-06-04 09:21:28.971057400 +0200
@@ -10,7 +10,7 @@
strategy:
matrix:
platform: [ ubuntu-latest, macos-latest, windows-latest ]
- python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ]
+ python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12", "3.13" ]
steps:
- uses: actions/checkout@v4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/.pre-commit-config.yaml
new/drf_standardized_errors-0.15.0/.pre-commit-config.yaml
--- old/drf_standardized_errors-0.14.1/.pre-commit-config.yaml 2024-08-10
18:16:58.223908200 +0200
+++ new/drf_standardized_errors-0.15.0/.pre-commit-config.yaml 2025-06-04
09:21:28.971057400 +0200
@@ -2,27 +2,27 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.6.0
+ rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- repo: https://github.com/Zac-HD/shed
- rev: 2024.3.1
+ rev: 2024.10.1
hooks:
- id: shed
additional_dependencies: [ 'black~=24.3' ]
types_or: [ python, pyi, markdown, rst ]
- repo: https://github.com/PyCQA/flake8
- rev: 7.1.1
+ rev: 7.2.0
hooks:
- id: flake8
args: [ --max-line-length, '120' , --ignore, 'E,W']
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.11.1
+ rev: v1.16.0
hooks:
- id: mypy
args: [ --ignore-missing-imports, --check-untyped-defs,
--disallow-incomplete-defs ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/PKG-INFO
new/drf_standardized_errors-0.15.0/PKG-INFO
--- old/drf_standardized_errors-0.14.1/PKG-INFO 1970-01-01 01:00:00.000000000
+0100
+++ new/drf_standardized_errors-0.15.0/PKG-INFO 1970-01-01 01:00:00.000000000
+0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
Name: drf-standardized-errors
-Version: 0.14.1
+Version: 0.15.0
Summary: Standardize your API error responses.
Keywords: standardized errors,errors formatter,django rest framework,exception
handler
Author: Ghazi Abbassi
@@ -14,6 +14,8 @@
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
+Classifier: Programming Language :: Python :: 3.13
+License-File: LICENSE
Requires-Dist: django >=3.2
Requires-Dist: djangorestframework >=3.12
Requires-Dist: pre-commit ; extra == "dev"
@@ -21,7 +23,7 @@
Requires-Dist: sphinx-autobuild ; extra == "doc"
Requires-Dist: sphinx-rtd-theme>=1.1.0 ; extra == "doc"
Requires-Dist: myst-parser ; extra == "doc"
-Requires-Dist: drf-spectacular>=0.27.0 ; extra == "openapi"
+Requires-Dist: drf-spectacular>=0.27.1 ; extra == "openapi"
Requires-Dist: inflection ; extra == "openapi"
Requires-Dist: flit ; extra == "release"
Requires-Dist: keyring ; extra == "release"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/docs/changelog.md
new/drf_standardized_errors-0.15.0/docs/changelog.md
--- old/drf_standardized_errors-0.14.1/docs/changelog.md 2024-08-10
18:46:27.342139500 +0200
+++ new/drf_standardized_errors-0.15.0/docs/changelog.md 2025-06-09
09:45:41.652574300 +0200
@@ -6,10 +6,57 @@
## [UNRELEASED]
+## [0.15.0] - 2025-06-09
+### Added
+- add support for python 3.13
+- add support for django 5.2
+- add support for DRF 3.16
+
+### Changed (backward-incompatible)
+- Unhandled exceptions now return a generic error message by default. This
avoids unintentionally leaking
+sensitive data included in the exception message. To revert to the old
behavior or change the default error
+message:
+ - create a custom exception handler class
+ ```python
+ from rest_framework.exceptions import APIException
+ from drf_standardized_errors.handler import ExceptionHandler
+
+ class MyExceptionHandler(ExceptionHandler):
+ def convert_unhandled_exceptions(self, exc: Exception) -> APIException:
+ if not isinstance(exc, APIException):
+ # `return APIException(detail=str(exc))` restores the old
behavior
+ return APIException(detail="New error message")
+ else:
+ return exc
+ ```
+ - Then, update the settings to point to your exception handler class
+ ```python
+ DRF_STANDARDIZED_ERRORS = {
+ # ...
+ "EXCEPTION_HANDLER_CLASS": "path.to.MyExceptionHandler"
+ }
+ ```
+- set minimum version of drf-spectacular to 0.27.1
+- `drf_standardized_errors.types.ErrorType` is now the following type hint
+ ```python
+ from typing import Literal
+ ErrorType = Literal["validation_error", "client_error", "server_error"]
+ ```
+ `ErrorType` was previously an enum. If you referenced its members in your
code, make sure to replace their
+ use cases with the newly added constants:
+ ```
+ from drf_standardized_errors.types import VALIDATION_ERROR, CLIENT_ERROR,
SERVER_ERROR
+ ErrorType.VALIDATION_ERROR --> VALIDATION_ERROR
+ ErrorType.CLIENT_ERROR --> CLIENT_ERROR
+ ErrorType.SERVER_ERROR --> SERVER_ERROR
+ ```
+
## [0.14.1] - 2024-08-10
+### Added
+- declare support for django 5.1
+
### Fixed
- stop ignoring exceptions with detail as an empty string when returning api
errors.
-- declare support for django 5.1
## [0.14.0] - 2024-06-19
### Added
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/docs/faq.md
new/drf_standardized_errors-0.15.0/docs/faq.md
--- old/drf_standardized_errors-0.14.1/docs/faq.md 1970-01-01
01:00:00.000000000 +0100
+++ new/drf_standardized_errors-0.15.0/docs/faq.md 2025-06-04
09:21:28.972114600 +0200
@@ -0,0 +1,68 @@
+# FAQs
+
+## Standardized errors are not shown in local development
+
+By default, standardized error responses when `DEBUG=True` for unhandled
exceptions are disabled.
+That is to allow you to get more information out of the traceback. You can
enable standardized errors
+instead with:
+
+```python
+DRF_STANDARDIZED_ERRORS = {"ENABLE_IN_DEBUG_FOR_UNHANDLED_EXCEPTIONS": True}
+```
+
+
+## Some exceptions are not converted to the standardized format
+
+This package is a DRF exception handler, so it only standardizes errors that
reach a DRF API view.
+That means it cannot handle errors that happen at the middleware level for
example. To handle those
+as well, you can customize the necessary [django error
views](https://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views).
+You can find more about that in [this
issue](https://github.com/ghazi-git/drf-standardized-errors/issues/44).
+
+
+## I want to let exceptions propagate up the middleware stack
+
+This might be needed when code written in middleware adds custom logic based
on raised exceptions
+(either by you or by a third party package). In that case, it is possible to
allow the exception
+to pass through the DRF exception handler and later convert it to the
corresponding error response
+in django error views. You can check [this
issue](https://github.com/ghazi-git/drf-standardized-errors/issues/91#issuecomment-2397956441)
for sample code.
+
+
+## How can I add extra details about the exception in the error response
+
+This can be done using a custom exception along with a custom exception
formatter. You can find sample
+code in [this
issue](https://github.com/ghazi-git/drf-standardized-errors/issues/95#issuecomment-2661633736).
+Note that this does not work with `ValidationError`s or its subclasses raised
in a serializer. That's
+because DRF creates new `ValidationError` instances when they are raised. See
+[here](https://github.com/encode/django-rest-framework/blob/f30c0e2eedda410a7e6a0d1b351377a9084361b4/rest_framework/serializers.py#L221-L231)
+and
[here](https://github.com/encode/django-rest-framework/blob/f30c0e2eedda410a7e6a0d1b351377a9084361b4/rest_framework/serializers.py#L443-L448).
+
+
+## How to integrate this package with djangorestframework-camel-case
+
+You can check this
[issue](https://github.com/ghazi-git/drf-standardized-errors/issues/59#issuecomment-1889826918)
+for a possible solution. Still, `djangorestframework-camel-case` is built to
work specifically with
+the default exception handler from DRF. It assumes that field names are the
keys in the returned dict.
+So, that does not work well with this package.
+
+
+## How can I change the default error message for unhandled exceptions
+
+You need to create a custom exception handler class
+```python
+from rest_framework.exceptions import APIException
+from drf_standardized_errors.handler import ExceptionHandler
+
+class MyExceptionHandler(ExceptionHandler):
+ def convert_unhandled_exceptions(self, exc: Exception) -> APIException:
+ if not isinstance(exc, APIException):
+ return APIException(detail="New error message")
+ else:
+ return exc
+```
+Then, update the settings to point to your exception handler class
+```python
+DRF_STANDARDIZED_ERRORS = {
+ # ...
+ "EXCEPTION_HANDLER_CLASS": "path.to.MyExceptionHandler"
+}
+```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/docs/index.md
new/drf_standardized_errors-0.15.0/docs/index.md
--- old/drf_standardized_errors-0.14.1/docs/index.md 2022-11-12
23:47:16.000000000 +0100
+++ new/drf_standardized_errors-0.15.0/docs/index.md 2025-06-04
09:21:28.973895500 +0200
@@ -8,6 +8,7 @@
settings.md
error_response.md
customization.md
+faq.md
gotchas.md
openapi.md
openapi_sample_description.md
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/docs/openapi.md
new/drf_standardized_errors-0.15.0/docs/openapi.md
--- old/drf_standardized_errors-0.14.1/docs/openapi.md 2024-01-01
20:50:13.453827600 +0100
+++ new/drf_standardized_errors-0.15.0/docs/openapi.md 2025-06-04
09:21:28.973895500 +0200
@@ -196,7 +196,7 @@
### Already using a custom `AutoSchema` class
If you're already overriding the `AutoSchema` class provided by
drf-spectacular, be sure to inherit from the
-AutoSchema class provided by this package instead. Also, if you're overriding
`get_examples` and/or
+AutoSchema class provided by this package instead. Also, if you're overriding
`_get_examples` and/or
`_get_response_bodies`, be sure to call `super`.
@@ -391,8 +391,8 @@
```
What remains is removing the default examples from the `AutoSchema` class or
generating new ones that match the new
-error response output. Removing the default examples is easy and can be done
by overriding `get_examples` and
-returning an empty list which leaves example generation up to the OpenAPI UI
used (swagger UI, redoc, ...). But,
+error response output. Removing the default examples is easy and can be done
by overriding `_get_error_response_examples`
+and returning an empty list which leaves example generation up to the OpenAPI
UI used (swagger UI, redoc, ...). But,
if you're picky about the examples and want to show that the `field_name`
attribute is always `null` for errors
other than validation errors, you can provide examples. Therefore, let's go
with generating new examples for
`403` and `404`.
@@ -403,7 +403,7 @@
class CustomAutoSchema(AutoSchema):
- def get_examples(self):
+ def _get_error_response_examples(self):
errors = [exceptions.PermissionDenied(), exceptions.NotFound()]
return [get_example_from_exception(error) for error in errors]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/drf_standardized_errors/__init__.py
new/drf_standardized_errors-0.15.0/drf_standardized_errors/__init__.py
--- old/drf_standardized_errors-0.14.1/drf_standardized_errors/__init__.py
2024-08-10 18:46:27.281890000 +0200
+++ new/drf_standardized_errors-0.15.0/drf_standardized_errors/__init__.py
2025-06-09 09:45:41.572369000 +0200
@@ -1,3 +1,3 @@
"""Standardize your API error responses."""
-__version__ = "0.14.1"
+__version__ = "0.15.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/drf_standardized_errors/formatter.py
new/drf_standardized_errors-0.15.0/drf_standardized_errors/formatter.py
--- old/drf_standardized_errors-0.14.1/drf_standardized_errors/formatter.py
2024-08-10 18:16:58.225808900 +0200
+++ new/drf_standardized_errors-0.15.0/drf_standardized_errors/formatter.py
2025-06-04 09:21:28.975020600 +0200
@@ -5,7 +5,15 @@
from rest_framework.status import is_client_error
from .settings import package_settings
-from .types import Error, ErrorResponse, ErrorType, ExceptionHandlerContext
+from .types import (
+ CLIENT_ERROR,
+ SERVER_ERROR,
+ VALIDATION_ERROR,
+ Error,
+ ErrorResponse,
+ ErrorType,
+ ExceptionHandlerContext,
+)
class ExceptionFormatter:
@@ -42,11 +50,11 @@
def get_error_type(self) -> ErrorType:
if isinstance(self.exc, exceptions.ValidationError):
- return ErrorType.VALIDATION_ERROR
+ return VALIDATION_ERROR
elif is_client_error(self.exc.status_code):
- return ErrorType.CLIENT_ERROR
+ return CLIENT_ERROR
else:
- return ErrorType.SERVER_ERROR
+ return SERVER_ERROR
def get_errors(self) -> List[Error]:
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/drf_standardized_errors/handler.py
new/drf_standardized_errors-0.15.0/drf_standardized_errors/handler.py
--- old/drf_standardized_errors-0.14.1/drf_standardized_errors/handler.py
2024-01-07 15:30:18.815524300 +0100
+++ new/drf_standardized_errors-0.15.0/drf_standardized_errors/handler.py
2025-06-04 09:21:28.976028200 +0200
@@ -75,7 +75,10 @@
has a 500 status code.
"""
if not isinstance(exc, exceptions.APIException):
- return exceptions.APIException(detail=str(exc))
+ # return a generic error message to avoid potentially leaking
sensitive
+ # data and match DRF/django behavior (same generic error message
returned
+ # by django.views.defaults.server_error)
+ return exceptions.APIException(detail="Server Error (500)")
else:
return exc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/drf_standardized_errors/types.py
new/drf_standardized_errors-0.15.0/drf_standardized_errors/types.py
--- old/drf_standardized_errors-0.14.1/drf_standardized_errors/types.py
2023-02-19 09:15:28.000000000 +0100
+++ new/drf_standardized_errors-0.15.0/drf_standardized_errors/types.py
2025-06-04 09:21:28.976028200 +0200
@@ -1,6 +1,5 @@
from dataclasses import dataclass
-from enum import Enum
-from typing import List, Optional, TypedDict
+from typing import Final, List, Literal, Optional, TypedDict
from rest_framework.request import Request
from rest_framework.views import APIView
@@ -13,10 +12,10 @@
request: Optional[Request]
-class ErrorType(str, Enum):
- VALIDATION_ERROR = "validation_error"
- CLIENT_ERROR = "client_error"
- SERVER_ERROR = "server_error"
+VALIDATION_ERROR: Final = "validation_error"
+CLIENT_ERROR: Final = "client_error"
+SERVER_ERROR: Final = "server_error"
+ErrorType = Literal["validation_error", "client_error", "server_error"]
@dataclass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/pyproject.toml
new/drf_standardized_errors-0.15.0/pyproject.toml
--- old/drf_standardized_errors-0.14.1/pyproject.toml 2024-08-10
18:46:27.281890000 +0200
+++ new/drf_standardized_errors-0.15.0/pyproject.toml 2025-06-09
09:45:41.572369000 +0200
@@ -22,6 +22,7 @@
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
]
dynamic = ["version", "description"]
requires-python = ">=3.8"
@@ -58,14 +59,14 @@
"tbump",
]
openapi = [
- "drf-spectacular>=0.27.0",
+ "drf-spectacular>=0.27.1",
"inflection",
]
[tool.tbump]
[tool.tbump.version]
-current = "0.14.1"
+current = "0.15.0"
regex = '''
(?P<major>\d+)
\.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/tests/test_openapi.py
new/drf_standardized_errors-0.15.0/tests/test_openapi.py
--- old/drf_standardized_errors-0.14.1/tests/test_openapi.py 2024-06-18
20:05:49.695811500 +0200
+++ new/drf_standardized_errors-0.15.0/tests/test_openapi.py 2025-06-04
09:21:28.978130000 +0200
@@ -630,6 +630,11 @@
assert response.status_code == 200
+def test_protected_schema_response(api_client):
+ response = api_client.get("/protected-schema/")
+ assert response.status_code == 403
+
+
@extend_schema_serializer(
examples=[
OpenApiExample(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/tests/test_openapi_utils.py
new/drf_standardized_errors-0.15.0/tests/test_openapi_utils.py
--- old/drf_standardized_errors-0.14.1/tests/test_openapi_utils.py
2024-06-18 20:06:15.328114000 +0200
+++ new/drf_standardized_errors-0.15.0/tests/test_openapi_utils.py
2025-06-04 09:21:28.978130000 +0200
@@ -1,6 +1,7 @@
import sys
from unittest import mock
+import django
import pytest
from django import forms
from django.contrib.auth.models import User
@@ -515,7 +516,14 @@
assert slug.error_codes == {"invalid", "null_characters_not_allowed"}
assert regex.error_codes == {"invalid", "required",
"null_characters_not_allowed"}
assert uuid.error_codes == {"invalid", "required",
"null_characters_not_allowed"}
- assert ip.error_codes == {"invalid", "null_characters_not_allowed"}
+ if django.VERSION >= (4, 2):
+ assert ip.error_codes == {
+ "invalid",
+ "null_characters_not_allowed",
+ "max_length",
+ }
+ else:
+ assert ip.error_codes == {"invalid", "null_characters_not_allowed"}
class NumberForm(forms.Form):
@@ -587,7 +595,10 @@
class MultiValueForm(forms.Form):
split = forms.SplitDateTimeField()
- disabled = forms.URLField(disabled=True)
+ if django.VERSION >= (5, 0):
+ disabled = forms.URLField(disabled=True, assume_scheme="https")
+ else:
+ disabled = forms.URLField(disabled=True)
def test_multi_value_fields_with_error_codes():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/drf_standardized_errors-0.14.1/tests/test_settings.py
new/drf_standardized_errors-0.15.0/tests/test_settings.py
--- old/drf_standardized_errors-0.14.1/tests/test_settings.py 2022-11-12
23:47:16.000000000 +0100
+++ new/drf_standardized_errors-0.15.0/tests/test_settings.py 2025-06-04
09:21:28.979192500 +0200
@@ -41,7 +41,7 @@
assert response.status_code == 500
assert response.data["type"] == "server_error"
assert response.data["code"] == "error"
- assert response.data["message"] == "Internal server error."
+ assert response.data["message"] == "Server Error (500)"
assert response.data["field_name"] is None
@@ -82,7 +82,7 @@
assert len(response.data["errors"]) == 1
error = response.data["errors"][0]
assert error["code"] == "error"
- assert error["detail"] == "Internal server error."
+ assert error["detail"] == "Server Error (500)"
assert error["attr"] is None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/tests/urls.py
new/drf_standardized_errors-0.15.0/tests/urls.py
--- old/drf_standardized_errors-0.14.1/tests/urls.py 2024-06-29
14:44:53.617765200 +0200
+++ new/drf_standardized_errors-0.15.0/tests/urls.py 2025-06-04
09:21:28.979192500 +0200
@@ -1,5 +1,6 @@
from django.urls import path
from drf_spectacular.views import SpectacularAPIView
+from rest_framework.permissions import IsAdminUser
from .views import (
AuthErrorView,
@@ -18,4 +19,8 @@
path("rate-limit-error/", RateLimitErrorView.as_view()),
path("recursion-error/", RecursionView.as_view()),
path("schema/", SpectacularAPIView.as_view(), name="api-schema"),
+ path(
+ "protected-schema/",
+ SpectacularAPIView.as_view(permission_classes=[IsAdminUser]),
+ ),
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/drf_standardized_errors-0.14.1/tox.ini
new/drf_standardized_errors-0.15.0/tox.ini
--- old/drf_standardized_errors-0.14.1/tox.ini 2024-08-10 18:45:26.441801800
+0200
+++ new/drf_standardized_errors-0.15.0/tox.ini 2025-06-04 09:21:28.979192500
+0200
@@ -8,25 +8,27 @@
envlist =
py{38,39,310,311}-dj32-drf312
py{38,39,310,311,312}-dj{32,40,41}-drf{313,314,315}
- py{38,39,310,311,312}-dj42-drf{314,315}
- py{310,311,312}-dj50-drf{314,315}
- py{310,311,312}-dj51-drf315
+ py{38,39,310,311,312,313}-dj42-drf{314,315}
+ py{310,311,312,313}-dj50-drf{314,315}
+ py{310,311,312,313}-dj{51,52}-drf315
+ py{310,311,312,313}-dj{42,50,51,52}-drf316
lint
docs
[gh-actions]
python =
- 3.8: py38, lint, docs
+ 3.8: py38
3.9: py39
3.10: py310
3.11: py311
- 3.12: py312
+ 3.12: py312, lint, docs
+ 3.13: py313
[testenv]
deps =
pytest
pytest-django
- drf-spectacular>=0.27.0
+ drf-spectacular>=0.27.1
django-filter
dj32: Django>=3.2,<4.0
dj40: Django>=4.0,<4.1
@@ -34,10 +36,12 @@
dj42: Django>=4.2,<5.0
dj50: Django>=5.0,<5.1
dj51: Django>=5.1,<5.2
+ dj52: Django>=5.2,<6.0
drf312: djangorestframework>=3.12,<3.13
drf313: djangorestframework>=3.13,<3.14
drf314: djangorestframework>=3.14,<3.15
drf315: djangorestframework>=3.15,<3.16
+ drf316: djangorestframework>=3.16,<3.17
commands =
pytest
@@ -48,7 +52,6 @@
[testenv:docs]
extras = doc
-basepython = python3.8
commands = sphinx-build -d "{toxworkdir}/docs_doctree" docs
"{toxworkdir}/docs_out" --color -W -bhtml {posargs}
python -c 'import pathlib; print("documentation available under
file://\{0\}".format(pathlib.Path(r"{toxworkdir}") / "docs_out" /
"index.html"))'