1
1
from argparse import ArgumentDefaultsHelpFormatter , ArgumentParser
2
- from dataclasses import dataclass
3
- from typing import List , Optional , Sequence
2
+ from dataclasses import dataclass , field
3
+ from typing import List , Optional , Sequence , Tuple
4
4
5
5
from taskiq .cli .common_args import LogLevel
6
6
7
7
8
+ def receiver_arg_type (string : str ) -> Tuple [str , str ]:
9
+ """
10
+ Parse cli --receiver_arg argument value.
11
+
12
+ :param string: cli argument value in format key=value.
13
+ :raises ValueError: if value not in format.
14
+ :return: (key, value) pair.
15
+ """
16
+ args = string .split ("=" , 1 )
17
+ if len (args ) != 2 :
18
+ raise ValueError (f"Invalid value: { string } " )
19
+ return args [0 ], args [1 ]
20
+
21
+
8
22
@dataclass
9
23
class WorkerArgs :
10
24
"""Taskiq worker CLI arguments."""
@@ -25,6 +39,7 @@ class WorkerArgs:
25
39
no_gitignore : bool = False
26
40
max_async_tasks : int = 100
27
41
receiver : str = "taskiq.receiver:Receiver"
42
+ receiver_arg : List [Tuple [str , str ]] = field (default_factory = list )
28
43
29
44
@classmethod
30
45
def from_cli ( # noqa: WPS213
@@ -55,6 +70,17 @@ def from_cli( # noqa: WPS213
55
70
"'module.module:variable' format."
56
71
),
57
72
)
73
+ parser .add_argument (
74
+ "--receiver_arg" ,
75
+ action = "append" ,
76
+ type = receiver_arg_type ,
77
+ default = [],
78
+ help = (
79
+ "List of args fot receiver. "
80
+ "This string must be specified in "
81
+ "`key=value` format."
82
+ ),
83
+ )
58
84
parser .add_argument (
59
85
"--tasks-pattern" ,
60
86
"-tp" ,
0 commit comments