Undefined Values
If you need to write a method that only uses a parameter if that parameter is present in the request to the method. You can write something like this:
from openrpc import RPCServer
rpc = RPCServer()
@rpc.method()
async def update(a: str, b: str | None = None) -> None:
... # Update a.
if b is not None:
... # Update b.
Given a request with the params: {"b": "coffee"}, only param b is provided so
only b will be updated. But there's a problem, what if None is a valid value? Given
the request params: {"b": null}, b won't be updated to null, nothing will happen.
In order to distinguish between a value of null and the parameter not being provided
at all, the type of that parameter can union Undefined. If a param type unions
Undefined, the framework will pass Undefined to the method on call for each param
that was not present in the request.
from openrpc import RPCServer, Undefined
rpc = RPCServer()
@rpc.method()
async def update_values(a: str | Undefined, b: str | None | Undefined) -> None
if a is not Undefined:
... # Update a.
if b is not Undefined:
... # Update b.
With this method a request with params {"b": null} will leave a unaffected and
update b with a value of None.