import http.client as httplib from ipe_fetcher.model import AreaCoordinates, Building, FAIEligibilityStatus import json import time import traceback class Liazo: def __init__(self): pass def getAreaBuildings( self, narrow_coordinates: AreaCoordinates(), existing_buildings: dict ) -> dict: nc=narrow_coordinates c = httplib.HTTPSConnection("vador.fdn.fr") api_params = "etape=gps_batiments&lat1=%f&lat2=%f&lon1=%f&lon2=%f" % (nc['swy'], nc['ney'], nc['swx'], nc['nex']) req = f"/souscription/gps-batiments.cgi?{api_params}" req = req.replace(" ", "%20") r = None try: c.request("GET", req) r = c.getresponse() except Exception: print(f"Could not call Liazo API to get Buildings, params: {api_params}") print(traceback.format_exc()) return existing_buildings if r.status < 200 or r.status >= 300: print("Erreur de serveur chez FDN.") return existing_buildings d = r.read() c.close() v = json.loads(d.decode("utf-8")) if not existing_buildings: existing_buildings = dict() buildings = existing_buildings for building in v: fdnEligStatus = FAIEligibilityStatus( isEligible=True, ftthStatus="DEPLOYE", # Pas de status donc on dit que c'est ok mais on check avec l'arcep si axione KO cote front reasonNotEligible=None, ) idImm=building.get('ref') if buildings.get(idImm): buildings[idImm]["fdnEligStatus"] = fdnEligStatus if buildings[idImm].get('found_in'): buildings[idImm]['found_in'].append("liazo") else: buildings[idImm]['found_in'] = ["liazo"] if not buildings.get(idImm): building = Building( y=building.get('lat'), x=building.get('lon'), idImm=idImm, numVoieImm="", typeVoieImm="", nomVoieImm="", codePostal="", commune="", bat_info="", found_in = ["liazo"], etat_imm_priority=4, fdnEligStatus=fdnEligStatus, aquilenetEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), othersEligStatus=FAIEligibilityStatus(isEligible=False, reasonNotEligible="", ftthStatus=""), ) buildings[idImm] = building return buildings