Refactor cli #1
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adesso usiamo un entrypoint scritto manualmente. Nulla di male, ma esiste
click
, libreria per la costruzione di CLI molto potente.Lavoro nella branch
refactor
Hello,
bello ma tutta quella roba dovrebbe andare in un posto diverso: app.py è l'"entrypoint" delle API web, mentre
src/phid
è il demone che quello che viene invocato da systemd o chi per lui.Suggerimento: crea un file
src/phi
che verrà lanciato dall'utente che vuole svolgere operazioni da commandline. La parte di parsing degli argomenti invece la metterei insrc/phi/cli.py
.Baci
(PS: bello click ma quando ti trovi 34 decoratori sopra una funzione diventa abbastanza illegibile)
click
è integrato consetuptools
(guarda qui). Quando faipip install
ti viene messo nel path adeguato un eseguibile chiamatophid
che fa esattamente quello che ti aspetti :)Potevo scorporare il solo entrypoint
def cli(...)
in un modulo a parte, come suggerisci, ma dovevo fare una serie di import proprio daapp
e allora ho valutato di lasciare tutto lì.Vero. A questo temo non ci sia soluzione. E' il modo in cui si usa
click
, che io sappia.Scusa, mi sono espresso male, per me non è un problema di script ma di organizzazione logica del progetto: quello che volevo fare è avere delle api python (quello che trovi attualmente in
src/phi/ldap
) che possono essere invocate o da commandline o tramite API REST. Quindi dovrebbero essere generati, o creati, due script: phid che è il demone delle API web e phi dovrebbe permettere di fare una roba tipophi add nomeutente
ophi group users add nomeutente
.Mi rendo conto ora che per commandline tu intendi solo il modo di girare su che porta deve ascoltare il server e altri parametri di configurazione, e non l'interfaccia alternativa di cui parlo sopra. Sorry :D
Vedi tu, ricorda solo che:
(
import this
)Ho capito. Allora vuoi fare una suite di cli. Bello (guarda qui).
Potremmo proprio fare un package dedicato in
src/phi/cli
allora. Facciamo un modulo per la cli del demone ed uno per la cli del controller.Come facciamo comunicare il controller (
phi
) con il demone (phid
)?Proponi. Sono aperterrimo.
Di fatto non c'è nessun controller e nessun demone. Come dicevo l'ambaradam si riduce a:
<inizio excursus>
Nota anche come la programmazione a oggetti è del tutto assente e superflua, l'unica classe è Client in client.py puramente per una questione di comodità. Tutti gli altri componenti che interagiscono col LDAP sono funzioncine pure.
<fine excursus>
Interfaccia API REST che data una certa conf (coordinate e credenziali del server ldap, etc) permette di invocare le sopracitate funzioni (POST /user/name, POST /group/name, PUT /group/nomegruppo, etc)
Interfaccia da linea di comando che non fa altro che invocare le funzioncine di cui sopra (sempre data una certa conf bla bla).
Direi che questa si può chiudere per inattività.