9
9
from jsonschema import ValidationError # type: ignore
10
10
11
11
from .dispatcher import (
12
+ Context ,
12
13
add_handlers ,
13
14
config ,
14
15
create_requests ,
@@ -35,12 +36,20 @@ async def call(method: Method, *args: Any, **kwargs: Any) -> Any:
35
36
36
37
37
38
async def safe_call (
38
- request : Request , methods : Methods , * , debug : bool , serialize : Callable
39
+ request : Request , methods : Methods , * , debug : bool , extra : Any , serialize : Callable
39
40
) -> Response :
40
41
with handle_exceptions (request , debug ) as handler :
41
- result = await call (
42
- lookup (methods , request .method ), * request .args , ** request .kwargs
43
- )
42
+ if isinstance (request .params , list ):
43
+ result = await call (
44
+ lookup (methods , request .method ),
45
+ * ([Context (request = request , extra = extra )] + request .params ),
46
+ )
47
+ else :
48
+ result = await call (
49
+ lookup (methods , request .method ),
50
+ Context (request = request , extra = extra ),
51
+ ** request .params ,
52
+ )
44
53
# Ensure value returned from the method is JSON-serializable. If not,
45
54
# handle_exception will set handler.response to an ExceptionResponse
46
55
serialize (result )
@@ -54,22 +63,26 @@ async def call_requests(
54
63
requests : Union [Request , Iterable [Request ]],
55
64
methods : Methods ,
56
65
debug : bool ,
66
+ extra : Any ,
57
67
serialize : Callable ,
58
68
) -> Response :
59
69
if isinstance (requests , collections .abc .Iterable ):
60
70
responses = (
61
- safe_call (r , methods , debug = debug , serialize = serialize ) for r in requests
71
+ safe_call (r , methods , debug = debug , extra = extra , serialize = serialize )
72
+ for r in requests
62
73
)
63
74
return BatchResponse (await asyncio .gather (* responses ), serialize_func = serialize )
64
- return await safe_call (requests , methods , debug = debug , serialize = serialize )
75
+ return await safe_call (
76
+ requests , methods , debug = debug , extra = extra , serialize = serialize
77
+ )
65
78
66
79
67
80
async def dispatch_pure (
68
81
request : str ,
69
82
methods : Methods ,
70
83
* ,
71
- context : Any ,
72
84
debug : bool ,
85
+ extra : Any ,
73
86
serialize : Callable ,
74
87
deserialize : Callable ,
75
88
) -> Response :
@@ -80,9 +93,10 @@ async def dispatch_pure(
80
93
except ValidationError as exc :
81
94
return InvalidJSONRPCResponse (data = None , debug = debug )
82
95
return await call_requests (
83
- create_requests (deserialized , context = context ),
96
+ create_requests (deserialized ),
84
97
methods ,
85
98
debug = debug ,
99
+ extra = extra ,
86
100
serialize = serialize ,
87
101
)
88
102
@@ -93,8 +107,8 @@ async def dispatch(
93
107
methods : Optional [Methods ] = None ,
94
108
* ,
95
109
basic_logging : bool = False ,
96
- context : Optional [dict ] = None ,
97
110
debug : bool = False ,
111
+ extra : Optional [Any ] = None ,
98
112
trim_log_values : bool = False ,
99
113
serialize : Callable = default_serialize ,
100
114
deserialize : Callable = default_deserialize ,
@@ -110,7 +124,7 @@ async def dispatch(
110
124
request ,
111
125
methods ,
112
126
debug = debug ,
113
- context = context ,
127
+ extra = extra ,
114
128
serialize = serialize ,
115
129
deserialize = deserialize ,
116
130
)
0 commit comments