Skip to content

Commit 05fd27f

Browse files
authored
Merge pull request #318 from p1c2u/feature/spec-path
Spec path
2 parents b79c494 + bbeb43c commit 05fd27f

File tree

125 files changed

+1543
-2895
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

125 files changed

+1543
-2895
lines changed

Diff for: openapi_core/casting/schemas/casters.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from __future__ import division
2+
13
from openapi_core.casting.schemas.exceptions import CastError
2-
from openapi_core.schema.schemas.types import NoValue
4+
from openapi_core.types import NoValue
35

46

57
class PrimitiveCaster(object):
@@ -14,7 +16,7 @@ def __call__(self, value):
1416
try:
1517
return self.caster_callable(value)
1618
except (ValueError, TypeError):
17-
raise CastError(value, self.schema.type.value)
19+
raise CastError(value, self.schema['type'])
1820

1921

2022
class DummyCaster(object):
@@ -31,7 +33,7 @@ def __init__(self, schema, casters_factory):
3133

3234
@property
3335
def items_caster(self):
34-
return self.casters_factory.create(self.schema.items)
36+
return self.casters_factory.create(self.schema / 'items')
3537

3638
def __call__(self, value):
3739
if value in (None, NoValue):

Diff for: openapi_core/casting/schemas/factories.py

+11-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
from openapi_core.schema.schemas.enums import SchemaType
2-
31
from openapi_core.casting.schemas.casters import (
42
PrimitiveCaster, DummyCaster, ArrayCaster
53
)
@@ -9,23 +7,24 @@
97
class SchemaCastersFactory(object):
108

119
DUMMY_CASTERS = [
12-
SchemaType.STRING, SchemaType.OBJECT, SchemaType.ANY,
10+
'string', 'object', 'any',
1311
]
1412
PRIMITIVE_CASTERS = {
15-
SchemaType.INTEGER: int,
16-
SchemaType.NUMBER: float,
17-
SchemaType.BOOLEAN: forcebool,
13+
'integer': int,
14+
'number': float,
15+
'boolean': forcebool,
1816
}
1917
COMPLEX_CASTERS = {
20-
SchemaType.ARRAY: ArrayCaster,
18+
'array': ArrayCaster,
2119
}
2220

2321
def create(self, schema):
24-
if schema.type in self.DUMMY_CASTERS:
22+
schema_type = schema.getkey('type', 'any')
23+
if schema_type in self.DUMMY_CASTERS:
2524
return DummyCaster()
26-
elif schema.type in self.PRIMITIVE_CASTERS:
27-
caster_callable = self.PRIMITIVE_CASTERS[schema.type]
25+
elif schema_type in self.PRIMITIVE_CASTERS:
26+
caster_callable = self.PRIMITIVE_CASTERS[schema_type]
2827
return PrimitiveCaster(schema, caster_callable)
29-
elif schema.type in self.COMPLEX_CASTERS:
30-
caster_class = self.COMPLEX_CASTERS[schema.type]
28+
elif schema_type in self.COMPLEX_CASTERS:
29+
caster_class = self.COMPLEX_CASTERS[schema_type]
3130
return caster_class(schema, self)

Diff for: openapi_core/deserializing/media_types/factories.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ def __init__(self, custom_deserializers=None):
2020
custom_deserializers = {}
2121
self.custom_deserializers = custom_deserializers
2222

23-
def create(self, media_type):
23+
def create(self, mimetype):
2424
deserialize_callable = self.get_deserializer_callable(
25-
media_type.mimetype)
25+
mimetype)
2626
return PrimitiveDeserializer(
27-
media_type.mimetype, deserialize_callable)
27+
mimetype, deserialize_callable)
2828

2929
def get_deserializer_callable(self, mimetype):
3030
if mimetype in self.custom_deserializers:

Diff for: openapi_core/deserializing/parameters/deserializers.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from openapi_core.deserializing.parameters.exceptions import (
33
EmptyParameterValue,
44
)
5-
from openapi_core.schema.parameters.enums import ParameterLocation
5+
from openapi_core.schema.parameters import get_aslist, get_explode, get_style
66

77

88
class PrimitiveDeserializer(object):
@@ -11,15 +11,19 @@ def __init__(self, param, deserializer_callable):
1111
self.param = param
1212
self.deserializer_callable = deserializer_callable
1313

14+
self.aslist = get_aslist(self.param)
15+
self.explode = get_explode(self.param)
16+
self.style = get_style(self.param)
17+
1418
def __call__(self, value):
15-
if (self.param.location == ParameterLocation.QUERY and value == "" and
16-
not self.param.allow_empty_value):
19+
if (self.param['in'] == 'query' and value == "" and
20+
not self.param.getkey('allowEmptyValue', False)):
1721
raise EmptyParameterValue(
18-
value, self.param.style, self.param.name)
22+
value, self.style, self.param['name'])
1923

