2022-02-22 12:48:50 +01:00
|
|
|
import configparser
|
|
|
|
import os
|
2022-11-30 19:29:27 +01:00
|
|
|
from typing import TypedDict
|
|
|
|
|
|
|
|
from flask import Flask, request, render_template, redirect
|
|
|
|
|
2022-11-16 16:10:30 +01:00
|
|
|
from eligibility_api.elig_api_exceptions import FlaskExceptions
|
|
|
|
from eligibility_api.elig_api_routes import EligibilityApiRoutes
|
2022-11-30 19:29:27 +01:00
|
|
|
from ipe_fetcher import Liazo, Axione, Arcep, AreaCoordinates
|
2023-02-28 22:31:35 +01:00
|
|
|
from coordinates import adapt_coordinates_to_max_area, check_coordinates_args
|
2022-11-16 16:10:30 +01:00
|
|
|
|
2023-01-11 15:35:12 +01:00
|
|
|
LIAZO_MAX_X_INTERVAL = 0.0022
|
|
|
|
LIAZO_MAX_Y_INTERVAL = 0.0011
|
|
|
|
LIAZO_MAX_AREA = LIAZO_MAX_X_INTERVAL * LIAZO_MAX_Y_INTERVAL
|
2022-11-16 16:10:30 +01:00
|
|
|
|
2023-02-28 22:31:35 +01:00
|
|
|
|
2022-02-22 12:48:50 +01:00
|
|
|
class Config(TypedDict):
|
2022-03-23 22:54:04 +01:00
|
|
|
axione_ipe_path: str
|
2022-04-12 23:17:40 +02:00
|
|
|
axione_ipe_db_name: str
|
|
|
|
arcep_ipe_path: str
|
|
|
|
arcep_ipe_db_name: str
|
2022-03-23 22:54:04 +01:00
|
|
|
|
2022-02-22 12:48:50 +01:00
|
|
|
|
|
|
|
def parseConfig() -> Config:
|
2022-03-23 22:54:04 +01:00
|
|
|
cfg_path = os.environ.get("CONFIG", "/etc/ftth-ipe-map/conf.ini")
|
|
|
|
cfg = configparser.ConfigParser()
|
|
|
|
with open(cfg_path, "r") as f:
|
|
|
|
cfg.read_file(f)
|
2022-04-12 20:39:33 +02:00
|
|
|
return {
|
|
|
|
"axione_ipe_path": cfg.get("DB", "axione_ipe_path"),
|
2022-04-12 23:17:40 +02:00
|
|
|
"axione_ipe_db_name": cfg.get("DB", "axione_ipe_db_name"),
|
|
|
|
"arcep_ipe_path": cfg.get("DB", "arcep_ipe_path"),
|
|
|
|
"arcep_ipe_db_name": cfg.get("DB", "arcep_ipe_db_name"),
|
2023-02-28 22:31:35 +01:00
|
|
|
}
|
2022-03-23 22:54:04 +01:00
|
|
|
|
2022-02-22 12:48:50 +01:00
|
|
|
|
2022-02-21 15:28:19 +01:00
|
|
|
app = Flask(__name__)
|
2022-03-23 22:54:04 +01:00
|
|
|
cfg: Config = parseConfig()
|
|
|
|
|
2022-04-12 23:17:40 +02:00
|
|
|
axione = Axione(cfg.get("axione_ipe_path"), cfg.get("axione_ipe_db_name"))
|
|
|
|
arcep = Arcep(cfg.get("arcep_ipe_path"), cfg.get("arcep_ipe_db_name"))
|
2022-03-23 22:54:04 +01:00
|
|
|
liazo = Liazo()
|
2022-11-16 16:10:30 +01:00
|
|
|
elig_api_routes = EligibilityApiRoutes(app, axione)
|
|
|
|
elig_api_routes.add_routes()
|
|
|
|
elig_api_exceptions = FlaskExceptions(app)
|
|
|
|
elig_api_exceptions.add_exceptions()
|
2022-02-21 15:28:19 +01:00
|
|
|
|
2023-02-28 22:31:35 +01:00
|
|
|
|
2022-02-22 12:48:50 +01:00
|
|
|
@app.route("/", methods=["GET"])
|
2022-02-21 15:28:19 +01:00
|
|
|
def getMap():
|
|
|
|
return render_template("map.html")
|
2022-02-21 17:21:21 +01:00
|
|
|
|
2022-03-23 22:54:04 +01:00
|
|
|
|
2022-02-22 12:48:50 +01:00
|
|
|
@app.route("/eligdata", methods=["GET"])
|
2022-02-21 17:21:21 +01:00
|
|
|
def getEligData():
|
2023-02-28 22:31:35 +01:00
|
|
|
toto = 1
|
2022-02-21 17:21:21 +01:00
|
|
|
args = request.args
|
2022-02-22 12:48:50 +01:00
|
|
|
valid_args = True
|
|
|
|
processed_args = {}
|
2023-01-11 15:35:12 +01:00
|
|
|
try:
|
|
|
|
processed_args = check_coordinates_args(args)
|
|
|
|
except ValueError:
|
|
|
|
valid_args = False
|
2022-10-14 13:56:31 +02:00
|
|
|
|
2023-01-11 15:35:12 +01:00
|
|
|
if valid_args:
|
2023-02-28 22:31:35 +01:00
|
|
|
coordinates = adapt_coordinates_to_max_area(processed_args, LIAZO_MAX_AREA)
|
2022-10-14 13:56:31 +02:00
|
|
|
|
2022-03-23 22:54:04 +01:00
|
|
|
buildings = dict()
|
|
|
|
try:
|
2023-02-28 22:31:35 +01:00
|
|
|
buildings = arcep.get_area_buildings(coordinates, buildings)
|
|
|
|
buildings = axione.get_area_buildings(coordinates, buildings)
|
2022-03-23 22:54:04 +01:00
|
|
|
except ValueError as err:
|
|
|
|
print("Could not get Axione data for this area:", err)
|
|
|
|
|
2023-02-28 22:31:35 +01:00
|
|
|
buildings = liazo.get_area_buildings(coordinates, buildings)
|
2022-03-23 22:54:04 +01:00
|
|
|
|
2023-01-11 15:35:12 +01:00
|
|
|
return {"buildings": list(buildings.values())}
|
2022-02-21 17:21:21 +01:00
|
|
|
else:
|
2022-02-22 12:48:50 +01:00
|
|
|
return "Invalid bounding box coordinates", 400
|
2022-04-13 11:04:48 +02:00
|
|
|
|
2023-01-11 15:35:12 +01:00
|
|
|
|
|
|
|
@app.route("/eligdata/bounds", methods=["GET"])
|
|
|
|
def getEligDataBounds():
|
|
|
|
args = request.args
|
|
|
|
try:
|
|
|
|
processed_args = check_coordinates_args(args)
|
2023-02-28 22:31:35 +01:00
|
|
|
return {"bounds": adapt_coordinates_to_max_area(processed_args, LIAZO_MAX_AREA)}
|
2023-01-11 15:35:12 +01:00
|
|
|
except ValueError:
|
|
|
|
return "Invalid bounding box coordinates", 400
|
|
|
|
|
|
|
|
|
2022-04-13 11:04:48 +02:00
|
|
|
@app.route("/eligtest/ftth", methods=["GET"])
|
|
|
|
def testFtth():
|
|
|
|
args = request.args
|
2023-02-28 22:31:35 +01:00
|
|
|
idImm = args["idImm"]
|
|
|
|
codePostal = args["codePostal"]
|
|
|
|
axioneOk = args["axione"]
|
|
|
|
liazoOk = args["liazo"]
|
2022-04-13 11:04:48 +02:00
|
|
|
pto_url = f"https://tools.aquilenet.fr/cgi-bin/recherchepto.cgi?refimmeuble={idImm}&cp={codePostal}&axione={axioneOk}&liazo={liazoOk}"
|
|
|
|
return redirect(pto_url)
|