Source code for swaggerconformance.apitemplates._parametertemplate

"""
Templates for parameter and model parts of a Swagger-defined API which can be
passed to specific API operations adhering to the definition.
"""
import logging

__all__ = ["ParameterTemplate"]


log = logging.getLogger(__name__)


[docs]class ParameterTemplate: """Common class for Swagger API operation parameters. :param swagger_definition: The swagger spec portion defining the parameter. :type swagger_definition: SwaggerParameter """ def __init__(self, swagger_definition): self._swagger_definition = swagger_definition self._items = None self._properties = None self._populate_children() def __repr__(self): return "{}(name={!r}, type={!r}, format={!r}, required={!r})".format( self.__class__.__name__, self.name, self.type, self.format, self.required) def _populate_children(self): if self.type == 'array': self._items = self.__class__(self._swagger_definition.items) if self.type == 'object': log.debug("Properties: %r", self._swagger_definition.properties) self._properties = {prop_name: self.__class__(prop_value) for prop_name, prop_value in self._swagger_definition.properties.items()}
[docs] def hypothesize(self, value_factory): """Generate a hypothesis strategy representing this parameter. :param value_factory: Factory to generate strategies for values. :type value_factory: swaggerconformance.valuetemplates.ValueFactory """ value_template = value_factory.create_value(self._swagger_definition) if self.type == 'array': elements = self.items.hypothesize(value_factory) result = value_template.hypothesize(elements) elif self.type == 'object': reqd_props = {name: parameter.hypothesize(value_factory) for name, parameter in self.properties.items() if name in self.required_properties} opt_props = {name: parameter.hypothesize(value_factory) for name, parameter in self.properties.items() if name not in self.required_properties} result = value_template.hypothesize(reqd_props, opt_props) else: result = value_template.hypothesize() return result
@property def name(self): """The name of this parameter, if it has one. :rtype: str or None """ return self._swagger_definition.name @property def type(self): """The type of this parameter. :rtype: str """ return self._swagger_definition.type @property def format(self): """The format of this parameter. :rtype: str """ return self._swagger_definition.format @property def required(self): """Whether this parameter is required. :rtype: bool """ return self._swagger_definition.required @property def items(self): """The children of this parameter if it's an array - `None` otherwise. :rtype: ParameterTemplate or None """ return self._items @property def properties(self): """The children of this parameter if it's a dict - `None` otherwise. :rtype: dict(str, ParameterTemplate) or None """ return self._properties @property def required_properties(self): """List of required property names of this parameter if it's an dict. :rtype: list(str) or None """ return self._swagger_definition.required_properties