1
Fork 0
mirror of https://github.com/Steffo99/sophon.git synced 2024-10-16 07:07:26 +00:00

🎓 Write part of the last chapter

This commit is contained in:
Steffo 2021-11-30 12:36:49 +01:00
parent a188addc1e
commit ed3b58fb72
Signed by: steffo
GPG key ID: 6965406171929D01
8 changed files with 255 additions and 60 deletions

18
backend/poetry.lock generated
View file

@ -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" },

View file

@ -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"]

View file

@ -17,6 +17,7 @@ extensions = [
"sphinx.ext.intersphinx",
"sphinx.ext.autosectionlabel",
"sphinx.ext.todo",
"sphinxcontrib.httpdomain",
]
# Source files encoding

View file

@ -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

View file

@ -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.

View file

@ -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
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View file

@ -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
===============================

View file

@ -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
=======