openapi-core/openapi_core/parameters.py

61 lines
1.8 KiB
Python

"""OpenAPI core parameters module"""
import logging
from openapi_core.schemas import SchemaRegistry
log = logging.getLogger(__name__)
class Parameter(object):
"""Represents an OpenAPI operation Parameter."""
def __init__(
self, name, location, schema=None, default=None,
required=False, deprecated=False, allow_empty_value=False,
items=None, collection_format=None):
self.name = name
self.location = location
self.schema = schema
self.default = default
self.required = required
self.deprecated = deprecated
self.allow_empty_value = allow_empty_value
self.items = items
self.collection_format = collection_format
def unmarshal(self, value):
if not self.schema:
return value
return self.schema.unmarshal(value)
class ParametersGenerator(object):
def __init__(self, dereferencer):
self.dereferencer = dereferencer
def generate(self, paramters):
for parameter in paramters:
parameter_deref = self.dereferencer.dereference(parameter)
default = parameter_deref.get('default')
required = parameter_deref.get('required', False)
schema_spec = parameter_deref.get('schema', None)
schema = None
if schema_spec:
schema = self._create_schema(schema_spec)
yield (
parameter_deref['name'],
Parameter(
parameter_deref['name'], parameter_deref['in'],
schema=schema, default=default, required=required,
),
)
def _create_schema(self, schema_spec):
schema, _ = SchemaRegistry(self.dereferencer).get_or_create(
schema_spec)
return schema