Skip to content

Commit 641fb39

Browse files
authored
Merge branch 'feat/import-monitoring' into feat/import-monitoring-sites-groups
2 parents f2e0651 + e73871e commit 641fb39

20 files changed

Lines changed: 53 additions & 43 deletions

File tree

backend/gn_module_monitoring/command/imports/destination.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from gn_module_monitoring.command.imports.utils import destination_name
12
from sqlalchemy import select, exists
23
import sqlalchemy as sa
34

@@ -48,7 +49,7 @@ def upsert_bib_destination(module_data: dict) -> Destination:
4849
destination_data = {
4950
"id_module": module_monitoring_code.id_module,
5051
"code": module_data["module_code"],
51-
"label": "Monitoring - " + module_data["module_label"],
52+
"label": destination_name(module_data["module_label"]),
5253
"table_name": f"t_imports_{module_data['module_code'].lower()}",
5354
"active": True,
5455
}

backend/gn_module_monitoring/command/imports/protocol.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from gn_module_monitoring.command.imports.utils import destination_name
23
from gn_module_monitoring.config.repositories import get_config
34
from gn_module_monitoring.config.utils import (
45
json_from_file,
@@ -306,7 +307,7 @@ def get_existing_protocol_state(id_destination: int, module_data):
306307
destination = DB.session.execute(
307308
select(Destination).filter_by(id_destination=id_destination)
308309
).scalar()
309-
new_label = module_data["module"].get("module_label")
310+
new_label = destination_name(module_data["module"].get("module_label"))
310311
return {
311312
"fields": [field.__dict__ for field in existing_fields],
312313
"entities": [entity.__dict__ for entity in existing_entities],

backend/gn_module_monitoring/command/imports/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
from geonature.utils.env import db
1414

1515

16+
def destination_name(module_name: str):
17+
return f"Monitoring - {module_name}"
18+
19+
1620
def ask_confirmation():
1721
prompt = "\nVeuillez confirmer que vous souhaitez effectuer ces modifications ? [yes/no]: "
1822

backend/gn_module_monitoring/monitoring/import_actions/actions.py

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,6 @@ def import_data_to_destination(imprt: TImports) -> None:
252252
if entity.code == "visit":
253253
core_select_cols.append(sa.literal(imprt.destination.id_module).label("id_module"))
254254
core_dest_col_names.append("id_module")
255-
# FIXME: should be done automatically :/
256-
if "v__observers" in map(lambda x: x.name_field, entity_fields):
257-
core_select_cols.append(
258-
transient_table.c.src_v__observers.label("observers_txt")
259-
)
260-
core_dest_col_names.append("observers_txt")
261255
core_select_stmt = (
262256
sa.select(*core_select_cols)
263257
.where(transient_table.c.id_import == imprt.id_import)
@@ -419,6 +413,7 @@ def import_data_to_destination(imprt: TImports) -> None:
419413
),
420414
)
421415
)
416+
)
422417

423418
if complement_select_stmt is not None:
424419
if entity.code == "site" and is_sites_group_id_fields:
@@ -460,16 +455,33 @@ def import_data_to_destination(imprt: TImports) -> None:
460455
yield (batch + 1) / batch_count
461456
imprt.statistics.update({f"{entity.code}_count": row_count})
462457

463-
if entity.code == "visit":
464-
ImportActions.bind_matched_observers(
465-
imprt,
466-
TBaseVisits,
467-
"observers_txt",
468-
"id_base_visit",
469-
CorVisitObserver,
470-
["id_base_visit", "id_role"],
471-
)
472-
458+
if entity.code == "visit" and MonitoringImportActions.is_observer_mapping_enabled():
459+
460+
if "v__observers" in imprt.fieldmapping:
461+
if imprt.fieldmapping["v__observers"].get("constant_value", None) is not None:
462+
db.session.execute(
463+
sa.insert(CorVisitObserver).from_select(
464+
["id_base_visit", "id_role"],
465+
sa.select(
466+
transient_table.c.id_base_visit,
467+
sa.func.unnest(transient_table.c["v__observers"]).label(
468+
"id_role"
469+
),
470+
)
471+
.where(transient_table.c["v__observers"] != None)
472+
.where(transient_table.c.id_import == imprt.id_import)
473+
.where(transient_table.c[entity.validity_column] == True),
474+
)
475+
)
476+
else:
477+
ImportActions.bind_matched_observers(
478+
imprt,
479+
transient_table,
480+
"src_v__observers",
481+
"id_base_visit",
482+
CorVisitObserver,
483+
["id_base_visit", "id_role"],
484+
)
473485
imprt.statistics.update(ObservationImportActions.compute_taxa_statistics(imprt))
474486

475487
# filter empty statistics
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
import pytest
22
from geonature.tests.test_monitoring import markings, nomenclature_type_markings
3+
from gn_module_monitoring.tests.fixtures import *
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from .generic import *
2+
from .individual import *
3+
from .module import *
4+
from .site import *
5+
from .sites_groups import *
6+
from .visit import *
7+
from .observation import *
8+
from .marking import *

backend/gn_module_monitoring/tests/fixtures/individual.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
from geonature.core.gn_monitoring.models import corIndividualModule
1010
from gn_module_monitoring.monitoring.models import TMonitoringIndividuals
11-
from gn_module_monitoring.tests.fixtures.marking import *
1211

1312
from geonature.tests.fixtures import users
1413

backend/gn_module_monitoring/tests/fixtures/module.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
)
2222
from gn_module_monitoring.monitoring.models import TMonitoringModules
2323
from gn_module_monitoring.tests.fixtures.generic import add_user_permission
24-
from gn_module_monitoring.tests.fixtures.type_site import types_site
2524

2625

2726
@pytest.fixture

backend/gn_module_monitoring/tests/test_commands/test_commands.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from geonature.utils.env import DB
88
from geonature.core.imports.models import BibFields, Destination
99

10-
from gn_module_monitoring.tests.fixtures.generic import *
1110
from gn_module_monitoring.command.cmd import (
1211
cmd_remove_monitoring_module_cmd,
1312
cmd_process_sql,

backend/gn_module_monitoring/tests/test_commands/test_utils.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import pytest
22

33
from pathlib import Path
4+
from flask import url_for, current_app
45

5-
from gn_module_monitoring.tests.fixtures.generic import *
6-
from gn_module_monitoring.command.imports.constant import FORBIDDEN_SQL_INSTRUCTION
7-
from gn_module_monitoring.command.sql import execute_sql_file
6+
from sqlalchemy import select
7+
8+
from geonature.utils.env import DB
9+
from gn_module_monitoring.command.utils import execute_sql_file, FORBIDDEN_SQL_INSTRUCTION
10+
from gn_module_monitoring.monitoring.models import TMonitoringModules
811

912

1013
class TestCommandsUtils:

0 commit comments

Comments
 (0)