.. _tutor/architettura/project: Progetto ======== Un **progetto** Genropy è un raccoglitore di :ref:`istanze` (``instances``) e :ref:`packages` (``packages``): l'**istanza** è lo strumento di collegamento a un database, il **package** è l'insieme delle tabelle del *database* che servono a implementare un’area funzionale dell'applicativo. Ogni progetto di Genropy può essere costituito da una o più istanze, così come da uno o più *package*, e gli stessi *package* possono essere condivisi tra più progetti. Solitamente il progetto coincide con il *repository* dell'applicativo su Git. È possibile vedere all'opera la struttura di un progetto nel `progetto Sandbox `_, che abbiamo costruito passo-passo durante il `Tutorial di Fatturazione `_ Creare un progetto ------------------ Il primo passo quindi è la **creazione di un progetto**, che si può lanciare direttamente da Terminale con una semplice riga di comando:: gnrmkproject nome_cartella.nome_progetto -i nome_istanza -P nome_package -A "gnrcore:sys,gnrcore:adm" Ad esempio, nel `Tutorial di Fatturazione `_ creiamo il progetto ``fatturazione``, contenente l'istanza ``myfatturazione``, il package ``fatt`` e i `package core `_ *adm*, *sys*, e *glbl*:: gnrmkproject custom.fatturazione -i myfatturazione -P fatt -A "gnrcore:sys,gnrcore:adm,gnr_it:glbl" ``gnrmkproject`` si occupa di lanciare lo script di generazione del progetto, ovvero quello che creerà fisicamente la cartella con il nome del progetto all'interno della cartella da noi indicata (in questo caso ``custom``, contenente tutti i progetti di Genropy) e le sottocartelle *instances* e *packages*. Con l'attributo ``-i`` possiamo contestualmente creare un'istanza, con ``-P`` possiamo contestualmente creare il *main package*, mentre con ``-A`` richiediamo l'aggiunta dei package *core*. .. hint:: Si noti che per la creazione di un progetto non è necessaria la contestuale creazione né di un'istanza né di un package: un progetto può infatti essere anche totalmente vuoto. Setup del database ------------------ Prima di avviare l'applicativo, e ad ogni aggiornamento del modello, è necessario effettuare una `dbsetup `_. Avviare l'applicativo --------------------- Sia in ambiente di produzione che in locale è possibile istanziare un applicativo Genropy eseguendo in una finestra di Terminale il processo ``gnrdaemon``:: gnrdaemon e al contempo avviando in un'altra finestra di terminale il processo ``gnrwsgiserve``:: gnrwsgiserve sandboxpg Quest'ultimo processo si occuperà di istanziare l'applicativo e servire il relativo *site* sulla porta desiderata. È infatti possibile specificare una porta utilizzando l'attributo ``-p``, oppure richiedere modalità differenti, per esempio specificare l'utilizzo dei ``--websocket``, la modalità di ``--remote_edit``, o ancora di ``--debug``. .. image:: /_static/images/gnrdaemon.gif :width: 720px :align: center :height: 450px .. raw:: html
.. list-table:: Parametri di avvio di gnrwsgiserve :widths: 25 75 :align: center :header-rows: 1 * - Parametro - Contenuto * - --port / -p - Permette di avviare il server su una porta specifica (es: -p 8081) * - --host / -h - Permette di indicare un host particolare (es: -h 10.0.0.1) * - --websocket - Permette di avviare l'istanza usando i websocket * - -tornado / -t - Permette di avviare l'istanza usando tornado * - --remote_edit - Permette di avviare l'istanza con la modalità di remote edit * - --restore / - Permette di lanciare la procedura di restore del database * - --ssl - Permette di avviare l'applicativo in https, utilizzando un certificato SSL .. hint:: Per una lista completa dei comandi disponibili, lancia il comando ``gnrwsgiserve -h`` Alternativamente, in un qualsiasi terminale è possibile istanziare l'applicativo (l'oggetto ``GnrApp``) passando il nome dell'istanza:: from gnr.app.gnrapp import GnrApp app = GnrApp('sandboxpg') **È quindi sufficiente la sola istanza ad avviare l'applicativo** a tutti gli effetti. Questo ci consentirà anche da terminale di esplorare il `model `_, la sua struttura in termini di *packages* e *tables*, eseguire anche `operazioni di lettura `_ e `scrittura `_ direttamente da linea di comando. .. sectionauthor:: Davide Paci