Skip to content

Commit

Permalink
Merge pull request #243 from PnX-SI/develop
Browse files Browse the repository at this point in the history
Develop > Master / 0.7.0
  • Loading branch information
camillemonchicourt authored Aug 23, 2023
2 parents 0e26c27 + 14e474e commit 2e97e65
Show file tree
Hide file tree
Showing 63 changed files with 1,690 additions and 1,795 deletions.
26 changes: 26 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Lint

on: [push, pull_request]

jobs:
backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Backend code formatting check (Black)
uses: psf/black@stable
with:
src: "setup.py ./backend/gn_module_monitoring"
frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Frontend code formatting check (Prettier)
uses: creyD/[email protected]
with:
dry: True
prettier_options: --config frontend/.prettierrc --ignore-path frontend/.prettierignore --check frontend/**/*.ts
33 changes: 18 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# Module GeoNature de suivis génériques

# Module GeoNature générique de suivis

## Module générique de gestion des données de protocoles de type suivis

Expand Down Expand Up @@ -70,6 +69,8 @@ Créer le dossier suivant dans le dossier `media` de GeoNature
mkdir ~/geonature/backend/media/monitorings
```

Il vous faut désormais attribuer des permissions aux groupes ou utilisateurs que vous souhaitez, pour qu'ils puissent accéder et utiliser le module (voir https://docs.geonature.fr/admin-manual.html#gestion-des-droits). Si besoin une commande permet d'attribuer automatiquement toutes les permissions dans tous les modules à un groupe ou utilisateur administrateur.

### Installation d'un sous-module

#### Récupérer le répertoire de configuration d'un sous-module de suivi
Expand All @@ -84,16 +85,16 @@ source ~/geonature/backend/venv/bin/activate

#### Copie du dossier de configuration

Copier le dossier du sous module dans le dossier `media` de geonature
Copier le dossier du sous-module dans le dossier `media` de GeoNature

```sh
cp -R <dossier du sous module> ~/geonature/backend/media/monitorings/<module_code>
cp -R <dossier du sous-module> ~/geonature/backend/media/monitorings/<module_code>
```

Si l'on souhaite développer un sous-module il peut parfois être plus pratique de faire un lien symbolique
PS : Si l'on souhaite développer un sous-module il peut être pratique de plutôt faire un lien symbolique vers le dossier du sous-module, plutôt que de le copier dans le dossier `media` de GeoNature :

```sh
ln -s <dossier du sous module> ~/geonature/backend/monitorings/<module_code>
ln -s <dossier du sous module> ~/geonature/backend/media/monitorings/<module_code>
```

#### Lancer la commande d'installation du sous-module
Expand All @@ -102,7 +103,7 @@ ln -s <dossier du sous module> ~/geonature/backend/monitorings/<module_code>
geonature monitorings install <module_code>
```

Si le code du module n'est pas renseigné ou si le dossier du module n'existe pas, la commande va afficher la liste des modules installés et disponibles.
Si le code du sous-module n'est pas renseigné ou si le dossier du sous-module n'existe pas, la commande va afficher la liste des sous-modules installés et disponibles.

```sh
geonature monitorings install
Expand All @@ -124,6 +125,8 @@ Modules installés :
- module2: Module 2 (Deuxième exemple de module)
```

Il vous faut désormais attribuer des permissions aux groupes ou utilisateurs que vous souhaitez, pour qu'ils puissent accéder et utiliser le sous-module (voir https://docs.geonature.fr/admin-manual.html#gestion-des-droits). Si besoin une commande permet d'attribuer automatiquement toutes les permissions dans tous les modules à un groupe ou utilisateur administrateur.

### Configurer le sous-module

#### Dans le menu de droite de GeoNature, cliquer sur le module "Monitorings"
Expand All @@ -132,16 +135,16 @@ Le sous-module installé précedemment doit s'afficher dans la liste des sous-mo

#### Cliquez sur le sous-module

Vous êtes désormais sur la page du sous-module. Un message apparaît pour vous indiquer de configurer le module.
Vous êtes désormais sur la page du sous-module. Un message apparaît pour vous indiquer de configurer celui-ci.

#### Cliquez sur le bouton `Éditer`

Le formulaire d'édition du module s'affiche et vous pouvez choisir les variables suivantes :
Le formulaire d'édition du sous-module s'affiche et vous pouvez choisir les variables suivantes :

