diff --git a/backend/pashub_fetcher/pashub_service.py b/backend/pashub_fetcher/pashub_service.py index 316902f4..8e0c48a0 100644 --- a/backend/pashub_fetcher/pashub_service.py +++ b/backend/pashub_fetcher/pashub_service.py @@ -1,7 +1,10 @@ +import base64 import os from datetime import datetime, timezone from typing import List, NamedTuple, Optional, cast +import requests + from backend.app.db.connection import db_session from backend.app.db.models.uploaded_file import ( FileSourceEnum, @@ -20,6 +23,7 @@ from datatypes.epc.domain.epc_property_data import EpcPropertyData from utils.logger import setup_logger from utils.s3 import upload_file_to_s3 from utils.sharepoint.domna_sharepoint_client import DomnaSharepointClient +from utils.sharepoint.sharepoint_client import SharePointClient logger = setup_logger() @@ -146,12 +150,34 @@ class PashubService: f"Failed to parse site notes {record.file_path}", exc_info=True ) + def _resolve_sharepoint_sharing_link(self, sharing_url: str) -> str: + encoded = base64.urlsafe_b64encode(sharing_url.encode()).rstrip(b"=").decode() + share_id = f"u!{encoded}" + + sp = SharePointClient( + tenant_id=os.getenv("SHAREPOINT_TENANT_ID"), + client_id=os.getenv("SHAREPOINT_CLIENT_ID"), + client_secret=os.getenv("SHAREPOINT_CLIENT_SECRET"), + site_id=self._sharepoint_client.sharepoint_drive.value, + ) + + r = requests.get( + f"https://graph.microsoft.com/v1.0/shares/{share_id}/driveItem", + params={"$select": "name,parentReference"}, + headers=sp.headers, + ) + r.raise_for_status() + data = r.json() + parent_path = data["parentReference"]["path"].split("root:/", 1)[1] + return f"{parent_path}/{data['name']}" + def _upload_to_sharepoint( self, sharepoint_link: str, job_files: List[str], ) -> None: - assessment_path = f"{sharepoint_link}/{SharepointSubfolders.ASSESSMENT.value}" + resolved_path = self._resolve_sharepoint_sharing_link(sharepoint_link) + assessment_path = f"{resolved_path}/2. RA Coordinator Info" for file_path in job_files: filename = file_path.split("/")[-1] diff --git a/backend/pashub_fetcher/token_getter.py b/backend/pashub_fetcher/token_getter.py index 2e2d1440..8cfdc0c4 100644 --- a/backend/pashub_fetcher/token_getter.py +++ b/backend/pashub_fetcher/token_getter.py @@ -17,10 +17,12 @@ def get_token_from_local_storage( browser = p.chromium.launch( headless=True, + env={"DISPLAY": ""}, args=[ "--no-sandbox", "--disable-dev-shm-usage", "--disable-gpu", + "--disable-vulkan", "--single-process", "--no-zygote", ], diff --git a/backend/pashub_fetcher/trigger_lambda_from_file.py b/backend/pashub_fetcher/trigger_lambda_from_file.py index fb9d1cbf..cb5b0043 100644 --- a/backend/pashub_fetcher/trigger_lambda_from_file.py +++ b/backend/pashub_fetcher/trigger_lambda_from_file.py @@ -10,17 +10,16 @@ from backend.pashub_fetcher.pashub_to_ara_trigger_request import ( ) from backend.pashub_fetcher.handler.handler import handler - if __name__ == "__main__": BASE_DIR = os.path.dirname(os.path.dirname(__file__)) filepath: str = os.path.join( BASE_DIR, "pashub_fetcher", - "The_Guinness_Partnership_AtkinsR_alis_Coordination_Design_Board_1774881298.xlsx", + "NCHA_SHDF_Wave_3_Main_Operation_Board_PASHUB RAs.xlsx", ) wb = load_workbook(filepath, data_only=True) - ws = wb["filtered_2"] + ws = wb["filtered"] HEADER_ROW = 3 @@ -30,18 +29,27 @@ if __name__ == "__main__": if value: headers[value.strip()] = col - name_col = headers["Name"] - link_col = headers["PasHub Link"] - hubspot_deal_id_col = headers["HubSpot ID"] + name_col = headers.get("Name") + link_col = headers.get("PasHub Link") + hubspot_deal_id_col = headers.get("HubSpot ID") + sharepoint_link_col = headers.get("Sharepoint") trigger_requests: List[PashubToAraTriggerRequest] = [] for row in range(HEADER_ROW + 1, ws.max_row + 1): - name = ws.cell(row=row, column=name_col).value - link = ws.cell(row=row, column=link_col).value - hubspot_deal_id = ws.cell(row=row, column=hubspot_deal_id_col).value - - if not name or not link or not hubspot_deal_id: + name = ws.cell(row=row, column=name_col).value if name_col else None + link = ws.cell(row=row, column=link_col).value if link_col else None + hubspot_deal_id = ( + ws.cell(row=row, column=hubspot_deal_id_col).value + if hubspot_deal_id_col + else None + ) + sharepoint_link = ( + ws.cell(row=row, column=sharepoint_link_col).value + if sharepoint_link_col + else None + ) + if not name or not link: continue match = re.search(r"/jobs/([0-9a-fA-F\-]+)/", str(link)) @@ -50,13 +58,18 @@ if __name__ == "__main__": trigger_requests.append( PashubToAraTriggerRequest( - pashub_link=str(link), hubspot_deal_id=str(hubspot_deal_id) + pashub_link=str(link), + hubspot_deal_id=str(hubspot_deal_id), + sharepoint_link=str(sharepoint_link), ) ) # ---- Build fake SQS event ---- event: Dict[str, Any] = { - "Records": [{"body": json.dumps(req.model_dump())} for req in trigger_requests] + "Records": [ + {"body": json.dumps(req.model_dump()), "messageId": str(i)} + for i, req in enumerate(trigger_requests) + ] } context = None