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