From 7131708818d1b4134d2630858640047cc198b8b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mark=20Lis=C3=A9?= Date: Wed, 6 Nov 2024 14:27:24 -0800 Subject: [PATCH] 175: Add Work Description to Anticipated EA Schedule. (#2422) Refactors some code for re-use. Exception error handling being more detailed than generic. Updated report template. Added some useful code comments. --- epictrack-api/setup.cfg | 2 +- .../reports/anticipated_schedule_report.py | 30 ++++++++++++------ epictrack-api/src/api/reports/cdog_client.py | 7 ++++ .../anticipated_schedule.docx | Bin 28904 -> 34939 bytes .../api/reports/thirty_sixty_ninety_report.py | 7 ++-- epictrack-api/src/api/utils/util.py | 8 +++++ 6 files changed, 39 insertions(+), 15 deletions(-) diff --git a/epictrack-api/setup.cfg b/epictrack-api/setup.cfg index dd22eb9f4..69a3d0279 100644 --- a/epictrack-api/setup.cfg +++ b/epictrack-api/setup.cfg @@ -71,7 +71,7 @@ notes=FIXME,XXX,TODO ignored-modules=flask_sqlalchemy,sqlalchemy,SQLAlchemy,alembic,scoped_session ignored-classes=scoped_session min-similarity-lines=15 -disable=C0301,W0511 +disable=C0301,W0511, R0917, C0411, R1710, E1101, W4904 good-names=f,id,k,v [isort] diff --git a/epictrack-api/src/api/reports/anticipated_schedule_report.py b/epictrack-api/src/api/reports/anticipated_schedule_report.py index 6c5df6acb..d4e707de6 100644 --- a/epictrack-api/src/api/reports/anticipated_schedule_report.py +++ b/epictrack-api/src/api/reports/anticipated_schedule_report.py @@ -1,7 +1,7 @@ """Classes for specific report types.""" from datetime import datetime, timedelta -from flask import jsonify +from flask import jsonify, current_app from pytz import timezone from sqlalchemy import and_, func, select from sqlalchemy.dialects.postgresql import INTERVAL @@ -28,7 +28,7 @@ from .cdog_client import CDOGClient from .report_factory import ReportFactory - +from api.utils.util import process_data # pylint:disable=not-callable @@ -48,6 +48,7 @@ def __init__(self, filters, color_intensity): "ea_act", "substitution_act", "project_description", + "report_description", "anticipated_decision_date", "additional_info", "ministry_name", @@ -66,6 +67,7 @@ def __init__(self, filters, color_intensity): def _fetch_data(self, report_date): """Fetches the relevant data for EA Anticipated Schedule Report""" + current_app.logger.info(f"Fetching data for {self.report_title} report") start_date = report_date + timedelta(days=-7) report_date = report_date.astimezone(timezone('US/Pacific')) eac_decision_by = aliased(Staff) @@ -140,6 +142,7 @@ def _fetch_data(self, report_date): EAAct.name.label("ea_act"), SubstitutionAct.name.label("substitution_act"), Project.description.label("project_description"), + Work.report_description.label("report_description"), ( Event.anticipated_date + func.cast(func.concat(Event.number_of_days, " DAYS"), INTERVAL) ).label("anticipated_decision_date"), @@ -166,23 +169,30 @@ def _fetch_data(self, report_date): def generate_report(self, report_date, return_type): """Generates a report and returns it""" + current_app.logger.info(f"Generating {self.report_title} report for {report_date}") data = self._fetch_data(report_date) data = self._format_data(data) data = self._update_staleness(data, report_date) - if return_type == "json" and data: - return {"data": data}, None - if not data: - return {}, None + + if return_type == "json" or not data: + return process_data(data, return_type) + api_payload = { "report_data": data, "report_title": self.report_title, "report_date": report_date, } template = self.generate_template() - report_client = CDOGClient() - report = report_client.generate_document( - self.report_title, jsonify(api_payload).json, template - ) + # Calls out to the common services document generation service. Make sure your envs are set properly. + try: + report_client = CDOGClient() + report = report_client.generate_document(self.report_title, jsonify(api_payload).json, template) + except EnvironmentError as e: + # Fall through to return empty response if CDOGClient fails, but log the error + current_app.logger.error(f"Error initializing CDOGClient: {e}.") + return {}, None + + current_app.logger.info(f"Generated {self.report_title} report for {report_date}") return report, f"{self.report_title}_{report_date:%Y_%m_%d}.pdf" def _get_next_pcp_query(self, start_date): diff --git a/epictrack-api/src/api/reports/cdog_client.py b/epictrack-api/src/api/reports/cdog_client.py index 1c9e40dbb..645c4f05f 100644 --- a/epictrack-api/src/api/reports/cdog_client.py +++ b/epictrack-api/src/api/reports/cdog_client.py @@ -26,6 +26,13 @@ class CDOGClient: # pylint: disable=too-few-public-methods def __init__(self) -> None: """Constructor""" + if not all([ + os.environ.get('CDOGS_API_ENDPOINT'), + os.environ.get('CDOGS_TOKEN_END_POINT'), + os.environ.get('CDOGS_CLIENT_ID'), + os.environ.get('CDOGS_CLIENT_SECRET') + ]): + raise EnvironmentError("CDOGS environment variables are not set properly.") self.api_url = os.environ.get('CDOGS_API_ENDPOINT') def _authorize(self): diff --git a/epictrack-api/src/api/reports/report_templates/anticipated_schedule.docx b/epictrack-api/src/api/reports/report_templates/anticipated_schedule.docx index 283dbcc4286b513b86bf56b32f2c27432d2b6086..91f7486b16f0c0bd479d19858404857a0f186724 100644 GIT binary patch literal 34939 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 J5Bhobe*n=@`C$M6 literal 28904 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 diff --git a/epictrack-api/src/api/reports/thirty_sixty_ninety_report.py b/epictrack-api/src/api/reports/thirty_sixty_ninety_report.py index 90b86a961..9d1fcf307 100644 --- a/epictrack-api/src/api/reports/thirty_sixty_ninety_report.py +++ b/epictrack-api/src/api/reports/thirty_sixty_ninety_report.py @@ -29,6 +29,7 @@ from api.schemas import response as res from api.utils.constants import CANADA_TIMEZONE from api.utils.enums import StalenessEnum +from api.utils.util import process_data from .report_factory import ReportFactory @@ -245,10 +246,8 @@ def generate_report( data = self._fetch_data(report_date) data = self._format_data(data) data = self._update_staleness(data, report_date) - if return_type == "json" and data: - return {"data": data}, None - if not data: - return {}, None + if return_type == "json" or not data: + return process_data(data, return_type) pdf_stream = BytesIO() stylesheet = getSampleStyleSheet() doc = BaseDocTemplate(pdf_stream, pagesize=A4) diff --git a/epictrack-api/src/api/utils/util.py b/epictrack-api/src/api/utils/util.py index 16a3f649d..88f617726 100644 --- a/epictrack-api/src/api/utils/util.py +++ b/epictrack-api/src/api/utils/util.py @@ -53,3 +53,11 @@ def generate_title(project_name, work_type_name, simple_title=''): if simple_title: parts.append(simple_title) return ' - '.join(parts) + + +def process_data(data, return_type): + """Process data based on the return type.""" + if return_type == "json" and data: + return {"data": data}, None + if not data: + return {}, None