20-
if not self.param.aslist or self.param.explode:
24+
if not self.aslist or self.explode:
2125
return value
2226
try:
2327
return self.deserializer_callable(value)
2428
except (ValueError, TypeError, AttributeError):
25-
raise DeserializeError(value, self.param.style)
29+
raise DeserializeError(value, self.style)

Diff for: openapi_core/deserializing/parameters/factories.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,26 @@
33
from openapi_core.deserializing.parameters.deserializers import (
44
PrimitiveDeserializer,
55
)
6-
from openapi_core.schema.parameters.enums import ParameterStyle
6+
from openapi_core.schema.parameters import get_style
77

88

99
class ParameterDeserializersFactory(object):
1010

1111
PARAMETER_STYLE_DESERIALIZERS = {
12-
ParameterStyle.FORM: lambda x: x.split(','),
13-
ParameterStyle.SIMPLE: lambda x: x.split(','),
14-
ParameterStyle.SPACE_DELIMITED: lambda x: x.split(' '),
15-
ParameterStyle.PIPE_DELIMITED: lambda x: x.split('|'),
12+
'form': lambda x: x.split(','),
13+
'simple': lambda x: x.split(','),
14+
'spaceDelimited': lambda x: x.split(' '),
15+
'pipeDelimited': lambda x: x.split('|'),
1616
}
1717

1818
def create(self, param):
19-
if param.deprecated:
19+
if param.getkey('deprecated', False):
2020
warnings.warn(
21-
"{0} parameter is deprecated".format(param.name),
21+
"{0} parameter is deprecated".format(param['name']),
2222
DeprecationWarning,
2323
)
2424

25-
deserialize_callable = self.PARAMETER_STYLE_DESERIALIZERS[param.style]
25+
style = get_style(param)
26+
27+
deserialize_callable = self.PARAMETER_STYLE_DESERIALIZERS[style]
2628
return PrimitiveDeserializer(param, deserialize_callable)

Diff for: openapi_core/exceptions.py

+51
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,56 @@
11
"""OpenAPI core exceptions module"""
2+
import attr
23

34

45
class OpenAPIError(Exception):
56
pass
7+
8+
9+
class OpenAPIParameterError(OpenAPIError):
10+
pass
11+
12+
13+
class MissingParameterError(OpenAPIParameterError):
14+
"""Missing parameter error"""
15+
pass
16+
17+
18+
@attr.s(hash=True)
19+
class MissingParameter(MissingParameterError):
20+
name = attr.ib()
21+
22+
def __str__(self):
23+
return "Missing parameter (without default value): {0}".format(
24+
self.name)
25+
26+
27+
@attr.s(hash=True)
28+
class MissingRequiredParameter(MissingParameterError):
29+
name = attr.ib()
30+
31+
def __str__(self):
32+
return "Missing required parameter: {0}".format(self.name)
33+
34+
35+
class OpenAPIRequestBodyError(OpenAPIError):
36+
pass
37+
38+
39+
@attr.s(hash=True)
40+
class MissingRequestBody(OpenAPIRequestBodyError):
41+
request = attr.ib()
42+
43+
def __str__(self):
44+
return "Missing required request body"
45+
46+
47+
class OpenAPIResponseError(OpenAPIError):
48+
pass
49+
50+
51+
@attr.s(hash=True)
52+
class MissingResponseContent(OpenAPIResponseError):
53+
response = attr.ib()
54+
55+
def __str__(self):
56+
return "Missing response content"

Diff for: openapi_core/schema/components/factories.py

-60
This file was deleted.

Diff for: openapi_core/schema/components/models.py

-15
This file was deleted.

Diff for: openapi_core/schema/contacts/__init__.py

Whitespace-only changes.

Diff for: openapi_core/schema/contacts/factories.py

-25
This file was deleted.

Diff for: openapi_core/schema/contacts/models.py

-11
This file was deleted.

Diff for: openapi_core/schema/content/__init__.py

Whitespace-only changes.

Diff for: openapi_core/schema/content/factories.py

-21
This file was deleted.

Diff for: openapi_core/schema/content/models.py

-5
This file was deleted.

Diff for: openapi_core/schema/exceptions.py

-6
This file was deleted.

Diff for: openapi_core/schema/extensions/__init__.py

Whitespace-only changes.

Diff for: openapi_core/schema/extensions/generators.py

-16
This file was deleted.

Diff for: openapi_core/schema/extensions/models.py

-9
This file was deleted.

Diff for: openapi_core/schema/external_docs/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)