mirror of
https://github.com/correl/openapi-core.git
synced 2024-12-29 11:09:25 +00:00
Server missing fields
This commit is contained in:
parent
d7840d0d61
commit
c4d4ed8515
6 changed files with 41 additions and 5 deletions
|
@ -12,6 +12,7 @@ from openapi_core.schema.parameters.generators import ParametersGenerator
|
|||
from openapi_core.schema.request_bodies.factories import RequestBodyFactory
|
||||
from openapi_core.schema.responses.generators import ResponsesGenerator
|
||||
from openapi_core.schema.security.factories import SecurityRequirementFactory
|
||||
from openapi_core.schema.servers.generators import ServersGenerator
|
||||
|
||||
|
||||
class OperationsGenerator(object):
|
||||
|
@ -39,6 +40,9 @@ class OperationsGenerator(object):
|
|||
summary = operation_deref.get('summary')
|
||||
description = operation_deref.get('description')
|
||||
security_requirements_list = operation_deref.get('security', [])
|
||||
servers_spec = operation_deref.get('servers', [])
|
||||
|
||||
servers = self.servers_generator.generate(servers_spec)
|
||||
|
||||
security = None
|
||||
if security_requirements_list:
|
||||
|
@ -66,6 +70,7 @@ class OperationsGenerator(object):
|
|||
external_docs=external_docs, security=security,
|
||||
request_body=request_body, deprecated=deprecated,
|
||||
operation_id=operation_id, tags=list(tags_list),
|
||||
servers=servers,
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -93,3 +98,8 @@ class OperationsGenerator(object):
|
|||
@lru_cache()
|
||||
def security_requirement_factory(self):
|
||||
return SecurityRequirementFactory(self.dereferencer)
|
||||
|
||||
@property
|
||||
@lru_cache()
|
||||
def servers_generator(self):
|
||||
return ServersGenerator(self.dereferencer)
|
||||
|
|
|
@ -12,18 +12,16 @@ class ServersGenerator(object):
|
|||
|
||||
def generate(self, servers_spec):
|
||||
servers_deref = self.dereferencer.dereference(servers_spec)
|
||||
if not servers_deref:
|
||||
yield Server('/')
|
||||
return
|
||||
for server_spec in servers_deref:
|
||||
url = server_spec['url']
|
||||
variables_spec = server_spec.get('variables', {})
|
||||
description = server_spec.get('description')
|
||||
|
||||
variables = None
|
||||
if variables_spec:
|
||||
variables = self.variables_generator.generate(variables_spec)
|
||||
|
||||
yield Server(url, variables=variables)
|
||||
yield Server(url, variables=variables, description=description)
|
||||
|
||||
@property
|
||||
@lru_cache()
|
||||
|
|
|
@ -4,9 +4,10 @@ from six import iteritems
|
|||
|
||||
class Server(object):
|
||||
|
||||
def __init__(self, url, variables=None):
|
||||
def __init__(self, url, variables=None, description=None):
|
||||
self.url = url
|
||||
self.variables = variables and dict(variables) or {}
|
||||
self.description = description
|
||||
|
||||
@property
|
||||
def default_url(self):
|
||||
|
|
|
@ -30,6 +30,11 @@ class SpecFactory(object):
|
|||
paths = spec_dict_deref.get('paths', {})
|
||||
components_spec = spec_dict_deref.get('components', {})
|
||||
|
||||
if not servers_spec:
|
||||
servers_spec = [
|
||||
{'url': '/'},
|
||||
]
|
||||
|
||||
info = self.info_factory.create(info_spec)
|
||||
servers = self.servers_generator.generate(servers_spec)
|
||||
paths = self.paths_generator.generate(paths)
|
||||
|
|
|
@ -70,6 +70,11 @@ paths:
|
|||
- petstore_auth:
|
||||
- write:pets
|
||||
- read:pets
|
||||
servers:
|
||||
- url: https://development.gigantic-server.com/v1
|
||||
description: Development server
|
||||
- url: https://staging.gigantic-server.com/v1
|
||||
description: Staging server
|
||||
operationId: createPets
|
||||
tags:
|
||||
- pets
|
||||
|
|
|
@ -100,6 +100,23 @@ class TestPetstore(object):
|
|||
assert sec_req.name == sec_req_nam
|
||||
assert sec_req.scope_names == sec_req_spec[sec_req_nam]
|
||||
|
||||
servers_spec = operation_spec.get('servers', [])
|
||||
for idx, server in enumerate(operation.servers):
|
||||
assert type(server) == Server
|
||||
|
||||
server_spec = servers_spec[idx]
|
||||
assert server.url == server_spec['url']
|
||||
assert server.default_url == server_spec['url']
|
||||
assert server.description == server_spec.get('description')
|
||||
|
||||
for variable_name, variable in iteritems(server.variables):
|
||||
assert type(variable) == ServerVariable
|
||||
assert variable.name == variable_name
|
||||
|
||||
variable_spec = server_spec['variables'][variable_name]
|
||||
assert variable.default == variable_spec['default']
|
||||
assert variable.enum == variable_spec.get('enum')
|
||||
|
||||
responses_spec = operation_spec.get('responses')
|
||||
|
||||
for http_status, response in iteritems(operation.responses):
|
||||
|
|
Loading…
Reference in a new issue