diff --git a/.github/workflows/unit-tests.yaml b/.github/workflows/unit-tests.yaml index 574389af..dddde3af 100644 --- a/.github/workflows/unit-tests.yaml +++ b/.github/workflows/unit-tests.yaml @@ -7,6 +7,8 @@ jobs: run-unit-tests: name: Run unit tests runs-on: ubuntu-latest + env: + CHROME_BIN_PATH: /usr/foo/chromium steps: - name: Check out code uses: actions/checkout@v6 diff --git a/process_report/invoices/pi_specific_invoice.py b/process_report/invoices/pi_specific_invoice.py index 04dfade1..c2ddf53c 100644 --- a/process_report/invoices/pi_specific_invoice.py +++ b/process_report/invoices/pi_specific_invoice.py @@ -1,5 +1,4 @@ import os -import sys from dataclasses import dataclass import subprocess import tempfile @@ -10,10 +9,10 @@ import process_report.invoices.invoice as invoice import process_report.util as util +from process_report.settings import invoice_settings TEMPLATE_DIR_PATH = "process_report/templates" -CHROME_BIN_PATH = os.environ.get("CHROME_BIN_PATH", "/usr/bin/chromium") logger = logging.getLogger(__name__) @@ -134,17 +133,12 @@ def _create_html_invoice(temp_fd): temp_fd.flush() def _create_pdf_invoice(temp_fd_name): - if not os.path.exists(CHROME_BIN_PATH): - sys.exit( - f"Chrome binary does not exist at {CHROME_BIN_PATH}. Make sure the env var CHROME_BIN_PATH is set correctly and that Google Chrome is installed" - ) - invoice_pdf_path = ( f"{self.name}/{pi_instituition}_{pi}_{self.invoice_month}.pdf" ) subprocess.run( [ - CHROME_BIN_PATH, + invoice_settings.chrome_bin_path, "--headless", "--no-sandbox", f"--print-to-pdf={invoice_pdf_path}", diff --git a/process_report/process_report.py b/process_report/process_report.py index d0cd4679..98ac8aa3 100644 --- a/process_report/process_report.py +++ b/process_report/process_report.py @@ -50,7 +50,7 @@ def validate_required_env_vars(required_env_vars): def main(): """Remove non-billable PIs and projects""" - required_env_vars = [] + required_env_vars = ["CHROME_BIN_PATH"] if not invoice_settings.coldfront_api_filepath: required_env_vars.extend(["KEYCLOAK_CLIENT_ID", "KEYCLOAK_CLIENT_SECRET"]) validate_required_env_vars(required_env_vars) diff --git a/process_report/settings.py b/process_report/settings.py index be9f5ffa..742bcdfb 100644 --- a/process_report/settings.py +++ b/process_report/settings.py @@ -18,6 +18,8 @@ class Settings(BaseSettings): fetch_from_s3: bool = True upload_to_s3: bool = False + chrome_bin_path: str | None = None + # S3 Files pi_remote_filepath: str = "PIs/PI.csv" alias_remote_filepath: str = "PIs/alias.csv" diff --git a/process_report/tests/unit/invoices/test_pi_specific_invoice.py b/process_report/tests/unit/invoices/test_pi_specific_invoice.py index a161ef4d..9f8eead7 100644 --- a/process_report/tests/unit/invoices/test_pi_specific_invoice.py +++ b/process_report/tests/unit/invoices/test_pi_specific_invoice.py @@ -3,7 +3,6 @@ import pandas from process_report.tests import util as test_utils -from process_report.invoices.pi_specific_invoice import CHROME_BIN_PATH class TestPISpecificInvoice(TestCase): @@ -155,7 +154,7 @@ def test_export_pi(self, mock_subprocess_run, mock_path_exists, mock_filter_cols for i, pi_pdf_path in enumerate([pi_pdf_1, pi_pdf_2]): chrome_arglist, _ = mock_subprocess_run.call_args_list[i] answer_arglist = [ - CHROME_BIN_PATH, + "/usr/foo/chromium", # Defined in unit-tests.yaml "--headless", "--no-sandbox", f"--print-to-pdf={pi_pdf_path}",