Panoramica

Come funziona Genropy
e cosa trovi già pronto.

Un framework Python per Single Page Applications gestionali. Qui vedi come si scrive un'applicazione e cosa ti dà il framework.

Come funziona

Python descrive.
JavaScript costruisce.

Scrivi l'applicazione in Python. Nel browser la monta un motore JavaScript che fa parte del framework.

  1. 01 / Python descrive

    La pagina è una classe Python

    Nel metodo main descrivi form, griglie e pannelli con il page builder. Il server non genera HTML: genera una descrizione della pagina.

    fb.textbox(value='^.name')
  2. 02 / La Bag trasporta

    Una struttura sola, dai due lati

    La descrizione viaggia come Bag, un contenitore gerarchico di valori e attributi. La Bag esiste in Python e in JavaScript, con le stesse API.

    bag['order.customer'] = 'Ada'
  3. 03 / JavaScript costruisce

    Il browser monta l'applicazione

    Il motore crea i widget e li lega ai dati con i path ^. La pagina non si ricarica più: da lì in poi viaggiano solo i dati.

    widgetbinding ^store

Tutto Python, o quasi

Dove scrivi ancora JavaScript

Solo in poche righe: le formule di dataFormula e gli script di dataController sono espressioni JavaScript. HTML e CSS servono soltanto se vuoi cambiare l’aspetto.

root.dataFormula('.total', 'qty * price', qty='^.qty', price='^.price')

Come si scrive

Il codice,
in tre esempi.

Ogni esempio porta al manuale dove approfondire.

01

L'interfaccia in Python

Il page builder crea i widget, il ^ li lega a un path dei dati. Cambi il dato e il widget si aggiorna, senza scrivere un evento.

Widgetpedia
webpages/order.py
class GnrCustomWebPage:
    def main(self, root, **kwargs):
        fb = root.formbuilder(cols=1)
        fb.textbox(value='^.name', lbl='Nome')
        fb.numberTextBox(value='^.qty', lbl='Quantità')
        root.div('^.name')
02

Il modello dei dati

Una tabella è una classe Python con colonne e relazioni. Nelle query segui le relazioni con il path @, senza scrivere join.

Manuale ORM
model/invoice.py
class Table(object):
    def config_db(self, pkg):
        tbl = pkg.table('invoice', pkey='id')
        tbl.column('customer_id', size='22').relation('customer.id')

self.db.table('shop.invoice').query(
    columns='$number,@customer_id.name',
    where='@customer_id.city=:city', city='Milano').fetch()
03

Il dialogo con il server

Un metodo marcato @public_method si chiama dal browser con dataRpc. Il risultato torna nel path indicato e aggiorna i widget legati.

Corso Genropy
webpages/customer.py
root.dataRpc('.count', self.invoice_count,
             customer_id='^.customer_id')

@public_method
def invoice_count(self, customer_id=None):
    return self.db.table('shop.invoice').query(
        where='$customer_id=:c', c=customer_id).count()

Strumenti pronti

Il lavoro di contorno
è già fatto.

Funzioni che ogni gestionale chiede, già scritte nei package del framework.

adm

Utenti e permessi

Login, gruppi e tag di autorizzazione.

adm

Stampe

Template HTML e PDF sui record delle tue tabelle.

email

Mail

Account, invio in coda e ricezione.

adm

Query e viste salvate

Chi usa l’applicazione le crea e le salva da interfaccia.

dform

Campi custom

Campi aggiunti da interfaccia, senza toccare il modello.

core

Allegati

Una tabella di allegati collegata a ogni record.

sys

Task periodici

Batch pianificati, con esecuzioni ed esiti.

docs

Scopri i package

Li attivi aggiungendo il package all’istanza e aggiornando il database. Quando non servono, li togli.

Framework e AI

L'AI scrive il codice.
Il framework lo tiene in ordine.

Con un LLM scrivere codice è veloce. Mantenerlo è un'altra storia.

Solo LLM

  • Ogni richiesta produce una soluzione diversa.
  • Il codice cresce e la manutenzione si complica.
  • Per cambiarlo serve di nuovo l’LLM.

LLM + Genropy

  • L’LLM segue le convenzioni del framework.
  • Scrive meno codice: form, griglie e permessi ci sono già.
  • Il codice resta leggibile per chi conosce il framework.

Open source

Gratuito, aperto,
sui tuoi server.

Il framework non costa niente e il codice è pubblico.

  1. LGPL

    Licenza aperta

    Il codice è su GitHub con licenza LGPL. Lo installi con pip.

    Leggi il codice su GitHub
  2. Self-hosted

    Sui tuoi server

    Lo installi dove decidi tu e i dati restano da te. In produzione gira con Docker, gunicorn e nginx.

    Guida all'installazione

Ti serve qualcosa in più? Contattaci per un pacchetto PRO.

Da qui, due strade.