From b8c0c9ea653df2818aa75bf41af32e2783b39a5a Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 23 Mar 2026 09:56:53 +0000 Subject: [PATCH] move playwright process to separate file --- backend/pashub_fetcher/handler/handler.py | 69 ++++------------------- backend/pashub_fetcher/processor.py | 0 backend/pashub_fetcher/token_getter.py | 54 ++++++++++++++++++ 3 files changed, 65 insertions(+), 58 deletions(-) delete mode 100644 backend/pashub_fetcher/processor.py create mode 100644 backend/pashub_fetcher/token_getter.py diff --git a/backend/pashub_fetcher/handler/handler.py b/backend/pashub_fetcher/handler/handler.py index a5cbe55a..11f457a6 100644 --- a/backend/pashub_fetcher/handler/handler.py +++ b/backend/pashub_fetcher/handler/handler.py @@ -1,66 +1,19 @@ -from typing import Any, Dict, Mapping - -from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError +from typing import Any, Mapping +from backend.pashub_fetcher.token_getter import get_token_from_local_storage from utils.logger import setup_logger logger = setup_logger() -def handler(event: Mapping[str, Any], context: Any) -> Dict[str, str]: - logger.info("Starting Playwright flow") +def handler(event: Mapping[str, Any], context: Any) -> None: + pas_hub_email = "random@test.com" + pas_hub_password = "my_fake_password" - email = "random@test.com" - password = "my_fake_password" - - with sync_playwright() as p: - browser = p.chromium.launch( - headless=True, - args=["--no-sandbox", "--disable-dev-shm-usage"], - ) - page = browser.new_page() - - try: - logger.info("Navigating to site...") - page.goto("https://pashub.net/", timeout=30000) - - logger.info("Filling login form...") - page.fill("#email", email) - page.fill("#password", password) - - logger.info("Submitting login...") - page.click("#btn-login") - - page.wait_for_timeout(3000) - - if "login" in page.url.lower(): - logger.error("Login failed (still on login page)") - return {"status": "error", "message": "Login failed"} - - logger.info(f"Login likely successful. URL: {page.url}") - - token = page.evaluate( - """() => { - return localStorage.getItem('token'); - }""" - ) - - if not token: - logger.error("Login succeeded but no token found") - return {"status": "error", "message": "No token found"} - - logger.info(f"Token extracted successfully: {token}") - - return {"status": "ok", "token": token} - - except PlaywrightTimeoutError as e: - logger.error(f"Timeout during login flow: {str(e)}") - return {"status": "error", "message": "Timeout during login"} - - except Exception as e: - logger.error(f"Unexpected error: {str(e)}") - return {"status": "error", "message": str(e)} - - finally: - browser.close() + try: + token: str = get_token_from_local_storage(pas_hub_email, pas_hub_password) + logger.info(f"Token extracted successfully: {token}") + except: + logger.error("Error getting auth token from Pas Hub") + raise diff --git a/backend/pashub_fetcher/processor.py b/backend/pashub_fetcher/processor.py deleted file mode 100644 index e69de29b..00000000 diff --git a/backend/pashub_fetcher/token_getter.py b/backend/pashub_fetcher/token_getter.py new file mode 100644 index 00000000..d5481dd5 --- /dev/null +++ b/backend/pashub_fetcher/token_getter.py @@ -0,0 +1,54 @@ +from playwright.sync_api import sync_playwright, TimeoutError as PlaywrightTimeoutError + +from utils.logger import setup_logger + +logger = setup_logger() + + +def get_token_from_local_storage(email: str, password: str) -> str: + logger.info("Starting Playwright flow") + + with sync_playwright() as p: + browser = p.chromium.launch( + headless=True, + args=["--no-sandbox", "--disable-dev-shm-usage"], + ) + page = browser.new_page() + + try: + logger.info("Navigating to site...") + page.goto("https://pashub.net/", timeout=30000) + + logger.info("Filling login form...") + page.fill("#email", email) + page.fill("#password", password) + + logger.info("Submitting login...") + page.click("#btn-login") + + page.wait_for_timeout(3000) + + if "login" in page.url.lower(): + raise Exception("Login failed (still on login page)") + + logger.info(f"Login likely successful. URL: {page.url}") + + token = page.evaluate( + """() => { + return localStorage.getItem('token'); + }""" + ) + + if not token: + raise Exception("Login succeeded but no token found") + + return token + + except PlaywrightTimeoutError as e: + raise Exception(f"Timeout during login flow: {str(e)}") + + except Exception as e: + raise Exception(f"Unexpected error: {str(e)}") + + finally: + browser.close()