From 670ce90446df7ea9595a4939b57f694c06db8df4 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Tue, 1 Aug 2023 18:49:16 +0100 Subject: [PATCH] requirements: Bump openapi-core Another slog. The joys of pre-v1.0.0 libraries! Signed-off-by: Stephen Finucane --- patchwork/tests/api/validator.py | 68 +++++++++++++------------------- requirements-test.txt | 2 +- 2 files changed, 29 insertions(+), 41 deletions(-) diff --git a/patchwork/tests/api/validator.py b/patchwork/tests/api/validator.py index 3d4d0195..482b2b5b 100644 --- a/patchwork/tests/api/validator.py +++ b/patchwork/tests/api/validator.py @@ -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, + ) diff --git a/requirements-test.txt b/requirements-test.txt index 5530385f..af4f8635 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -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 -- 2.47.3