]> git.ipfire.org Git - thirdparty/patchwork.git/commitdiff
Add support for openapi-core 0.16.x
authorStephen Finucane <stephen@that.guru>
Mon, 10 Oct 2022 18:18:23 +0000 (19:18 +0100)
committerStephen Finucane <stephen@that.guru>
Mon, 10 Oct 2022 18:19:07 +0000 (19:19 +0100)
Take two! This time with the necessary fixes to make things actually
work.

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

index eb74b37d4055daa429b718aa3518fc4b956d2c74..35575461d571fa2a44c1ff8b4caa298d4acdfe70 100644 (file)
@@ -8,13 +8,17 @@ import re
 
 from django.urls import resolve
 import openapi_core
-from openapi_core.contrib.django import DjangoOpenAPIRequestFactory
-from openapi_core.contrib.django import DjangoOpenAPIResponseFactory
-from openapi_core.exceptions import OpenAPIParameterError
+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 OAS30Validator
 from rest_framework import status
 import yaml
 
@@ -98,7 +102,7 @@ def _load_spec(version):
     with open(spec_path, 'r') as fh:
         data = yaml.load(fh, Loader=yaml.SafeLoader)
 
-    _LOADED_SPECS[version] = openapi_core.create_spec(data)
+    _LOADED_SPECS[version] = openapi_core.Spec.create(data)
 
     return _LOADED_SPECS[version]
 
@@ -110,24 +114,28 @@ def validate_data(
         return
 
     spec = _load_spec(resolve(path).kwargs.get('version'))
-    request = DjangoOpenAPIRequestFactory.create(request)
-    response = DjangoOpenAPIResponseFactory.create(response)
+    request = DjangoOpenAPIRequest(request)
+    response = DjangoOpenAPIResponse(response)
+
+    schema_unmarshallers_factory = SchemaUnmarshallersFactory(
+        OAS30Validator,
+        custom_formatters=CUSTOM_FORMATTERS,
+        # context=UnmarshalContext.RESPONSE,
+    )
 
     # request
     if validate_request:
-        validator = RequestValidator(spec, custom_formatters=CUSTOM_FORMATTERS)
-        result = validator.validate(request)
+        validator = RequestValidator(schema_unmarshallers_factory)
+        result = validator.validate(spec, request)
         try:
             result.raise_for_errors()
-        except OpenAPIParameterError:
+        except OpenAPIError:
             # TODO(stephenfin): In API v2.0, this should be an error. As things
             # stand, we silently ignore these issues.
             assert response.status_code == status.HTTP_200_OK
 
     # response
     if validate_response:
-        validator = ResponseValidator(
-            spec, custom_formatters=CUSTOM_FORMATTERS
-        )
-        result = validator.validate(request, response)
+        validator = ResponseValidator(schema_unmarshallers_factory)
+        result = validator.validate(spec, request, response)
         result.raise_for_errors()
index 1c4cc43a5905e881ea30218d46b2b5bd962fb9e8..040da874fcf48efb96c9a35505a93d75095da669 100644 (file)
@@ -3,11 +3,4 @@ psycopg2-binary~=2.9.0
 sqlparse~=0.4.0
 python-dateutil~=2.8.0
 tblib~=1.7.0
-openapi-core~=0.14.2
-# FIXME(stephenfin): We have to pin this to prevent a recurrence of [1]. It
-# seems openapi-core needs to gain support for OpenAPI 3.1 before we can fix
-# this properly [2]
-#
-# [1] https://github.com/OAI/OpenAPI-Specification/issues/1368
-# [2] https://github.com/p1c2u/openapi-core/pull/373
-jsonschema<4.0
+openapi-core~=0.16.1