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