Resolução automática de chave de dicionário com esquemas aninhados usando Marshmallow

Eu tenho um esquema do Marshmallow em que um objeto usa uma chave para se referir a um objeto definido em um dicionário em outra parte da estrutura. Quero que a chave seja resolvida automaticamente ao desserializar o objeto. Como posso obter esse efeito no Marshmallow de maneira idiomática?

A solução alternativa por enquanto é resolver todas as referências manualmente, mas isso parece desajeitado, pois a natureza declarativa do Marshmallow deve poder fazer isso por nós automaticamente.

Observe que Marshmallow-SQLAlchemy suporta esse tipo de (des) serialização quandocolunas são declaradas como relacionamentos"que fazem isso automaticamente para nós, mas quero fazê-lo com dados JSON.

Aqui está um exemplo do que eu quero alcançar, comfields.Relationship sendo algo que ainda não existe:

class UserSchema(Schema):
    name = fields.String()
    email = fields.Email()
    friends = fields.Relationship('self', path="AddressBook.contacts", many=True)

class AddressBookSchema(Schema):
    contacts = nested.Dict(keys=fields.String(), values=fields.Nested(UserSchema))

# ... create ``user`` ...
serialized_data = AddressBookSchema().dump(user)
pprint(serialized_data)
# "contacts": {
#   "Steve": {
#     "name": "Steve",
#     "email": "[email protected]",
#     "friends": ["Mike"]
#   },
#   "Mike": {
#     "name": "Mike",
#     "email": "[email protected]",
#     "friends": []
# }


deserialized_data = UserSchema().load(result)
pprint(deserialized_data)
# "contacts": {
#   "Steve": {
#     "name": "Steve",
#     "email": "[email protected]",
#     "friends": [ {"name": "Mike", "email": "[email protected]"]
#   },
#   "Mike": {
#     "name": "Mike",
#     "email": "[email protected]",
#     "friends": []
# }

Eu também arquivei umproblema no repositório Marshmallow Github.

questionAnswers(1)

yourAnswerToTheQuestion