Использование Зефира для сериализации / десериализации с несколькими форматами - PullRequest
0 голосов
/ 01 марта 2019

У меня есть веб-сервис Flask с REST API с запросами, которые ожидают, что пользователь будет сериализован в определенном формате.Кроме того, веб-служба взаимодействует со сторонней службой, которая ожидает, что пользователь сериализован в другом формате.

Возможно ли с помощью Marshmallow сериализовать / десериализовать с другими форматами?Если нет, могу ли я получить предложения по альтернативным реализациям?Спасибо.

Приведенный ниже код является упрощенным примером, основанным на документации Marshmallow .

import datetime as dt

class User(object):
    def __init__(self, name, email):
        self.name = name
        self.email = email
        self.created_at = dt.datetime.now()

    def __repr__(self):
        return '<User(name={self.name!r})>'.format(self=self)
from marshmallow import Schema, fields

class UserSchema(Schema):
    name = fields.Str()
    email = fields.Email()
    created_at = fields.DateTime()
api_user_data = {
  "name": "Alex Honnold",
  "email": "ah@example.com"
}
3rd_party_service_user_data = {
  "metadata": {
    "name": "Alex Honnold",
    "email": "ah@example.com"
  }
schema = UserSchema()

Я бы хотел десериализовать, вызвав что-то вроде schema.load() для любого из значений user_data, а затем вызвать schema.dump() для сериализациив любое из этих значений.

...