Skip to content

Commit d453835

Browse files
authored
Merge pull request #476 from PnX-SI/master
Master > Dev
2 parents 6351b6e + 480169d commit d453835

File tree

6 files changed

+164
-34
lines changed

6 files changed

+164
-34
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ Documentation : https://geonature-citizen.readthedocs.io
3535
- https://observation.lehavre.fr
3636
- https://enquetes.cbiodiv.org
3737
- https://jobservemonparc.fr
38+
- https://obs.parc-livradois-forez.org
39+
- https://citizen.parc-naturel-pilat.fr
40+
- https://observatoire-biodiversite.parcdesbauges.com
3841

3942
## Solutions logicielles
4043

backend/gncitizen/core/observations/routes.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@
1717
from gncitizen.utils.jwt import get_id_role_if_exists, get_user_if_exists
1818
from gncitizen.utils.mail_check import send_user_email
1919
from gncitizen.utils.media import save_upload_files
20-
from gncitizen.utils.taxonomy import get_taxa_by_cd_nom, taxhub_rest_get_taxon_list, set_taxa_info_from_taxhub
20+
from gncitizen.utils.taxonomy import (
21+
get_taxa_by_cd_nom,
22+
taxhub_rest_get_taxon_list,
23+
set_taxa_info_from_taxhub,
24+
)
2125
from server import db
22-
from shapely.geometry import Point, shape
26+
from shapely.geometry import shape
2327
from sqlalchemy import desc
2428
from utils_flask_sqla.response import json_resp
2529

@@ -242,16 +246,16 @@ def post_observation():
242246
newobs.id_observation,
243247
ObservationMediaModel,
244248
)
245-
current_app.logger.debug(
246-
"[post_observation] ObsTax UPLOAD FILE {}".format(file)
249+
current_app.logger.debug("[post_observation] ObsTax UPLOAD FILE {}".format(file))
250+
newobs = (
251+
db.session.query(ObservationModel)
252+
.options(db.joinedload(ObservationModel.medias))
253+
.get(newobs.id_observation)
247254
)
248-
newobs = db.session.query(ObservationModel).options(
249-
db.joinedload(ObservationModel.medias)
250-
).get(newobs.id_observation)
251255
features = newobs.get_feature()
252256

253257
id_taxonomy_list = newobs.program_ref.taxonomy_list
254-
params = {'cd_nom': newobs.cd_nom}
258+
params = {"cd_nom": newobs.cd_nom}
255259
# Appel synchrone à taxhub_rest_get_taxon_list
256260
if id_taxonomy_list is not None:
257261
taxon_list_data = taxhub_rest_get_taxon_list(id_taxonomy_list, params)
@@ -314,7 +318,7 @@ def get_all_observations() -> Union[FeatureCollection, Tuple[Dict, int]]:
314318
ProgramsModel.id_program == ObservationModel.id_program,
315319
isouter=True,
316320
)
317-
.order_by(desc(ObservationModel.timestamp_create))
321+
.order_by(desc(ObservationModel.date))
318322
.filter(*filters)
319323
)
320324

@@ -325,11 +329,10 @@ def get_all_observations() -> Union[FeatureCollection, Tuple[Dict, int]]:
325329
observations = query.all()
326330
features = [obs.get_feature() for obs in observations]
327331

328-
329332
if observations:
330333
id_taxonomy_list = observations[0].program_ref.taxonomy_list
331-
cd_nom_list = ','.join(map(str, {obs.cd_nom for obs in observations}))
332-
params = {'cd_nom': cd_nom_list} if cd_nom_list else {}
334+
cd_nom_list = ",".join(map(str, {obs.cd_nom for obs in observations}))
335+
params = {"cd_nom": cd_nom_list} if cd_nom_list else {}
333336
else:
334337
id_taxonomy_list = None
335338
params = {}
@@ -340,7 +343,6 @@ def get_all_observations() -> Union[FeatureCollection, Tuple[Dict, int]]:
340343
else:
341344
features_with_taxhub_info = features
342345

343-
344346
feature_collection = FeatureCollection(features_with_taxhub_info)
345347

346348
if paginate:

