43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
"""A method is a Python function that can be called by a JSON-RPC request.
|
|
|
|
They're held in a dict, a mapping of function names to functions.
|
|
|
|
The @method decorator adds a method to jsonrpcserver's internal global_methods dict.
|
|
Alternatively pass your own dictionary of methods to `dispatch` with the methods param.
|
|
|
|
>>> dispatch(request) # Uses the internal collection of funcs added with @method
|
|
>>> dispatch(request, methods={"ping": lambda: "pong"}) # Custom collection
|
|
|
|
Methods can take either positional or named arguments, but not both. This is a
|
|
limitation of JSON-RPC.
|
|
"""
|
|
from typing import Any, Callable, Dict, Optional, cast
|
|
|
|
from .result import Result
|
|
|
|
Method = Callable[..., Result]
|
|
Methods = Dict[str, Method]
|
|
|
|
global_methods = dict()
|
|
|
|
|
|
def method(
|
|
f: Optional[Method] = None, name: Optional[str] = None
|
|
) -> Callable[..., Any]:
|
|
"""A decorator to add a function into jsonrpcserver's internal global_methods dict.
|
|
The global_methods dict will be used by default unless a methods argument is passed
|
|
to `dispatch`.
|
|
|
|
Functions can be renamed by passing a name argument:
|
|
|
|
@method(name=bar)
|
|
def foo():
|
|
...
|
|
"""
|
|
|
|
def decorator(func: Method) -> Method:
|
|
nonlocal name
|
|
global_methods[name or func.__name__] = func
|
|
return func
|
|
|
|
return decorator(f) if callable(f) else cast(Method, decorator)
|