From 9becd89960d052374fd892697bbdd56d034f47e5 Mon Sep 17 00:00:00 2001 From: FrantiĊĦek Zatloukal Date: Apr 08 2021 09:53:40 +0000 Subject: Improve blockerbugs api Ref: https://pagure.io/fedora-qa/landingpage/issue/6#comment-723940 --- diff --git a/oraculum/controllers/landing_page.py b/oraculum/controllers/landing_page.py index 196657d..91f3a3f 100644 --- a/oraculum/controllers/landing_page.py +++ b/oraculum/controllers/landing_page.py @@ -29,8 +29,13 @@ from oraculum.utils import blockerbugs, fedocal, meetbot, schedule def api_v1_landing_page(): releases = CACHE.get("fedora_releases") + try: + blockerbugs_data = blockerbugs.get_blockerbugs() + except ValueError: + # TODO: Change this to the oraculum-wide exception signaling refresh failed in the future + return None return { - 'blockerbugs': blockerbugs.get_blockerbugs(), + 'blockerbugs': blockerbugs_data, 'meetings': fedocal.get_qa_meetings(), 'last_qa_meeting': meetbot.get_last_qa_meeting(), 'schedule': schedule.get_schedule(), diff --git a/oraculum/utils/blockerbugs.py b/oraculum/utils/blockerbugs.py index ac66cbd..b7aa3ec 100644 --- a/oraculum/utils/blockerbugs.py +++ b/oraculum/utils/blockerbugs.py @@ -29,58 +29,75 @@ from oraculum.utils.dashboard_helpers import get_json BLOCKERBUGS_URL = urllib.parse.urljoin(app.config["BLOCKERBUGS_URL"], "api/v0/milestones/%d/%s/bugs") def get_blockerbugs(): - data = { - "beta_blockers": "NaN", - "beta_blockers_proposed": "NaN", - "beta_fe": "NaN", - "beta_fe_proposed": "NaN", - "final_blockers": "NaN", - "final_blockers_proposed": "NaN", - "final_fe": "NaN", - "final_fe_proposed": "NaN" - } releases = CACHE.get("fedora_releases") release = releases["branched"] or releases["rawhide"] + data = { + # TODO: This is a legacy structure that is going to be removed + "beta_blockers": 0, + "beta_blockers_proposed": 0, + "beta_fe": 0, + "beta_fe_proposed": 0, + "final_blockers": 0, + "final_blockers_proposed": 0, + "final_fe": 0, + "final_fe_proposed": 0, + # This is the new structure + "beta": { + "blockers": 0, + "blockers_proposed": 0, + "fe": 0, + "fe_proposed": 0 + }, + "final": { + "blockers": 0, + "blockers_proposed": 0, + "fe": 0, + "fe_proposed": 0 + }, + "release": "Fedora %s" % release + } + resp_beta = get_json(BLOCKERBUGS_URL % (release, "beta")) resp_final = get_json(BLOCKERBUGS_URL % (release, "final")) - beta_blockers, beta_fe, final_blockers, final_fe = (0, 0, 0, 0) - beta_blockers_prop, beta_fe_prop, final_blockers_prop, final_fe_prop = (0, 0, 0, 0) + if not resp_beta or not resp_final or "error" in resp_beta or "error" in resp_final: + # raise ValueError that we'll catch in the caller and rather not overwrite data we already have with nothing + raise ValueError for bug in resp_beta: if not (bug["active"]): continue if "accepted_blocker" in bug["type"]: - beta_blockers += 1 + data["beta"]["blockers"] += 1 if "proposed_blocker" in bug["type"]: - beta_blockers_prop += 1 + data["beta"]["blockers_proposed"] += 1 if "accepted_fe" in bug["type"]: - beta_fe += 1 + data["beta"]["fe"] += 1 if "proposed_fe" in bug["type"]: - beta_fe_prop += 1 + data["beta"]["fe_proposed"] += 1 for bug in resp_final: if not (bug["active"]): continue if "accepted_blocker" in bug["type"]: - final_blockers += 1 + data["final"]["blockers"] += 1 if "proposed_blocker" in bug["type"]: - final_blockers_prop += 1 + data["final"]["blockers_proposed"] += 1 if "accepted_fe" in bug["type"]: - final_fe += 1 + data["final"]["fe"] += 1 if "proposed_fe" in bug["type"]: - final_fe_prop += 1 + data["final"]["fe_proposed"] += 1 - data = { - "beta_blockers": beta_blockers, - "beta_blockers_proposed": beta_blockers_prop, - "beta_fe": beta_fe, - "beta_fe_proposed": beta_fe_prop, - "final_blockers": final_blockers, - "final_blockers_proposed": final_blockers_prop, - "final_fe": final_fe, - "final_fe_proposed": final_fe_prop - } + # TODO: This is going to be removed! + data["beta_blockers"] = data["beta"]["blockers"] + data["beta_blockers_proposed"] = data["beta"]["blockers_proposed"] + data["beta_fe"] = data["beta"]["fe"] + data["beta_fe_proposed"] = data["beta"]["fe_proposed"] + + data["final_blockers"] = data["final"]["blockers"] + data["final_blockers_proposed"] = data["final"]["blockers_proposed"] + data["final_fe"] = data["final"]["fe"] + data["final_fe_proposed"] = data["final"]["fe_proposed"] return data