]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
requirements: Bump openapi-core
authorStephen Finucane <stephen@that.guru>
Tue, 1 Aug 2023 17:49:16 +0000 (18:49 +0100)
committerStephen Finucane <stephen@that.guru>
Wed, 2 Aug 2023 10:18:30 +0000 (11:18 +0100)
Another slog. The joys of pre-v1.0.0 libraries!

Signed-off-by: Stephen Finucane <stephen@that.guru>
patchwork/tests/api/validator.py
requirements-test.txt

index 3d4d0195acd5a65b6a2b55f18a24e299b3a65e57..482b2b5b01e1fa2a1112d945780fddc2de9d20fb 100644 (file)
@@ -8,17 +8,11 @@ import re
 
 from django.urls import resolve
 import openapi_core
-from openapi_core.unmarshalling.schemas.factories import (
-    SchemaUnmarshallersFactory,
-)
 from openapi_core.contrib.django import DjangoOpenAPIRequest
 from openapi_core.contrib.django import DjangoOpenAPIResponse
 from openapi_core.exceptions import OpenAPIError
 from openapi_core.templating import util
-from openapi_core.unmarshalling.schemas.formatters import Formatter
-from openapi_core.validation.request.validators import RequestValidator
-from openapi_core.validation.response.validators import ResponseValidator
-from openapi_schema_validator import OAS31Validator
+from openapi_core import shortcuts
 from rest_framework import status
 import yaml
 
@@ -64,26 +58,17 @@ class RegexValidator(object):
         return self.regex.match(value)
 
 
-CUSTOM_FORMATTERS = {
-    'uri': Formatter.from_callables(
-        RegexValidator(
-            r'^(?:http|ftp)s?://'
-            r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'  # noqa: E501
-            r'localhost|'
-            r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
-            r'(?::\d+)?'
-            r'(?:/?|[/?]\S+)$',
-        ),
-        str,
-    ),
-    'iso8601': Formatter.from_callables(
-        RegexValidator(r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{6}$'),
-        str,
-    ),
-    'email': Formatter.from_callables(
-        RegexValidator(r'[^@]+@[^@]+\.[^@]+'),
-        str,
+EXTRA_FORMAT_VALIDATORS = {
+    'uri': RegexValidator(
+        r'^(?:http|ftp)s?://'
+        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'  # noqa: E501
+        r'localhost|'
+        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
+        r'(?::\d+)?'
+        r'(?:/?|[/?]\S+)$',
     ),
+    'iso8601': RegexValidator(r'^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{6}$'),
+    'email': RegexValidator(r'[^@]+@[^@]+\.[^@]+'),
 }
 
 
@@ -102,13 +87,17 @@ def _load_spec(version):
     with open(spec_path, 'r') as fh:
         data = yaml.load(fh, Loader=yaml.SafeLoader)
 
-    _LOADED_SPECS[version] = openapi_core.Spec.create(data)
+    _LOADED_SPECS[version] = openapi_core.Spec.from_dict(data)
 
     return _LOADED_SPECS[version]
 
 
 def validate_data(
-    path, request, response, validate_request, validate_response
+    path,
+    request,
+    response,
+    validate_request,
+    validate_response,
 ):
     if response.status_code == status.HTTP_405_METHOD_NOT_ALLOWED:
         return
@@ -117,18 +106,14 @@ def validate_data(
     request = DjangoOpenAPIRequest(request)
     response = DjangoOpenAPIResponse(response)
 
-    schema_unmarshallers_factory = SchemaUnmarshallersFactory(
-        OAS31Validator,
-        custom_formatters=CUSTOM_FORMATTERS,
-        # context=UnmarshalContext.RESPONSE,
-    )
-
     # request
     if validate_request:
-        validator = RequestValidator(schema_unmarshallers_factory)
-        result = validator.validate(spec, request)
         try:
-            result.raise_for_errors()
+            shortcuts.validate_request(
+                request,
+                spec=spec,
+                extra_format_validators=EXTRA_FORMAT_VALIDATORS,
+            )
         except OpenAPIError:
             # TODO(stephenfin): In API v2.0, this should be an error. As things
             # stand, we silently ignore these issues.
@@ -136,6 +121,9 @@ def validate_data(
 
     # response
     if validate_response:
-        validator = ResponseValidator(schema_unmarshallers_factory)
-        result = validator.validate(spec, request, response)
-        result.raise_for_errors()
+        shortcuts.validate_response(
+            request,
+            response,
+            spec=spec,
+            extra_format_validators=EXTRA_FORMAT_VALIDATORS,
+        )
index 5530385f25c7654bbc5557c6088eea49df35e24a..af4f8635ea729632e455a369d03fec26fd239437 100644 (file)
@@ -3,4 +3,4 @@ psycopg2-binary~=2.9.0
 sqlparse~=0.4.0
 python-dateutil~=2.8.0
 tblib~=2.0.0
-openapi-core~=0.16.4
+openapi-core~=0.18.0