Skip to content

Consider adding context manager support for use with e.g. rx() #1138

Description

@jdegenstein

Is your feature request related to a problem? Please describe.

I recently came across this library and really liked the rx() example shown in README.md. I do not like having to invoke e.g. val1.rx.value to query and set the value of this node. I thought perhaps an (optional extra) context manager could be used to help separate defining each node / graph to reduce the amount of boilerplate needed when these values would be used.

Describe the solution you'd like

Here is an example showing what I am talking about here (naming TBD, not adapted to the existing param ecosystem).

from param import rx
from xxx import BuildParameters

with BuildParameters() as p:
    p.r = rx(1.5)
    
    # Inside the block, p.r is the rx node, so this creates a reactive link
    p.diameter = p.r * 2

# --- OUTSIDE THE BLOCK ---
# We can update it purely (without .rx.value)
p.r = 2.0

# The graph updated silently, and we can read the pure result
print(f"New Diameter: {p.diameter}")
# Output: New Diameter: 4.0

Additional context

I have a working implementation of this, not sharing yet as I wanted to gauge interest in the overall idea first.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions