2015-09-23 19 views
5

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?

risposta

1

Per forzare nessuno a carico, è possibile utilizzare il missing parameter:

mancante - Valore deserializzazione di default per il campo se il campo non si trova nei dati di input. Può essere un valore o un callable.

class ExampleSchema(Schema): 
    field_a = fields.Int(missing=None) 

Per quanto riguarda il secondo punto, il docs sembrano dire che da 2,0 in poi, i campi mancanti sono esclusi dai uscita serializzato.

Problemi correlati