Example #1
0
 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'
Example #2
0
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
Example #3
0
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))
Example #4
0
 def test_field_required(self):
     field = fields.Str(required=True)
     res = swagger.field2parameter(field, name='field')
     assert res['required'] is True
Example #5
0
         {
             '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',