.. _dive_into_genropy/lezioni/bag: Bag e Structures ================ Scrivere, leggere una Bag -------------------------- :: #importazione from gnr.core.gnrbag import Bag b = Bag() b['ricetta.titolo'] = 'Spaghetti al pomodoro' b['ricetta.ingredienti.i1'] = 'spaghetti' #metodo setItem per scrivere b.setItem('ricetta.ingredienti.i2', 'salsa di pomodoro') #leggo il valore con le parentesi b['ricetta.titolo'] #leggo il valore con il metodo getItem b.getItem('ricetta.titolo') #salvo su un file xml b.toXml('ricettario.xml') #aggiungo un ingrediente con attributo peso ingredienti = b['ricetta.ingredienti'] ingredienti.setItem('i3', 'parmigiano', peso='30g') #leggo l'attributo ingredienti['i3?peso'] #aggiungo l'attributo peso agli ingredienti precedenti ingredienti.setAttr('i1', peso='200g') ingredienti.setAttr('i2', peso='100g') #salvo su un file xml b.toXml('ricettario_attributi.xml') Resolver -------- :: from datetime import datetime b.setCallBackItem('ora_esatta', datetime.now) print (b['ora_esatta']) Trigger ------- :: def insertLogger(**kwargs): print ('aggiunto ingrediente!') def updateLogger(**kwargs): print ('modificato ingrediente!') b['ricetta.ingredienti'].subscribe('log', insert=insertLogger, update=updateLogger) #vediamo cosa succede se inserisco o modifico... b['ricetta.ingredienti.i4']='basilico' b['ricetta.ingredienti.i1']='spaghettini' Stutture: metodo child ----------------------- :: from gnr.core.gnrstructures import GnrStructData mystruct = GnrStructData() mystruct.child(tag='ingrediente',nome='Spaghetti', peso='200g') mystruct.child(tag='ingrediente',nome='Salsa', peso='100g') f = mystruct.child(tag='fase', nome='Preparare sugo', t=’10 min.') f.child(tag='fase', nome='Tagliare cipolla') f.child(tag='fase', nome='Soffriggere cipolla') f.child(tag='fase', nome='Aggiungere salsa') Strutture: definizione struttura -------------------------------- :: from gnr.core.gnrstructures import GnrStructData class Ricetta(GnrStructData): def ingrediente(self, nome, peso): return self.child(tag='ingrediente', nome=nome, peso=peso) def fase(self, nome, descrizione=None, tempo=None): return self.child(tag='fase', nome=nome, tempo=tempo, descrizione=descrizione) def sezione(self, nome): return self.child(tag='sezione', nome=nome) Strutture: usiamo la struttura -------------------------------- :: myricetta = Ricetta() ingr = myricetta.sezione('Ingredienti') ingr.ingrediente('Spaghetti', '100g') ingr.ingrediente('Salsa pomodoro', '80g') procedimento = myricetta.sezione('Procedimento') sughetto = procedimento.fase(nome='Preparare sugo', tempo='15 min') sughetto.fase(nome='Tagliare cipolla') sughetto.fase(nome='Soffriggere cipolla', tempo='3 min') sughetto.fase(nome='Aggiungere salsa') #infine esporto in xml per controllare il risultato myricetta.toXml('spaghetti.xml') Riferimenti e link utili ------------------------ Se volete approfondire - https://blog.genropy.org/out-of-the-box - https://genropy.org/docs/bag_book/index.html .. raw:: html
**Allegati:** - `esempi_bag `_ - `descrittore_ricetta `_ - `descrittore_doc `_ - `slides_bag_structures `_