From e882416df69fc92a20ec5c314afb596f08ffcbb7 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Fri, 5 Nov 2021 02:40:54 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=94=20Projects,=20done.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../3_dev/2_structure/1_backend/3_core.rst | 8 ++- .../2_structure/1_backend/4_projects.rst | 56 +++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/docs/source/3_dev/2_structure/1_backend/3_core.rst b/docs/source/3_dev/2_structure/1_backend/3_core.rst index 1f88c5c..17d2c55 100644 --- a/docs/source/3_dev/2_structure/1_backend/3_core.rst +++ b/docs/source/3_dev/2_structure/1_backend/3_core.rst @@ -4,7 +4,6 @@ L'app sophon.core .. default-role:: obj .. module:: sophon.core - L'app `sophon.core` è l'app principale del progetto, e non può essere disattivata, in quanto dipendenza obbligatoria di tutte le altre app. @@ -267,6 +266,13 @@ Vengono definiti tre viewset in grado di utilizzare i metodi aggiunti dalle clas Classe **astratta** che estende la classe base `.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 + :abstractmethod: + + 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. + Viewset concreti ^^^^^^^^^^^^^^^^ diff --git a/docs/source/3_dev/2_structure/1_backend/4_projects.rst b/docs/source/3_dev/2_structure/1_backend/4_projects.rst index 8f38cf7..3736b18 100644 --- a/docs/source/3_dev/2_structure/1_backend/4_projects.rst +++ b/docs/source/3_dev/2_structure/1_backend/4_projects.rst @@ -4,3 +4,59 @@ L'app sophon.projects .. default-role:: obj .. module:: sophon.projects +L'app `sophon.projects` è un app secondaria che dipende da `sophon.core` che introduce in Sophon il concetto di :ref:`progetto di ricerca`. + +.. caution:: + + Anche se l'app `sophon.projects` è opzionale (il progetto può funzionare senza di essa), si sconsiglia di disattivarla, in quanto il :ref:`modulo frontend` si aspetta che l'app sia attiva e solleverà un errore nel caso il viewset fornito da questa app non sia disponibile. + + +Modello del progetto di ricerca +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. module:: sophon.projects.models + +Viene introdotto un modello concreto che rappresenta un :ref:`progetto di ricerca`. + +.. class:: ResearchProject(SophonGroupModel) + + .. attribute:: slug: SlugField + .. attribute:: group: ForeignKey → sophon.core.models.ResearchGroup + .. attribute:: name: CharField + .. attribute:: description: TextField + .. attribute:: visibility: CharField ["PUBLIC", "INTERNAL", "PRIVATE"] + + +Viewset del gruppo di ricerca +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. module:: sophon.projects.views + +Da una base comune, vengono creati due viewset per interagire con i progetti di ricerca. + +.. 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. + +.. class:: ResearchProjectsBySlugViewSet(ResearchProjectViewSet) + + Viewset in lettura e scrittura che permette di interagire con tutti i progetti di ricerca a cui l'utente loggato ha accesso. + + Accessibile all'URL :samp:`/api/projects/by-slug/{PROJECT_SLUG}/`. + +.. class:: ResearchProjectsByGroupViewSet(ResearchProjectViewSet) + + Viewset in lettura e scrittura che permette di interagire con i progetti di ricerca a cui l'utente loggato ha accesso, filtrati per il gruppo a cui appartengono. + + Il filtraggio viene effettuato limitando il queryset. + + Accessibile all'URL :samp:`/api/projects/by-group/{GROUP_SLUG}/{PROJECT_SLUG}/`. + + +Amministrazione del gruppo di ricerca +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. module:: sophon.projects.admin + +Il modello `.models.ResearchProject` viene registrato nella pagina di amministrazione attraverso la seguente classe: + +.. class:: ResearchProjectAdmin(sophon.core.admin.SophonAdmin) + + Classe per la pagina di amministrazione che specifica un ordinamento, permette il filtraggio per gruppo di appartenenza e visibilità, e specifica i campi da visualizzare nell'elenco dei progetti.