From 0b0c231413990a7dc6788e57a877e71601f57770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rald=20Gounot?= Date: Mon, 14 Oct 2024 18:22:41 +0200 Subject: [PATCH 1/3] =?UTF-8?q?THEMATIQUES=5FMAPPING=5FDORA=5FTO=5FDI:=20n?= =?UTF-8?q?e=20filtre=20plus=20les=20th=C3=A9matiques=20--autre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dora/data_inclusion/constants.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dora/data_inclusion/constants.py b/dora/data_inclusion/constants.py index 79350df2..284c0f4e 100644 --- a/dora/data_inclusion/constants.py +++ b/dora/data_inclusion/constants.py @@ -11,5 +11,4 @@ # À une thématique Dora correspond une liste de thématiques DI THEMATIQUES_MAPPING_DORA_TO_DI = defaultdict(list) for key, value in THEMATIQUES_MAPPING_DI_TO_DORA.items(): - if not value.endswith("--autre"): - THEMATIQUES_MAPPING_DORA_TO_DI[value].append(key) + THEMATIQUES_MAPPING_DORA_TO_DI[value].append(key) From 7756ef4688bc5aab8ec1b6c6ad0ae4efc6f35f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rald=20Gounot?= Date: Mon, 14 Oct 2024 18:24:32 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=5Fget=5Fdi=5Fresults()=20ne=20filtre=20plu?= =?UTF-8?q?s=20les=20sous-cat=C3=A9gories=20--autre=20afin=20qu'elles=20so?= =?UTF-8?q?ient=20mapp=C3=A9es=20par=20le=20client=20DI=20plus=20tard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dora/services/search.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/dora/services/search.py b/dora/services/search.py index 779ef259..aa5818cc 100644 --- a/dora/services/search.py +++ b/dora/services/search.py @@ -15,6 +15,7 @@ from dora import data_inclusion from dora.admin_express.models import City from dora.core.constants import WGS84 +from dora.data_inclusion.constants import THEMATIQUES_MAPPING_DORA_TO_DI from dora.structures.models import Structure from .constants import EXCLUDED_DI_SERVICES_THEMATIQUES @@ -124,10 +125,19 @@ def _get_di_results( if categories is not None: thematiques += categories if subcategories is not None: - thematiques += [subcat for subcat in subcategories if "--autre" not in subcat] - - # Si on recherche uniquement des sous-catégories `autre`, la liste des thématiques va être vide et d·i renverrait - # *tous* les services. On renvoie donc plutôt une liste vide. + # Les sous-catégories --autre ne sont conservées comme thématiques que lorsqu'elles + # sont présentes dans la table de correspondance de thématiques DORA vers DI. + # La correspondance sera faite plus tard, dans DataInclusionClient.search_services(). + thematiques += [ + subcat + for subcat in subcategories + if ("--autre" not in subcat or subcat in THEMATIQUES_MAPPING_DORA_TO_DI) + ] + + # Si on recherche uniquement des sous-catégories `autre` qui n'ont pas de correspondances + # de thématiques DORA vers DI (THEMATIQUES_MAPPING_DORA_TO_DI), la liste des thématiques + # va être vide et d·i renverrait *tous* les services. + # On renvoie donc plutôt une liste vide. if not thematiques and subcategories: return [] From 97db16f2c1790e1536b234efa3aead7b6209f5bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rald=20Gounot?= Date: Mon, 14 Oct 2024 18:25:20 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Param=C3=A9trise=20le=20test=20du=20mapping?= =?UTF-8?q?=20par=20le=20client=20DI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dora/data_inclusion/tests.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/dora/data_inclusion/tests.py b/dora/data_inclusion/tests.py index 1c8f7820..56945430 100644 --- a/dora/data_inclusion/tests.py +++ b/dora/data_inclusion/tests.py @@ -1,4 +1,6 @@ -from .constants import THEMATIQUES_MAPPING_DI_TO_DORA, THEMATIQUES_MAPPING_DORA_TO_DI +import pytest + +from .constants import THEMATIQUES_MAPPING_DI_TO_DORA from .mappings import map_service from .test_utils import FakeDataInclusionClient, make_di_service_data @@ -23,14 +25,28 @@ def test_map_service_thematiques_mapping(): assert sorted(service["subcategories"]) == sorted(expected_subcategories) -def test_di_client_search_thematiques_mapping(): - input_thematique = list(THEMATIQUES_MAPPING_DORA_TO_DI.keys())[0] - output_thematique = list(THEMATIQUES_MAPPING_DORA_TO_DI.values())[0][0] - +@pytest.mark.parametrize( + "thematiques_dora, thematiques_di", + [ + ( + ["logement-hebergement--etre-accompagne-pour-se-loger"], + ["logement-hebergement--etre-accompagne-dans-son-projet-accession"], + ), + ( + ["logement-hebergement--gerer-son-budget"], + ["logement-hebergement--etre-accompagne-en cas-de-difficultes-financieres"], + ), + ( + ["logement-hebergement--autre"], + ["logement-hebergement--financer-son-projet-travaux"], + ), + ], +) +def test_di_client_search_thematiques_mapping(thematiques_dora, thematiques_di): di_client = FakeDataInclusionClient() - di_service_data = make_di_service_data(thematiques=[output_thematique]) + di_service_data = make_di_service_data(thematiques=thematiques_di) di_client.services.append(di_service_data) - results = di_client.search_services(thematiques=[input_thematique]) + results = di_client.search_services(thematiques=thematiques_dora) assert len(results) == 1