From: Stephen Finucane Date: Mon, 10 Oct 2022 18:18:23 +0000 (+0100) Subject: Add support for openapi-core 0.16.x X-Git-Tag: v3.2.0~111 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5d668eca6ee8e8a3cd1679936271f207f880c68;p=thirdparty%2Fpatchwork.git Add support for openapi-core 0.16.x Take two! This time with the necessary fixes to make things actually work. Signed-off-by: Stephen Finucane --- diff --git a/patchwork/tests/api/validator.py b/patchwork/tests/api/validator.py index eb74b37d..35575461 100644 --- a/patchwork/tests/api/validator.py +++ b/patchwork/tests/api/validator.py @@ -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() diff --git a/requirements-test.txt b/requirements-test.txt index 1c4cc43a..040da874 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -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