Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add 'section activaté principle' filter to API #35

Merged
merged 6 commits into from
May 31, 2022
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
114 changes: 111 additions & 3 deletions aio/aio-proxy/aio_proxy/doc/open-api.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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é.


Expand All @@ -83,6 +84,58 @@ paths:
required: false
schema:
type: string
- name: section_activite_principale
in: query
description: |
<a href=https://www.insee.fr/fr/information/2120875>Section de
l'activité principale :</a>

* `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
Expand Down Expand Up @@ -192,6 +245,8 @@ paths:
type: string
activite_principale:
type: string
section_activite_principale:
type: string
economie_sociale_solidaire:
type: string
nom_complet:
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -270,6 +325,57 @@ paths:
required: false
schema:
type: string
- name: section_activite_principale
in: query
description: |
<a href=https://www.insee.fr/fr/information/2120875>Section de
l'activité principale :</a>
* `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
Expand Down Expand Up @@ -364,6 +470,8 @@ paths:
type: string
activite_principale:
type: string
section-activite_principale:
type: string
economie_sociale_solidaire:
type: string
nom_complet:
Expand Down
1 change: 1 addition & 0 deletions aio/aio-proxy/aio_proxy/labels/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
23 changes: 23 additions & 0 deletions aio/aio-proxy/aio_proxy/labels/sections-codes-NAF.json
Original file line number Diff line number Diff line change
@@ -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"
}
26 changes: 26 additions & 0 deletions aio/aio-proxy/aio_proxy/parsers/section_activite_principale.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from typing import Optional

from aio_proxy.labels.helpers import sections_codes_naf


HAEKADI marked this conversation as resolved.
Show resolved Hide resolved
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
1 change: 1 addition & 0 deletions aio/aio-proxy/aio_proxy/response/format_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
),
Expand Down
11 changes: 11 additions & 0 deletions aio/aio-proxy/aio_proxy/response/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand Down Expand Up @@ -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")
)
Expand All @@ -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,
}

Expand All @@ -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
Original file line number Diff line number Diff line change
@@ -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"), (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)