mirror of
https://github.com/correl/openapi-core.git
synced 2024-11-22 03:00:10 +00:00
Properly formatting UUID if value to be unmarshalled is already a UUID.
Before this change, if a UUID instance got received as value in the Schema, it was breaking the unmarshal because UUID instances can't be used as values to instantiate other UUIDs.
This commit is contained in:
parent
395f68b234
commit
a08b62035e
3 changed files with 26 additions and 1 deletions
|
@ -20,6 +20,7 @@ from openapi_core.schema.schemas.exceptions import (
|
|||
)
|
||||
from openapi_core.schema.schemas.util import (
|
||||
forcebool, format_date, format_datetime,
|
||||
format_uuid,
|
||||
)
|
||||
from openapi_core.schema.schemas.validators import (
|
||||
TypeValidator, AttributeValidator,
|
||||
|
@ -49,7 +50,7 @@ class Schema(object):
|
|||
format_date, TypeValidator(date, exclude=datetime)),
|
||||
SchemaFormat.DATETIME: Format(format_datetime, TypeValidator(datetime)),
|
||||
SchemaFormat.BINARY: Format(binary_type, TypeValidator(binary_type)),
|
||||
SchemaFormat.UUID: Format(UUID, TypeValidator(UUID)),
|
||||
SchemaFormat.UUID: Format(format_uuid, TypeValidator(UUID)),
|
||||
SchemaFormat.BYTE: Format(b64decode, TypeValidator(binary_type)),
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ from distutils.util import strtobool
|
|||
from json import dumps
|
||||
from six import string_types
|
||||
import strict_rfc3339
|
||||
from uuid import UUID
|
||||
|
||||
|
||||
def forcebool(val):
|
||||
|
@ -24,3 +25,9 @@ def format_date(value):
|
|||
def format_datetime(value):
|
||||
timestamp = strict_rfc3339.rfc3339_to_timestamp(value)
|
||||
return datetime.datetime.utcfromtimestamp(timestamp)
|
||||
|
||||
|
||||
def format_uuid(value):
|
||||
if isinstance(value, UUID):
|
||||
return value
|
||||
return UUID(value)
|
||||
|
|
|
@ -5,6 +5,7 @@ import mock
|
|||
import pytest
|
||||
|
||||
from openapi_core.extensions.models.models import Model
|
||||
from openapi_core.schema.schemas.enums import SchemaFormat, SchemaType
|
||||
from openapi_core.schema.schemas.exceptions import (
|
||||
InvalidSchemaValue, MultipleOneOfSchema, NoOneOfSchema, OpenAPISchemaError,
|
||||
)
|
||||
|
@ -48,6 +49,22 @@ class TestSchemaUnmarshal(object):
|
|||
|
||||
assert result == value
|
||||
|
||||
def test_string_valid_uuid_str(self):
|
||||
schema = Schema(SchemaType.STRING, schema_format=SchemaFormat.UUID)
|
||||
value = str(uuid.uuid4())
|
||||
|
||||
result = schema.unmarshal(value)
|
||||
|
||||
assert result == uuid.UUID(value)
|
||||
|
||||
def test_string_valid_uuid(self):
|
||||
schema = Schema(SchemaType.STRING, schema_format=SchemaFormat.UUID)
|
||||
value = uuid.uuid4()
|
||||
|
||||
result = schema.unmarshal(value)
|
||||
|
||||
assert result == value
|
||||
|
||||
def test_string_none(self):
|
||||
schema = Schema('string')
|
||||
value = None
|
||||
|
|
Loading…
Reference in a new issue