def test_field_multiple(self): field = fields.List(fields.Str, location='querystring') res = swagger.field2parameter(field, name='field') assert res['in'] == 'query' assert res['type'] == 'array' assert res['items']['type'] == 'string' assert res['collectionFormat'] == 'multi'
def get_parameters(url, interface, spec): defaults = interface.defaults sig = inspect.signature(get_handler(interface)) parameters = [] for name in interface.parameters: parameter_type = sig.parameters[name].annotation if getattr(parameter_type, 'directive', False): logger.info('Skip directive: %s for url: %s ', name, url) continue if parameter_type != inspect.Parameter.empty: # path and query if isinstance(parameter_type, fields.Field): parameter_place = where_is_parameter(name, url) parameter_type.metadata = { 'location': where_is_parameter(name, url) } parameter_type.required = name not in defaults parameter = field2parameter(parameter_type, name=name, default_in=parameter_place, use_refs=False) if name in defaults: parameter['default'] = defaults[name] parameters.append(parameter) # body elif name == 'body' and (isinstance(parameter_type, Schema) or isinstance(parameter_type, SchemaMeta)): if isinstance(parameter_type, Schema): schema_name = parameter_type.__class__.__name__ schema = parameter_type elif isinstance(parameter_type, SchemaMeta): schema_name = parameter_type.__name__ schema = parameter_type() spec.definition(schema_name, schema=schema) ref_definition = "#/definitions/{}".format(schema_name) ref_schema = {"$ref": ref_definition} parameters.append({ "in": "body", "name": "body", "required": True, "schema": ref_schema }) else: logger.error( 'Use marshmallow fields in url: %s instead of hug: %s %s', url, name, parameter_type) else: logger.info('There is no type annotation for %s in url: %s', name, url) # pass return parameters
def test_swagger_tools_validate(): spec = APISpec( title='Pets', version='0.1', plugins=['apispec.ext.marshmallow'], ) spec.definition('Category', schema=CategorySchema) spec.definition('Pet', schema=PetSchema) spec.add_path( view=None, path='/category/{category_id}', operations={ 'get': { 'parameters': [ {'name': 'q', 'in': 'query', 'type': 'string'}, {'name': 'category_id', 'in': 'path', 'required': True, 'type': 'string'}, field2parameter( field=fields.List( fields.Str(), validate=validate.OneOf(['freddie', 'roger']), location='querystring', ), name='body', use_refs=False, ), ] + swagger.schema2parameters(PageSchema, default_in='query'), 'responses': { 200: { 'schema': PetSchema, 'description': 'A pet', }, }, }, 'post': { 'parameters': ( [{'name': 'category_id', 'in': 'path', 'required': True, 'type': 'string'}] + swagger.schema2parameters(CategorySchema, spec=spec, default_in='body') ), 'responses': { 201: { 'schema': PetSchema, 'description': 'A pet', }, }, } }, ) try: utils.validate_swagger(spec) except exceptions.SwaggerError as error: pytest.fail(str(error))
def test_field_required(self): field = fields.Str(required=True) res = swagger.field2parameter(field, name='field') assert res['required'] is True
{ 'name': 'q', 'in': 'query', 'type': 'string' }, { 'name': 'category_id', 'in': 'path', 'required': True, 'type': 'string' }, field2parameter( field=fields.List( fields.Str(), validate=validate.OneOf(['freddie', 'roger']), location='querystring', ), name='body', use_refs=False, ), ] + swagger.schema2parameters(PageSchema, default_in='query'), 'responses': { 200: { 'schema': PetSchema, 'description': 'A pet', }, }, }, 'post': { 'parameters': ([{ 'name': 'category_id',