Add netwo API #8

Merged
johan.le.baut merged 13 commits from netwo into master 2024-05-07 20:01:27 +02:00
2 changed files with 27 additions and 8 deletions
Showing only changes of commit 1d6a42ef68 - Show all commits

View file

@ -22,6 +22,7 @@ class Config(TypedDict):
arcep_ipe_path: str arcep_ipe_path: str
arcep_ipe_db_name: str arcep_ipe_db_name: str
netwo_api_key: str netwo_api_key: str
netwo_aquilenet_fixed_recurring_price: float
def parseConfig() -> Config: def parseConfig() -> Config:
@ -35,6 +36,9 @@ def parseConfig() -> Config:
"arcep_ipe_path": cfg.get("DB", "arcep_ipe_path"), "arcep_ipe_path": cfg.get("DB", "arcep_ipe_path"),
"arcep_ipe_db_name": cfg.get("DB", "arcep_ipe_db_name"), "arcep_ipe_db_name": cfg.get("DB", "arcep_ipe_db_name"),
"netwo_api_key": cfg.get("NETWO", "api_key"), "netwo_api_key": cfg.get("NETWO", "api_key"),
"netwo_aquilenet_fixed_recurring_price": float(
cfg.get("NETWO", "aquilenet_fixed_recurring_price") or 0.00
),
} }
@ -44,7 +48,9 @@ cfg: Config = parseConfig()
axione = Axione(cfg.get("axione_ipe_path"), cfg.get("axione_ipe_db_name")) 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")) arcep = Arcep(cfg.get("arcep_ipe_path"), cfg.get("arcep_ipe_db_name"))
liazo = Liazo() liazo = Liazo()
netwo = Netwo(cfg.get("netwo_api_key")) netwo = Netwo(
cfg.get("netwo_api_key"), cfg.get("netwo_aquilenet_fixed_recurring_price")
)
elig_api_routes = EligibilityApiRoutes(app, axione, netwo) elig_api_routes = EligibilityApiRoutes(app, axione, netwo)
elig_api_routes.add_routes() elig_api_routes.add_routes()
elig_api_exceptions = FlaskExceptions(app) elig_api_exceptions = FlaskExceptions(app)

View file

@ -9,6 +9,7 @@ from eligibility_api.elig_api_exceptions import NetwoApiErrorException
from ipe_fetcher import FAIEligibilityStatus from ipe_fetcher import FAIEligibilityStatus
NETWO_DEPLOYED_STATUS = "Deployed" NETWO_DEPLOYED_STATUS = "Deployed"
TVA_INCREASE_COEFF = 1.2
class NetwooEligibility(TypedDict): class NetwooEligibility(TypedDict):
@ -25,12 +26,13 @@ class NetwooEligibility(TypedDict):
class Netwo: class Netwo:
def __init__(self, netwo_api_key: str): def __init__(self, netwo_api_key: str, aquilenet_fixed_recurring_price: float):
self.netwo_api_headers = { self.netwo_api_headers = {
"x-actor-slug": "aquilenet", "x-actor-slug": "aquilenet",
"x-api-key": netwo_api_key, "x-api-key": netwo_api_key,
"Accept": "application/json", "Accept": "application/json",
} }
self.aquilenet_fixed_recurring_price = aquilenet_fixed_recurring_price
def get_netwo_imb_coordinates(self, ref_imb: str) -> dict: def get_netwo_imb_coordinates(self, ref_imb: str) -> dict:
""" """
@ -45,15 +47,14 @@ class Netwo:
headers=self.netwo_api_headers, headers=self.netwo_api_headers,
) )
status_code = response.status_code status_code = response.status_code
if status_code != 200: if status_code != 200 or not response.json():
raise NetwoApiErrorException( raise NetwoApiErrorException(
f"Could not GET netwo imb ref {ref_imb}", status_code f"Could not GET netwo imb ref {ref_imb}", status_code
) )
imb_payload = response.json() imb_payload = response.json()
return imb_payload return imb_payload
@staticmethod def _filter_netwo_raw_elig_results(self, raw_elig: dict, search_ftto: bool) -> list:
def _filter_netwo_raw_elig_results(raw_elig: dict, search_ftto: bool) -> list:
filtered_elig = [] filtered_elig = []
inf_search = ["ftth"] inf_search = ["ftth"]
if search_ftto: if search_ftto:
@ -72,6 +73,14 @@ class Netwo:
access_fee = offer.get("access_fee") or 0.00 access_fee = offer.get("access_fee") or 0.00
recurring_price = offer.get("recurring_price") or 0.00 recurring_price = offer.get("recurring_price") or 0.00
commitment_duration = offer.get("commitment_duration") or 0 commitment_duration = offer.get("commitment_duration") or 0
access_fee_ttc = round(
access_fee * TVA_INCREASE_COEFF,
)
total_recurring_price_ttc = round(
recurring_price * TVA_INCREASE_COEFF
+ self.aquilenet_fixed_recurring_price,
2,
)
filtered_elig.append( filtered_elig.append(
{ {
"entity_id": entity_id, "entity_id": entity_id,
@ -81,15 +90,19 @@ class Netwo:
"infrastructure_type": inf_type, "infrastructure_type": inf_type,
"debit": debit, "debit": debit,
"access_fee": access_fee, "access_fee": access_fee,
"access_fee_ttc": access_fee_ttc,
"recurring_price": recurring_price, "recurring_price": recurring_price,
"total_recurring_price_ttc": total_recurring_price_ttc,
"commitment_duration": commitment_duration, "commitment_duration": commitment_duration,
"per_month_price_one_year": round( "per_month_price_one_year_ttc": round(
access_fee / 12 + recurring_price, 2 access_fee_ttc / 12 + total_recurring_price_ttc, 2
), ),
} }
) )
sort_elig = sorted( sort_elig = sorted(
filtered_elig, key=lambda x: x["per_month_price_one_year"], reverse=False filtered_elig,
key=lambda x: x["per_month_price_one_year_ttc"],
reverse=False,
) )
return sort_elig return sort_elig