zrb 0.1.0a0__py3-none-any.whl → 0.2.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.
@@ -1,5 +1,5 @@
1
1
  from zrb.helper.typing import (
2
- Any, Callable, Iterable, Mapping, Optional, Union
2
+ Any, Callable, Iterable, List, Mapping, Optional, Union
3
3
  )
4
4
  from zrb.helper.typecheck import typechecked
5
5
  from zrb.helper.accessories.name import get_random_name
@@ -17,14 +17,40 @@ import asyncio
17
17
  import copy
18
18
 
19
19
 
20
+ class RunConfig():
21
+ def __init__(
22
+ self,
23
+ fn: Callable[..., Any],
24
+ args: List[Any],
25
+ kwargs: Mapping[Any, Any],
26
+ execution_id: str
27
+ ):
28
+ self.fn = fn
29
+ self.args = args
30
+ self.kwargs = kwargs
31
+ self.execution_id = execution_id
32
+
33
+ async def run(self):
34
+ return await self.fn(*self.args, **self.kwargs)
35
+
36
+
20
37
  @typechecked
21
38
  class RecurringTask(BaseTask):
39
+ '''
40
+ A class representing a recurring task that is triggered based on
41
+ specified conditions.
42
+
43
+ Examples:
44
+
45
+ >>> from zrb import RecurringTask
46
+ '''
22
47
 
23
48
  def __init__(
24
49
  self,
25
50
  name: str,
26
51
  task: AnyTask,
27
52
  triggers: Iterable[AnyTask] = [],
53
+ single_execution: bool = False,
28
54
  group: Optional[Group] = None,
29
55
  inputs: Iterable[AnyInput] = [],
30
56
  envs: Iterable[Env] = [],
@@ -47,9 +73,10 @@ class RecurringTask(BaseTask):
47
73
  should_execute: Union[bool, str, Callable[..., bool]] = True,
48
74
  return_upstream_result: bool = False
49
75
  ):
50
- inputs = list(inputs) + task._get_combined_inputs()
51
- envs = list(envs) + task._get_envs()
52
- env_files = list(env_files) + task._get_env_files()
76
+ self._task: AnyTask = task.copy()
77
+ inputs = list(inputs) + self._task._get_combined_inputs()
78
+ envs = list(envs) + self._task._get_envs()
79
+ env_files = list(env_files) + self._task._get_env_files()
53
80
  BaseTask.__init__(
54
81
  self,
55
82
  name=name,
@@ -75,8 +102,11 @@ class RecurringTask(BaseTask):
75
102
  should_execute=should_execute,
76
103
  return_upstream_result=return_upstream_result,
77
104
  )
78
- self._task = task
79
- self._triggers = triggers
105
+ self._triggers: List[AnyTask] = [
106
+ trigger.copy() for trigger in triggers
107
+ ]
108
+ self._run_configs: List[RunConfig] = []
109
+ self._single_execution = single_execution
80
110
 
81
111
  async def _set_keyval(self, kwargs: Mapping[str, Any], env_prefix: str):
82
112
  await super()._set_keyval(kwargs=kwargs, env_prefix=env_prefix)
@@ -94,6 +124,12 @@ class RecurringTask(BaseTask):
94
124
  await asyncio.gather(*trigger_coroutines)
95
125
 
96
126
  async def run(self, *args: Any, **kwargs: Any):
