@@ -202,6 +202,32 @@ def promises(self) -> PromiseStore:
202
202
return self ._store .promises
203
203
204
204
205
+ class Random :
206
+ def __init__ (self , ctx : Context ) -> None :
207
+ self .ctx = ctx
208
+
209
+ def random (self ) -> LFC :
210
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).random ())
211
+
212
+ def betavariate (self , alpha : float , beta : float ) -> LFC :
213
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).betavariate (alpha , beta ))
214
+
215
+ def randrange (self , start : int , stop : int | None = None , step : int = 1 ) -> LFC :
216
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).randrange (start , stop , step ))
217
+
218
+ def randint (self , a : int , b : int ) -> LFC :
219
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).randint (a , b ))
220
+
221
+ def getrandbits (self , k : int ) -> LFC :
222
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).getrandbits (k ))
223
+
224
+ def triangular (self , low : float = 0 , high : float = 1 , mode : float | None = None ) -> LFC :
225
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).triangular (low , high , mode ))
226
+
227
+ def expovariate (self , lambd : float = 1 ) -> LFC :
228
+ return self .ctx .lfc (lambda _ : self .ctx .get_dependency ("resonate:random" , random ).expovariate (lambd ))
229
+
230
+
205
231
# Context
206
232
class Context :
207
233
def __init__ (self , id : str , info : Info , opts : Options , registry : Registry , dependencies : Dependencies ) -> None :
@@ -211,6 +237,7 @@ def __init__(self, id: str, info: Info, opts: Options, registry: Registry, depen
211
237
self ._registry = registry
212
238
self ._dependencies = dependencies
213
239
self ._counter = 0
240
+ self ._random = Random (self )
214
241
215
242
@property
216
243
def id (self ) -> str :
@@ -220,6 +247,10 @@ def id(self) -> str:
220
247
def info (self ) -> Info :
221
248
return self ._info
222
249
250
+ @property
251
+ def random (self ) -> Random :
252
+ return self ._random
253
+
223
254
@overload
224
255
def lfi [** P , R ](self , func : Callable [Concatenate [Context , P ], Generator [Any , Any , R ]], * args : P .args , ** kwargs : P .kwargs ) -> LFI : ...
225
256
@overload
@@ -285,11 +316,8 @@ def promise(self, data: Any = None, headers: dict[str, str] | None = None) -> RF
285
316
self ._counter += 1
286
317
return RFI (f"{ self .id } .{ self ._counter } " , Base (data , headers ))
287
318
288
- def random (self , a : int , b : int ) -> LFC :
289
- return self .lfc (lambda _ , a , b : random .randint (a , b ), a , b )
290
-
291
- def get_dependency (self , name : str ) -> Any :
292
- return self ._dependencies .get (name )
319
+ def get_dependency [T ](self , key : str , default : T = None ) -> Any | T :
320
+ return self ._dependencies .get (key , default )
293
321
294
322
def _lfi_func (self , f : str | Callable ) -> tuple [Callable , int , dict [int , Callable ] | None ]:
295
323
match f :
0 commit comments