* Jeux de données *(obligatoire)* :
* Un module peut concerner plusieurs jeux de données, le choix sera ensuite proposé au niveau de chaque visite.
* Liste des observateurs *(obligatoire)*:
* La liste d'observateurs définit l'ensemble de observateurs possible pour le module (et de descripteurs de site).
* Liste des observateurs *(obligatoire)* :
* La liste d'observateurs définit l'ensemble des observateurs possibles pour le module (et de descripteurs de site).
* Cette liste peut être définie dans l'application `UsersHub`.
* Liste des taxons *(obligatoire selon le module)* :
* Cette liste définit l'ensemble des taxons concernés par ce module. Elle est gérée dans l'application `TaxHub`.
Expand All @@ -152,7 +155,7 @@ Le formulaire d'édition du module s'affiche et vous pouvez choisir les variable
* `lb_nom` : Nom latin,
* `nom_vern,lb_nom` : Nom vernaculaire par defaut s'il existe, sinon nom latin.
* Afficher dans le menu ? *(non obligatoire, non affiché par défaut)* :
* On peut décider que le sous-module soit accessible directement depuis le menu de droite de GeoNature.
* On peut décider que le sous-module soit accessible directement depuis le menu de gauche de GeoNature.
* `active_frontend`
* Options spécifiques du sous-module :
* Un sous-module peut présenter des options qui lui sont propres et définies dans les paramètres spécifiques du sous-module.
Expand All @@ -174,8 +177,8 @@ Les permissions ne sont implémentées que partiellement. La notion de portée (

La gestion des permissions pour les rôles (utilisateur ou groupe) se réalise au niveau de l'interface d'administration des permissions de GeoNature.

Il est possible de spéficier les permissions pour chaque type d'objet (groupes de sites, sites, visites et observations).
Il est possible de spécifier les permissions pour chaque type d'objet (groupes de sites, sites, visites et observations).

Si aucune permission n'est associée à l'objet, les permissions auront comme valeur celles associées aux sous-module qui lui-même hérite des permissions du module Monitoring qui lui-même hérite de GeoNature.
Si aucune permission n'est associée à l'objet, les permissions auront comme valeur celles associées au sous-module.

Par défaut, dès qu'un utilisateur a un droit supérieur à 0 pour une action (c-a-d aucune portée) il peut réaliser cette action. Il est possible de surcharger les paramètres au niveau des fichiers de configuration des objets du module. (cf configuration des sous-modules).
Par défaut, dès qu'un utilisateur a un droit supérieur à 0 pour une action (c-a-d aucune portée) il peut réaliser cette action. Il est possible de surcharger les paramètres au niveau des fichiers de configuration des objets du module. (cf doc de configuration des sous-modules).
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.6.0
0.7.0
2 changes: 1 addition & 1 deletion backend/gn_module_monitoring/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
MODULE_CODE = "MONITORINGS"
MODULE_PICTO = "fa-eye"
MODULE_PICTO = "fa-eye"
4 changes: 3 additions & 1 deletion backend/gn_module_monitoring/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
from flask import Blueprint, current_app
from .command.cmd import commands

blueprint = Blueprint("monitorings", __name__, template_folder=current_app.config["MEDIA_FOLDER"] + '/monitorings')
blueprint = Blueprint(
"monitorings", __name__, template_folder=current_app.config["MEDIA_FOLDER"] + "/monitorings"
)
from .routes import * # noqa

blueprint.cli.short_help = "Commandes pour l" "administration du module MONITORINGS"
Expand Down
75 changes: 30 additions & 45 deletions backend/gn_module_monitoring/command/cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@

from .utils import (
process_export_csv,
insert_permission_object,
process_available_permissions,
remove_monitoring_module,
add_nomenclature,
available_modules,
installed_modules
installed_modules,
)


Expand All @@ -37,6 +37,7 @@ def cmd_process_all(module_code):
# process export csv
process_export_csv(module_code)


@click.command("process_export_csv")
@click.argument("module_code", type=str, required=False, default="")
@with_appcontext
Expand Down Expand Up @@ -66,15 +67,22 @@ def cmd_install_monitoring_module(module_code):

module_config_dir_path = monitoring_module_config_path(module_code)

if not (module_code and (module_config_dir_path / 'module.json').is_file()):
if not (module_code and (module_config_dir_path / "module.json").is_file()):
if module_code:
click.secho(f"Le module {module_code} n'est pas présent dans le dossier {module_config_dir_path}", fg="red")
click.secho(f'\nModules disponibles :\n')
click.secho(
f"Le module {module_code} n'est pas présent dans le dossier {module_config_dir_path}",
fg="red",
)
click.secho(f"\nModules disponibles :\n")
for module in available_modules():
click.secho(f"- {module['module_code']}: {module['module_label']} ({module['module_desc']})\n")
click.secho(
f"- {module['module_code']}: {module['module_label']} ({module['module_desc']})\n"
)
click.secho(f"\nModules installés :\n")
for module in installed_modules():
click.secho(f"- {module['module_code']}: {module['module_label']} ({module['module_desc']})\n")
click.secho(
f"- {module['module_code']}: {module['module_label']} ({module['module_desc']})\n"
)
return

click.secho(f"Installation du sous-module monitoring {module_code}")
Expand All @@ -96,10 +104,7 @@ def cmd_install_monitoring_module(module_code):
config = get_config(module_code, force=True)

if not config:
click.secho(
f"config directory for module {module_code} does not exist",
fg="red"
)
click.secho(f"config directory for module {module_code} does not exist", fg="red")
return None

module_desc = config["module"].get("module_desc")
Expand All @@ -112,20 +117,18 @@ def cmd_install_monitoring_module(module_code):
click.secho(
f"Veuillez renseigner les valeurs des champs module_label \
et module_desc dans le fichier {module_config_dir_path}/module.json",
fg="red"
fg="red",
)
return

module_data = {
"module_picto": "fa-puzzle-piece",
**config["module"],
"module_code": module_code,
"module_path": "{}/module/{}".format(
module_monitoring.module_path, module_code
),
"module_path": "{}/module/{}".format(module_monitoring.module_path, module_code),
"active_frontend": False,
"active_backend": False,
"type": "monitoring_module"
"type": "monitoring_module",
}

click.secho("ajout du module {} en base".format(module_code))
Expand All @@ -134,10 +137,8 @@ def cmd_install_monitoring_module(module_code):
DB.session.add(module)
DB.session.commit()

# Insert permission object
if config["module"].get("permission_objects"):
id_module = module.id_module
insert_permission_object(id_module, config["module"].get("permission_objects"))
# Ajouter les permissions disponibles
process_available_permissions(module_code)

#  run specific sql
if (module_config_dir_path / "synthese.sql").exists:
Expand Down Expand Up @@ -177,14 +178,14 @@ def cmd_install_monitoring_module(module_code):
DB.session.commit()

# TODO ++++ create specific tables
click.secho(f"Sous-module monitoring '{module_code}' installé", fg='green')
click.secho(f"Sous-module monitoring '{module_code}' installé", fg="green")
return


@click.command("update_permission_objects")
@click.argument("module_code")
@click.command("update_module_available_permissions")
@click.argument("module_code", required=False, default="")
@with_appcontext
def cmd_update_perm_module_cmd(module_code):
def cmd_process_available_permission_module(module_code):
"""
Mise à jour (uniquement insertion) des objets permissions associés au module
Défini par le paramètre permission_objects du fichier module.json
Expand All @@ -193,28 +194,12 @@ def cmd_update_perm_module_cmd(module_code):
module_code ([string]): code du sous module
"""
try:
module = get_module("module_code", module_code)
except Exception:
print("le module n'existe pas")
return
path_module = monitoring_module_config_path(module_code) / "module.json"

if not path_module.is_file():
print(f"Il n'y a pas de fichier {path_module} pour ce module")
return
config_module = json_from_file(path_module, None)
if not config_module:
print("Il y a un problème avec le fichier {}".format(path_module))
return
if module_code:
return process_available_permissions(module_code)

print(f"Insertion des objets de permissions pour le module {module_code}")
# Insert permission object
if "permission_objects" in config_module:
id_module = module.id_module
insert_permission_object(id_module, config_module["permission_objects"])
else:
print("no permission")
for module in installed_modules():
process_available_permissions(module["module_code"])


@click.command("remove")
Expand Down Expand Up @@ -264,7 +249,7 @@ def synchronize_synthese(module_code, offset):
commands = [
cmd_process_export_csv,
cmd_install_monitoring_module,
cmd_update_perm_module_cmd,
cmd_process_available_permission_module,
cmd_remove_monitoring_module_cmd,
cmd_add_module_nomenclature_cli,
cmd_process_all,
Expand Down
Loading

0 comments on commit 2e97e65

Please sign in to comment.