1
Fork 0
mirror of https://github.com/Steffo99/sophon.git synced 2024-12-22 14:54:22 +00:00

🐛 Fix various rst problems

This commit is contained in:
Steffo 2021-11-25 04:42:42 +01:00
parent 5ca5c7375e
commit 2895a45a09
Signed by: steffo
GPG key ID: 6965406171929D01
10 changed files with 83 additions and 68 deletions

View file

@ -87,7 +87,6 @@ html_theme = 'sphinx_rtd_theme'
# Configuration for the theme # Configuration for the theme
html_theme_options = { html_theme_options = {
"style_nav_header_background": "#051836", "style_nav_header_background": "#051836",
"github_url": "https://github.com/Steffo99/sophon/tree/main/docs/source",
} }
# Title of the HTML page # Title of the HTML page
html_title = f"{project}" html_title = f"{project}"

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/1_sinossi/index.rst
.. index:: .. index::
pair: tesi; sinossi pair: tesi; sinossi

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/2_introduzione/index.rst
.. index:: .. index::
pair: tesi; introduzione pair: tesi; introduzione
@ -42,7 +44,7 @@ La tesi è strutturata nel seguente modo:
#. nel primo capitolo, :ref:`Sinossi`, viene descritto molto brevemente il progetto realizzato; #. nel primo capitolo, :ref:`Sinossi`, viene descritto molto brevemente il progetto realizzato;
#. nel secondo capitolo, :ref:`Introduzione alla tesi`, viene introdotto il contesto della tesi, la tesi stessa e i suoi contenuti; #. nel secondo capitolo, :ref:`Introduzione alla tesi`, viene introdotto il contesto della tesi, la tesi stessa e i suoi contenuti;
#. nel terzo capitolo, :ref:`Ricerca collaborativa`, viene presentata in dettaglio la situazione attuale della ricerca collaborativa; #. nel terzo capitolo, :ref:`Ricerca collaborativa`, viene presentata in dettaglio la situazione attuale della ricerca collaborativa;
#. nel quarto capitolo, :ref:`Progettazione`, viene descritta la progettazione avvenuta, entrando nei dettagli dei requisiti, della suddivisione in moduli e delle astrazioni create; #. 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:`Implementazione`, vengono trattate le specifiche tecniche implementative del progetto; #. nel quinto capitolo, :ref:`Realizzazione di Sophon`, vengono trattate le specifiche tecniche implementative del progetto;
#. nel sesto capitolo, :ref:`Applicazione`, viene fatto un breve esempio di applicazione del progetto all'interno di un'Università; #. nel sesto capitolo, :ref:`Applicazione`, viene fatto un breve esempio di applicazione del progetto all'interno di un'Università;
#. nell'settimo capitolo, :ref:`Conclusione`, vengono tratte le conclusioni della tesi. #. nell'settimo capitolo, :ref:`Conclusione`, vengono tratte le conclusioni della tesi.

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/3_presentazione/index.rst
.. index:: .. index::
single: ricerca collaborativa single: ricerca collaborativa

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/4_progetto/index.rst
.. index:: .. index::
pair: Sophon; progettazione pair: Sophon; progettazione
@ -529,7 +531,7 @@ Viene **eseguito dal server** sul quale è ospitato Sophon.
Containerizzazione Containerizzazione
================== ==================
Al fine di facilitare l'installazione e di migliorare la `sicurezza <Sicurezza>` dell'applicazione, si è stabilito di costruire `container <Container>` `Docker` per tutti i moduli di Sophon. Al fine di facilitare l'installazione e di migliorare la `sicurezza <Sicurezza>` dell'applicazione, si è stabilito di costruire `container Docker <Container Docker>` per tutti i moduli di Sophon.
.. index:: .. index::
@ -547,8 +549,8 @@ Docker
pair: Docker; image pair: Docker; image
pair: Docker; immagine pair: Docker; immagine
Immagini Immagini Docker
^^^^^^^^ ^^^^^^^^^^^^^^^
Le *immagini* Docker sono sequenze di regole e insiemi di file per la creazione di un `container <Container>`, tipicamente partendo da un altro container come base. :cite:`docker:overview` Le *immagini* Docker sono sequenze di regole e insiemi di file per la creazione di un `container <Container>`, tipicamente partendo da un altro container come base. :cite:`docker:overview`
@ -560,8 +562,8 @@ Possono essere comparate a immagini di macchine virtuali con tanti "punti di rip
.. index:: .. index::
pair: Docker; container pair: Docker; container
Container Container Docker
^^^^^^^^^ ^^^^^^^^^^^^^^^^
I *container* Docker sono istanze di `immagini <Immagini>` che possono essere eseguite dal `Docker Engine` :cite:`docker:overview`. I *container* Docker sono istanze di `immagini <Immagini>` che possono essere eseguite dal `Docker Engine` :cite:`docker:overview`.
@ -571,8 +573,8 @@ Sono l'equivalente di un'intera macchina virtuale, che può essere avviata o arr
.. index:: .. index::
pair: Docker; network pair: Docker; network
Network Network Docker
^^^^^^^ ^^^^^^^^^^^^^^
I *network* Docker sono astrazioni per vari tipi di reti di calcolatori: in particolare, essi permettono di collegare vari `container <Container>` ad una rete locale virtuale, permettendone l'interazione :cite:`docker:networking`. I *network* Docker sono astrazioni per vari tipi di reti di calcolatori: in particolare, essi permettono di collegare vari `container <Container>` ad una rete locale virtuale, permettendone l'interazione :cite:`docker:networking`.
@ -584,8 +586,8 @@ Sono una versione più potente dei moduli di rete per macchine virtuali.
.. index:: .. index::
pair: Docker; volume pair: Docker; volume
Volumi Volumi Docker
^^^^^^ ^^^^^^^^^^^^^
I *volumi* Docker sono astrazioni per filesystem che permettono la condivisione di file tra container :cite:`docker:volumes`. I *volumi* Docker sono astrazioni per filesystem che permettono la condivisione di file tra container :cite:`docker:volumes`.
@ -884,7 +886,7 @@ Qualsiasi *membro* di un `gruppo di ricerca <Gruppi di ricerca in Sophon>` può
Notebook Notebook
-------- --------
Un *notebook* rappresenta una **postazione di lavoro** che può essere allegata ad un :ref:`progetto di ricerca`. Un *notebook* rappresenta una **postazione di lavoro** che può essere allegata ad un `progetto di ricerca <Progetti di ricerca in Sophon>`.
Creazione di nuovi notebook Creazione di nuovi notebook
@ -914,7 +916,7 @@ In più, uno slug di un notebook non può iniziare o terminare con un trattino `
Stato del notebook Stato del notebook
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
Un notebook può essere *avviato* o *fermo* in base al suo stato di esecuzione sull':ref:`istanza` Sophon: Un notebook può essere *avviato* o *fermo* in base al suo stato di esecuzione sull'`istanza <Istanza in Sophon>` Sophon:
* è *avviato* se sta venendo eseguito ed è accessibile; * è *avviato* se sta venendo eseguito ed è accessibile;
* è *fermo* se non sta venendo eseguito o sta venendo preparato. * è *fermo* se non sta venendo eseguito o sta venendo preparato.
@ -940,7 +942,7 @@ Un **membro** del `gruppo di ricerca <Gruppi di ricerca in Sophon>` a cui appart
Immagine del notebook Immagine del notebook
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
In **fase di creazione** di un notebook, oppure mentre esso è **fermo**, è possibile selezionare l'`immagine Docker <immagine>` che esso deve eseguire all'avvio. In **fase di creazione** di un notebook, oppure mentre esso è **fermo**, è possibile selezionare l'`immagine Docker <Immagini Docker>` che esso deve eseguire all'avvio.
Di default, l'immagine deve essere quella del `modulo Jupyter <Modulo Jupyter>`. Di default, l'immagine deve essere quella del `modulo Jupyter <Modulo Jupyter>`.

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/5_implementazione/index.rst
.. index:: .. index::
pair: Sophon; realizzazione pair: Sophon; realizzazione
@ -92,17 +94,17 @@ Miglioramenti all'autenticazione
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.auth1 .. module:: sophon.auth1
La classe `rest_framework.authentication.TokenAuthentication` viene modificata per ottenere un comportamento conforme agli standard del web. La classe :class:`rest_framework.authentication.TokenAuthentication` viene modificata per ottenere un comportamento conforme agli standard del web.
.. class:: BearerTokenAuthentication(rest_framework.authentication.TokenAuthentication) .. class:: BearerTokenAuthentication(rest_framework.authentication.TokenAuthentication)
.. attribute:: keyword = "Bearer" .. attribute:: keyword = "Bearer"
Si configura `rest_framework` per accettare header di autenticazione nella forma ``Bearer <token>``, invece che il default di `rest_framework` ``Token <token>``. Si configura :mod:`rest_framework` per accettare header di autenticazione nella forma ``Bearer <token>``, invece che il default di :mod:`rest_framework` ``Token <token>``.
.. module:: sophon.auth2 .. module:: sophon.auth2
La view `rest_framework.authtoken.views.ObtainAuthToken` viene estesa per aggiungere dati alla risposta di autenticazione riuscita. La view :class:`rest_framework.authtoken.views.ObtainAuthToken` viene estesa per aggiungere dati alla risposta di autenticazione riuscita.
.. class:: CustomObtainAuthToken(rest_framework.authtoken.views.ObtainAuthToken) .. class:: CustomObtainAuthToken(rest_framework.authtoken.views.ObtainAuthToken)
@ -126,14 +128,14 @@ Per permettere l'integrazione la creazione automatica del primo superutente quan
.. class:: Command .. class:: Command
Questo comando crea automaticamente un superutente con le credenziali specificate in :env:`DJANGO_SU_USERNAME`, :env:`DJANGO_SU_EMAIL` e :env:`DJANGO_SU_PASSWORD`. Questo comando crea automaticamente un superutente con le credenziali specificate in :envvar:`DJANGO_SU_USERNAME`, :envvar:`DJANGO_SU_EMAIL` e :envvar:`DJANGO_SU_PASSWORD`.
Modello base astratto Modello base astratto
^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.core.models .. module:: sophon.core.models
Viene estesa la classe astratta `django.db.models.Model` con funzioni per stabilire il `livello di accesso <Livelli di accesso>` di un `utente <Utenti in Sophon>` all'oggetto e per generare automaticamente i `rest_framework.serializers.ModelSerializer` in base ad esso. Viene estesa la classe astratta :class:`django.db.models.Model` con funzioni per stabilire il `livello di accesso <Livelli di accesso>` di un `utente <Utenti in Sophon>` all'oggetto e per generare automaticamente i :class:`rest_framework.serializers.ModelSerializer` in base ad esso.
.. class:: SophonModel(django.db.models.Model) .. class:: SophonModel(django.db.models.Model)
@ -192,7 +194,7 @@ Viene definito un nuovo modello astratto, basato su `SophonModel`, che permette
.. method:: get_access_serializer(self, user: User) -> typing.Type[rest_framework.serializers.ModelSerializer] .. method:: get_access_serializer(self, user: User) -> typing.Type[rest_framework.serializers.ModelSerializer]
:returns: Restituisce il `rest_framework.serializers.ModelSerializer` adeguato al livello di autorità dell'utente. :returns: Restituisce il :class:`rest_framework.serializers.ModelSerializer` adeguato al livello di autorità dell'utente.
.. class:: sophon.core.enums.SophonGroupAccess(enum.IntEnum) .. class:: sophon.core.enums.SophonGroupAccess(enum.IntEnum)
@ -272,7 +274,7 @@ Viene creato il modello che rappresenta un `gruppo di ricerca <Gruppi di ricerca
.. attribute:: members: ManyToManyField → django.contrib.auth.models.User .. attribute:: members: ManyToManyField → django.contrib.auth.models.User
Elenco dei membri del gruppo. L'utente `.owner` è ignorato, in quanto è considerato sempre parte del gruppo. Elenco dei membri del gruppo. L'utente :attr:`.owner` è ignorato, in quanto è considerato sempre parte del gruppo.
.. attribute:: owner: ForeignKey → django.contrib.auth.models.User .. attribute:: owner: ForeignKey → django.contrib.auth.models.User
@ -287,38 +289,38 @@ Estensione ai permessi di Django
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.core.permissions .. module:: sophon.core.permissions
I permessi di `rest_framework` vengono estesi con due nuove classi che utilizzano il `modello di autorizzazione astratto <Modello di autorizzazione astratto>` precedentemente definito. I permessi di :mod:`rest_framework` vengono estesi con due nuove classi che utilizzano il `modello di autorizzazione astratto <Modello di autorizzazione astratto>` precedentemente definito.
.. class:: Edit(rest_framework.permissions.BasePermission) .. class:: Edit(rest_framework.permissions.BasePermission)
Consente l'interazione solo agli utenti che possono modificare (`.can_edit`) l'oggetto. Consente l'interazione solo agli utenti che possono modificare l'oggetto.
.. class:: Admin(rest_framework.permissions.BasePermission) .. class:: Admin(rest_framework.permissions.BasePermission)
Consente l'interazione solo agli utenti che possono amministrare (`.can_admin`) l'oggetto. Consente l'interazione solo agli utenti che possono amministrare l'oggetto.
Viewset astratti Viewset astratti
^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
.. module:: sophon.core.views .. module:: sophon.core.views
Vengono definiti tre viewset in grado di utilizzare i metodi aggiunti dalle classi astratte `.models.SophonModel` e `.models.SophonGroupModel`. Vengono definiti tre viewset in grado di utilizzare i metodi aggiunti dalle classi astratte :class:`.models.SophonModel` e :class:`.models.SophonGroupModel`.
.. class:: ReadSophonViewSet(rest_framework.viewsets.ReadOnlyModelViewSet, metaclass=abc.ABCMeta) .. class:: ReadSophonViewSet(rest_framework.viewsets.ReadOnlyModelViewSet, metaclass=abc.ABCMeta)
Classe **astratta** che estende la classe base `rest_framework.viewsets.ReadOnlyModelViewSet` con metodi di utilità mancanti nell'implementazione originale, allacciandola inoltre a `.models.SophonGroupModel`. Classe **astratta** che estende la classe base :class:`rest_framework.viewsets.ReadOnlyModelViewSet` con metodi di utilità mancanti nell'implementazione originale, allacciandola inoltre a :class:`.models.SophonGroupModel`.
.. method:: get_queryset(self) -> QuerySet .. method:: get_queryset(self) -> QuerySet
:abstractmethod: :abstractmethod:
Imposta come astratto (e quindi obbligatorio) il metodo `rest_framework.viewsets.ReadOnlyModelViewSet.get_queryset`. Imposta come astratto (e quindi obbligatorio) il metodo :meth:`rest_framework.viewsets.ReadOnlyModelViewSet.get_queryset`.
.. method:: permission_classes(self) .. method:: permission_classes(self)
:property: :property:
Sovrascrive il campo di classe `rest_framework.viewsets.ReadOnlyModelViewSet.permission_classes` con una funzione, permettendone la selezione dei permessi richiesti al momento di ricezione di una richiesta HTTP (invece che al momento di definizione della classe). Sovrascrive il campo di classe :attr:`rest_framework.viewsets.ReadOnlyModelViewSet.permission_classes` con una funzione, permettendone la selezione dei permessi richiesti al momento di ricezione di una richiesta HTTP (invece che al momento di definizione della classe).
Delega la selezione delle classi a `.get_permission_classes`. Delega la selezione delle classi a :meth:`.get_permission_classes`.
.. method:: get_permission_classes(self) -> typing.Collection[typing.Type[permissions.BasePermission]] .. method:: get_permission_classes(self) -> typing.Collection[typing.Type[permissions.BasePermission]]
@ -328,72 +330,72 @@ Vengono definiti tre viewset in grado di utilizzare i metodi aggiunti dalle clas
.. method:: get_serializer_class(self) -> typing.Type[Serializer] .. method:: get_serializer_class(self) -> typing.Type[Serializer]
Funzione che permette la selezione del `rest_framework.serializers.Serializer` da utilizzare per una determinata richiesta al momento di ricezione di quest'ultima. Funzione che permette la selezione del :class:`rest_framework.serializers.Serializer` da utilizzare per una determinata richiesta al momento di ricezione di quest'ultima.
Utilizza: Utilizza:
- il serializzatore **in sola lettura** per elencare gli oggetti (azione ``list``); - il serializzatore **in sola lettura** per elencare gli oggetti (azione ``list``);
- il serializzatore **di creazione** per creare nuovi oggetti (azione ``create``) e per generare i metadati del viewset (azione ``metadata``); - il serializzatore **di creazione** per creare nuovi oggetti (azione ``create``) e per generare i metadati del viewset (azione ``metadata``);
- il serializzatore ottenuto da `.models.SophonGroupModel.get_access_serializer` per la visualizzazione dettagliata (azione ``retrieve``), la modifica (azioni ``update`` e ``partial_update``) e l'eliminazione (azione ``destroy``) di un singolo oggetto; - il serializzatore ottenuto da :meth:`.models.SophonGroupModel.get_access_serializer` per la visualizzazione dettagliata (azione ``retrieve``), la modifica (azioni ``update`` e ``partial_update``) e l'eliminazione (azione ``destroy``) di un singolo oggetto;
- il serializzatore ottenuto da `.get_custom_serializer_classes` per le azioni personalizzate. - il serializzatore ottenuto da :meth:`.get_custom_serializer_classes` per le azioni personalizzate.
.. seealso:: .. seealso::
`.models.SophonGroupModel` :class:`.models.SophonGroupModel`
.. method:: get_custom_serializer_classes(self) -> t.Type[Serializer] .. method:: get_custom_serializer_classes(self) -> t.Type[Serializer]
Permette alle classi che ereditano da questa di selezionare quale `rest_framework.serializers.Serializer` utilizzare per le azioni personalizzate. Permette alle classi che ereditano da questa di selezionare quale :class:`rest_framework.serializers.Serializer` utilizzare per le azioni personalizzate.
.. class:: WriteSophonViewSet(rest_framework.viewsets.ModelViewSet, ReadSophonViewSet, metaclass=abc.ABCMeta) .. class:: WriteSophonViewSet(rest_framework.viewsets.ModelViewSet, ReadSophonViewSet, metaclass=abc.ABCMeta)
Classe **astratta** che estende la classe base `ReadSophonViewSet` aggiungendoci i metodi di `rest_framework.viewsets.ModelViewSet` che effettuano modifiche sugli oggetti. Classe **astratta** che estende la classe base :class:`ReadSophonViewSet` aggiungendoci i metodi di :class:`rest_framework.viewsets.ModelViewSet` che effettuano modifiche sugli oggetti.
Depreca i metodi ``perform_*`` di `rest_framework`, introducendone versioni migliorate con una signature diversa dal nome di ``hook_*``. Depreca i metodi ``perform_*`` di :mod:`rest_framework`, introducendone versioni migliorate con una signature diversa dal nome di ``hook_*``.
.. method:: perform_create(self, serializer) .. method:: perform_create(self, serializer)
.. deprecated:: 0.1 .. deprecated:: 0.1
Metodo di `rest_framework` rimosso da Sophon. Metodo di :mod:`rest_framework` rimosso da Sophon.
.. method:: perform_update(self, serializer) .. method:: perform_update(self, serializer)
.. deprecated:: 0.1 .. deprecated:: 0.1
Metodo di `rest_framework` rimosso da Sophon. Metodo di :mod:`rest_framework` rimosso da Sophon.
.. method:: perform_destroy(self, serializer) .. method:: perform_destroy(self, serializer)
.. deprecated:: 0.1 .. deprecated:: 0.1
Metodo di `rest_framework` rimosso da Sophon. Metodo di :mod:`rest_framework` rimosso da Sophon.
.. method:: hook_create(self, serializer) -> dict[str, typing.Any] .. method:: hook_create(self, serializer) -> dict[str, typing.Any]
Funzione chiamata durante l'esecuzione dell'azione di creazione oggetto ``create``. Funzione chiamata durante l'esecuzione dell'azione di creazione oggetto ``create``.
:param serializer: Il `~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto che sta per essere creato. :param serializer: Il :class:`~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto che sta per essere creato.
:raises .HTTPException: È possibile interrompere la creazione dell'oggetto con uno specifico codice errore sollevando una `.HTTPException` all'interno della funzione. :raises .HTTPException: È possibile interrompere la creazione dell'oggetto con uno specifico codice errore sollevando una :exc:`.HTTPException` all'interno della funzione.
:returns: Un `dict` da unire a quello del `~rest_framework.serializers.Serializer` per formare l'oggetto da creare. :returns: Un `dict` da unire a quello del :class:`~rest_framework.serializers.Serializer` per formare l'oggetto da creare.
.. method:: hook_update(self, serializer) -> dict[str, t.Any] .. method:: hook_update(self, serializer) -> dict[str, t.Any]
Funzione chiamata durante l'esecuzione delle azioni di modifica oggetto ``update`` e ``partial_update``. Funzione chiamata durante l'esecuzione delle azioni di modifica oggetto ``update`` e ``partial_update``.
:param serializer: Il `~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto che sta per essere modificato. :param serializer: Il :class:`~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto che sta per essere modificato.
:raises .HTTPException: È possibile interrompere la creazione dell'oggetto con uno specifico codice errore sollevando una `.HTTPException` all'interno della funzione. :raises .HTTPException: È possibile interrompere la creazione dell'oggetto con uno specifico codice errore sollevando una :exc:`.HTTPException` all'interno della funzione.
:returns: Un `dict` da unire a quello del `~rest_framework.serializers.Serializer` per formare l'oggetto da modificare. :returns: Un :class:`dict` da unire a quello del :class:`~rest_framework.serializers.Serializer` per formare l'oggetto da modificare.
.. method:: hook_destroy(self, serializer) -> dict[str, typing.Any] .. method:: hook_destroy(self, serializer) -> dict[str, typing.Any]
Funzione chiamata durante l'esecuzione dell'azione di eliminazione oggetto ``destroy``. Funzione chiamata durante l'esecuzione dell'azione di eliminazione oggetto ``destroy``.
:raises .HTTPException: È possibile interrompere la creazione dell'oggetto con uno specifico codice errore sollevando una `.HTTPException` all'interno della funzione. :raises .HTTPException: È possibile interrompere la creazione dell'oggetto con uno specifico codice errore sollevando una :exc:`.HTTPException` all'interno della funzione.
.. exception:: sophon.core.errors.HTTPException .. exception:: sophon.core.errors.HTTPException
Tipo di eccezione che è possibile sollevare nei metodi ``hook_*`` di `.WriteSophonViewSet` per interrompere l'azione in corso senza applicare le modifiche. Tipo di eccezione che è possibile sollevare nei metodi ``hook_*`` di :class:`.WriteSophonViewSet` per interrompere l'azione in corso senza applicare le modifiche.
.. attribute:: status: int .. attribute:: status: int
@ -402,14 +404,14 @@ Vengono definiti tre viewset in grado di utilizzare i metodi aggiunti dalle clas
.. class:: SophonGroupViewSet(WriteSophonViewSet, metaclass=abc.ABCMeta) .. class:: SophonGroupViewSet(WriteSophonViewSet, metaclass=abc.ABCMeta)
Classe **astratta** che estende la classe base `.WriteSophonViewSet` estendendo gli ``hook_*`` con verifiche dei permessi dell'utente che tenta di effettuare l'azione. Classe **astratta** che estende la classe base :class:`.WriteSophonViewSet` estendendo gli ``hook_*`` con verifiche dei permessi dell'utente che tenta di effettuare l'azione.
.. method:: get_group_from_serializer(self, serializer) -> models.ResearchGroup .. method:: get_group_from_serializer(self, serializer) -> models.ResearchGroup
:abstractmethod: :abstractmethod:
Metodo necessario a trovare il gruppo a cui apparterrà un oggetto prima che il suo serializzatore venga elaborato. Metodo necessario a trovare il gruppo a cui apparterrà un oggetto prima che il suo serializzatore venga elaborato.
:param serializer: Il `~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto. :param serializer: Il :class:`~rest_framework.serializers.Serializer` già "riempito" contenente i dati dell'oggetto.
Viewset concreti Viewset concreti
@ -439,17 +441,17 @@ Vengono poi definiti tre viewset e una view che permettono interazioni tra l'ute
Azione personalizzata che permette ad un utente di unirsi ad un gruppo aperto. Azione personalizzata che permette ad un utente di unirsi ad un gruppo aperto.
Utilizza `.models.SophonGroupModel.get_access_serializer`. Utilizza :class:`.models.SophonGroupModel.get_access_serializer`.
.. method:: leave(self, request: Request, pk: int) -> Response .. method:: leave(self, request: Request, pk: int) -> Response
Azione personalizzata che permette ad un utente di abbandonare un gruppo di cui non è proprietario. Azione personalizzata che permette ad un utente di abbandonare un gruppo di cui non è proprietario.
Utilizza `.models.SophonGroupModel.get_access_serializer`. Utilizza :class:`.models.SophonGroupModel.get_access_serializer`.
.. class:: SophonInstanceDetailsView(APIView) .. class:: SophonInstanceDetailsView(APIView)
View che restituisce il valore attuale dell'unico oggetto `.models.SophonInstanceDetails`. View che restituisce il valore attuale dell'unico oggetto :class:`.models.SophonInstanceDetails`.
Accessibile tramite richieste ``GET`` all'URL :samp:`/api/core/instance/`. Accessibile tramite richieste ``GET`` all'URL :samp:`/api/core/instance/`.
@ -496,7 +498,7 @@ Vengono definiti alcuni test case generici per facilitare le interazioni tra ``A
.. class:: ReadSophonTestCase(BetterAPITestCase, metaclass=abc.ABCMeta) .. class:: ReadSophonTestCase(BetterAPITestCase, metaclass=abc.ABCMeta)
Classe **astratta** che implementa metodi per testare rapidamente le azioni di un `.views.ReadSophonViewSet`. Classe **astratta** che implementa metodi per testare rapidamente le azioni di un :class:`.views.ReadSophonViewSet`.
.. classmethod:: get_basename(cls) -> str .. classmethod:: get_basename(cls) -> str
@ -523,7 +525,7 @@ Vengono definiti alcuni test case generici per facilitare le interazioni tra ``A
.. class:: WriteSophonTestCase(ReadSophonTestCase, metaclass=abc.ABCMeta) .. class:: WriteSophonTestCase(ReadSophonTestCase, metaclass=abc.ABCMeta)
Classe **astratta** che estende `.ReadSophonTestCase` con le azioni di un `.views.WriteSophonViewSet`. Classe **astratta** che estende :class:`.ReadSophonTestCase` con le azioni di un :class:`.views.WriteSophonViewSet`.
.. method:: create(self, data) -> rest_framework.response.Response .. method:: create(self, data) -> rest_framework.response.Response
.. method:: update(self, pk, data) -> rest_framework.response.Response .. method:: update(self, pk, data) -> rest_framework.response.Response
@ -537,7 +539,7 @@ Vengono definiti alcuni test case generici per facilitare le interazioni tra ``A
Test case concreti Test case concreti
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
Vengono testate tutte le view dell'app tramite `.BetterAPITestCase` e tutti i viewset dell'app tramite `.ReadSophonTestCase` e `WriteSophonTestCase`. Vengono testate tutte le view dell'app tramite :class:`.BetterAPITestCase` e tutti i viewset dell'app tramite :class:`.ReadSophonTestCase` e :class:`WriteSophonTestCase`.
.. class:: UsersByIdTestCase(ReadSophonTestCase) .. class:: UsersByIdTestCase(ReadSophonTestCase)
.. class:: UsersByUsernameTestCase(ReadSophonTestCase) .. class:: UsersByUsernameTestCase(ReadSophonTestCase)
@ -574,7 +576,7 @@ Viene introdotto un modello concreto che rappresenta un `progetto di ricerca <Pr
.. attribute:: group: ForeignKey → sophon.core.models.ResearchGroup .. attribute:: group: ForeignKey → sophon.core.models.ResearchGroup
Lo `~sophon.core.models.ResearchGroup.slug` del gruppo di ricerca al quale appartiene il progetto. Lo :attr:`~sophon.core.models.ResearchGroup.slug` del gruppo di ricerca al quale appartiene il progetto.
.. attribute:: name: CharField .. attribute:: name: CharField
@ -597,7 +599,7 @@ Da una base comune, vengono creati due viewset per interagire con i progetti di
.. class:: ResearchProjectViewSet(SophonGroupViewSet, metaclass=abc.ABCMeta) .. class:: ResearchProjectViewSet(SophonGroupViewSet, metaclass=abc.ABCMeta)
Classe **astratta** che effettua l'override di `~sophon.core.views.SophonGroupView.get_group_from_serializer` per entrambi i viewset che seguono. Classe **astratta** che effettua l'override di :meth:`~sophon.core.views.SophonGroupView.get_group_from_serializer` per entrambi i viewset che seguono.
.. class:: ResearchProjectsBySlugViewSet(ResearchProjectViewSet) .. class:: ResearchProjectsBySlugViewSet(ResearchProjectViewSet)
@ -618,7 +620,7 @@ Amministrazione del gruppo di ricerca
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. module:: sophon.projects.admin .. module:: sophon.projects.admin
Il modello `.models.ResearchProject` viene registrato nella pagina di amministrazione attraverso la seguente classe: Il modello :class:`.models.ResearchProject` viene registrato nella pagina di amministrazione attraverso la seguente classe:
.. class:: ResearchProjectAdmin(sophon.core.admin.SophonAdmin) .. class:: ResearchProjectAdmin(sophon.core.admin.SophonAdmin)
@ -656,9 +658,7 @@ Per facilitare lo sviluppo di Sophon, sono state realizzate due modalità di ope
Il `modulo frontend <Modulo frontend>` non supporta questa modalità, in quanto intesa solamente per lo sviluppo del modulo backend. Il `modulo frontend <Modulo frontend>` non supporta questa modalità, in quanto intesa solamente per lo sviluppo del modulo backend.
* Nella seconda, la **modalità produzione**, il `modulo proxy <Modulo proxy>` è in esecuzione all'interno di un container Docker, e si collega ai `moduli Jupyter <Modulo Jupyter>` attraverso i relativi network Docker tramite indirizzi presenti all'interno . * Nella seconda, la **modalità produzione**, il `modulo proxy <Modulo proxy>` è in esecuzione all'interno di un container Docker, e si collega ai `moduli Jupyter <Modulo Jupyter>` attraverso i relativi network Docker tramite una `rubrica <Gestione della rubrica del proxy>`.
.. image:: notebooks_diagram.png
Gestione della rubrica del proxy Gestione della rubrica del proxy
@ -741,7 +741,7 @@ Il modulo :mod:`docker` viene esteso implementando supporto per l'istruzione ``H
L'implementazione di questa funzione potrebbe causare rallentamenti nella risposta alle pagine web per via di una chiamata al metodo `time.sleep` al suo interno. L'implementazione di questa funzione potrebbe causare rallentamenti nella risposta alle pagine web per via di una chiamata al metodo `time.sleep` al suo interno.
Ciò è dovuto al mancato supporto alle funzioni asincrone nella versione attuale di `rest_framework`. Ciò è dovuto al mancato supporto alle funzioni asincrone nella versione attuale di :mod:`rest_framework`.
Si è deciso di mantenere comunque la funzionalità a scopi dimostrativi e per compatibilità futura. Si è deciso di mantenere comunque la funzionalità a scopi dimostrativi e per compatibilità futura.
@ -1306,7 +1306,7 @@ Il file di configurazione abilita i moduli httpd `rewrite`_, `proxy`_, `proxy_ws
Inoltre, nel file di configurazione viene abilitato il ``RewriteEngine``, che viene utilizzato per effettuare reverse proxying secondo le seguenti regole: Inoltre, nel file di configurazione viene abilitato il ``RewriteEngine``, che viene utilizzato per effettuare reverse proxying secondo le seguenti regole:
#. Tutte le richieste verso ``static.`` prefisso ad :env:`APACHE_PROXY_BASE_DOMAIN` vengono processate direttamente dal webserver, utilizzando i file disponibili nella cartella ``/var/www/html/django-static`` che gli vengono forniti dal volume ``django-static`` del :ref:`modulo backend`. #. Tutte le richieste verso ``static.`` prefisso ad :envvar:`APACHE_PROXY_BASE_DOMAIN` vengono processate direttamente dal webserver, utilizzando i file disponibili nella cartella ``/var/www/html/django-static`` che gli vengono forniti dal volume ``django-static`` del :ref:`modulo backend`.
.. code-block:: apacheconf .. code-block:: apacheconf
@ -1315,7 +1315,7 @@ Inoltre, nel file di configurazione viene abilitato il ``RewriteEngine``, che vi
# Process the request yourself # Process the request yourself
RewriteRule ".?" - [L] RewriteRule ".?" - [L]
#. Tutte le richieste verso :env:`APACHE_PROXY_BASE_DOMAIN` senza nessun sottodominio vengono inoltrate al container Docker del :ref:`modulo frontend` utilizzando la risoluzione dei nomi di dominio di Docker Compose. #. Tutte le richieste verso :envvar:`APACHE_PROXY_BASE_DOMAIN` senza nessun sottodominio vengono inoltrate al container Docker del :ref:`modulo frontend` utilizzando la risoluzione dei nomi di dominio di Docker Compose.
.. code-block:: apacheconf .. code-block:: apacheconf
@ -1326,7 +1326,7 @@ Inoltre, nel file di configurazione viene abilitato il ``RewriteEngine``, che vi
# Forward to the frontend # Forward to the frontend
RewriteRule "/(.*)" "http://%1/$1" [P,L] RewriteRule "/(.*)" "http://%1/$1" [P,L]
#. Tutte le richieste verso ``api.`` prefisso ad :env:`APACHE_PROXY_BASE_DOMAIN` vengono inoltrate al container Docker del :ref:`modulo backend` utilizzando la risoluzione dei nomi di dominio di Docker Compose. #. Tutte le richieste verso ``api.`` prefisso ad :envvar:`APACHE_PROXY_BASE_DOMAIN` vengono inoltrate al container Docker del :ref:`modulo backend` utilizzando la risoluzione dei nomi di dominio di Docker Compose.
.. code-block:: apacheconf .. code-block:: apacheconf
@ -1507,7 +1507,7 @@ L'immagine creata viene poi caricata sul `GitHub Container Registry <https://doc
Si riporta un estratto relativo all'azione ``build-docker-proxy``. Si riporta un estratto relativo all'azione ``build-docker-proxy``.
.. code-block:: yml .. code-block:: yaml
steps: steps:
- name: "Checkout repository" - name: "Checkout repository"
@ -1529,7 +1529,7 @@ La documentazione per l'esame viene compilata solo da `reStructuredText <https:/
Si riporta un estratto relativo all'azione ``build-sphinx-thesis``. Si riporta un estratto relativo all'azione ``build-sphinx-thesis``.
.. code-block:: yml .. code-block:: yaml
latexpdf: latexpdf:
name: "Build PDF document" name: "Build PDF document"

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/6_applicazione/index.rst
************ ************
Applicazione Applicazione
************ ************

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/7_conclusione/index.rst
*********** ***********
Conclusione Conclusione
*********** ***********

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/8_appendice/index.rst
********* *********
Appendice Appendice
********* *********

View file

@ -1,3 +1,5 @@
:github_url: https://github.com/Steffo99/sophon/blob/main/thesis/source/index.rst
############################################################################## ##############################################################################
Progettazione e sviluppo di Sophon, applicativo cloud a supporto della ricerca Progettazione e sviluppo di Sophon, applicativo cloud a supporto della ricerca
############################################################################## ##############################################################################