marshmallow-jsonapi: Как повторно использовать схему, но изменить `type_`? - PullRequest
0 голосов
/ 17 июня 2019

У меня много конечных точек, но они используют одну и ту же схему jsonapi.

POST /foods
{
    "data": {
        "type": "food",
        "attributes": {
            "name": "abc",
            "item": "food"
        }
    }
}
POST /chats
{
    "data": {
        "type": "food",
        "attributes": {
            "name": "bcd",
            "item": "chat"
        }
    }
}
POST /animals
{
    "data": {
        "type": "food",
        "attributes": {
            "name": "poi",
            "item": "animals"
        }
    }
}

Моя схема:

import marshmallow_jsonapi as jsonapi
ItemSchema(jsonapi.Schema):
    id = jsonapi.fields.UUID(dumps_only=True)
    name = jsonapi.fields.String(required=True)
    item = jsonapi.fields.String(required=True)

    class Meta:
        type_ = "items"
        strict = True

Следуя стандарту jsonapi, type должен соответствовать каждой конечной точке (foods, chats, animals).

import marshmallow_jsonapi as jsonapi
FoodSchema(jsonapi.Schema):
    id = jsonapi.fields.UUID(dumps_only=True)
    name = jsonapi.fields.String(required=True)
    item = jsonapi.fields.String(required=True)

    class Meta:
        type_ = "foods"
        strict = True
import marshmallow_jsonapi as jsonapi
ChatSchema(jsonapi.Schema):
    id = jsonapi.fields.UUID(dumps_only=True)
    name = jsonapi.fields.String(required=True)
    item = jsonapi.fields.String(required=True)

    class Meta:
        type_ = "chats"
        strict = True
import marshmallow_jsonapi as jsonapi
AnimalSchema(jsonapi.Schema):
    id = jsonapi.fields.UUID(dumps_only=True)
    name = jsonapi.fields.String(required=True)
    item = jsonapi.fields.String(required=True)

    class Meta:
        type_ = "animals"
        strict = True

Каким образом можно уменьшить избыточный код, чтобы не иметь кучу копий ItemSchema только с измененным type?

...