Skip to content

Commit 281aab8

Browse files
authored
Merge pull request #196 from p1c2u/feature/missing-path-fields
Missing path model fields
2 parents 899d7ba + aa7ed31 commit 281aab8

File tree

3 files changed

+54
-6
lines changed

3 files changed

+54
-6
lines changed

openapi_core/schema/paths/generators.py

+25-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from openapi_core.schema.operations.generators import OperationsGenerator
66
from openapi_core.schema.parameters.generators import ParametersGenerator
77
from openapi_core.schema.paths.models import Path
8+
from openapi_core.schema.servers.generators import ServersGenerator
89

910

1011
class PathsGenerator(object):
@@ -15,18 +16,38 @@ def __init__(self, dereferencer, schemas_registry):
1516

1617
def generate(self, paths):
1718
paths_deref = self.dereferencer.dereference(paths)
18-
for path_name, path in iteritems(paths_deref):
19-
operations = self.operations_generator.generate(path_name, path)
19+
for path_name, path_spec in iteritems(paths_deref):
20+
path_deref = self.dereferencer.dereference(path_spec)
21+
22+
parameters_list = path_deref.get('parameters', [])
23+
summary = path_deref.get('summary')
24+
description = path_deref.get('description')
25+
servers_spec = path_deref.get('servers', [])
26+
27+
operations = self.operations_generator.generate(
28+
path_name, path_deref)
29+
servers = self.servers_generator.generate(servers_spec)
2030
parameters = self.parameters_generator.generate_from_list(
21-
path.get('parameters', {})
31+
parameters_list)
32+
yield (
33+
path_name,
34+
Path(
35+
path_name, list(operations), parameters=list(parameters),
36+
summary=summary, description=description,
37+
servers=list(servers),
38+
),
2239
)
23-
yield path_name, Path(path_name, list(operations), parameters)
2440

2541
@property
2642
@lru_cache()
2743
def operations_generator(self):
2844
return OperationsGenerator(self.dereferencer, self.schemas_registry)
2945

46+
@property
47+
@lru_cache()
48+
def servers_generator(self):
49+
return ServersGenerator(self.dereferencer)
50+
3051
@property
3152
@lru_cache()
3253
def parameters_generator(self):

openapi_core/schema/paths/models.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@
44
class Path(object):
55
"""Represents an OpenAPI Path."""
66

7-
def __init__(self, name, operations, parameters=None):
7+
def __init__(
8+
self, name, operations,
9+
summary=None, description=None, parameters=None, servers=None,
10+
):
811
self.name = name
912
self.operations = dict(operations)
13+
self.summary = summary
14+
self.description = description
15+
self.servers = servers
1016
self.parameters = dict(parameters) if parameters else {}
1117

1218
def __getitem__(self, http_method):

tests/integration/schema/test_spec.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,31 @@ def test_spec(self, spec, spec_dict):
9393

9494
for path_name, path in iteritems(spec.paths):
9595
assert type(path) == Path
96+
97+
path_spec = spec_dict['paths'][path_name]
9698
assert path.name == path_name
99+
assert path.summary == path_spec.get('summary')
100+
assert path.description == path_spec.get('description')
101+
102+
servers_spec = path_spec.get('servers', [])
103+
for idx, server in enumerate(path.servers):
104+
assert type(server) == Server
105+
106+
server_spec = servers_spec[idx]
107+
assert server.url == server_spec['url']
108+
assert server.default_url == server_spec['url']
109+
assert server.description == server_spec.get('description')
110+
111+
for variable_name, variable in iteritems(server.variables):
112+
assert type(variable) == ServerVariable
113+
assert variable.name == variable_name
114+
115+
variable_spec = server_spec['variables'][variable_name]
116+
assert variable.default == variable_spec['default']
117+
assert variable.enum == variable_spec.get('enum')
97118

98119
for http_method, operation in iteritems(path.operations):
99-
operation_spec = spec_dict['paths'][path_name][http_method]
120+
operation_spec = path_spec[http_method]
100121

101122
assert type(operation) == Operation
102123
assert operation.path_name == path_name

0 commit comments

Comments
 (0)