backend/gncitizen/core/sites/routes.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,14 @@ def get_program_sites(id):
226226
description: List of all sites
227227
"""
228228
try:
229-
sites = SiteModel.query.filter_by(id_program=id).all()
229+
sites = (
230+
db.session.query(SiteModel)
231+
.join(VisitModel, SiteModel.id_site == VisitModel.id_site)
232+
.filter(SiteModel.id_program == id)
233+
.order_by(VisitModel.date.desc())
234+
.order_by(SiteModel.timestamp_create.desc())
235+
.all()
236+
)
230237
return prepare_sites(sites)
231238
except Exception as e:
232239
return {"error_message": str(e)}, 400

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Documentation de GeoNature-citizen
1818
configuration
1919
administration
2020
badges
21+
update
2122
devs/index
2223
history
2324

docs/update.md

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# Mise à jour de GeoNature-citizen
2+
3+
## ⚠️ Prérequis et précautions
4+
5+
Avant toute mise à jour, **sauvegardez impérativement** :
6+
7+
- 📦 Les fichiers de l’application
8+
- 🗃️ La base de données PostgreSQL
9+
_ou_
10+
- 🖼️ Réalisez un **snapshot complet** du serveur
11+
12+
> En cas de problème, cela permet de restaurer l’état antérieur de l'application.
13+
14+
---
15+
16+
## 🛠️ Méthode 1 – Mise à jour manuelle
17+
18+
### 1. Sauvegarder l'instance existante
19+
20+
```bash
21+
cd ~/
22+
mv ~/gncitizen ~/gncitizen_old
23+
```
24+
25+
### 2. Télécharger la nouvelle version
26+
27+
```bash
28+
VERSION=X.Y.Z # Remplacez X.Y.Z par la version cible
29+
curl -OJL https://github.com/PnX-SI/GeoNature-citizen/archive/refs/tags/$VERSION.zip
30+
unzip GeoNature-citizen-$VERSION.zip
31+
mv GeoNature-citizen-$VERSION gncitizen
32+
rm GeoNature-citizen-$VERSION.zip
33+
```
34+
35+
### 3. Restaurer les fichiers de configuration et personnalisations
36+
37+
```bash
38+
cp ~/gncitizen_old/config/settings.ini ~/gncitizen/config/
39+
cp ~/gncitizen_old/config/config.toml ~/gncitizen/config/
40+
cp ~/gncitizen_old/config/backoffice_* ~/gncitizen/config/
41+
cp ~/gncitizen_old/config/badges_config.py ~/gncitizen/config/
42+
43+
cp ~/gncitizen_old/frontend/src/conf/app.config.ts ~/gncitizen/frontend/src/conf/
44+
cp ~/gncitizen_old/frontend/src/conf/map.config.ts ~/gncitizen/frontend/src/conf/
45+
cp -r ~/gncitizen_old/frontend/src/custom/* ~/gncitizen/frontend/src/custom/
46+
47+
cp -r ~/gncitizen_old/media/ ~/gncitizen/media/
48+
```
49+
50+
> ✅ Ces fichiers devraient idéalement être suivis ou exclus proprement avec `.gitignore` si vous utilisez Git.
51+
52+
---
53+
54+
## 🌿 Méthode 2 – Mise à jour via Git (recommandée si dépôt cloné)
55+
56+
### 1. Aller dans le répertoire de l’application
57+
58+
```bash
59+
cd ~/gncitizen
60+
```
61+
62+
### 2. Mettre à jour le dépôt
63+
64+
```bash
65+
git pull
66+
```
67+
68+
> ⚙️ Les fichiers de config/perso sont gérés avec `.gitignore` et donc conservés.
69+
70+
---
71+
72+
## 📌 Étapes communes post-mise à jour
73+
74+
### 3. Lire les notes de version
75+
76+
Consultez les [notes de version](https://github.com/PnX-SI/GeoNature-citizen/releases) pour vérifier s’il y a :
77+
78+
- des scripts à exécuter
79+
- des fichiers à modifier
80+
- des migrations de base de données à effectuer
81+
82+
---
83+
84+
### 4. Lancer le script de mise à jour de l'application
85+
86+
```bash
87+
cd ~/gncitizen
88+
./install/update_app.sh
89+
```
90+
91+
---
92+
93+
### 5. Effectuer les migrations de base de données (si nécessaire)
94+
95+
> ⚠️ Vérifiez la version cible de la BDD dans les notes de version pour définir le bon **Alembic stamp**.
96+
97+
```bash
98+
ALEMBIC_STAMP=e8c1cd57ad16 # Remplacez par le hash correct selon la version
99+
100+
cd ~/gncitizen/backend
101+
source .venv/bin/activate
102+
103+
flask db stamp $ALEMBIC_STAMP
104+
flask db upgrade
105+
106+
deactivate
107+
```
108+
109+
---
110+
111+
## ✅ C'est terminé !
112+
113+
L’application GeoNature-citizen est maintenant à jour.
114+
Pensez à tester rapidement l’interface et les fonctionnalités principales pour valider la mise à jour.
115+
116+
⚠️ Pensez à supprimer le répertoire de l'installation précédente (`gncitizen_old`) afin de libérer de l'espace disque. En particulier le répertoire `media` qui a été copié dans le répertoire de la nouvelle version.

install/update_app.sh

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,34 @@ set -e
33

44
cd $(dirname $(dirname "${BASH_SOURCE[0]:-$0}"))
55

6-
# Mise à jour du git
7-
git pull
6+
DIR=$(pwd)
87

9-
. config/settings.ini
10-
npm install
8+
# Creation du repertoires de logs
9+
mkdir -p var/log
1110

11+
. config/settings.ini
1212
# Transpilation du frontend
13-
cd frontend
13+
# Source nvm.sh pour accéder à nvm
14+
source ~/.nvm/nvm.sh
15+
cd ${DIR}/frontend
16+
nvm install
17+
nvm use
1418
npm install
15-
16-
echo "Build frontend"
19+
echo "Build frontend ..."
1720
npm run build:i18n-ssr
1821

19-
echo "Reloading Front server ..."
20-
sudo -s supervisorctl reload geonature
21-
22-
cd ..
22+
# Création du venv et mise a jour des requirements
23+
echo "Upgrade backend ..."
24+
cd $DIR/backend
25+
venv_path=$DIR/backend/${venv_dir:-".venv"}
26+
if [ ! -f $venv_path/bin/activate ]; then
27+
python3 -m virtualenv $venv_path
28+
fi
29+
source .venv/bin/activate
30+
pip install -r requirements.txt
2331

24-
# Mise a jour des requirements
25-
FLASKDIR=$(readlink -e "${0%/*}")
26-
APP_DIR="$(dirname "$FLASKDIR")"
27-
venv_dir=".venv"
28-
venv_path=$FLASKDIR/backend/$venv_dir
29-
source $venv_path/bin/activate
30-
echo $(pwd)
31-
pip install -r backend/requirements.txt
3232

3333
# Reload Supervisor pour l'api
3434
echo "Reloading Api ..."
35-
sudo -s supervisorctl reload api_geonature
35+
sudo supervisorctl restart gncitizen_api
36+
sudo supervisorctl restart gncitizen_front

0 commit comments

Comments
 (0)