Exemplo n.º 1
0
    def get_parameters(self, rule, view, docs, parent=None):
        annotation = resolve_annotations(view, 'args', parent)
        args = merge_recursive(annotation.options)
        schema = args.get('args', {})
        if is_instance_or_subclass(schema, Schema):
            converter = swagger.schema2parameters
        elif callable(schema):
            schema = schema(request=None)
            if is_instance_or_subclass(schema, Schema):
                converter = swagger.schema2parameters
            else:
                converter = swagger.fields2parameters
        else:
            converter = swagger.fields2parameters
        options = copy.copy(args.get('kwargs', {}))
        locations = options.pop('locations', None)
        if locations:
            options['default_in'] = locations[0]
        if parse_version(apispec.__version__) < parse_version('0.20.0'):
            options['dump'] = False

        options['spec'] = self.app.config.get('APISPEC_SPEC', None)

        rule_params = rule_to_params(rule, docs.get('params')) or []
        extra_params = converter(schema, **options) if args else []

        return extra_params + rule_params
Exemplo n.º 2
0
    def get_parameters(self, rule, view, docs, parent=None):
        if APISPEC_VERSION_INFO[0] < 3:
            openapi = self.marshmallow_plugin.openapi
        else:
            openapi = self.marshmallow_plugin.converter
        annotation = resolve_annotations(view, 'args', parent)
        extra_params = []
        for args in annotation.options:
            schema = args.get('args', {})
            if is_instance_or_subclass(schema, Schema):
                converter = openapi.schema2parameters
            elif callable(schema):
                schema = schema(request=None)
                if is_instance_or_subclass(schema, Schema):
                    converter = openapi.schema2parameters
                else:
                    converter = openapi.fields2parameters
            else:
                converter = openapi.fields2parameters
            options = copy.copy(args.get('kwargs', {}))
            locations = options.pop('locations', None)
            if locations:
                options['default_in'] = locations[0]
            elif 'default_in' not in options:
                options['default_in'] = 'body'
            extra_params += converter(schema, **options) if args else []

        rule_params = rule_to_params(rule, docs.get('params')) or []

        return extra_params + rule_params
Exemplo n.º 3
0
 def get_parameters(self, rule, view, docs, parent=None):
     annotation = resolve_annotations(view, 'args', parent)
     args = merge_recursive(annotation.options)
     converter = (swagger.schema2parameters if is_instance_or_subclass(
         args.get('args', {}), Schema) else swagger.fields2parameters)
     options = copy.copy(args.get('kwargs', {}))
     locations = options.pop('locations', None)
     if locations:
         options['default_in'] = locations[0]
     return converter(args.get('args', {}), dump=False, **
                      options) + rule_to_params(rule, docs.get('params'))
Exemplo n.º 4
0
def _get_fields(attrs, ordered=False):
    """Get fields from a class. If ordered=True, fields will sorted by creation index.

    :param attrs: Mapping of class attributes
    :param bool ordered: Sort fields by creation index
    """
    fields = [(field_name, field_value)
              for field_name, field_value in attrs.items()
              if is_instance_or_subclass(field_value, base.FieldABC)]
    if ordered:
        fields.sort(key=lambda pair: pair[1]._creation_index)
    return fields
Exemplo n.º 5
0
    def get_parameters(self, rule, view, docs, parent=None):
        openapi = self.marshmallow_plugin.openapi
        annotation = resolve_annotations(view, 'args', parent)
        args = merge_recursive(annotation.options)
        schema = args.get('args', {})
        if is_instance_or_subclass(schema, Schema):
            converter = openapi.schema2parameters
        elif callable(schema):
            schema = schema(request=None)
            if is_instance_or_subclass(schema, Schema):
                converter = openapi.schema2parameters
            else:
                converter = openapi.fields2parameters
        else:
            converter = openapi.fields2parameters
        options = copy.copy(args.get('kwargs', {}))
        locations = options.pop('locations', None)
        if locations:
            options['default_in'] = locations[0]

        rule_params = rule_to_params(rule, docs.get('params')) or []
        extra_params = converter(schema, **options) if args else []

        return extra_params + rule_params
Exemplo n.º 6
0
def _get_fields(attrs, field_class, pop=False, ordered=False):
    """Get fields from a class. If ordered=True, fields will sorted by creation index.

    :param attrs: Mapping of class attributes
    :param type field_class: Base field class
    :param bool pop: Remove matching fields
    """
    getter = getattr(attrs, "pop" if pop else "get")
    fields = [(field_name, getter(field_name))
              for field_name, field_value in list(iteritems(attrs))
              if utils.is_instance_or_subclass(field_value, field_class)]
    if ordered:
        return sorted(fields, key=lambda pair: pair[1]._creation_index)
    else:
        return fields
