mirror of
https://github.com/Steffo99/sophon.git
synced 2024-12-21 22:34:21 +00:00
🎓 Write part of the last chapter
This commit is contained in:
parent
a188addc1e
commit
ed3b58fb72
8 changed files with 255 additions and 60 deletions
18
backend/poetry.lock
generated
18
backend/poetry.lock
generated
|
@ -575,6 +575,18 @@ python-versions = ">=3.6"
|
|||
lint = ["flake8", "mypy", "docutils-stubs"]
|
||||
test = ["pytest", "html5lib"]
|
||||
|
||||
[[package]]
|
||||
name = "sphinxcontrib-httpdomain"
|
||||
version = "1.8.0"
|
||||
description = "Sphinx domain for documenting HTTP APIs"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
|
||||
|
||||
[package.dependencies]
|
||||
six = "*"
|
||||
Sphinx = ">=1.6"
|
||||
|
||||
[[package]]
|
||||
name = "sphinxcontrib-jsmath"
|
||||
version = "1.0.1"
|
||||
|
@ -666,7 +678,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes
|
|||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.9"
|
||||
content-hash = "4692a9f82026eb36f41e9053213c8ddda7e65d9ca662185ff17b513e89aee5ec"
|
||||
content-hash = "961ea70e18371376a12818a7c8a2c06f972ad36b6250cf64d67349135be362d0"
|
||||
|
||||
[metadata.files]
|
||||
alabaster = [
|
||||
|
@ -1013,6 +1025,10 @@ sphinxcontrib-htmlhelp = [
|
|||
{ file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2" },
|
||||
{ file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07" },
|
||||
]
|
||||
sphinxcontrib-httpdomain = [
|
||||
{ file = "sphinxcontrib-httpdomain-1.8.0.tar.gz", hash = "sha256:2059cfabd0cca8fcc3455cc8ffad92f0915a7d3bb03bfddba078a6a0f35beec5" },
|
||||
{ file = "sphinxcontrib_httpdomain-1.8.0-py2.py3-none-any.whl", hash = "sha256:a3396d6350728d574f52458b400f0ac848f8b6913bd41fed95d391d3ffbbade3" },
|
||||
]
|
||||
sphinxcontrib-jsmath = [
|
||||
{ file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" },
|
||||
{ file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178" },
|
||||
|
|
|
@ -25,6 +25,7 @@ sphinx-autobuild = "^2021.3.14"
|
|||
rinohtype = "^0.5.3"
|
||||
Pillow = "^8.4.0"
|
||||
jsx-lexer = "^1.0.0"
|
||||
sphinxcontrib-httpdomain = "^1.8.0"
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
|
|
|
@ -17,6 +17,7 @@ extensions = [
|
|||
"sphinx.ext.intersphinx",
|
||||
"sphinx.ext.autosectionlabel",
|
||||
"sphinx.ext.todo",
|
||||
"sphinxcontrib.httpdomain",
|
||||
]
|
||||
|
||||
# Source files encoding
|
||||
|
|
|
@ -7,62 +7,26 @@
|
|||
Bibliografia
|
||||
************
|
||||
|
||||
.. [matplotlib:histograms]
|
||||
.. [matplotlib:histograms] Matplotlib. **Histograms**. https://web.archive.org/web/20210815080710/https://matplotlib.org/stable/gallery/statistics/hist.html
|
||||
|
||||
Matplotlib. **Histograms**.
|
||||
https://web.archive.org/web/20210815080710/https://matplotlib.org/stable/gallery/statistics/hist.html
|
||||
.. [jupyter:ifaq] Project Jupyter. **Institutional FAQ**. https://web.archive.org/web/20200317115530/https://jupyterhub.readthedocs.io/en/stable/getting-started/institutional-faq.html
|
||||
|
||||
.. [jupyter:ifaq]
|
||||
.. [jupyter:hub] Project Jupyter. **JupyterHub**. https://web.archive.org/web/20211115163603/https://jupyterhub.readthedocs.io/en/stable/
|
||||
|
||||
Project Jupyter. **Institutional FAQ**.
|
||||
https://web.archive.org/web/20200317115530/https://jupyterhub.readthedocs.io/en/stable/getting-started/institutional-faq.html
|
||||
.. [jupyter:kernels] Project Jupyter. **Jupyter kernels**. https://web.archive.org/web/20211118154819/https://github.com/jupyter/jupyter/wiki/Jupyter-kernels
|
||||
|
||||
.. [jupyter:hub]
|
||||
.. [jupyter:collaboration] Project Jupyter. **Real Time Collaboration**. https://web.archive.org/web/20211118174617/https://jupyterlab.readthedocs.io/en/stable/user/rtc.html
|
||||
|
||||
Project Jupyter. **JupyterHub**.
|
||||
https://web.archive.org/web/20211115163603/https://jupyterhub.readthedocs.io/en/stable/
|
||||
.. [wiki:eln] English Wikipedia. **Electronic lab notebook**. https://en.wikipedia.org/w/index.php?title=Electronic_lab_notebook&oldid=993314047
|
||||
|
||||
.. [jupyter:kernels]
|
||||
.. [overleaf:learn30mins] Overleaf. **Learn LaTeX in 30 minutes**. https://web.archive.org/web/20211116220924/https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes
|
||||
|
||||
Project Jupyter. **Jupyter kernels**.
|
||||
https://web.archive.org/web/20211118154819/https://github.com/jupyter/jupyter/wiki/Jupyter-kernels
|
||||
.. [so:survey2021] Stack Overflow. **2021 Developer Survey**. https://web.archive.org/web/20211126152610/https://insights.stackoverflow.com/survey/2021
|
||||
|
||||
.. [jupyter:collaboration]
|
||||
.. [docker:overview] Docker. **Overview**. https://web.archive.org/web/20211121165850/https://docs.docker.com/get-started/overview/
|
||||
|
||||
Project Jupyter. **Real Time Collaboration**.
|
||||
https://web.archive.org/web/20211118174617/https://jupyterlab.readthedocs.io/en/stable/user/rtc.html
|
||||
.. [docker:networking] Docker. **Networking overview**. https://web.archive.org/web/20211111155419/https://docs.docker.com/network/
|
||||
|
||||
.. [enwiki:993314047]
|
||||
.. [docker:volumes] Docker. **Use volumes**. https://web.archive.org/web/20211121172749/https://docs.docker.com/storage/volumes/
|
||||
|
||||
English Wikipedia. **Electronic lab notebook**.
|
||||
https://en.wikipedia.org/w/index.php?title=Electronic_lab_notebook&oldid=993314047
|
||||
|
||||
.. [overleaf:learn30mins]
|
||||
|
||||
Overleaf. **Learn LaTeX in 30 minutes**.
|
||||
https://web.archive.org/web/20211116220924/https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes
|
||||
|
||||
.. [so:survey2021]
|
||||
|
||||
Stack Overflow. **2021 Developer Survey**.
|
||||
https://web.archive.org/web/20211126152610/https://insights.stackoverflow.com/survey/2021
|
||||
|
||||
.. [docker:overview]
|
||||
|
||||
Docker. **Overview**.
|
||||
https://web.archive.org/web/20211121165850/https://docs.docker.com/get-started/overview/
|
||||
|
||||
.. [docker:networking]
|
||||
|
||||
Docker. **Networking overview**.
|
||||
https://web.archive.org/web/20211111155419/https://docs.docker.com/network/
|
||||
|
||||
.. [docker:volumes]
|
||||
|
||||
Docker. **Use volumes**.
|
||||
https://web.archive.org/web/20211121172749/https://docs.docker.com/storage/volumes/
|
||||
|
||||
.. [github:features]
|
||||
|
||||
GitHub. **Features**.
|
||||
https://web.archive.org/web/20211124034005/https://github.com/features
|
||||
.. [github:features] GitHub. **Features**. https://web.archive.org/web/20211124034005/https://github.com/features
|
||||
|
|
|
@ -46,6 +46,10 @@ La tesi è strutturata nel seguente modo:
|
|||
#. nel terzo capitolo, :ref:`Ricerca collaborativa`, viene presentata in dettaglio la situazione attuale della ricerca collaborativa;
|
||||
#. nel quarto capitolo, :ref:`Progettazione di Sophon`, viene descritta la progettazione avvenuta, entrando nei dettagli dei requisiti, della suddivisione in moduli e delle astrazioni create;
|
||||
#. nel quinto capitolo, :ref:`Realizzazione di Sophon`, vengono trattate le specifiche tecniche implementative del progetto;
|
||||
#. nel sesto capitolo, :ref:`Installazione di Sophon`, vengono riportate le istruzioni di installazione del software;
|
||||
#. nel settimo capitolo, :ref:`Utilizzare Sophon`, viene spiegato come utilizzare il software;
|
||||
#. nell'ottavo capitolo, :ref:`Conclusione`, vengono tratte le conclusioni della tesi;
|
||||
#. nel sesto capitolo, :ref:`Risultati ottenuti`, viene mostrato il risultato finale del processo di sviluppo;
|
||||
#. nel settimo capitolo, :ref:`Conclusione`, vengono tratte le conclusioni della tesi.
|
||||
|
||||
Inoltre, sono riportati come appendice i seguenti capitoli:
|
||||
|
||||
* :ref:`Installazione di Sophon`, in cui vengono riportate le istruzioni di installazione del software;
|
||||
* :ref:`Bibliografia`, in cui vengono riportate le fonti utilizzate per la scrittura di questa tesi.
|
|
@ -792,6 +792,10 @@ Gruppi di ricerca in Sophon
|
|||
Un *gruppo di ricerca* rappresenta un insieme di utenti che collaborano su uno o più progetti.
|
||||
|
||||
|
||||
.. index::
|
||||
pair: Sophon; membro
|
||||
pair: gruppo; modalità di accesso
|
||||
|
||||
Membri e modalità di accesso
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
@ -3,10 +3,214 @@
|
|||
.. index::
|
||||
pair: Sophon; utilizzare
|
||||
|
||||
*****************
|
||||
Utilizzare Sophon
|
||||
*****************
|
||||
******************
|
||||
Risultati ottenuti
|
||||
******************
|
||||
|
||||
.. todo::
|
||||
Al termine del periodo di sviluppo, il software ha soddisfatto `tutti i requisiti prefissati <Requisiti del progetto>`.
|
||||
|
||||
Scrivere questo capitolo.
|
||||
In particolare:
|
||||
|
||||
* tutte le funzionalità desiderate sono state sviluppate, raggiungendo la feature parity con JupyterHub;
|
||||
|
||||
* il software ha ampio spazio per eventuali `estensioni <Estendibilità>` grazie alle numerosi classi astratte sviluppate;
|
||||
|
||||
* l'isolamento tra notebook e l'autenticazione all'accesso è stata realizzata, garantendo la `sicurezza <Sicurezza>` dei dati;
|
||||
|
||||
* l'interfaccia web è sufficientemente `intuitiva <Intuitività>` per permetterne un utilizzo e apprendimento autonomo;
|
||||
|
||||
* è possibile `personalizzare <Personalizzabilità>` i dettagli del software con il brand della propria istituzione;
|
||||
|
||||
* più utenti possono `collaborare <Possibilità di collaborazione>` simultaneamente all'interno dello stesso notebook;
|
||||
|
||||
* il software è stato pubblicato su `GitHub` come progetto `open source <Open source>`;
|
||||
|
||||
* da dispositivi mobili, l'interfaccia grafica di Sophon risulta interamente utilizzabile, raggiungendo il requisito di `responsività <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à <Accessibilità>` fissati;
|
||||
|
||||
* il software è sufficientemente stabile per l'utilizzo in produzione, permettendone il suo utilizzo all'interno dell'Università;
|
||||
|
||||
* le `istruzioni per l'installazione <Installazione di Sophon>` sono state scritte, permettendo ad altri interessati di installare Sophon.
|
||||
|
||||
|
||||
Stato finale del modulo backend
|
||||
===============================
|
||||
|
||||
Il modulo backend terminato espone una web API all'indirizzo :samp:`api.{BASE_DOMAIN}` con i seguenti endpoints.
|
||||
|
||||
|
||||
.. http:post:: /api/auth/token/
|
||||
:synopsis: Richiesta token autenticazione
|
||||
|
||||
Effettua l'accesso in cambio di un token di autenticazione.
|
||||
|
||||
:json string username: Username dell'utente.
|
||||
:json string password: Password dell'utente.
|
||||
:status 200: Login riuscito.
|
||||
|
||||
|
||||
.. http:post:: /api/auth/session/
|
||||
:synopsis: Richiesta cookies autenticazione
|
||||
|
||||
Effettua l'accesso, salvando i dati di autenticazione nei cookie.
|
||||
|
||||
:json string username: Username dell'utente.
|
||||
:json string password: Password dell'utente.
|
||||
:status 200: Login riuscito.
|
||||
|
||||
|
||||
.. http:any:: /api/core/groups/
|
||||
:synopsis: Gruppi di ricerca
|
||||
|
||||
Accede ai `gruppi di ricerca <Gruppi di ricerca in 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 string slug: Slug del gruppo di ricerca.
|
||||
:json string name: Nome del gruppo di ricerca.
|
||||
:json string description: Descrizione del gruppo di ricerca.
|
||||
:json string access: `Modalità di accesso <Membri e modalità di accesso>` al gruppo.
|
||||
:json integer owner: ID del creatore del gruppo.
|
||||
:json integer[] members: Elenco dei membri degli ID dei membri del gruppo.
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
:status 201: Risorsa creata.
|
||||
:status 204: Risorsa eliminata.
|
||||
:status 401: Accesso non effettuato.
|
||||
:status 403: Operazione non permessa.
|
||||
:status 404: Risorsa non esistente.
|
||||
|
||||
|
||||
.. http:get:: /api/core/users/by-id/
|
||||
:synopsis: Utenti in ordine di ID
|
||||
|
||||
Accede agli `utenti <Utenti>` dell'istanza Sophon usando il loro ID come chiave, permettendone la visualizzazione.
|
||||
|
||||
:json integer id: ID dell'utente.
|
||||
:json string username: Username dell'utente.
|
||||
:json string first_name: Nome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
|
||||
:json string last_name: Cognome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
|
||||
:json string email: Email dell'utente (non utilizzata se non specificata manualmente nell'interfaccia di amministrazione).
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
|
||||
|
||||
.. http:get:: /api/core/users/by-username/
|
||||
:synopsis: Utenti in ordine di username
|
||||
|
||||
Accede agli `utenti <Utenti>` dell'istanza Sophon usando il loro username come chiave, permettendone la visualizzazione.
|
||||
|
||||
:json string id: ID dell'utente.
|
||||
:json string username: Username dell'utente.
|
||||
:json string first_name: Nome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
|
||||
:json string last_name: Cognome dell'utente (non utilizzato se non specificato manualmente nell'interfaccia di amministrazione).
|
||||
:json string email: Email dell'utente (non utilizzata se non specificata manualmente nell'interfaccia di amministrazione).
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
|
||||
|
||||
.. http:any:: /api/projects/by-slug/
|
||||
:synopsis: Tutti i progetti
|
||||
|
||||
Accede a tutti i `progetti di ricerca <Progetti di ricerca in Sophon>` 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 string slug: Slug del progetto.
|
||||
:json string name: Nome del progetto.
|
||||
:json string description: Descrizione del progetto.
|
||||
:json string visibility: `Visibilità <Visibilità dei progetti>` del progetto.
|
||||
:json string group: Slug del gruppo a cui appartiene il progetto.
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
:status 201: Risorsa creata.
|
||||
:status 204: Risorsa eliminata.
|
||||
:status 401: Accesso non effettuato.
|
||||
:status 403: Operazione non permessa.
|
||||
:status 404: Risorsa non esistente.
|
||||
|
||||
|
||||
.. http:any:: /api/projects/by-group/(str:group_slug)/
|
||||
:synopsis: Progetti di un determinato gruppo
|
||||
|
||||
Accede ai `progetti di ricerca <Progetti di ricerca in Sophon>` 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.
|
||||
|
||||
:param group_slug: Slug del gruppo di cui si vogliono ottenere i progetti.
|
||||
|
||||
:json string slug: Slug del progetto.
|
||||
:json string name: Nome del progetto.
|
||||
:json string description: Descrizione del progetto.
|
||||
:json string visibility: `Visibilità <Visibilità dei progetti>` del progetto.
|
||||
:json string group: Slug del gruppo a cui appartiene il progetto.
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
:status 201: Risorsa creata.
|
||||
:status 204: Risorsa eliminata.
|
||||
:status 401: Accesso non effettuato.
|
||||
:status 403: Operazione non permessa.
|
||||
:status 404: Risorsa non esistente.
|
||||
|
||||
|
||||
.. http:any:: /api/notebooks/by-slug/
|
||||
:synopsis: Tutti i notebook
|
||||
|
||||
Accede a tutti i `notebook <Notebook in Sophon>` 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.
|
||||
|
||||
.. note::
|
||||
|
||||
Questo endpoint non restituisce i dettagli di connessione al notebook; a tale scopo, è necessario utilizzare :http:any:`/api/notebooks/by-project/(str:project_slug)/`.
|
||||
|
||||
:json string slug: Slug del notebook.
|
||||
:json string name: Nome del notebook.
|
||||
:json boolean is_running: Se il notebook è `avviato <Stato del notebook>` oppure no.
|
||||
:json integer locked_by: ID dell'utente che ha `bloccato <Blocco di un notebook>` il notebook.
|
||||
:json string container_image: Il nome dell'`immagine <Immagine del notebook>` del notebook.
|
||||
:json string project: Slug del progetto a cui appartiene il notebook.
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
:status 201: Risorsa creata.
|
||||
:status 204: Risorsa eliminata.
|
||||
:status 401: Accesso non effettuato.
|
||||
:status 403: Operazione non permessa.
|
||||
:status 404: Risorsa non esistente.
|
||||
|
||||
|
||||
.. http:any:: /api/notebooks/by-project/(str:project_slug)/
|
||||
:synopsis: Notebook di un determinato progetto
|
||||
|
||||
Accede ai `notebook <Notebook in Sophon>` 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 string slug: Slug del notebook.
|
||||
:json string name: Nome del notebook.
|
||||
:json boolean is_running: Se il notebook è `avviato <Stato del notebook>` oppure no.
|
||||
:json integer locked_by: ID dell'utente che ha `bloccato <Blocco di un notebook>` il notebook.
|
||||
:json string container_image: Il nome dell'`immagine <Immagine del notebook>` del notebook.
|
||||
:json string project: Slug del progetto a cui appartiene il notebook.
|
||||
:json string jupyter_token: Token per l'autenticazione sul `modulo Jupyter <Modulo Jupyter>`.
|
||||
:json string legacy_notebook_url: URL per la connessione all'interfaccia legacy "*Jupyter Notebook*" del notebook.
|
||||
:json string lab_url: URL per la connessione all'interfaccia `JupyterLab` del notebook.
|
||||
|
||||
:status 200: Operazione effettuata.
|
||||
:status 201: Risorsa creata.
|
||||
:status 204: Risorsa eliminata.
|
||||
:status 401: Accesso non effettuato.
|
||||
:status 403: Operazione non permessa.
|
||||
:status 404: Risorsa non esistente.
|
||||
|
||||
|
||||
In aggiunta, espone la pagina di amministrazione al seguente indirizzo.
|
||||
|
||||
|
||||
.. http:get:: /admin/
|
||||
:synopsis: Pagina di amministrazione
|
||||
|
||||
La pagina di amministrazione Django, personalizzata per Sophon.
|
||||
|
||||
:status 200: Accesso riuscito.
|
||||
|
||||
|
||||
Stato finale del modulo frontend
|
||||
================================
|
||||
|
||||
Stato finale del modulo proxy
|
||||
=============================
|
||||
|
||||
Stato finale del modulo Jupyter
|
||||
===============================
|
||||
|
|
|
@ -25,9 +25,10 @@ Progettazione e sviluppo di Sophon, applicativo cloud a supporto della ricerca
|
|||
Collegamenti utili
|
||||
==================
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`routingtable`
|
||||
* :ref:`search`
|
||||
|
||||
Da fare
|
||||
=======
|
||||
|
|
Loading…
Reference in a new issue