tokencrawler/.venv/lib/python3.9/site-packages/jsonrpcserver/methods.py
2022-03-17 22:16:30 +01:00

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)