Source code for flask_swag.core
"""
core
====
Core API for swagger.
"""
import marshmallow
from . import schemas
[docs]def make_dict_factory(schema):
requireds = []
defaults = {}
fields = schema.fields
for name, field in fields.items():
if field.required:
requireds.append(name)
if field.default is not marshmallow.missing:
defaults[name] = field.default
def factory(**kwargs):
strict = kwargs.pop('_strict', True)
for key, value in defaults.items():
kwargs.setdefault(key, value)
for required in requireds:
if required not in kwargs:
raise TypeError("Missing argument \"{key}\""
.format(key=required))
if strict:
for key, value in kwargs.items():
if key not in fields:
raise TypeError("Unexpected argument \"{key}\""
.format(key=key))
return dict(kwargs)
return factory
#: Description of external documentation
ExternalDocumentation = make_dict_factory(
schemas.ExternalDocumentationSchema())
#: Basic schema info
Schema = make_dict_factory(schemas.SchemaSchema())
#: License info
License = make_dict_factory(schemas.LicenseSchema())
#: Contact info
Contact = make_dict_factory(schemas.ContactSchema())
#: Swagger metadata
Info = make_dict_factory(schemas.InfoSchema())
#: Description of items
Items = make_dict_factory(schemas.ItemsSchema())
#: Header info
Header = make_dict_factory(schemas.HeaderSchema())
#: Parameter info
Parameter = make_dict_factory(schemas.ParameterSchema())
#: Description of responses of operation
Response = make_dict_factory(schemas.ResponseSchema())
#: Operations for each method in PathItem
Operation = make_dict_factory(schemas.OperationSchema())
#: Items for each path
PathItem = make_dict_factory(schemas.PathItemSchema())
#: Swagger root object
Swagger = make_dict_factory(schemas.SwaggerSchema())
[docs]def dump(swagger, schema=schemas.SwaggerSchema()):
"""
Dump swagger dict to swagger JSON spec
"""
return schema.dump(swagger).data
[docs]def parameters_from_object_schema(schema, in_='formData'):
"""Convert object schema to parameters."""
# We can only extract parameters from schema
if schema['type'] != 'object':
return []
properties = schema.get('properties', {})
required = schema.get('required', [])
parameters = []
for name, property in properties.items():
parameter = {
'name': name,
'in_': in_,
'required': (name in required),
}
parameter.update(property)
parameter = Parameter(**parameter)
parameters.append(parameter)
parameters = sorted(parameters, key=lambda x: x['name'])
return parameters