Skip to content

[Feature] Propagate contextvars to event handlers #1816

Open
@nathanielobrown

Description

@nathanielobrown

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions