Il model di Genropy

All’avvio di un’applicativo Genropy viene letto il file instanceconfig.xml, il file che contiene le impostazioni di configurazione dell’istanza di applicazione. Per ogni package indicato viene caricato l’elenco delle tabelle individuate all’interno della cartella model, verrà costruita una Bag con le definizioni delle varie tabelle e questa Bag verrà passata a un builder che si occuperà della costruzione di tutti gli oggetti necessari.

Suggerimento

Si rimanda anche al Corso Base di Genropy per un ulteriore approfondimento su questi argomenti.

La struttura segue sempre questa gerarchia

Database
packages
package p1
tables
table t1
columns
column c1 column c2 … column cn

table t2 … table tn

package p2 … package pn

Seguendo questo schema, proviamo ad analizzare la struttura di un applicativo Genropy. A titolo di esempio, proviamo in un qualsiasi terminale a istanziare l’applicativo (l’oggetto GnrApp) passando il nome dell’istanza:

from gnr.app.gnrapp import GnrApp
app = GnrApp('sandboxpg')

Una volta istanziato l’oggetto GnrApp, ci concentriamo sull’oggetto GnrSqlDb, ovvero il mapper corrispondente dal database dell’applicazione:

mydb = app.db

Nel database a questo punto possiamo vedere il model:

mymodel = mydb.model

Del model troviamo in src la Bag che corrisponde alla struttura dell’intero database:

model_structure = mymodel.src

Il primo livello della struttura è costituito dai package

model_structure['packages'].keys()

['sys', 'adm', 'glbl', 'sandbox', 'tutor', 'test15', 'biz', 'fatt']

E più in profondità per ogni package troviamo le sue tabelle. Prendiamo ad esempio quelle del package glbl:

model_structure['packages.glbl.tables'].keys()

['comune', 'localita', 'nazione', 'nuts', 'provincia', 'regione']

Come abbiamo detto, questa è la Bag del model, ovvero la struttura. Una volta costruita questa struttura, il builder dell’ORM si occuperà di trasformarla in una serie di oggetti necessari alla corretta «renderizzazione». Al centro c’è sempre la Table :

model_structure['packages.glbl'].keys()

['tables']

All’interno della Table ci sono poi le colonne , suddivise tra colonne «reali» del record e Colonne virtuali .

model_structure['packages.glbl.tables.provincia'].keys()

['columns', 'virtual_columns']

Si noti che una volta costruito il model, e a ogni sua successiva modifica (sia essa a una tabella , a una colonna , o a una relazione ), è necessaria un’operazione di creazione o riallineamento con il database. In una finestra di terminale, con il comando:

gnrdbsetup nomeistanza

verrà lanciato uno script che si occuperà di creare le tabelle e le colonne mancanti (o modificate dall’ultima esecuzione).

Suggerimento

La gnrdbsetup ha anche delle funzionalità addizionali: per esempio, eseguendo gnrdbsetup nomeistanza -u verranno creati anche i sysRecord di default delle tabelle. Per una lista completa delle opzioni disponibili, digita sul terminale gnrdbsetup -h

Vediamo ora come sono definite le singole componenti del Model di Genropy, partendo dal primo livello di questa struttura gerarchica: la definizione di un package .

Attachments:

Autore della sezione: Davide Paci