zrb 0.15.0__py3-none-any.whl → 0.16.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zrb/__init__.py +3 -0
- zrb/__main__.py +0 -3
- zrb/action/runner.py +6 -2
- zrb/advertisement.py +4 -0
- zrb/builtin/devtool/install/_input.py +2 -4
- zrb/builtin/devtool/install/helix/resource/config.toml +2 -1
- zrb/builtin/process/pid/get_by_name.py +1 -1
- zrb/builtin/project/create/template/project.sh +1 -0
- zrb/builtin/schedule.py +16 -10
- zrb/builtin/watch_changes.py +17 -14
- zrb/config/config.py +21 -14
- zrb/helper/accessories/color.py +5 -2
- zrb/helper/accessories/icon.py +4 -0
- zrb/helper/accessories/name.py +4 -0
- zrb/helper/accessories/untyped_color.py +10 -0
- zrb/helper/advertisement.py +3 -0
- zrb/helper/callable.py +5 -0
- zrb/helper/cli.py +2 -0
- zrb/helper/codemod/add_argument_to_function.py +6 -0
- zrb/helper/codemod/add_argument_to_function_call.py +6 -0
- zrb/helper/codemod/add_assert_resource.py +4 -0
- zrb/helper/codemod/add_function_call.py +4 -0
- zrb/helper/codemod/add_import_module.py +4 -0
- zrb/helper/codemod/add_key_value_to_dict.py +6 -0
- zrb/helper/codemod/add_property_to_class.py +6 -0
- zrb/helper/codemod/add_upstream_to_task.py +4 -0
- zrb/helper/codemod/append_code_to_function.py +6 -0
- zrb/helper/codemod/format_code.py +4 -0
- zrb/helper/default_env.py +2 -0
- zrb/helper/docker_compose/fetch_external_env.py +6 -0
- zrb/helper/docker_compose/file.py +4 -0
- zrb/helper/docstring.py +5 -0
- zrb/helper/env_map/fetch.py +4 -0
- zrb/helper/file/copy_tree.py +3 -0
- zrb/helper/file/match.py +4 -0
- zrb/helper/file/text.py +4 -0
- zrb/helper/git/detect_changes.py +4 -0
- zrb/helper/loader/load_module.py +2 -0
- zrb/helper/log.py +1 -1
- zrb/helper/map/conversion.py +4 -0
- zrb/helper/python_task.py +3 -0
- zrb/helper/render_data.py +4 -0
- zrb/helper/string/conversion.py +13 -36
- zrb/helper/string/jinja.py +4 -0
- zrb/helper/string/modification.py +4 -0
- zrb/helper/string/parse_replacement.py +4 -0
- zrb/helper/string/untyped_conversion.py +49 -0
- zrb/helper/task.py +4 -0
- zrb/helper/typecheck.py +6 -7
- zrb/helper/typing.py +32 -12
- zrb/helper/util.py +4 -0
- zrb/runner.py +3 -0
- zrb/task/any_task.py +4 -0
- zrb/task/any_task_event_handler.py +4 -0
- zrb/task/base_remote_cmd_task.py +4 -0
- zrb/task/base_task/base_task.py +1 -1
- zrb/task/checker.py +4 -0
- zrb/task/cmd_task.py +4 -1
- zrb/task/decorator.py +4 -0
- zrb/task/docker_compose_task.py +4 -0
- zrb/task/flow_task.py +4 -0
- zrb/task/http_checker.py +4 -0
- zrb/task/notifier.py +4 -0
- zrb/task/parallel.py +4 -0
- zrb/task/path_checker.py +4 -0
- zrb/task/path_watcher.py +4 -0
- zrb/task/port_checker.py +4 -0
- zrb/task/recurring_task.py +5 -0
- zrb/task/remote_cmd_task.py +4 -0
- zrb/task/resource_maker.py +4 -0
- zrb/task/rsync_task.py +4 -0
- zrb/task/server.py +192 -0
- zrb/task/task.py +4 -0
- zrb/task/time_watcher.py +4 -0
- zrb/task/wiki_task.py +4 -0
- zrb/task_env/constant.py +5 -0
- zrb/task_env/env.py +4 -0
- zrb/task_env/env_file.py +4 -0
- zrb/task_group/group.py +4 -0
- zrb/task_input/any_input.py +4 -0
- zrb/task_input/base_input.py +4 -0
- zrb/task_input/bool_input.py +4 -0
- zrb/task_input/choice_input.py +4 -0
- zrb/task_input/constant.py +5 -0
- zrb/task_input/float_input.py +4 -0
- zrb/task_input/int_input.py +4 -0
- zrb/task_input/password_input.py +4 -0
- zrb/task_input/str_input.py +4 -0
- zrb/task_input/task_input.py +4 -0
- {zrb-0.15.0.dist-info → zrb-0.16.0.dist-info}/METADATA +1 -1
- {zrb-0.15.0.dist-info → zrb-0.16.0.dist-info}/RECORD +94 -91
- {zrb-0.15.0.dist-info → zrb-0.16.0.dist-info}/LICENSE +0 -0
- {zrb-0.15.0.dist-info → zrb-0.16.0.dist-info}/WHEEL +0 -0
- {zrb-0.15.0.dist-info → zrb-0.16.0.dist-info}/entry_points.txt +0 -0
zrb/task/server.py
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
import asyncio
|
2
|
+
|
3
|
+
from zrb.helper.accessories.color import colored
|
4
|
+
from zrb.helper.accessories.name import get_random_name
|
5
|
+
from zrb.helper.log import logger
|
6
|
+
from zrb.helper.typecheck import typechecked
|
7
|
+
from zrb.helper.typing import Any, Callable, Iterable, List, Mapping, Optional, Union
|
8
|
+
from zrb.helper.util import to_kebab_case
|
9
|
+
from zrb.task.any_task import AnyTask
|
10
|
+
from zrb.task.any_task_event_handler import (
|
11
|
+
OnFailed,
|
12
|
+
OnReady,
|
13
|
+
OnRetry,
|
14
|
+
OnSkipped,
|
15
|
+
OnStarted,
|
16
|
+
OnTriggered,
|
17
|
+
OnWaiting,
|
18
|
+
)
|
19
|
+
from zrb.task.base_task.base_task import BaseTask
|
20
|
+
from zrb.task.flow_task import FlowTask
|
21
|
+
from zrb.task_env.env import Env
|
22
|
+
from zrb.task_env.env_file import EnvFile
|
23
|
+
from zrb.task_group.group import Group
|
24
|
+
from zrb.task_input.any_input import AnyInput
|
25
|
+
|
26
|
+
logger.debug(colored("Loading zrb.task.server", attrs=["dark"]))
|
27
|
+
|
28
|
+
|
29
|
+
@typechecked
|
30
|
+
class Controller:
|
31
|
+
def __init__(
|
32
|
+
self,
|
33
|
+
trigger: Union[AnyTask, List[AnyTask]],
|
34
|
+
action: Union[AnyTask, List[AnyTask]],
|
35
|
+
name: Optional[str] = None,
|
36
|
+
):
|
37
|
+
self._name = get_random_name() if name is None else name
|
38
|
+
self._triggers = [trigger] if isinstance(trigger, AnyTask) else trigger
|
39
|
+
self._actions = [action] if isinstance(action, AnyTask) else action
|
40
|
+
self._args: List[Any] = []
|
41
|
+
self._kwargs: Mapping[str, Any] = {}
|
42
|
+
self._inputs: List[AnyInput] = []
|
43
|
+
self._envs: List[Env] = []
|
44
|
+
self._env_files: List[EnvFile] = []
|
45
|
+
|
46
|
+
def set_args(self, args: List[Any]):
|
47
|
+
self._args = args
|
48
|
+
|
49
|
+
def set_kwargs(self, kwargs: Mapping[str, Any]):
|
50
|
+
self._kwargs = kwargs
|
51
|
+
|
52
|
+
def set_inputs(self, inputs: List[AnyInput]):
|
53
|
+
self._inputs = inputs
|
54
|
+
|
55
|
+
def set_envs(self, envs: List[Env]):
|
56
|
+
self._envs = envs
|
57
|
+
|
58
|
+
def set_env_files(self, env_files: List[EnvFile]):
|
59
|
+
self._env_files = env_files
|
60
|
+
|
61
|
+
def get_sub_env_files(self) -> Iterable[EnvFile]:
|
62
|
+
env_files = []
|
63
|
+
for trigger in self._triggers:
|
64
|
+
env_files += trigger.copy()._get_env_files()
|
65
|
+
for action in self._actions:
|
66
|
+
env_files += action.copy()._get_env_files()
|
67
|
+
return env_files
|
68
|
+
|
69
|
+
def get_sub_envs(self) -> Iterable[Env]:
|
70
|
+
envs = []
|
71
|
+
for trigger in self._triggers:
|
72
|
+
envs += trigger.copy()._get_envs()
|
73
|
+
for action in self._actions:
|
74
|
+
envs += action.copy()._get_envs()
|
75
|
+
return envs
|
76
|
+
|
77
|
+
def get_sub_inputs(self) -> Iterable[AnyInput]:
|
78
|
+
inputs = []
|
79
|
+
for trigger in self._triggers:
|
80
|
+
inputs += trigger.copy()._get_combined_inputs()
|
81
|
+
for action in self._actions:
|
82
|
+
inputs += action.copy()._get_combined_inputs()
|
83
|
+
return inputs
|
84
|
+
|
85
|
+
def to_function(self) -> Callable[..., Any]:
|
86
|
+
task = self._get_task()
|
87
|
+
|
88
|
+
async def fn() -> Any:
|
89
|
+
task_fn = task.to_function(is_async=True)
|
90
|
+
return await task_fn(*self._args, **self._kwargs)
|
91
|
+
|
92
|
+
return fn
|
93
|
+
|
94
|
+
def _get_task(self) -> AnyTask:
|
95
|
+
kebab_name = to_kebab_case(self._name)
|
96
|
+
actions = self._actions
|
97
|
+
actions.insert(0, self._get_reschedule_task())
|
98
|
+
task: AnyTask = FlowTask(
|
99
|
+
name=f"{kebab_name}-flow",
|
100
|
+
inputs=self._inputs,
|
101
|
+
envs=self._envs,
|
102
|
+
env_files=self._env_files,
|
103
|
+
steps=[self._triggers, actions],
|
104
|
+
)
|
105
|
+
return task
|
106
|
+
|
107
|
+
def _get_reschedule_task(self) -> AnyTask:
|
108
|
+
kebab_name = to_kebab_case(self._name)
|
109
|
+
|
110
|
+
async def on_ready(task: AnyTask):
|
111
|
+
task = self._get_task()
|
112
|
+
fn = task.to_function(is_async=True)
|
113
|
+
await fn()
|
114
|
+
|
115
|
+
return BaseTask(
|
116
|
+
name=f"{kebab_name}-reschedule",
|
117
|
+
on_ready=on_ready,
|
118
|
+
)
|
119
|
+
|
120
|
+
|
121
|
+
@typechecked
|
122
|
+
class Server(BaseTask):
|
123
|
+
|
124
|
+
def __init__(
|
125
|
+
self,
|
126
|
+
name: str,
|
127
|
+
controllers: List[Controller],
|
128
|
+
group: Optional[Group] = None,
|
129
|
+
inputs: Iterable[AnyInput] = [],
|
130
|
+
envs: Iterable[Env] = [],
|
131
|
+
env_files: Iterable[EnvFile] = [],
|
132
|
+
icon: Optional[str] = None,
|
133
|
+
color: Optional[str] = None,
|
134
|
+
description: str = "",
|
135
|
+
upstreams: Iterable[AnyTask] = [],
|
136
|
+
fallbacks: Iterable[AnyTask] = [],
|
137
|
+
on_triggered: Optional[OnTriggered] = None,
|
138
|
+
on_waiting: Optional[OnWaiting] = None,
|
139
|
+
on_skipped: Optional[OnSkipped] = None,
|
140
|
+
on_started: Optional[OnStarted] = None,
|
141
|
+
on_ready: Optional[OnReady] = None,
|
142
|
+
on_retry: Optional[OnRetry] = None,
|
143
|
+
on_failed: Optional[OnFailed] = None,
|
144
|
+
checkers: Iterable[AnyTask] = [],
|
145
|
+
checking_interval: float = 0,
|
146
|
+
retry: int = 0,
|
147
|
+
retry_interval: float = 1,
|
148
|
+
should_execute: Union[bool, str, Callable[..., bool]] = True,
|
149
|
+
return_upstream_result: bool = False,
|
150
|
+
):
|
151
|
+
inputs, envs, env_files = list(inputs), list(envs), list(env_files)
|
152
|
+
for controller in controllers:
|
153
|
+
inputs += controller.get_sub_inputs()
|
154
|
+
envs += controller.get_sub_envs()
|
155
|
+
env_files += controller.get_sub_env_files()
|
156
|
+
BaseTask.__init__(
|
157
|
+
self,
|
158
|
+
name=name,
|
159
|
+
group=group,
|
160
|
+
inputs=inputs,
|
161
|
+
envs=envs,
|
162
|
+
env_files=env_files,
|
163
|
+
icon=icon,
|
164
|
+
color=color,
|
165
|
+
description=description,
|
166
|
+
upstreams=upstreams,
|
167
|
+
fallbacks=fallbacks,
|
168
|
+
on_triggered=on_triggered,
|
169
|
+
on_waiting=on_waiting,
|
170
|
+
on_skipped=on_skipped,
|
171
|
+
on_started=on_started,
|
172
|
+
on_ready=on_ready,
|
173
|
+
on_retry=on_retry,
|
174
|
+
on_failed=on_failed,
|
175
|
+
checkers=checkers,
|
176
|
+
checking_interval=checking_interval,
|
177
|
+
retry=retry,
|
178
|
+
retry_interval=retry_interval,
|
179
|
+
should_execute=should_execute,
|
180
|
+
return_upstream_result=return_upstream_result,
|
181
|
+
)
|
182
|
+
self._controllers = controllers
|
183
|
+
|
184
|
+
async def run(self, *args: Any, **kwargs: Any):
|
185
|
+
for controller in self._controllers:
|
186
|
+
controller.set_envs(self._get_envs())
|
187
|
+
controller.set_env_files(self._get_env_files())
|
188
|
+
controller.set_inputs(self._get_inputs())
|
189
|
+
controller.set_args(args)
|
190
|
+
controller.set_kwargs(kwargs)
|
191
|
+
functions = [controller.to_function() for controller in self._controllers]
|
192
|
+
await asyncio.gather(*[fn() for fn in functions])
|
zrb/task/task.py
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.task.base_task.base_task import BaseTask
|
3
5
|
|
6
|
+
logger.debug(colored("Loading zrb.task.task", attrs=["dark"]))
|
7
|
+
|
4
8
|
|
5
9
|
@typechecked
|
6
10
|
class Task(BaseTask):
|
zrb/task/time_watcher.py
CHANGED
@@ -2,6 +2,8 @@ import datetime
|
|
2
2
|
|
3
3
|
import croniter
|
4
4
|
|
5
|
+
from zrb.helper.accessories.color import colored
|
6
|
+
from zrb.helper.log import logger
|
5
7
|
from zrb.helper.typecheck import typechecked
|
6
8
|
from zrb.helper.typing import (
|
7
9
|
Any,
|
@@ -28,6 +30,8 @@ from zrb.task_env.env_file import EnvFile
|
|
28
30
|
from zrb.task_group.group import Group
|
29
31
|
from zrb.task_input.any_input import AnyInput
|
30
32
|
|
33
|
+
logger.debug(colored("Loading zrb.task.time_watcher", attrs=["dark"]))
|
34
|
+
|
31
35
|
TTimeWatcher = TypeVar("TTimeWatcher", bound="TimeWatcher")
|
32
36
|
|
33
37
|
|
zrb/task/wiki_task.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
import os
|
2
2
|
|
3
3
|
from zrb.action.runner import Runner
|
4
|
+
from zrb.helper.accessories.color import colored
|
5
|
+
from zrb.helper.log import logger
|
4
6
|
from zrb.helper.task import show_lines
|
5
7
|
from zrb.helper.typecheck import typechecked
|
6
8
|
from zrb.helper.typing import Any, Callable, Iterable, List, Mapping, Optional, Union
|
@@ -21,6 +23,8 @@ from zrb.task_env.env_file import EnvFile
|
|
21
23
|
from zrb.task_group.group import Group
|
22
24
|
from zrb.task_input.any_input import AnyInput
|
23
25
|
|
26
|
+
logger.debug(colored("Loading zrb.task.wiki_task", attrs=["dark"]))
|
27
|
+
|
24
28
|
|
25
29
|
@typechecked
|
26
30
|
def create_wiki_tasks(
|
zrb/task_env/constant.py
CHANGED
zrb/task_env/env.py
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
import os
|
2
2
|
|
3
|
+
from zrb.helper.accessories.color import colored
|
4
|
+
from zrb.helper.log import logger
|
3
5
|
from zrb.helper.string.modification import double_quote
|
4
6
|
from zrb.helper.typecheck import typechecked
|
5
7
|
from zrb.helper.typing import JinjaTemplate, Optional
|
6
8
|
from zrb.task_env.constant import RESERVED_ENV_NAMES
|
7
9
|
|
10
|
+
logger.debug(colored("Loading zrb.task_env.env", attrs=["dark"]))
|
11
|
+
|
8
12
|
# flake8: noqa E501
|
9
13
|
|
10
14
|
|
zrb/task_env/env_file.py
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
from dotenv import dotenv_values
|
2
2
|
|
3
|
+
from zrb.helper.accessories.color import colored
|
4
|
+
from zrb.helper.log import logger
|
3
5
|
from zrb.helper.string.modification import double_quote
|
4
6
|
from zrb.helper.typecheck import typechecked
|
5
7
|
from zrb.helper.typing import List, Optional
|
6
8
|
from zrb.task_env.constant import RESERVED_ENV_NAMES
|
7
9
|
from zrb.task_env.env import Env
|
8
10
|
|
11
|
+
logger.debug(colored("Loading zrb.task_env.env_file", attrs=["dark"]))
|
12
|
+
|
9
13
|
# flake8: noqa E501
|
10
14
|
|
11
15
|
|
zrb/task_group/group.py
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.string.conversion import to_cli_name
|
2
4
|
from zrb.helper.string.modification import double_quote
|
3
5
|
from zrb.helper.typecheck import typechecked
|
4
6
|
from zrb.helper.typing import List, Optional, TypeVar
|
5
7
|
from zrb.task.any_task import AnyTask
|
6
8
|
|
9
|
+
logger.debug(colored("Loading zrb.task_group.group", attrs=["dark"]))
|
10
|
+
|
7
11
|
# flake8: noqa E501
|
8
12
|
TGroup = TypeVar("TGroup", bound="Group")
|
9
13
|
|
zrb/task_input/any_input.py
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
from abc import ABC, abstractmethod
|
2
2
|
|
3
|
+
from zrb.helper.accessories.color import colored
|
4
|
+
from zrb.helper.log import logger
|
3
5
|
from zrb.helper.typing import Any, List, Mapping
|
4
6
|
|
7
|
+
logger.debug(colored("Loading zrb.task_input.any_input", attrs=["dark"]))
|
8
|
+
|
5
9
|
# flake8: noqa E501
|
6
10
|
|
7
11
|
|
zrb/task_input/base_input.py
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
from zrb.config.config import show_prompt
|
2
|
+
from zrb.helper.accessories.color import colored
|
3
|
+
from zrb.helper.log import logger
|
2
4
|
from zrb.helper.typecheck import typechecked
|
3
5
|
from zrb.helper.typing import Any, List, Mapping, Optional, Union
|
4
6
|
from zrb.task_input.any_input import AnyInput
|
5
7
|
from zrb.task_input.constant import RESERVED_INPUT_NAMES
|
6
8
|
|
9
|
+
logger.debug(colored("Loading zrb.task_input.base_input", attrs=["dark"]))
|
10
|
+
|
7
11
|
# flake8: noqa E501
|
8
12
|
|
9
13
|
|
zrb/task_input/bool_input.py
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Any, Optional, Union
|
3
5
|
from zrb.task_input.base_input import BaseInput
|
4
6
|
|
7
|
+
logger.debug(colored("Loading zrb.task_input.bool_input", attrs=["dark"]))
|
8
|
+
|
5
9
|
# flake8: noqa E501
|
6
10
|
|
7
11
|
|
zrb/task_input/choice_input.py
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
import click
|
2
2
|
|
3
|
+
from zrb.helper.accessories.color import colored
|
4
|
+
from zrb.helper.log import logger
|
3
5
|
from zrb.helper.typecheck import typechecked
|
4
6
|
from zrb.helper.typing import Any, Iterable, Optional, Union
|
5
7
|
from zrb.task_input.base_input import BaseInput
|
6
8
|
|
9
|
+
logger.debug(colored("Loading zrb.task_input.choice_input", attrs=["dark"]))
|
10
|
+
|
7
11
|
# flake8: noqa E501
|
8
12
|
|
9
13
|
|
zrb/task_input/constant.py
CHANGED
zrb/task_input/float_input.py
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Any, Optional, Union
|
3
5
|
from zrb.task_input.base_input import BaseInput
|
4
6
|
|
7
|
+
logger.debug(colored("Loading zrb.task_input.float_input", attrs=["dark"]))
|
8
|
+
|
5
9
|
# flake8: noqa E501
|
6
10
|
|
7
11
|
|
zrb/task_input/int_input.py
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Any, Optional, Union
|
3
5
|
from zrb.task_input.base_input import BaseInput
|
4
6
|
|
7
|
+
logger.debug(colored("Loading zrb.task_input.int_input", attrs=["dark"]))
|
8
|
+
|
5
9
|
# flake8: noqa E501
|
6
10
|
|
7
11
|
|
zrb/task_input/password_input.py
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Any, Optional, Union
|
3
5
|
from zrb.task_input.base_input import BaseInput
|
4
6
|
|
7
|
+
logger.debug(colored("Loading zrb.task_input.password_input", attrs=["dark"]))
|
8
|
+
|
5
9
|
# flake8: noqa E501
|
6
10
|
|
7
11
|
|
zrb/task_input/str_input.py
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
from zrb.helper.accessories.color import colored
|
2
|
+
from zrb.helper.log import logger
|
1
3
|
from zrb.helper.typecheck import typechecked
|
2
4
|
from zrb.helper.typing import Any, Optional, Union
|
3
5
|
from zrb.task_input.base_input import BaseInput
|
4
6
|
|
7
|
+
logger.debug(colored("Loading zrb.task_input.str_input", attrs=["dark"]))
|
8
|
+
|
5
9
|
# flake8: noqa E501
|
6
10
|
|
7
11
|
|
zrb/task_input/task_input.py
CHANGED