21
21
T = TypeVar ("T" )
22
22
23
23
24
+ def _set_retry_policy (invocation : LFI | RFI ) -> retry_policy .RetryPolicy | None :
25
+ if not isinstance (invocation .unit , Invocation ):
26
+ retry_policy = None
27
+ elif isinstance (invocation .unit .fn , str ):
28
+ retry_policy = invocation .opts .retry_policy or None
29
+ elif isgeneratorfunction (invocation .unit .fn ):
30
+ retry_policy = invocation .opts .retry_policy or never ()
31
+ else :
32
+ assert iscoroutinefunction (invocation .unit .fn ) or isfunction (invocation .unit .fn )
33
+ retry_policy = invocation .opts .retry_policy or exponential (
34
+ base_delay = 1 ,
35
+ factor = 2 ,
36
+ max_retries = - 1 ,
37
+ max_delay = 30 ,
38
+ )
39
+ return retry_policy
40
+
41
+
24
42
@final
25
43
class Record (Generic [T ]):
26
44
def __init__ (
@@ -38,24 +56,7 @@ def __init__(
38
56
self ._result : Result [T , Exception ] | None = None
39
57
self .children : list [Record [Any ]] = []
40
58
self .invocation : LFI | RFI = invocation
41
- self .retry_policy : retry_policy .RetryPolicy | None
42
- if not isinstance (invocation .unit , Invocation ):
43
- self .retry_policy = None
44
- elif isinstance (invocation .unit .fn , str ):
45
- self .retry_policy = invocation .opts .retry_policy or None
46
- elif isgeneratorfunction (invocation .unit .fn ):
47
- self .retry_policy = invocation .opts .retry_policy or never ()
48
- else :
49
- assert iscoroutinefunction (invocation .unit .fn ) or isfunction (
50
- invocation .unit .fn
51
- )
52
- self .retry_policy = invocation .opts .retry_policy or exponential (
53
- base_delay = 1 ,
54
- factor = 2 ,
55
- max_retries = - 1 ,
56
- max_delay = 30 ,
57
- )
58
-
59
+ self .retry_policy = _set_retry_policy (invocation = invocation )
59
60
self ._attempt : int = 1
60
61
self .durable_promise : DurablePromiseRecord | None = None
61
62
self ._task : TaskRecord | None = None
@@ -70,6 +71,10 @@ def __init__(
70
71
self .parent .id if self .parent else None ,
71
72
)
72
73
74
+ def overwrite_invocation (self , invocation : RFI ) -> None :
75
+ self .invocation = invocation
76
+ self .retry_policy = _set_retry_policy (invocation )
77
+
73
78
def get_coro (self ) -> ResonateCoro [T ]:
74
79
assert self ._coro
75
80
return self ._coro
0 commit comments