Bug de désérialisation Marshmallow Nested fields
Bonjour,
Je pensais avoir compris le fonctionnement mais la je sèche.
Voici un code tut simple qui retourne des classes différentes pour une structure identique !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| from marshmallow import Schema, fields, post_load
class Class_test_struct1():
def __init__(self, attr1): self.attr1=attr1
class Class_test_struct1Schema(Schema):
attr1=fields.String()
class Class_test_struct2():
def __init__(self, attr2): self.attr2=attr2
class Class_test_struct2Schema(Schema):
attr2=fields.String()
class Class_test():
def __init__(self, struct1, struct2):
self.struct1=struct1,
self.struct2=struct2
class Class_testSchema(Schema):
struct1=fields.Nested(Class_test_struct1Schema)
struct2=fields.Nested(Class_test_struct2Schema)
@post_load
def make_Class_test(self, data, **kwargs):
return Class_test(**data)
inputJson={
"struct1": { "attr1": "where is" },
"struct2": { "attr2": "the bug?" }
}
schema = Class_testSchema()
result = schema.load(inputJson)
print("Returned class: %s" % type(result))
print("type(result.struct1) = %s" % type(result.struct1))
print(result.struct1)
print("type(result.struct2) = %s" % type(result.struct2))
print(result.struct2) |
Résultat de l'exécution :
Code:
1 2 3 4 5
| Returned class: <class '__main__.Class_test'>
type(result.struct1) = <class 'tuple'>
({'attr1': 'where is'},)
type(result.struct2) = <class 'dict'>
{'attr2': 'the bug?'} |
Pourquoi un tuple ??