Sto usando marshmallow 2.0.0rc2 per convalidare i dati di input su richieste HTTP e caricare i modelli SQLAlchemy su JSON su risposte HTTP. E mi sono imbattuto in 2 problemi:Forza `None` su caricamento e salta` None` su dump
Per prima cosa, durante il caricamento dei dati da JSON su richiesta PUT HTTP, voglio popolare tutti i campi mancanti come Nessuno, per sovrascrivere correttamente i dati in SQLAlchemy. In questo momento sto utilizzando il codice seguente:
for name, field in schema.fields.iteritems():
if field.missing == ma.missing:
schema.fields[name].missing = None
Funziona, ma suppongo che sia spiati dal momento che sono scherzi con marshmallow.Field
esempio attaccato al Schema
classe. E dopo aver smaltito l'istanza di Schema
, tutti i campi che abbiamo patchato verranno bloccati con nuovi mancanti anziché uno predefinito.
In secondo luogo, mentre si eseguono il dumping dei dati da SQLAlchemy a JSON, tutti i campi mancanti vengono risolti come Nessuno e JSON viene popolato con i dati {"key": null, }
. È un comportamento indesiderato e li sto pulendo sul trigger post_dump
.
@post_dump
def clean_missing(self, data):
for key in filter(lambda key: data[key] is None, data):
data.pop(key)
return data
Idem come precedente, sta funzionando, ma include la creazione di un po 'di classe BaseSchema
strega passa questa logica a tutte le classi ereditate.
Ho cercato la documentazione per tempo e non ho trovato alcun modo corretto per scambiare questi comportamenti, ad esempio saltare i campi su dumping e compilare i campi con None
al caricamento. Mi manca qualcosa o marshmallow non forniscono tali funzioni?