Ejemplo n.º 1
0
def custom_name_resolver(schema):
    """
    Creates names for Marshmallow schemas in documentation.

    In case a schema is created using partial=`True`, `Partial-`
    will be added in front of the its name.

    In case a schema name ends with `Schema`, the `Schema` part
    is removed from the name.

    Adapted from https://github.com/marshmallow-code/apispec/pull/476/

    :param schema: Schema to name
    :type schema: `marshmallow.Schema`
    :return: The documented name for the schema
    :rtype: str
    """
    # Get an instance of the schema
    schema_instance = common.resolve_schema_instance(schema)
    if schema_instance.partial:
        prefix = "Patch-"
    elif schema_instance.only:
        prefix = "Partial-"
    else:
        prefix = ""

    # Get the class of the instance
    schema_cls = common.resolve_schema_cls(schema)
    name = prefix + schema_cls.__name__

    if name.endswith("Schema"):
        return name[:-6] or name
    return name
Ejemplo n.º 2
0
    def definition_helper(self, name, schema, **kwargs):
        """Definition helper that allows using a marshmallow
        :class:`Schema <marshmallow.Schema>` to provide OpenAPI metadata.

        :param str name: Name to use for definition.
        :param type|Schema schema: A marshmallow Schema class or instance.
        """
        schema_cls = resolve_schema_cls(schema)
        schema_instance = resolve_schema_instance(schema)

        # Store registered refs, keyed by Schema class
        self.references[schema_cls] = name

        if hasattr(schema_instance, 'fields'):
            fields = schema_instance.fields
        elif hasattr(schema_instance, '_declared_fields'):
            fields = schema_instance._declared_fields
        else:
            raise ValueError(
                "{0!r} doesn't have either `fields` or `_declared_fields`".
                format(schema_instance))

        ret = super().definition_helper(name, schema_instance, **kwargs)

        for field_name, field_obj in fields.items():
            if isinstance(field_obj, Hyperlinks):
                ret['properties'][field_name]['properties'] = _rapply(
                    field_obj.schema, self.openapi.field2property, name=name)

        return ret
Ejemplo n.º 3
0
def resolver(schema):
    schema_instance = common.resolve_schema_instance(schema)
    prefix = "Partial-" if schema_instance.partial else ""
    schema_cls = common.resolve_schema_cls(schema)
    name = prefix + schema_cls.__name__
    if name.endswith("Schema"):
        return name[:-6] or name
    return name
Ejemplo n.º 4
0
def resolver(schema):
    schema_cls = resolve_schema_cls(schema)
    name = schema_cls.__name__
    if name == "MetaSchema":
        if hasattr(schema_cls, "Meta"):
            return (
                f"{schema_cls.Meta.parent_schema_name}.{schema_cls.Meta.model.__name__}"
            )
    if name.endswith("Schema"):
        return name[:-6] or name
    return name
Ejemplo n.º 5
0
def schema_name_resolver(schema):
    schema_cls = resolve_schema_cls(schema)
    name = schema_cls.__name__
    if name.endswith("Schema"):
        name = name[:-6] or name
    if schema.partial:
        if isinstance(schema.partial, list):
            for field in schema.partial:
                name += field.capitalize()
        name += 'Partial'
    return name
Ejemplo n.º 6
0
def resolver(schema):
    """Default schema name resolver function that strips 'Schema' from the end of the class name."""
    schema_cls = resolve_schema_cls(schema)
    name = schema_cls.__name__
    if name.endswith("Schema"):
        name = name[:-6] or name
    schema_inst = resolve_schema_instance(schema)
    if schema_inst.partial:
        return f'{name}_partial'
    if schema_inst.only:
        return f'{name}.{"-".join(schema_inst.only)}'
    return name
Ejemplo n.º 7
0
def schema_name_resolver(schema):
    cls = resolve_schema_cls(schema)
    instance = resolve_schema_instance(schema)
    name = cls.__name__
    if not cls.opts.register:
        # Unregistered schemas are put inline.
        return False
    if instance.only:
        # If schema includes only select fields, treat it as nonce
        return False
    if name.endswith("Schema"):
        return name[:-6] or name
    if instance.partial:
        name = "Partial" + name
    return name
Ejemplo n.º 8
0
def schema_name_resolver(schema):
    schema_cls = resolve_schema_cls(schema)
    name = schema_cls.__name__
    if name.endswith("Schema"):
        name = name[:-6] or name
    if getattr(schema, 'partial', None):
        if isinstance(schema.partial, list):
            for field in schema.partial:
                name += field.capitalize()
        name += 'Partial'
    if getattr(schema, 'only', None):
        for field in schema.only:
            name += field.capitalize()
        name += 'Only'
    if getattr(schema, 'exclude', None):
        for field in schema.exclude:
            name += field.capitalize()
        name += 'Exclude'
    return name
Ejemplo n.º 9
0
 def resolver(schema):
     schema_cls = common.resolve_schema_cls(schema)
     return schema_cls.__name__