Spaces:
Sleeping
Sleeping
File size: 1,979 Bytes
b411033 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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 |