127
+ await asyncio.gather(
128
+ asyncio.create_task(self.__check_trigger(*args, **kwargs)),
129
+ asyncio.create_task(self.__run_from_queue())
130
+ )
131
+
132
+ async def __check_trigger(self, *args: Any, **kwargs: Any):
97
133
  task_kwargs = {
98
134
  key: kwargs[key]
99
135
  for key in kwargs if key not in ['_task']
@@ -135,13 +171,31 @@ class RecurringTask(BaseTask):
135
171
  fn = task_copy.to_function(
136
172
  is_async=True, raise_error=False, show_done_info=False
137
173
  )
138
- self.print_out_dark('Executing the task')
139
- asyncio.create_task(
140
- self.__run_and_play_bell(fn, *args, **task_kwargs)
174
+ self.print_out_dark(f'Add execution to the queue: {execution_id}')
175
+ self._run_configs.append(
176
+ RunConfig(
177
+ fn=fn,
178
+ args=args,
179
+ kwargs=task_kwargs,
180
+ execution_id=execution_id
181
+ )
141
182
  )
142
183
 
143
- async def __run_and_play_bell(
144
- self, fn: Callable[..., Any], *args: Any, **kwargs: Any
145
- ):
146
- await fn(*args, **kwargs)
147
- self._play_bell()
184
+ async def __run_from_queue(self):
185
+ while True:
186
+ if len(self._run_configs) == 0:
187
+ await asyncio.sleep(0.1)
188
+ continue
189
+ if self._single_execution:
190
+ # Drain the queue, leave only the latest task
191
+ while len(self._run_configs) > 1:
192
+ run_config = self._run_configs.pop(0)
193
+ self.print_out_dark(f'Skipping {run_config.execution_id}')
194
+ self.clear_xcom(execution_id=run_config.execution_id)
195
+ # Run task
196
+ run_config = self._run_configs.pop(0)
197
+ self.print_out_dark(f'Executing {run_config.execution_id}')
198
+ self.print_out_dark(f'{len(self._run_configs)} tasks left')
199
+ await run_config.run()
200
+ self.clear_xcom(execution_id=run_config.execution_id)
201
+ self._play_bell()
zrb/task/task.py CHANGED
@@ -5,6 +5,6 @@ from zrb.helper.typecheck import typechecked
5
5
  @typechecked
6
6
  class Task(BaseTask):
7
7
  '''
8
- Alias for BaseTask
8
+ Alias for BaseTask.
9
9
  '''
10
10
  pass
zrb/task/time_watcher.py CHANGED
@@ -20,6 +20,12 @@ TTimeWatcher = TypeVar('TTimeWatcher', bound='TimeWatcher')
20
20
 
21
21
  @typechecked
22
22
  class TimeWatcher(Checker):
23
+ '''
24
+ TimeWatcher will wait for any changes specified on path.
25
+
26
+ Once the changes detected, TimeWatcher will be completed
27
+ and <task-name>.scheduled-time xcom will be set.
28
+ '''
23
29
 
24
30
  def __init__(
25
31
  self,
@@ -92,6 +98,7 @@ class TimeWatcher(Checker):
92
98
  self._rendered_schedule, slightly_before_check_time
93
99
  )
94
100
  self._scheduled_time = cron.get_next(datetime.datetime)
101
+ self.set_task_xcom(key='scheduled-time', value=self._scheduled_time)
95
102
  return await super().run(*args, **kwargs)
96
103
 
97
104
  async def inspect(self, *args: Any, **kwargs: Any) -> bool:
zrb/task_group/group.py CHANGED
@@ -19,7 +19,7 @@ class Group():
19
19
 
20
20
  Attributes:
21
21
  name (str): The name of the group.
22
- description (Optional[str]): An optional description of the group.
22
+ description (str): The description of the group.
23
23
  parent (Optional[TGroup]): The parent group of the current group, if any.
24
24
 
25
25
  Examples:
@@ -31,7 +31,7 @@ class Group():
31
31
  def __init__(
32
32
  self,
33
33
  name: str,
34
- description: Optional[str] = None,
34
+ description: str = '',
35
35
  parent: Optional[TGroup] = None
36
36
  ):
37
37
  self.__name = name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 0.1.0a0
3
+ Version: 0.2.0
4
4
  Summary: A Framework to Enhance Your Workflow
5
5
  Author-email: Go Frendi Gunawan <gofrendiasgard@gmail.com>
6
6
  Requires-Python: >=3.10.0
@@ -21,13 +21,13 @@ Requires-Dist: setuptools ~= 68.0.0
21
21
  Requires-Dist: autopep8 ~= 2.0.2
22
22
  Requires-Dist: croniter ~= 2.0.1
23
23
  Requires-Dist: flake8 ~= 6.0.0 ; extra == "dev"
24
- Requires-Dist: pytest ~= 7.4.0 ; extra == "test"
25
- Requires-Dist: pytest-cov ~= 4.1.0 ; extra == "test"
26
- Requires-Dist: pytest-asyncio ~= 0.21.0 ; extra == "test"
24
+ Requires-Dist: pytest ~= 7.4.0 ; extra == "dev"
25
+ Requires-Dist: pytest-cov ~= 4.1.0 ; extra == "dev"
26
+ Requires-Dist: pytest-asyncio ~= 0.21.0 ; extra == "dev"
27
+ Requires-Dist: flameprof ~= 0.4 ; extra == "dev"
27
28
  Project-URL: Bug Tracker, https://github.com/state-alchemists/zrb/issues
28
29
  Project-URL: Homepage, https://github.com/state-alchemists/zrb
29
30
  Provides-Extra: dev
30
- Provides-Extra: test
31
31
 
32
32
  ![](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb/android-chrome-192x192.png)
33
33
 
@@ -312,3 +312,23 @@ Help Red Skull to click the donation button:
312
312
 
313
313
  ![Madou Ring Zaruba on Kouga's Hand](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/madou-ring-zaruba.jpg)
314
314
 
315
+ # 🙇 Credits
316
+
317
+ We are thankful for the following libraries and services. They accelerate Zrb development processes and make things more fun.
318
+
319
+ - Libraries
320
+ - [Beartype](https://pypi.org/project/beartype/): Catch invalid typing earlier during runtime.
321
+ - [Click](https://pypi.org/project/click/): Creating a beautiful CLI interface.
322
+ - [Termcolor](https://pypi.org/project/termcolor/): Make the terminal interface more colorful.
323
+ - [Jinja](https://pypi.org/project/Jinja2): A robust templating engine.
324
+ - [Ruamel.yaml](https://pypi.org/project/ruamel.yaml/): Parse YAML effortlessly.
325
+ - [Jsons](https://pypi.org.project/jsons/): Parse JSON. This package should be part of the standard library.
326
+ - [Libcst](https://pypi.org/project/libcst/): Turn Python code into a Concrete Syntax Tree.
327
+ - [Croniter](https://pypi.org/project/croniter/): Parse cron pattern.
328
+ - [Flit](https://pypi.org/project/flit), [Twine](https://pypi.org/project/twine/), and many more. See the complete list of Zrb's requirements.txt
329
+ - Services
330
+ - [asciiflow.com](https://asciiflow.com/): Creates beautiful ASCII-based diagrams.
331
+ - [emojipedia.org](https://emojipedia.org/): Find emoji.
332
+ - [emoji.aranja.com](https://emoji.aranja.com/): Turns emoji into images
333
+ - [favicon.io](https://favicon.io/): Turns pictures and texts (including emoji) into favicon.
334
+
@@ -1,9 +1,9 @@
1
1
  zrb/__init__.py,sha256=73fLhbsBdrnNbRydUyb0TApXSkLukA1jOVh68CSya-k,2368
2
- zrb/__main__.py,sha256=CdfuYSxqlJhnsJPOBOL2_uzEaTZHC3MtpyTuz8QUfUI,314
2
+ zrb/__main__.py,sha256=ZX0juuqCUqnwMvA9HPma-OY4EQm2s0Nge2jsMr9nn6Q,412
3
3
  zrb/advertisement.py,sha256=e-1tFPlmEuz8IqaIJ_9-2p9x5cuGsxssJGu5F0wHthI,505
4
4
  zrb/runner.py,sha256=MPCNPMCyiYNZeubSxd1eM2Zr6PCIKF-9pkG385AXElw,118
5
5
  zrb/action/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- zrb/action/runner.py,sha256=fbNCTameDQV4L9b7nS9PX8TDgmipbvOnzz6eUcQxYzg,4972
6
+ zrb/action/runner.py,sha256=zf9CalYLwnP6eQbVKw-FdXnt0DOc-iAMyPQzPuj0Hn4,5242
7
7
  zrb/builtin/__init__.py,sha256=NwkM8HYaWHxr8sGE18gNF2qgf00FlhP2TWq1r1uDQAY,727
8
8
  zrb/builtin/base64.py,sha256=p0RlP-hklAkosYkLUk3WdHP_jQTZ3wpIMwbFM0h-XTY,1351
9
9
  zrb/builtin/env.py,sha256=hEjQios0i-3DantczxQnZnolzwZAGIQOE0Ygka330EU,1146
@@ -14,12 +14,12 @@ zrb/builtin/group.py,sha256=ncUsZcGRUF9QKNMt-_1zDNDi4Z2KA5jpjwEuYIzhKmo,1077
14
14
  zrb/builtin/md5.py,sha256=IWN0uroXRiuyF0wD05BzGqAkMA3p6q9EbtWmJOPdOc0,1376
15
15
  zrb/builtin/process.py,sha256=h7uMfEIqbOaNe8aTINZYYbHWw7mmUF8DkeiylPeWzSE,1281
16
16
  zrb/builtin/project.py,sha256=XWz32OYBRox18fMe8xPrblPULytKDAd6O2E6aWw8PPI,1207
17
- zrb/builtin/say.py,sha256=_NEAYZULtNg-WZvNXy0U_8T632Bbd2atJ1kjIu8-UHo,3973
18
- zrb/builtin/schedule.py,sha256=_i5LdDrRzeWayiGZVqftirnqMAf1Twd8WgKDd7ARpGk,1025
17
+ zrb/builtin/say.py,sha256=oERvEKfejj0l3RphpXf0g5dosoE-gTzdY6zTJpx-TXo,3973
18
+ zrb/builtin/schedule.py,sha256=nanYxeuCptzSyE1EdzH24XRqqQXh7KrS-1LhZ73ciCk,1023
19
19
  zrb/builtin/ubuntu.py,sha256=f1s2H8xK3xrb3X99RER9BvB8Wwx5wGxoxEJRhnumMm8,3042
20
20
  zrb/builtin/update.py,sha256=JyLL_4AB__9viYKg5IP-s5kezLh37gyDqD0Fe42zIM8,396
21
21
  zrb/builtin/version.py,sha256=i7NsuSl_MtyufEKrR42p0qHGVMpsPqkxZsewEHnM-QQ,492
22
- zrb/builtin/watch_changes.py,sha256=kH1TGgyP1EYwxKOoIQ4EdIOTuuVFUd9T2lVitE9ks3Y,850
22
+ zrb/builtin/watch_changes.py,sha256=6jvA3iQ8zcGx65tT_Unz8jShokqNcxEBVDJ_MkYbcGs,1187
23
23
  zrb/builtin/devtool/__init__.py,sha256=fVBAYBSJgPoy_r_CGaY__1pQDca7ucrHxxfVUVHlU2o,568
24
24
  zrb/builtin/devtool/devtool_install.py,sha256=s8igNnyb2VQqaXCbzzIck1YjxsA0mIAjrc7elqjNWKA,13275
25
25
  zrb/builtin/devtool/aws/install.sh,sha256=C7jJP4LaB5lBehyNEUFaBtk1MmTvv6jdaP_lnXq0kao,1638
@@ -1095,14 +1095,14 @@ zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/src/main
1095
1095
  zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/src/requirements.txt,sha256=HX56Al9bOoM8Mq1Yc44UE2cfT3XrTZGmHI6T3q7xn50,15
1096
1096
  zrb/builtin/generator/simple_python_app/template/src/kebab-zrb-app-name/src/template.env,sha256=vtoZ0LV8OKAU1EUWBiB8PIKbf1FaNfm-49j7aXvKsgs,87
1097
1097
  zrb/builtin/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1098
- zrb/builtin/helper/reccuring_action.py,sha256=Tojb_lk5qVjDyxfZjBvOw4vc_pVX5HhqFz9XJUH0dGA,1190
1098
+ zrb/builtin/helper/reccuring_action.py,sha256=m_xv1kHZtLBOBnkQQ8QpxykfNOZuO3OdI_M3zA8EVx4,1954
1099
1099
  zrb/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1100
- zrb/config/config.py,sha256=emFGBfcbfg7N7N-Q6XBQlEaCiJpdRfhEgl3zmQ8gbuQ,1168
1100
+ zrb/config/config.py,sha256=hsq9MH4jMkH4Nk76dTg8eWzYpXpUXgwQ-_d8QE7djp8,1169
1101
1101
  zrb/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1102
1102
  zrb/helper/advertisement.py,sha256=0qtrFD_8YSjRZpefStyM9XSnfguaEs717W7Z-9fPu1Y,818
1103
1103
  zrb/helper/callable.py,sha256=A_Pa6HP9dA8X7SvPTl4SW6w_hWhtjs0psVccsR0u6Ms,237
1104
- zrb/helper/cli.py,sha256=cBVqtR1grn_bsajHvWuJj4Lgu2i4Rb4nc85L0Eo6kPs,2487
1105
- zrb/helper/default_env.py,sha256=2VNYNcNZ3xFGj4tlwHUTMs0jxB4jemHGrmNXDDfEF6s,2007
1104
+ zrb/helper/cli.py,sha256=Vn7YwZ5GvfXqgft0tA4tuENYcF6Ls2SgiKwmX0vwxWQ,2916
1105
+ zrb/helper/default_env.py,sha256=JV3dxbLXyrpYMesQ0JUN2Bs6XuZwAJopfd7EUHoJ6pk,2380
1106
1106
  zrb/helper/docstring.py,sha256=m9EPbJ8H8DhTS3ZCr471vX_UYl1tS8ENJpc_WYgmWmI,4851
1107
1107
  zrb/helper/log.py,sha256=NX07xXkQ1TwS1m8qoXbGvlh79peu8ayMLw_1s9s6R24,516
1108
1108
  zrb/helper/python_task.py,sha256=-5yPiqclwEMNiNxta7r-_TUm9iWms4KCzAmlavkzelU,259
@@ -1130,12 +1130,13 @@ zrb/helper/docker_compose/file.py,sha256=aBtQMV57TWtMO9AwsZ2OyBn16MhElZaDlq54zBq
1130
1130
  zrb/helper/env_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1131
1131
  zrb/helper/env_map/fetch.py,sha256=la0lgi6TOYBIEAuWRHTibfYgEm5Lj1bZ4Wznx3NGmX4,2209
1132
1132
  zrb/helper/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1133
- zrb/helper/file/copy_tree.py,sha256=4kVqupzLYyF_neiRsedAFbxkeiK0VYsW45Z2zCkWLXA,1804
1133
+ zrb/helper/file/copy_tree.py,sha256=pA-Arizo-D39y5vncoViwQyCwqqc_uuVbCIrB-9PoSA,1914
1134
+ zrb/helper/file/match.py,sha256=kqbPiPtCMwHEUURdPwSP_bbzWZyNgsLJgTp8b7O6wi8,571
1134
1135
  zrb/helper/file/text.py,sha256=_S1uYToMw3lcI95-op_kM_SWNJUyvYNc32XHIcokDWU,807
1135
1136
  zrb/helper/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1136
1137
  zrb/helper/git/detect_changes.py,sha256=6WSYd-yFbUYxHbNNkrFXx2GbG-Fuygd6dArpEyfo2aE,1151
1137
1138
  zrb/helper/loader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1138
- zrb/helper/loader/load_module.py,sha256=vOtJn7DY2odeh5So9e0-bhM5ue1HO7eBAEhKmzwOtko,822
1139
+ zrb/helper/loader/load_module.py,sha256=tTANOa0a6kt-G4Ls75vp-C1alo90NSSMlKSMHeyRNHY,1096
1139
1140
  zrb/helper/map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1140
1141
  zrb/helper/map/conversion.py,sha256=029zwx2TS4ZpzDNs0JDXY0MvJ71TRow5IgEg7BtACN0,451
1141
1142
  zrb/helper/string/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1152,39 +1153,39 @@ zrb/shell-scripts/notify.ps1,sha256=6_xPoIwuxARpYljcjVV-iRJS3gJqGfx-B6kj719cJ9o,
1152
1153
  zrb/shell-scripts/rsync-util.sh,sha256=QzdhSBvUNMxB4U2B4m0Dxg9czGckRjB7Vk4A1ObG0-k,353
1153
1154
  zrb/shell-scripts/ssh-util.sh,sha256=9lXDzw6oO8HuA4vdbfps_uQMMwKyNYX9fZkZgpK52g8,401
1154
1155
  zrb/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1155
- zrb/task/any_task.py,sha256=IfYRsrNom1z39qLhcVhW-0jISQ_BEdXV7v9C-9SMZOc,33005
1156
+ zrb/task/any_task.py,sha256=kyqUtkVzcpxZW7WaxBB-FEw8epVTOftDj9pUoYlcfpg,36485
1156
1157
  zrb/task/any_task_event_handler.py,sha256=vpO9t0fck8-oFu1KYptfcg2hXKRsk6V5je4Dg-Bl21o,359
1157
1158
  zrb/task/base_remote_cmd_task.py,sha256=I2rKry7hEqNihQE7bqbLsmOGOyiItlkLDSD2CqXFGUA,8940
1158
1159
  zrb/task/checker.py,sha256=UJMxrHOolynt1ySCkwGffssBId_TKRmjZ4mqH-eI3WQ,3092
1159
- zrb/task/cmd_task.py,sha256=t9bi2o3104kKOn2X_kf128QW-kaTiPqwQrraQMYNK04,13898
1160
+ zrb/task/cmd_task.py,sha256=5tDjBh3TuP_QuaFJZcACeCh1nCV2PtJk10_-NNEERAk,13794
1160
1161
  zrb/task/decorator.py,sha256=JLdAFe-mnIJFHpjeSXlC2tuhUCjGdTEonEjx1UwnXMA,2870
1161
- zrb/task/docker_compose_task.py,sha256=xPFZWuV4GM6F95vab1_O_C0s9onU_aGxcAQumR3zM7A,13195
1162
+ zrb/task/docker_compose_task.py,sha256=Y1O8wW_C9Hsqz3MMMXoDTbA60w676GNubiA02nrXjOk,13168
1162
1163
  zrb/task/flow_task.py,sha256=nma2OhLs5nD2tR-ggK65giKdEjZUySHeoE7y3umfH9U,3860
1163
1164
  zrb/task/http_checker.py,sha256=XTTV3wiavDaHqHr1-r8gK2JTSMqOgae_6uIoAEOAD4o,5162
1164
1165
  zrb/task/notifier.py,sha256=vjT47ct-DOCWABUefUFRMjjuDWLbDX_lzD4zTgdIzEI,5253
1165
1166
  zrb/task/parallel.py,sha256=OnCdh4aQwL-N2ICNf3gshhqx5-Hq_QPZD3ycMHqrFRg,1042
1166
- zrb/task/path_checker.py,sha256=HEf-FSOOKEtxiiEX21ZjVqekO2UTlD9CZHjXeZWp-ss,3316
1167
- zrb/task/path_watcher.py,sha256=M9CMCbfuSyQyiNZgdx1hO9_IH75gtmdHAoGcE8C9aaw,4629
1167
+ zrb/task/path_checker.py,sha256=Be8fI1v1IKBF2uvoBZPAjwNrIHX129ryiabbVhnSHSI,4098
1168
+ zrb/task/path_watcher.py,sha256=j9NTYqBLkspx9K1lQ2Qw1KZV5VJfJOHqqUMcea96GmQ,6192
1168
1169
  zrb/task/port_checker.py,sha256=EgLpb7VE4ntS9VL71KrIhFHW4UgwsFq2z4Z9CbwtSac,4029
1169
- zrb/task/recurring_task.py,sha256=t21d7zZWoi-t3wVhz78FEWkMPSbSpGr2jg7WljVEu24,5371
1170
+ zrb/task/recurring_task.py,sha256=D6yMQlnchZo5F0LjhNRATUXkrfd6wdBEt6YYDcwBSRY,7261
1170
1171
  zrb/task/remote_cmd_task.py,sha256=D3Uciarw164umukvTeDHSBRInaYJuOMyAPo4pFsK9Oc,3694
1171
1172
  zrb/task/resource_maker.py,sha256=aJnt0jnuctt2_otlSWcboG_2oLAMYYvNNk4QW0iP0AQ,6438
1172
1173
  zrb/task/rsync_task.py,sha256=29mNHBPDKnAHCgpSrHSKojdMf3c-xw66bSqEI-UVwho,3886
1173
- zrb/task/task.py,sha256=9n1H3sEw7GLiEUn8D4aDNHizqkd9crjZCfM9Xg7TvOM,180
1174
- zrb/task/time_watcher.py,sha256=AQGpwXIIj_bXCgE3ftfYTeiX6T5Hv08hnBZPV5rKB6o,3646
1174
+ zrb/task/task.py,sha256=mSnJ7wdySiuRGfc3oB3JiOuJvcuiroIYDgDIGnqbF5M,181
1175
+ zrb/task/time_watcher.py,sha256=WiSJaJBx1ATofTcMxoo4w4ugAOVjMU-WnMgIAmA57uw,3916
1175
1176
  zrb/task/base_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1176
- zrb/task/base_task/base_task.py,sha256=RqStnGbPDBEjryFFpWcjgokKUXr2JmtQMbOeq8y8F1s,16449
1177
+ zrb/task/base_task/base_task.py,sha256=Pm5lzKaSvHx9NTJdWCNpCRQBIs53PpGnCKwIoYp5SZM,17665
1177
1178
  zrb/task/base_task/component/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1178
- zrb/task/base_task/component/base_task_model.py,sha256=zsVJ4UWx8FcObs-lzlUrsvc8XJDf9qrUqzDKWJYYYL4,9598
1179
- zrb/task/base_task/component/common_task_model.py,sha256=1n29Y7roUD6EaC2J9cxSd91_l7x-pqbnBxR4mlbdZ9w,10479
1179
+ zrb/task/base_task/component/base_task_model.py,sha256=bPZaMEFt2G4GEXshnTELMK_xg3BIGlH73VqbZZ3rtEA,10298
1180
+ zrb/task/base_task/component/common_task_model.py,sha256=zQwiJAbCWlD7XSmtJ8frx1H_CpgoJ8-7_LoYplI_U-k,11187
1180
1181
  zrb/task/base_task/component/pid_model.py,sha256=pWCjgD3J2Jimjq1Y9pkVczZMeFEIcy7Hm9eFGrHGUZE,296
1181
- zrb/task/base_task/component/renderer.py,sha256=XvVtnUAFfi99iyXPJDLkAQ_6ikI1PjnTCzCjEpoKg3A,4330
1182
+ zrb/task/base_task/component/renderer.py,sha256=LpQPNbkp1NvWgSQpzK11G1Ancbd_jKTgItCyIgAbCW4,4515
1182
1183
  zrb/task/base_task/component/trackers.py,sha256=3sPccnP7capEHdQ-ceRig04ee28kvo2an9I7x-Z5ZU8,1959
1183
1184
  zrb/task_env/constant.py,sha256=JdPhtZCTZlbW-jzG5vyFtpEXgTJ-Yx863LcrX_LiURY,44
1184
1185
  zrb/task_env/env.py,sha256=2lwSExUmV9KRMfsvru_QOnJTzL7VByFgNF-Ikt_u1uY,4772
1185
1186
  zrb/task_env/env_file.py,sha256=vpw780OmTRuDcrvmzCFwquJB1nldmZpQiQl1TA6B-k8,2907
1186
1187
  zrb/task_group/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1187
- zrb/task_group/group.py,sha256=qXvWFmBoJfsC2zv5hAL858juSIVHio9Y5EgxepnzB78,6012
1188
+ zrb/task_group/group.py,sha256=mD-DvKLCcKtX1HA8e7-QxYFWvTvJMkMXSMQfQPp_Jxs,5982
1188
1189
  zrb/task_input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1189
1190
  zrb/task_input/any_input.py,sha256=96RjYdtKabdzqEz-_C9P4EjS2C2d2kRTZSgqYkgJrF0,1908
1190
1191
  zrb/task_input/base_input.py,sha256=9paiJPu_Q7ejkHlloWoZ8g0dZKeVUY_TD3EQ16wgEi4,5483
@@ -1196,8 +1197,8 @@ zrb/task_input/int_input.py,sha256=h4fRLyBaX6_fK9jdXoQKmwKZknUqtl-XMG3SRMa2f08,4
1196
1197
  zrb/task_input/password_input.py,sha256=L8oXrImqDd8fl2pc5epvYSsCcTbDgAXy8awYsUYUBnE,4030
1197
1198
  zrb/task_input/str_input.py,sha256=mtQEwrFmncXrxxJ1bmX7URM1A2pPGlQttQGNMQHhfmc,4042
1198
1199
  zrb/task_input/task_input.py,sha256=fa6yneGp3Kp8DMf30zmTP797r5xfAzSBopXQmtx2Wxc,2020
1199
- zrb-0.1.0a0.dist-info/entry_points.txt,sha256=xTgXc1kBKYhJHEujdaSPHUcJT3-hbyP1mLgwkv-5sSk,40
1200
- zrb-0.1.0a0.dist-info/LICENSE,sha256=WfnGCl8G60EYOPAEkuc8C9m9pdXWDe08NsKj3TBbxsM,728
1201
- zrb-0.1.0a0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
1202
- zrb-0.1.0a0.dist-info/METADATA,sha256=BDEnw1--ReV9vo0n1jaCYYGTem2N1-Kc5vkB0efyYzo,15018
1203
- zrb-0.1.0a0.dist-info/RECORD,,
1200
+ zrb-0.2.0.dist-info/entry_points.txt,sha256=xTgXc1kBKYhJHEujdaSPHUcJT3-hbyP1mLgwkv-5sSk,40
1201
+ zrb-0.2.0.dist-info/LICENSE,sha256=WfnGCl8G60EYOPAEkuc8C9m9pdXWDe08NsKj3TBbxsM,728
1202
+ zrb-0.2.0.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
1203
+ zrb-0.2.0.dist-info/METADATA,sha256=p_dLGn_H7Epr1S-kh_f4yo6D62OvqZpyhm6Tb7IToJQ,16407
1204
+ zrb-0.2.0.dist-info/RECORD,,
File without changes
File without changes