Merge pull request #193 from p1c2u/feature/missing-info-models

Missing Info models
This commit is contained in:
A 2020-02-03 20:01:41 +00:00 committed by GitHub
commit a80648e4d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 107 additions and 4 deletions

View file

View file

@ -0,0 +1,15 @@
"""OpenAPI core contacts factories module"""
from openapi_core.schema.contacts.models import Contact
class ContactFactory(object):
def __init__(self, dereferencer):
self.dereferencer = dereferencer
def create(self, contact_spec):
contact_deref = self.dereferencer.dereference(contact_spec)
name = contact_deref.get('name')
url = contact_deref.get('url')
email = contact_deref.get('email')
return Contact(name=name, url=url, email=email)

View file

@ -0,0 +1,9 @@
"""OpenAPI core contacts models module"""
class Contact(object):
def __init__(self, name=None, url=None, email=None):
self.name = name
self.url = url
self.email = email

View file

@ -1,5 +1,8 @@
"""OpenAPI core infos factories module""" """OpenAPI core infos factories module"""
from openapi_core.compat import lru_cache
from openapi_core.schema.contacts.factories import ContactFactory
from openapi_core.schema.infos.models import Info from openapi_core.schema.infos.models import Info
from openapi_core.schema.licenses.factories import LicenseFactory
class InfoFactory(object): class InfoFactory(object):
@ -11,4 +14,31 @@ class InfoFactory(object):
info_deref = self.dereferencer.dereference(info_spec) info_deref = self.dereferencer.dereference(info_spec)
title = info_deref['title'] title = info_deref['title']
version = info_deref['version'] version = info_deref['version']
return Info(title, version) description = info_deref.get('description')
terms_of_service = info_deref.get('termsOfService')
contact = None
if 'contact' in info_deref:
contact_spec = info_deref.get('contact')
contact = self.contact_factory.create(contact_spec)
license = None
if 'license' in info_deref:
license_spec = info_deref.get('license')
license = self.license_factory.create(license_spec)
return Info(
title, version,
description=description, terms_of_service=terms_of_service,
contact=contact, license=license,
)
@property
@lru_cache()
def contact_factory(self):
return ContactFactory(self.dereferencer)
@property
@lru_cache()
def license_factory(self):
return LicenseFactory(self.dereferencer)

View file

@ -3,6 +3,13 @@
class Info(object): class Info(object):
def __init__(self, title, version): def __init__(
self, title, version, description=None, terms_of_service=None,
contact=None, license=None,
):
self.title = title self.title = title
self.version = version self.version = version
self.description = description
self.terms_of_service = terms_of_service
self.contact = contact
self.license = license

View file

View file

@ -0,0 +1,14 @@
"""OpenAPI core licenses factories module"""
from openapi_core.schema.licenses.models import License
class LicenseFactory(object):
def __init__(self, dereferencer):
self.dereferencer = dereferencer
def create(self, license_spec):
license_deref = self.dereferencer.dereference(license_spec)
name = license_deref['name']
url = license_deref.get('url')
return License(name, url=url)

View file

@ -0,0 +1,8 @@
"""OpenAPI core licenses models module"""
class License(object):
def __init__(self, name, url=None):
self.name = name
self.url = url

View file

@ -2,8 +2,15 @@ openapi: "3.0.0"
info: info:
version: 1.0.0 version: 1.0.0
title: Swagger Petstore title: Swagger Petstore
description: Swagger Petstore API specification
termsOfService: Fair use
contact:
name: Author
url: http://petstore.swagger.io
email: email@petstore.swagger.io
license: license:
name: MIT name: MIT
url: https://opensource.org/licenses/MIT
servers: servers:
- url: http://petstore.swagger.io/{version} - url: http://petstore.swagger.io/{version}
variables: variables:

View file

@ -48,8 +48,21 @@ class TestPetstore(object):
def test_spec(self, spec, spec_dict): def test_spec(self, spec, spec_dict):
url = 'http://petstore.swagger.io/v1' url = 'http://petstore.swagger.io/v1'
assert spec.info.title == spec_dict['info']['title']
assert spec.info.version == spec_dict['info']['version'] info_spec = spec_dict['info']
assert spec.info.title == info_spec['title']
assert spec.info.description == info_spec['description']
assert spec.info.terms_of_service == info_spec['termsOfService']
assert spec.info.version == info_spec['version']
contact_spec = info_spec['contact']
assert spec.info.contact.name == contact_spec['name']
assert spec.info.contact.url == contact_spec['url']
assert spec.info.contact.email == contact_spec['email']
license_spec = info_spec['license']
assert spec.info.license.name == license_spec['name']
assert spec.info.license.url == license_spec['url']
assert spec.get_server_url() == url assert spec.get_server_url() == url