diff --git a/playwright/README.md b/playwright/README.md index 2e506a6..6bdb4bd 100644 --- a/playwright/README.md +++ b/playwright/README.md @@ -7,29 +7,19 @@ playwright install --with-deps """ def Page(): def sync(func): - if not hasattr(sync, 'call'): - sync.call = __import__('queue').Queue() - def server(): - while sync.call.get(): - func, args, kwargs = sync.obj - sync.obj = func(*args, **kwargs) - sync.call.task_done() - __import__('asyncio').set_event_loop_policy(None) - __import__('threading').Thread(target=server).start() - @__import__('functools').wraps(func) - def wrapper(*args, **kwargs): - sync.obj = func, args, kwargs - sync.call.put(True); sync.call.join() - return sync.obj + import asyncio, threading, queue, functools; asyncio.set_event_loop_policy(None) + def server(): + while sync.q.get(): f, a, kw = sync.obj; sync.obj = f(*a, **kw); sync.q.task_done() + if not hasattr(sync, 'q'): sync.q = queue.Queue(); threading.Thread(target=server).start() + @functools.wraps(func) + def wrapper(*a, **kw): sync.obj = func, a, kw; sync.q.put(True); sync.q.join(); return sync.obj return wrapper @sync def Page(): from playwright.sync_api import sync_playwright - browser = sync_playwright().start().firefox.launch() - (context := browser.new_context()).set_default_timeout(0) + (context := sync_playwright().start().firefox.launch().new_context()).set_default_timeout(0) for attr in dir(page := context.new_page()): - if attr[0] != '_' and callable(method := getattr(page, attr)): - setattr(page, attr, sync(method)) + if attr[0] != '_' and callable(method := getattr(page, attr)): setattr(page, attr, sync(method)) page._repr_png_ = page.screenshot return page return Page()