6. Risultati ottenuti
Al termine del periodo di sviluppo, il software ha soddisfatto tutti i requisiti prefissati.
In particolare:
tutte le funzionalità desiderate sono state sviluppate, raggiungendo la feature parity con JupyterHub;
il software ha ampio spazio per eventuali estensioni grazie alle numerosi classi astratte sviluppate;
l'isolamento tra notebook e l'autenticazione all'accesso è stata realizzata, garantendo la sicurezza dei dati;
l'interfaccia web è sufficientemente intuitiva per permetterne un utilizzo e apprendimento autonomo;
è possibile personalizzare i dettagli del software con il brand della propria istituzione;
più utenti possono collaborare simultaneamente all'interno dello stesso notebook;
il software è stato pubblicato su GitHub come progetto open source;
da dispositivi mobili, l'interfaccia grafica di Sophon risulta interamente utilizzabile, raggiungendo il requisito di responsività, anche se la modifica di notebook computazionali con JupyterLab potrebbe risultare difficile su schermi con risoluzione molto ridotta;
l'interfaccia web soddisfa i requisiti di accessibilità fissati;
il software è sufficientemente stabile per l'utilizzo in produzione, permettendone il suo utilizzo all'interno dell'Università;
le istruzioni per l'installazione sono state scritte, permettendo ad altri interessati di installare Sophon.
6.1. Stato finale del modulo backend
Il modulo backend terminato espone una web API all'indirizzo api.BASE_DOMAIN
con i seguenti endpoints.
- POST /api/auth/token/
Effettua l'accesso in cambio di un token di autenticazione.
- JSON Parameters
username (string) -- Username dell'utente.
password (string) -- Password dell'utente.
- Status Codes
200 OK -- Login riuscito.
- POST /api/auth/session/
Effettua l'accesso, salvando i dati di autenticazione nei cookie.
- JSON Parameters
username (string) -- Username dell'utente.
password (string) -- Password dell'utente.
- Status Codes
200 OK -- Login riuscito.
- ANY /api/core/groups/
Accede ai gruppi di ricerca, permettendone la visualizzazione (
GET
), la creazione (POST
), la modifica (PUT
) e l'eliminazione (DELETE
), a condizione che si sia autorizzati ad effettuare l'operazione.- JSON Parameters
slug (string) -- Slug del gruppo di ricerca.
name (string) -- Nome del gruppo di ricerca.
description (string) -- Descrizione del gruppo di ricerca.
access (string) -- Modalità di accesso al gruppo.
owner (integer) -- ID del creatore del gruppo.
members (integer[]) -- Elenco dei membri degli ID dei membri del gruppo.
- Status Codes
200 OK -- Operazione effettuata.
201 Created -- Risorsa creata.
204 No Content -- Risorsa eliminata.
401 Unauthorized -- Accesso non effettuato.
403 Forbidden -- Operazione non permessa.
404 Not Found -- Risorsa non esistente.
- GET /api/core/users/by-id/
Accede agli utenti dell'istanza Sophon usando il loro ID come chiave, permettendone la visualizzazione.
- JSON Parameters
id (integer) -- ID dell'utente.
username (string) -- Username dell'utente.
first_name (string) -- Nome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
last_name (string) -- Cognome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
email (string) -- Email dell'utente (non utilizzata se non specificata manualmente nell'interfaccia di amministrazione).
- Status Codes
200 OK -- Operazione effettuata.
- GET /api/core/users/by-username/
Accede agli utenti dell'istanza Sophon usando il loro username come chiave, permettendone la visualizzazione.
- JSON Parameters
id (string) -- ID dell'utente.
username (string) -- Username dell'utente.
first_name (string) -- Nome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
last_name (string) -- Cognome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
email (string) -- Email dell'utente (non utilizzata se non specificata manualmente nell'interfaccia di amministrazione).
- Status Codes
200 OK -- Operazione effettuata.
- ANY /api/projects/by-slug/
Accede a tutti i progetti di ricerca dell'istanza Sophon, permettendone la visualizzazione (
GET
), la creazione (POST
), la modifica (PUT
) e l'eliminazione (DELETE
), a condizione che si sia autorizzati ad effettuare l'operazione.- JSON Parameters
slug (string) -- Slug del progetto.
name (string) -- Nome del progetto.
description (string) -- Descrizione del progetto.
visibility (string) -- Visibilità del progetto.
group (string) -- Slug del gruppo a cui appartiene il progetto.
- Status Codes
200 OK -- Operazione effettuata.
201 Created -- Risorsa creata.
204 No Content -- Risorsa eliminata.
401 Unauthorized -- Accesso non effettuato.
403 Forbidden -- Operazione non permessa.
404 Not Found -- Risorsa non esistente.
- ANY /api/projects/by-group/(str: group_slug)/
Accede ai progetti di ricerca appartenenti a un certo gruppo, permettendone la visualizzazione (
GET
), la creazione (POST
), la modifica (PUT
) e l'eliminazione (DELETE
), a condizione che si sia autorizzati ad effettuare l'operazione.- Parameters
group_slug -- Slug del gruppo di cui si vogliono ottenere i progetti.
- JSON Parameters
slug (string) -- Slug del progetto.
name (string) -- Nome del progetto.
description (string) -- Descrizione del progetto.
visibility (string) -- Visibilità del progetto.
group (string) -- Slug del gruppo a cui appartiene il progetto.
- Status Codes
200 OK -- Operazione effettuata.
201 Created -- Risorsa creata.
204 No Content -- Risorsa eliminata.
401 Unauthorized -- Accesso non effettuato.
403 Forbidden -- Operazione non permessa.
404 Not Found -- Risorsa non esistente.
- ANY /api/notebooks/by-slug/
Accede a tutti i notebook dell'istanza Sophon, permettendone la visualizzazione (
GET
), la creazione (POST
), la modifica (PUT
) e l'eliminazione (DELETE
), a condizione che si sia autorizzati ad effettuare l'operazione.Nota
Questo endpoint non restituisce i dettagli di connessione al notebook; a tale scopo, è necessario utilizzare
ANY /api/notebooks/by-project/(str:project_slug)/
.- JSON Parameters
slug (string) -- Slug del notebook.
name (string) -- Nome del notebook.
is_running (boolean) -- Se il notebook è avviato oppure no.
locked_by (integer) -- ID dell'utente che ha bloccato il notebook.
container_image (string) -- Il nome dell'immagine del notebook.
project (string) -- Slug del progetto a cui appartiene il notebook.
- Status Codes
200 OK -- Operazione effettuata.
201 Created -- Risorsa creata.
204 No Content -- Risorsa eliminata.
401 Unauthorized -- Accesso non effettuato.
403 Forbidden -- Operazione non permessa.
404 Not Found -- Risorsa non esistente.
- ANY /api/notebooks/by-project/(str: project_slug)/
Accede ai notebook appartenenti a un certo progetto, permettendone la visualizzazione (
GET
), la creazione (POST
), la modifica (PUT
) e l'eliminazione (DELETE
), a condizione che si sia autorizzati ad effettuare l'operazione.- JSON Parameters
slug (string) -- Slug del notebook.
name (string) -- Nome del notebook.
is_running (boolean) -- Se il notebook è avviato oppure no.
locked_by (integer) -- ID dell'utente che ha bloccato il notebook.
container_image (string) -- Il nome dell'immagine del notebook.
project (string) -- Slug del progetto a cui appartiene il notebook.
jupyter_token (string) -- Token per l'autenticazione sul modulo Jupyter.
legacy_notebook_url (string) -- URL per la connessione all'interfaccia legacy "Jupyter Notebook" del notebook.
lab_url (string) -- URL per la connessione all'interfaccia JupyterLab del notebook.
- Status Codes
200 OK -- Operazione effettuata.
201 Created -- Risorsa creata.
204 No Content -- Risorsa eliminata.
401 Unauthorized -- Accesso non effettuato.
403 Forbidden -- Operazione non permessa.
404 Not Found -- Risorsa non esistente.
Pagina di amministrazione esposta
In aggiunta alla web API, Sophon espone la pagina di amministrazione Django al seguente URL.
- GET /admin/
La pagina di amministrazione Django, personalizzata per Sophon.
- Status Codes
200 OK -- Accesso riuscito.
La prima pagina richiede l'accesso con credenziali di un superutente.
Una volta effettuato l'accesso, all'interno della pagina è possibile modificare ogni genere di entità presente nell'istanza.
6.2. Stato finale del modulo frontend
Il modulo frontend terminato espone una SPA all'indirizzo BASE_DOMAIN
.
6.3. Stato finale del modulo Jupyter
Il modulo Jupyter terminato espone un'istanza collaborativa di JupyterLab all'indirizzo NOTEBOOK_SLUG.BASE_DOMAIN
.
6.4. Stato finale del modulo proxy
Il modulo proxy terminato effettua correttamente proxying tra gli altri moduli.