Exemplo n.º 7
0
def _get_fields(attrs, field_class, pop=False, ordered=False):
    """Get fields from a class. If ordered=True, fields will sorted by creation index.

    :param attrs: Mapping of class attributes
    :param type field_class: Base field class
    :param bool pop: Remove matching fields
    """
    fields = [(field_name, field_value)
              for field_name, field_value in iteritems(attrs)
              if utils.is_instance_or_subclass(field_value, field_class)]
    if pop:
        for field_name, _ in fields:
            del attrs[field_name]
    if ordered:
        fields.sort(key=lambda pair: pair[1]._creation_index)
    return fields
Exemplo n.º 8
0
    def get_parameters(self, rule, view, docs, parent=None):
        annotation = resolve_annotations(view, 'args', parent)
        args = merge_recursive(annotation.options)
        converter = (swagger.schema2parameters if is_instance_or_subclass(
            args.get('args', {}), Schema) else swagger.fields2parameters)
        options = copy.copy(args.get('kwargs', {}))
        locations = options.pop('locations', None)
        if locations:
            options['default_in'] = locations[0]
        if parse_version(apispec.__version__) < parse_version('0.20.0'):
            options['dump'] = False
        rule_params = rule_to_params(rule, docs.get('params')) or []
        extra_params = converter(args.get('args', {}), **
                                 options) if args else []

        return rule_params + extra_params
Exemplo n.º 9
0
def _get_fields(attrs, field_class, pop=False):
    """Get fields from a class, sorted by creation index.

    :param attrs: Mapping of class attributes
    :param type field_class: Base field class
    :param bool pop: Remove matching fields
    """
    getter = getattr(attrs, 'pop' if pop else 'get')
    return sorted(
        [
            (field_name, getter(field_name))
            for field_name, field_value in list(iteritems(attrs))
            if utils.is_instance_or_subclass(field_value, field_class)
        ],
        key=lambda pair: pair[1]._creation_index,
    )
Exemplo n.º 10
0
 def get_parameters(self, rule, view, docs, parent=None):
     annotation = resolve_annotations(view, 'args', parent)
     args = merge_recursive(annotation.options)
     converter = (
         swagger.schema2parameters
         if is_instance_or_subclass(args.get('args', {}), Schema)
         else swagger.fields2parameters
     )
     options = copy.copy(args.get('kwargs', {}))
     locations = options.pop('locations', None)
     if locations:
         options['default_in'] = locations[0]
     return converter(
         args.get('args', {}),
         dump=False,
         **options
     ) + rule_to_params(rule, docs.get('params'))
Exemplo n.º 11
0
    def get_declared_fields(mcs, bases, attrs, field_class):
        """Return the declared fields of a class as an OrderedDict.

        :param tuple bases: Tuple of classes the class is subclassing.
        :param dict attrs: Dictionary of class attributes.
        :param type field_class: The base field class. Any class attribute that
            is of this type will be be returned
        """
        declared = [(field_name, attrs.pop(field_name))
                    for field_name, val in list(iteritems(attrs))
                    if utils.is_instance_or_subclass(val, field_class)]
        # If subclassing another Serializer, inherit its fields
        # Loop in reverse to maintain the correct field order
        for base_class in bases[::-1]:
            if hasattr(base_class, '_declared_fields'):
                declared = list(base_class._declared_fields.items()) + declared
        return OrderedDict(declared)
Exemplo n.º 12
0
    def get_declared_fields(mcs, bases, attrs, field_class):
        '''Return the declared fields of a class as an OrderedDict.

        :param tuple bases: Tuple of classes the class is subclassing.
        :param dict attrs: Dictionary of class attributes.
        :param type field_class: The base field class. Any class attribute that
            is of this type will be be returned
        '''
        declared = [(field_name, attrs.pop(field_name))
                    for field_name, val in list(iteritems(attrs))
                    if utils.is_instance_or_subclass(val, field_class)]
        # If subclassing another Serializer, inherit its fields
        # Loop in reverse to maintain the correct field order
        for base_class in bases[::-1]:
            if hasattr(base_class, '_declared_fields'):
                declared = list(base_class._declared_fields.items()) + declared
        return OrderedDict(declared)
Exemplo n.º 13
0
    def get_parameters(self, rule, view, docs, parent=None):
        openapi = self.marshmallow_plugin.converter
        annotation = resolve_annotations(view, 'args', parent)
        extra_params = []
        for args in annotation.options:
            schema = args.get('args', {})
            openapi_converter = openapi.schema2parameters
            if not is_instance_or_subclass(schema, Schema):
                if callable(schema):
                    schema = schema(request=None)
                else:
                    schema = Schema.from_dict(schema)
                    openapi_converter = functools.partial(
                        self._convert_dict_schema, openapi_converter)

            options = copy.copy(args.get('kwargs', {}))
            if not options.get('location'):
                options['location'] = 'body'
            extra_params += openapi_converter(schema, **
                                              options) if args else []

        rule_params = rule_to_params(rule, docs.get('params')) or []

        return extra_params + rule_params