Open
Description
When using the Playwright Python library, event callbacks registered with page.on()
do not have the same contextvars as the parent code. This behavior can lead to issues when users expect shared context between the main code and event handlers.
It would be great if Playwright could propagate contextvars to event handlers by default to facilitate shared context.
Reproduction Code Sample:
This code demonstrates failure to get context var. Tested on Python 3.10, Playwright versions 1.31 and 1.29
import contextvars
from playwright.sync_api import sync_playwright
shared_var = contextvars.ContextVar("shared_var")
def on_request(request):
try:
print("Shared value in callback:", shared_var.get())
except LookupError:
print("Failed to get shared value in callback")
def main():
shared_var.set("some value")
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.on("request", on_request)
# Perform some actions and trigger the event
page.goto("https://example.com")
browser.close()
if __name__ == "__main__":
main()
Context
This came up for me because I used context managers to annotate logs but my logging of network requests in Playwright were not getting annotated.