From 0f5d40bb703603509925b6b00216c357dfd958da Mon Sep 17 00:00:00 2001 From: Yomguithereal Date: Fri, 27 Oct 2023 09:42:39 +0200 Subject: [PATCH] Moving browser util back to correct place --- minet/browser/utils.py | 43 ++++++++++++++++++++++++++++++++++++++++- minet/facebook/utils.py | 42 ---------------------------------------- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/minet/browser/utils.py b/minet/browser/utils.py index 068d7c67e9..8b3a81b878 100644 --- a/minet/browser/utils.py +++ b/minet/browser/utils.py @@ -1,10 +1,13 @@ -from typing import Union +from typing import Union, Callable, Awaitable +import asyncio from tempfile import gettempdir from os.path import expanduser, join from playwright.async_api import ( Error as PlaywrightError, TimeoutError as PlaywrightTimeoutError, + Page, + Response, ) from minet.exceptions import ( @@ -75,3 +78,41 @@ def get_browsers_path() -> str: def get_temp_persistent_context_path() -> str: return join(gettempdir(), "minet-browser-temporary-persistent-context") + + +async def try_expect_response( + page: Page, + action: Callable[[Page], Awaitable[None]], + response_predicate: Callable[[Response], bool], +) -> Response: + selected_response = None + event = asyncio.Event() + + def release() -> None: + page.remove_listener("response", listener) + event.set() + + def listener(response: Response) -> None: + nonlocal selected_response + + if not response_predicate(response): + return + + selected_response = response + + release() + + async def guarded_action() -> None: + try: + await action(page) + except Exception: + release() + raise + + page.on("response", listener) + + await asyncio.gather(guarded_action(), event.wait()) + + assert selected_response is not None + + return selected_response diff --git a/minet/facebook/utils.py b/minet/facebook/utils.py index 186c218f9d..2acecbc0cb 100644 --- a/minet/facebook/utils.py +++ b/minet/facebook/utils.py @@ -4,11 +4,7 @@ # # Miscellaneous helpers used by the minet.facebook namespace. # -from typing import Callable, Awaitable - -import asyncio from http.cookies import SimpleCookie -from playwright.async_api import Page, Response from minet.cookies import coerce_cookie_for_url_from_browser from minet.facebook.constants import FACEBOOK_URL @@ -36,41 +32,3 @@ def grab_facebook_cookie(source): return None return fix_cookie(cookie) - - -async def try_expect_response( - page: Page, - action: Callable[[Page], Awaitable[None]], - response_predicate: Callable[[Response], bool], -) -> Response: - selected_response = None - event = asyncio.Event() - - def release() -> None: - page.remove_listener("response", listener) - event.set() - - def listener(response: Response) -> None: - nonlocal selected_response - - if not response_predicate(response): - return - - selected_response = response - - release() - - async def guarded_action() -> None: - try: - await action(page) - except Exception: - release() - raise - - page.on("response", listener) - - await asyncio.gather(guarded_action(), event.wait()) - - assert selected_response is not None - - return selected_response