Le Structures in Genropy¶
La classe GnrStructData eredita da Bag e permette di definire attraverso appositi metodi descrittori realtà complesse composte da collezioni di entità innestate (es: HTML, XML, DB model, GUI).
Il metodo più importante di GnrStructData è child
, che di fatto è un altro modo di fare una setItem su una Bag.
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')
La child equivale ad una setItem
ad un path prefissato basato sull’attributo tag
. Inoltre restituisce l’oggetto appena aggiunto.
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)
Definire questi metodi serve anche a scopo documentativo e permette un controllo dei parametri rispetto, rispetto all’uso di una Bag «libera».
def main():
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')
Suggerimento
Notate l’annidamento sezione > fase > fase
Utilizzi reali delle structures in Genropy¶
Le structures sono utilizzate in Genropy:
per descrivere le pagine servite
per descrivere il model del database
per descrivere l’HTML delle stampe
Poi ogni tipo di entità descritta avrà il suo costruttore, che la struttura descritta produrrà: oggetti Python, tabelle SQL o elementi di DOM.
Allegati:
Autore della sezione: Saverio Porcari e Giovanni Porcari