Skip to content
This repository has been archived by the owner on Oct 22, 2024. It is now read-only.

Correctif du mapping de thématiques DORA-DI #413

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions dora/data_inclusion/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
30 changes: 23 additions & 7 deletions dora/data_inclusion/tests.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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
18 changes: 14 additions & 4 deletions dora/services/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 []

Expand Down