So sagen, ich habe das folgende Dokument:Daten können nicht serialisiert werden, wenn auf einem Feld Patchen, die eine ‚valueschema‘ hat, die vom Typ ‚dict‘ in Eve ist
test_obj = {
'my_things':{
'id17': {
'blah': 3,
'weird': 'yay',
'thechallenge': ObjectId('5712d06fdb4d0856551300d2')
},
'id32': {
'blah': 62,
'weird': 'hoorah',
'thechallenge': ObjectId('5712d06fdb4d0856551300d4')
}
},
'_id': 12,
'an_extra_field': 'asdf'
}
für dieses Dokument i das folgende Schema haben:
API.config['DOMAIN']['test_obj']['schema'] = {
'id': {'type': 'int'},
'an_extra_field': {'type': 'string'},
'my_things': {
'type': 'dict',
'valueschema': {
'type': 'dict',
'schema': {
'blah': {'type': 'dict'},
'weird': {'type': 'string'},
'thechallenge': {'type': 'objectid'}
}
}
}
}
sage ich jetzt einen Patch mit dem folgenden Pseudo-Code machen:
data = {
'mythings': {
'id17': {
'thechallenge': '5712d06fdb4d0856551300d8'
}
}
}
PATCH(url='/v1/test_objs/12', data=data)
Wenn ich diesen Patch Ce machen rberus löst während der Validierung einen Fehler aus und sagt "value '5712d06fdb4d0856551300d8' cannot be converted to a ObjectId"
. Nun ist dies eine gültige Objekt-ID, und ich finde, dass wenn ich ein Patch auf andere Nicht-Wertschema-Felder mache, dieser Fehler nicht auftritt. Es scheint, als ob valueschema keinen Wert von dict haben sollte, und das Hinzufügen eines zusätzlichen "schema" -Attributs war der einzige Weg, wie ich um Cerberus herumkommen konnte, indem ich einen Schema-Fehler erzeugte und Cerberus tatsächlich meine Felder validierte. Aber eve scheint meine Felder in meinem Wörterbuch nicht korrekt zu serialisieren. Es sollte vom Typ ObjectId sein, wenn es an Cerberus übergeben wird.
Die Art, wie ich mich vorübergehend damit befasse, manipuliert meinen Code in Eve. In common.py (Modul) in serialize (Funktion) in Zeile 398 hinzugefügt i, wo es, wenn das Feld Schema überprüft ist ein 'valueschema':
elif field_type == 'dict' and 'schema' in field_schema['valueschema']:
for subdocument in document[field].values():
serialize(subdocument, schema=field_schema['valueschema']['schema'])
Soll ich nicht Typen mit dict
für die valueschema
? Wenn nicht, wie sollte ich sonst mit diesem Szenario umgehen? Ich möchte nicht meine eigene Gabel von Eve pflegen müssen, also wenn andere die Fähigkeit haben wollen, valueschema
vom Typ dict
zu sein, sollte ich eine Pull-Anfrage für diese Änderung einreichen?
Vielen Dank !!! –