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')