Skip to content

Commit 734a467

Browse files
committed
Schema objects restructure
1 parent 548a7d6 commit 734a467

Some content is hidden

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

55 files changed

+572
-512
lines changed

openapi_core/extensions/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""OpenAPI extensions package"""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""OpenAPI X-Model extension package"""
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
"""OpenAPI X-Model extension factories module"""
2+
from openapi_core.extensions.models.models import BaseModel
3+
4+
5+
class ModelFactory(object):
6+
7+
def create(self, properties, name=None):
8+
model = BaseModel
9+
if name is not None:
10+
model = type(name, (BaseModel, ), {})
11+
12+
return model(**properties)
Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
"""OpenAPI core models module"""
1+
"""OpenAPI X-Model extension models module"""
22

33

44
class BaseModel(dict):
5-
"""Base class for OpenAPI models."""
5+
"""Base class for OpenAPI X-Model."""
66

77
def __getattr__(self, attr_name):
88
"""Only search through properties if attribute not found normally.
@@ -15,13 +15,3 @@ def __getattr__(self, attr_name):
1515
'type object {0!r} has no attribute {1!r}'
1616
.format(type(self).__name__, attr_name)
1717
)
18-
19-
20-
class ModelFactory(object):
21-
22-
def create(self, properties, name=None):
23-
model = BaseModel
24-
if name is not None:
25-
model = type(name, (BaseModel, ), {})
26-
27-
return model(**properties)

openapi_core/schema/__init__.py

Whitespace-only changes.

openapi_core/schema/components/__init__.py

Whitespace-only changes.

openapi_core/components.py renamed to openapi_core/schema/components/factories.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,7 @@
11
from functools import lru_cache
22

3-
from openapi_core.schemas import SchemasGenerator
4-
5-
6-
class Components(object):
7-
"""Represents an OpenAPI Components in a service."""
8-
9-
def __init__(
10-
self, schemas=None, responses=None, parameters=None,
11-
request_bodies=None):
12-
self.schemas = schemas and dict(schemas) or {}
13-
self.responses = responses and dict(responses) or {}
14-
self.parameters = parameters and dict(parameters) or {}
15-
self.request_bodies = request_bodies and dict(request_bodies) or {}
3+
from openapi_core.schema.components.models import Components
4+
from openapi_core.schema.schemas.generators import SchemasGenerator
165

176

187
class ComponentsFactory(object):
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Components(object):
2+
"""Represents an OpenAPI Components in a service."""
3+
4+
def __init__(
5+
self, schemas=None, responses=None, parameters=None,
6+
request_bodies=None):
7+
self.schemas = schemas and dict(schemas) or {}
8+
self.responses = responses and dict(responses) or {}
9+
self.parameters = parameters and dict(parameters) or {}
10+
self.request_bodies = request_bodies and dict(request_bodies) or {}

openapi_core/schema/infos/__init__.py

Whitespace-only changes.

openapi_core/infos.py renamed to openapi_core/schema/infos/factories.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
class Info(object):
2-
3-
def __init__(self, title, version):
4-
self.title = title
5-
self.version = version
1+
"""OpenAPI core infos factories module"""
2+
from openapi_core.schema.infos.models import Info
63

74

85
class InfoFactory(object):

openapi_core/schema/infos/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"""OpenAPI core infos models module"""
2+
3+
4+
class Info(object):
5+
6+
def __init__(self, title, version):
7+
self.title = title
8+
self.version = version

openapi_core/schema/media_types/__init__.py

Whitespace-only changes.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"""OpenAPI core media types generators module"""
2+
from six import iteritems
3+
4+
from openapi_core.schema.media_types.models import MediaType
5+
6+
7+
class MediaTypeGenerator(object):
8+
9+
def __init__(self, dereferencer, schemas_registry):
10+
self.dereferencer = dereferencer
11+
self.schemas_registry = schemas_registry
12+
13+
def generate(self, content):
14+
for mimetype, media_type in iteritems(content):
15+
schema_spec = media_type.get('schema')
16+
17+
schema = None
18+
if schema_spec:
19+
schema, _ = self.schemas_registry.get_or_create(schema_spec)
20+
21+
yield mimetype, MediaType(mimetype, schema)

openapi_core/media_types.py renamed to openapi_core/schema/media_types/models.py

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
"""OpenAPI core mediaTypes module"""
1+
"""OpenAPI core media types models module"""
22
from collections import defaultdict
33

44
from json import loads
@@ -44,20 +44,3 @@ def unmarshal(self, value):
4444
return self.schema.unmarshal(deserialized)
4545
except InvalidValueType as exc:
4646
raise InvalidMediaTypeValue(str(exc))
47-
48-
49-
class MediaTypeGenerator(object):
50-
51-
def __init__(self, dereferencer, schemas_registry):
52-
self.dereferencer = dereferencer
53-
self.schemas_registry = schemas_registry
54-
55-
def generate(self, content):
56-
for mimetype, media_type in iteritems(content):
57-
schema_spec = media_type.get('schema')
58-
59-
schema = None
60-
if schema_spec:
61-
schema, _ = self.schemas_registry.get_or_create(schema_spec)
62-
63-
yield mimetype, MediaType(mimetype, schema)

openapi_core/schema/operations/__init__.py

Whitespace-only changes.

openapi_core/operations.py renamed to openapi_core/schema/operations/generators.py

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,14 @@
11
# -*- coding: utf-8 -*-
2-
"""OpenAPI core operations module"""
3-
import logging
2+
"""OpenAPI core operations models module"""
43
from functools import lru_cache
54

65
from six import iteritems
76
from openapi_spec_validator.validators import PathItemValidator
87

9-
from openapi_core.exceptions import InvalidResponse
10-
from openapi_core.parameters import ParametersGenerator
11-
from openapi_core.request_bodies import RequestBodyFactory
12-
from openapi_core.responses import ResponsesGenerator
13-
14-
log = logging.getLogger(__name__)
15-
16-
17-
class Operation(object):
18-
"""Represents an OpenAPI Operation."""
19-
20-
def __init__(
21-
self, http_method, path_name, responses, parameters,
22-
request_body=None, deprecated=False, operation_id=None):
23-
self.http_method = http_method
24-
self.path_name = path_name
25-
self.responses = dict(responses)
26-
self.parameters = dict(parameters)
27-
self.request_body = request_body
28-
self.deprecated = deprecated
29-
self.operation_id = operation_id
30-
31-
def __getitem__(self, name):
32-
return self.parameters[name]
33-
34-
def get_response(self, http_status='default'):
35-
try:
36-
return self.responses[http_status]
37-
except KeyError:
38-
# try range
39-
http_status_range = '{0}XX'.format(http_status[0])
40-
if http_status_range in self.responses:
41-
return self.responses[http_status_range]
42-
43-
if 'default' not in self.responses:
44-
raise InvalidResponse(
45-
"Unknown response http status {0}".format(http_status))
46-
47-
return self.responses['default']
8+
from openapi_core.schema.operations.models import Operation
9+
from openapi_core.schema.parameters.generators import ParametersGenerator
10+
from openapi_core.schema.request_bodies.factories import RequestBodyFactory
11+
from openapi_core.schema.responses.generators import ResponsesGenerator
4812

4913

5014
class OperationsGenerator(object):
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# -*- coding: utf-8 -*-
2+
"""OpenAPI core operations models module"""
3+
from openapi_core.exceptions import InvalidResponse
4+
5+
6+
class Operation(object):
7+
"""Represents an OpenAPI Operation."""
8+
9+
def __init__(
10+
self, http_method, path_name, responses, parameters,
11+
request_body=None, deprecated=False, operation_id=None):
12+
self.http_method = http_method
13+
self.path_name = path_name
14+
self.responses = dict(responses)
15+
self.parameters = dict(parameters)
16+
self.request_body = request_body
17+
self.deprecated = deprecated
18+
self.operation_id = operation_id
19+
20+
def __getitem__(self, name):
21+
return self.parameters[name]
22+
23+
def get_response(self, http_status='default'):
24+
try:
25+
return self.responses[http_status]
26+
except KeyError:
27+
# try range
28+
http_status_range = '{0}XX'.format(http_status[0])
29+
if http_status_range in self.responses:
30+
return self.responses[http_status_range]
31+
32+
if 'default' not in self.responses:
33+
raise InvalidResponse(
34+
"Unknown response http status {0}".format(http_status))
35+
36+
return self.responses['default']

openapi_core/schema/parameters/__init__.py

Whitespace-only changes.
Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"""OpenAPI core parameters enums module"""
12
from enum import Enum
23

34

@@ -22,27 +23,3 @@ class ParameterStyle(Enum):
2223
SPACE_DELIMITED = 'spaceDelimited'
2324
PIPE_DELIMITED = 'pipeDelimited'
2425
DEEP_OBJECT = 'deepObject'
25-
26-
27-
class SchemaType(Enum):
28-
29-
INTEGER = 'integer'
30-
NUMBER = 'number'
31-
STRING = 'string'
32-
BOOLEAN = 'boolean'
33-
ARRAY = 'array'
34-
OBJECT = 'object'
35-
36-
37-
class SchemaFormat(Enum):
38-
39-
NONE = None
40-
INT32 = 'int32'
41-
INT64 = 'int64'
42-
FLOAT = 'float'
43-
DOUBLE = 'double'
44-
BYTE = 'byte'
45-
BINARY = 'binary'
46-
DATE = 'date'
47-
DATETIME = 'date-time'
48-
PASSWORD = 'password'
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""OpenAPI core parameters factories module"""
2+
from openapi_core.schema.parameters.models import Parameter
3+
4+
5+
class ParameterFactory(object):
6+
7+
def __init__(self, dereferencer, schemas_registry):
8+
self.dereferencer = dereferencer
9+
self.schemas_registry = schemas_registry
10+
11+
def create(self, parameter_spec, parameter_name=None):
12+
parameter_deref = self.dereferencer.dereference(parameter_spec)
13+
14+
parameter_name = parameter_name or parameter_deref['name']
15+
parameter_in = parameter_deref.get('in', 'header')
16+
17+
allow_empty_value = parameter_deref.get('allowEmptyValue')
18+
required = parameter_deref.get('required', False)
19+
20+
style = parameter_deref.get('style')
21+
explode = parameter_deref.get('explode')
22+
23+
schema_spec = parameter_deref.get('schema', None)
24+
schema = None
25+
if schema_spec:
26+
schema, _ = self.schemas_registry.get_or_create(schema_spec)
27+
28+
return Parameter(
29+
parameter_name, parameter_in,
30+
schema=schema, required=required,
31+
allow_empty_value=allow_empty_value,
32+
style=style, explode=explode,
33+
)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""OpenAPI core parameters generators module"""
2+
from functools import lru_cache
3+
4+
from six import iteritems
5+
6+
from openapi_core.schema.parameters.factories import ParameterFactory
7+
8+
9+
class ParametersGenerator(object):
10+
11+
def __init__(self, dereferencer, schemas_registry):
12+
self.dereferencer = dereferencer
13+
self.schemas_registry = schemas_registry
14+
15+
def generate(self, parameters):
16+
for parameter_name, parameter_spec in iteritems(parameters):
17+
parameter = self.parameter_factory.create(
18+
parameter_spec, parameter_name=parameter_name)
19+
20+
yield (parameter_name, parameter)
21+
22+
def generate_from_list(self, parameters_list):
23+
for parameter_spec in parameters_list:
24+
parameter = self.parameter_factory.create(parameter_spec)
25+
26+
yield (parameter.name, parameter)
27+
28+
@property
29+
@lru_cache()
30+
def parameter_factory(self):
31+
return ParameterFactory(self.dereferencer, self.schemas_registry)

0 commit comments

Comments
 (0)