data-api / api_sources /lexicon.py
AUTO-FRANCE-PARTS
feat : Add Get parcel tool
b411033
import httpx
from typing import Dict, Any
from .base import BaseAPISource
from .config import API_CONFIGS
class LexiconAPI(BaseAPISource):
"""Implémentation de l'API Lexicon pour récupérer les données de parcelles."""
def __init__(self):
config = API_CONFIGS["lexicon"]
super().__init__(
base_url=config["base_url"],
timeout=config["timeout"]
)
async def get_parcel_from_lat_lon(self, latitude: float, longitude: float) -> Dict[str, Any]:
"""
Récupère les informations de parcelle depuis l'API Lexicon.
Args:
latitude: Latitude en degrés décimaux
longitude: Longitude en degrés décimaux
Returns:
Dict contenant les données de la parcelle depuis Lexicon
Raises:
httpx.HTTPStatusError: Si la requête échoue
httpx.RequestError: Si une erreur de connexion survient
"""
url = self._build_url("/tools/parcel-identifier.json")
params = {
"latitude": latitude,
"longitude": longitude
}
async with httpx.AsyncClient(timeout=self.timeout) as client:
try:
response = await client.get(url, params=params)
response.raise_for_status()
return response.json()
except httpx.HTTPStatusError as e:
raise Exception(f"Erreur HTTP {e.response.status_code}: {e.response.text}")
except httpx.RequestError as e:
raise Exception(f"Erreur de connexion à l'API Lexicon: {str(e)}")
# Exemple : Vous pouvez ajouter d'autres méthodes spécifiques à Lexicon ici
# async def autre_methode_lexicon(self, param: str) -> Dict[str, Any]:
# """Autre méthode spécifique à l'API Lexicon."""
# url = self._build_url("/autre-endpoint")
# # ... implémentation