[Python] Marshmallow: schema variabile in base al valore di altri campi

Federico Fissore federico a fsfe.org
Gio 3 Dic 2020 16:24:06 CET


Ciao a tutti

Usate marshmallow per fare validazione dell'input?

Mi trovo con un problema che non so bene come affrontare: come posso 
decidere a runtime quale Schema utilizzare per la validazione?

Diciamo che ho una API che serve a inviare un ordine di acquisto di 
bevande: se l'utente è minorenne può ordinare al massimo una bottiglia, 
altrimenti può anche svuotarmi il magazzino

Due json validi sono:

per i minorenni
{
   eta: 15,
   bevanda: {
     quantita: 1
   }
}

per i maggiorenni:
{
   eta: 20,
   bevanda: {
     quantita: 100
   }
}

Gli schema sono:

class Ordine(Schema):
   eta = fields.Integer(required=True)
   bevanda = fields.Nested(BevandaMaggiorenni, required=True)


class BevandaMaggiorenni(Schema):
   quantita = fields.Integer(required=True)


class BevandaMinorenni(Schema):
   quantita = fields.Integer(required=True)

   @validates('quantita')
   def validates_quantita(self, quantita):
     if quantita > 1:
       raise ValidationError('troppe bottiglie')


Come posso fare per cambiare lo schema associato a 'bevanda' a seconda 
del valore di 'eta'?

ciao

federico


Maggiori informazioni sulla lista Python