diff --git a/backend/pashub_fetcher/cotality_client.py b/backend/pashub_fetcher/cotality_client.py index e32ec7eb..db7b8bd4 100644 --- a/backend/pashub_fetcher/cotality_client.py +++ b/backend/pashub_fetcher/cotality_client.py @@ -13,6 +13,10 @@ from utils.logger import setup_logger logger = setup_logger() +class UnauthorizedError(Exception): + pass + + class CotalityClient: def __init__(self, token: str): @@ -93,6 +97,10 @@ class CotalityClient: url = f"{self.base}/jobs/{job_id}/evidence" r = self.session.get(url) + + if r.status_code == 401: + raise UnauthorizedError("Token expired or invalid") + r.raise_for_status() results = r.json().get("results", []) @@ -118,6 +126,10 @@ class CotalityClient: def _download_file(self, url: str, file_name: str) -> None: r = requests.get(url) + + if r.status_code == 401: + raise UnauthorizedError() + r.raise_for_status() with open(file_name, "wb") as f: diff --git a/backend/pashub_fetcher/handler/handler.py b/backend/pashub_fetcher/handler/handler.py index 2a39db60..47e45714 100644 --- a/backend/pashub_fetcher/handler/handler.py +++ b/backend/pashub_fetcher/handler/handler.py @@ -1,7 +1,7 @@ import time from typing import Any, List, Mapping -from backend.pashub_fetcher.cotality_client import CotalityClient +from backend.pashub_fetcher.cotality_client import CotalityClient, UnauthorizedError from backend.pashub_fetcher.token_getter import get_token_from_local_storage from utils.logger import setup_logger @@ -29,7 +29,19 @@ def handler(event: Mapping[str, Any], context: Any) -> None: saved_files: List[str] = [] for job_id in jobs: - saved_files.extend(client.get_core_envidence_files_by_job_id(job_id)) + try: + saved_files.extend(client.get_core_envidence_files_by_job_id(job_id)) + + except UnauthorizedError: + logger.warning("Token expired — refreshing") + + token = get_token_from_local_storage(pas_hub_email, pas_hub_password) + + client = CotalityClient(token=token) + + # retry once + saved_files.extend(client.get_core_envidence_files_by_job_id(job_id)) + time.sleep(10) # Simulate manual download print(f"saved {len(saved_files)} files")