From 3e4c0280dd5fd0ea59b6e4e8b01a8b4e0591d967 Mon Sep 17 00:00:00 2001 From: HAEKADI Date: Thu, 26 May 2022 22:08:14 +0200 Subject: [PATCH 1/6] feat: add 'section activite principale' filter --- aio/aio-proxy/aio_proxy/labels/helpers.py | 1 + .../aio_proxy/labels/sections-codes-NAF.json | 23 ++++++++++++++++ .../parsers/section_activite_principale.py | 26 +++++++++++++++++++ .../aio_proxy/response/format_response.py | 1 + 4 files changed, 51 insertions(+) create mode 100644 aio/aio-proxy/aio_proxy/labels/sections-codes-NAF.json create mode 100644 aio/aio-proxy/aio_proxy/parsers/section_activite_principale.py diff --git a/aio/aio-proxy/aio_proxy/labels/helpers.py b/aio/aio-proxy/aio_proxy/labels/helpers.py index c7deb291..d7623613 100644 --- a/aio/aio-proxy/aio_proxy/labels/helpers.py +++ b/aio/aio-proxy/aio_proxy/labels/helpers.py @@ -11,3 +11,4 @@ def load_file(file_name: str): codes_naf = load_file("codes-NAF.json") tranches_effectifs = load_file("tranches-effectifs.json") +sections_codes_naf = load_file("sections-codes-NAF.json") diff --git a/aio/aio-proxy/aio_proxy/labels/sections-codes-NAF.json b/aio/aio-proxy/aio_proxy/labels/sections-codes-NAF.json new file mode 100644 index 00000000..020d0791 --- /dev/null +++ b/aio/aio-proxy/aio_proxy/labels/sections-codes-NAF.json @@ -0,0 +1,23 @@ +{ + "A":"Agriculture, sylviculture et pêche", + "B":"Industries extractives", + "C":"Industrie manufacturière", + "D":"Production et distribution d'électricité, de gaz, de vapeur et d'air conditionné", + "E":"Production et distribution d'eau ; assainissement, gestion des déchets et dépollution", + "F":"Construction", + "G":"Commerce; réparation d'automobiles et de motocycles", + "H":"Transports et entreposage", + "I":"Hébergement et restauration", + "J":"Information et communication", + "K":"Activités financières et d'assurance", + "L":"Activités immobilières", + "M":"Activités spécialisées, scientifiques et techniques", + "N":"Activités de services administratifs et de soutien", + "O":"Administration publique", + "P":"Enseignement", + "Q":"Santé humaine et action sociale", + "R":"Arts, spectacles et activités récréatives", + "S":"Autres activités de services", + "T":"Activités des ménages en tant qu'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre", + "U":"Activités extra-territoriales" +} \ No newline at end of file diff --git a/aio/aio-proxy/aio_proxy/parsers/section_activite_principale.py b/aio/aio-proxy/aio_proxy/parsers/section_activite_principale.py new file mode 100644 index 00000000..d4b8bf03 --- /dev/null +++ b/aio/aio-proxy/aio_proxy/parsers/section_activite_principale.py @@ -0,0 +1,26 @@ +from typing import Optional + +from aio_proxy.labels.helpers import sections_codes_naf + + +def validate_section_activite_principale( + section_activite_principale_clean: str, +) -> Optional[str]: + """Check the validity of section_activite_principale. + + Args: + section_activite_principale_clean(str, optional): + section_activite_principale extracted and cleaned. + + Returns: + None if section_activite_principale_clean is None. + section_activite_principale_clean if valid. + + Raises: + ValueError: if section_activite_principale_clean not valid. + """ + if section_activite_principale_clean is None: + return None + if section_activite_principale_clean not in sections_codes_naf: + raise ValueError("Section d'activité principale non valide.") + return section_activite_principale_clean diff --git a/aio/aio-proxy/aio_proxy/response/format_response.py b/aio/aio-proxy/aio_proxy/response/format_response.py index 3f67e2bf..74f64d16 100644 --- a/aio/aio-proxy/aio_proxy/response/format_response.py +++ b/aio/aio-proxy/aio_proxy/response/format_response.py @@ -42,6 +42,7 @@ def get_field(field, default=None): "nom_raison_sociale": get_field("nom_raison_sociale"), "nature_juridique": get_field("nature_juridique_unite_legale"), "activite_principale": get_field("activite_principale_unite_legale"), + "section_activite_principale": get_field("section_activite_principale"), "economie_sociale_solidaire": get_field( "economie_sociale_solidaire_unite_legale" ), From e64b4b7a8bbcdbf13749e06043ce0af342f8c3be Mon Sep 17 00:00:00 2001 From: HAEKADI Date: Thu, 26 May 2022 22:08:59 +0200 Subject: [PATCH 2/6] feat: add 'section activite principale' to parameters --- aio/aio-proxy/aio_proxy/response/parameters.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aio/aio-proxy/aio_proxy/response/parameters.py b/aio/aio-proxy/aio_proxy/response/parameters.py index f2aab415..add61315 100755 --- a/aio/aio-proxy/aio_proxy/response/parameters.py +++ b/aio/aio-proxy/aio_proxy/response/parameters.py @@ -10,6 +10,9 @@ from aio_proxy.parsers.page import parse_and_validate_page from aio_proxy.parsers.per_page import parse_and_validate_per_page from aio_proxy.parsers.radius import parse_and_validate_radius +from aio_proxy.parsers.section_activite_principale import ( + validate_section_activite_principale, +) from aio_proxy.parsers.string_parser import parse_and_clean_parameter from aio_proxy.parsers.terms import parse_and_validate_terms from aio_proxy.parsers.tranche_effectif import ( @@ -46,6 +49,9 @@ def extract_text_parameters( is_entrepreneur_individuel = validate_is_entrepreneur_individuel( parse_and_clean_parameter(request, param="is_entrepreneur_individuel") ) + section_activite_principale = validate_section_activite_principale( + parse_and_clean_parameter(request, param="section_activite_principale") + ) tranche_effectif_salarie = validate_tranche_effectif_salarie( parse_and_clean_parameter(request, param="tranche_effectif_salarie") ) @@ -54,6 +60,7 @@ def extract_text_parameters( "activite_principale_unite_legale": activite_principale, "code_postal": code_postal, "is_entrepreneur_individuel": is_entrepreneur_individuel, + "section_activite_principale": section_activite_principale, "tranche_effectif_salarie_unite_legale": tranche_effectif_salarie, } @@ -69,10 +76,14 @@ def extract_geo_parameters(request): activite_principale = validate_activite_principale( parse_and_clean_parameter(request, param="activite_principale") ) + section_activite_principale = validate_section_activite_principale( + parse_and_clean_parameter(request, param="section_activite_principale") + ) parameters = { "lat": lat, "lon": lon, "radius": radius, "activite_principale_unite_legale": activite_principale, + "section_activite_principale": section_activite_principale, } return parameters, page, per_page From 4016313efb76ec8fa8eb79a6db483fb6e77b9f97 Mon Sep 17 00:00:00 2001 From: HAEKADI Date: Thu, 26 May 2022 22:09:40 +0200 Subject: [PATCH 3/6] docs: add 'section activite principale' to swagger --- aio/aio-proxy/aio_proxy/doc/open-api.yml | 114 ++++++++++++++++++++++- 1 file changed, 111 insertions(+), 3 deletions(-) diff --git a/aio/aio-proxy/aio_proxy/doc/open-api.yml b/aio/aio-proxy/aio_proxy/doc/open-api.yml index 7c93f466..c8c21b32 100644 --- a/aio/aio-proxy/aio_proxy/doc/open-api.yml +++ b/aio/aio-proxy/aio_proxy/doc/open-api.yml @@ -59,7 +59,8 @@ paths: **Paramètres d'appel :** dénomination de l'entreprise, code postal, activité - principale de l'entreprise, entrepreneur individuel et tranche d'effectif + principale et section d'activité principale de l'entreprise, entrepreneur + individuel et tranche d'effectif salarié. @@ -83,6 +84,58 @@ paths: required: false schema: type: string + - name: section_activite_principale + in: query + description: | + Section de + l'activité principale : + + * `A` - Agriculture, sylviculture et pêche + * `B` - Industries extractives + * `C` - Industrie manufacturière + * `D` - Production et distribution d'électricité, de gaz, de vapeur et d'air conditionné + * `E` - Production et distribution d'eau ; assainissement, gestion des déchets et dépollution + * `F` - Construction + * `G` - Commerce ; réparation d'automobiles et de motocycles + * `H` - Transports et entreposage + * `I` - Hébergement et restauration + * `J` - Information et communication + * `K` - Activités financières et d'assurance + * `L` - Activités immobilières + * `M` - Activités spécialisées, scientifiques et techniques + * `N` - Activités de services administratifs et de soutien + * `O` - Administration publique + * `P` - Enseignement + * `Q` - Santé humaine et action sociale + * `R` - Arts, spectacles et activités récréatives + * `S` - Autres activités de services + * `T` - Activités des ménages en tant qu'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre + * `U` - Activités extra-territoriales + schema: + type: string + enum: + - A + - B + - C + - D + - E + - F + - G + - H + - I + - J + - K + - L + - M + - N + - O + - P + - Q + - R + - S + - T + - U + maxLength: 1 - name: is_entrepreneur_individuel in: query description: Uniquement les entreprises individuelles @@ -192,6 +245,8 @@ paths: type: string activite_principale: type: string + section_activite_principale: + type: string economie_sociale_solidaire: type: string nom_complet: @@ -236,8 +291,8 @@ paths: Vous pouvez également préciser un paramètre radius en km(défaut: 5 km). - **Paramètres d'appel :** latitude, longitude, radius et activité principale - de l'entreprise. + **Paramètres d'appel :** latitude, longitude, radius, activité principale + et section d'activité principale de l'entreprise. summary: Recherche géographique @@ -270,6 +325,57 @@ paths: required: false schema: type: string + - name: section_activite_principale + in: query + description: | + Section de + l'activité principale : + * `A` - Agriculture, sylviculture et pêche + * `B` - Industries extractives + * `C` - Industrie manufacturière + * `D` - Production et distribution d'électricité, de gaz, de vapeur et d'air conditionné + * `E` - Production et distribution d'eau ; assainissement, gestion des déchets et dépollution + * `F` - Construction + * `G` - Commerce ; réparation d'automobiles et de motocycles + * `H` - Transports et entreposage + * `I` - Hébergement et restauration + * `J` - Information et communication + * `K` - Activités financières et d'assurance + * `L` - Activités immobilières + * `M` - Activités spécialisées, scientifiques et techniques + * `N` - Activités de services administratifs et de soutien + * `O` - Administration publique + * `P` - Enseignement + * `Q` - Santé humaine et action sociale + * `R` - Arts, spectacles et activités récréatives + * `S` - Autres activités de services + * `T` - Activités des ménages en tant qu'employeurs ; activités indifférenciées des ménages en tant que producteurs de biens et services pour usage propre + * `U` - Activités extra-territoriales + schema: + type: string + enum: + - A + - B + - C + - D + - E + - F + - G + - H + - I + - J + - K + - L + - M + - N + - O + - P + - Q + - R + - S + - T + - U + maxLength: 1 - name: page in: query description: Le numéro de la page à retourner @@ -364,6 +470,8 @@ paths: type: string activite_principale: type: string + section-activite_principale: + type: string economie_sociale_solidaire: type: string nom_complet: From 9830b1331f42d0d586042d033a2a57e96cb9e610 Mon Sep 17 00:00:00 2001 From: HAEKADI Date: Thu, 26 May 2022 22:10:43 +0200 Subject: [PATCH 4/6] test: add 'section activite principale' unit tests --- .../tests/test_section_activite_principale.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py diff --git a/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py b/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py new file mode 100644 index 00000000..721b412e --- /dev/null +++ b/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py @@ -0,0 +1,22 @@ +import pytest +from aio_proxy.parsers.section_activite_principale import ( + validate_section_activite_principale, +) + + +@pytest.mark.parametrize( + "section_activite_principale, expected", + [("A", "A"), ("l", "l"), (None, None)], +) +def test_validate_section_activite_principale( + section_activite_principale: str, expected: str +): + assert validate_section_activite_principale(section_activite_principale) == expected + + +@pytest.mark.parametrize("section_activite_principale", ["Z", "68.20B"]) +def test_validate_section_activite_principale_fail( + section_activite_principale: str, +): + with pytest.raises(ValueError, match="Section d'activité principale non valide."): + validate_section_activite_principale(section_activite_principale) From 2cb874ca1c7dc4a880296458defba90093d286e6 Mon Sep 17 00:00:00 2001 From: HAEKADI Date: Thu, 26 May 2022 22:28:33 +0200 Subject: [PATCH 5/6] fix: rectify expected value in unit test --- .../aio_proxy/tests/test_section_activite_principale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py b/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py index 721b412e..c39a0364 100644 --- a/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py +++ b/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py @@ -6,7 +6,7 @@ @pytest.mark.parametrize( "section_activite_principale, expected", - [("A", "A"), ("l", "l"), (None, None)], + [("A", "A"), ("l", "L"), (None, None)], ) def test_validate_section_activite_principale( section_activite_principale: str, expected: str From 5bf268578da26d1c356df6d5931ac4879bbf2716 Mon Sep 17 00:00:00 2001 From: HAEKADI Date: Thu, 26 May 2022 22:34:32 +0200 Subject: [PATCH 6/6] test: remove unnecessary test case --- .../aio_proxy/tests/test_section_activite_principale.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py b/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py index c39a0364..94ed1d2b 100644 --- a/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py +++ b/aio/aio-proxy/aio_proxy/tests/test_section_activite_principale.py @@ -6,7 +6,7 @@ @pytest.mark.parametrize( "section_activite_principale, expected", - [("A", "A"), ("l", "L"), (None, None)], + [("A", "A"), (None, None)], ) def test_validate_section_activite_principale( section_activite_principale: str, expected: str