zrb 1.0.0a5__py3-none-any.whl → 1.0.0a12__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/util/todo.py CHANGED
@@ -1,11 +1,15 @@
1
1
  import datetime
2
2
  import re
3
+ import shutil
4
+ from typing import Any
3
5
 
4
6
  from pydantic import BaseModel, Field, model_validator
5
7
 
6
8
  from zrb.util.cli.style import (
7
9
  stylize_bold_green,
10
+ stylize_bold_yellow,
8
11
  stylize_cyan,
12
+ stylize_faint,
9
13
  stylize_magenta,
10
14
  stylize_yellow,
11
15
  )
@@ -32,6 +36,16 @@ class TodoTaskModel(BaseModel):
32
36
  )
33
37
  return values
34
38
 
39
+ def get_additional_info_length(self):
40
+ results = []
41
+ for project in self.projects:
42
+ results.append(f"@{project}")
43
+ for context in self.contexts:
44
+ results.append(f"+{context}")
45
+ for key, val in self.keyval.items():
46
+ results.append(f"{key}:{val}")
47
+ return len(", ".join(results))
48
+
35
49
 
36
50
  TODO_TXT_PATTERN = re.compile(
37
51
  r"^(?P<status>x)?\s*" # Optional completion mark ('x')
@@ -80,7 +94,8 @@ def load_todo_list(todo_file_path: str) -> list[TodoTaskModel]:
80
94
  todo_line = todo_line.strip()
81
95
  if todo_line == "":
82
96
  continue
83
- todo_list.append(line_to_todo_task(todo_line))
97
+ todo_task = line_to_todo_task(todo_line)
98
+ todo_list.append(todo_task)
84
99
  todo_list.sort(
85
100
  key=lambda task: (
86
101
  task.completed,
@@ -173,51 +188,154 @@ def todo_task_to_line(task: TodoTaskModel) -> str:
173
188
  return " ".join(parts)
174
189
 
175
190
 
176
- def get_visual_todo_list(todo_list: list[TodoTaskModel]) -> str:
177
- if len(todo_list) == 0:
191
+ def get_visual_todo_list(todo_list: list[TodoTaskModel], filter: str) -> str:
192
+ todo_filter = line_to_todo_task(filter)
193
+ filtered_todo_list = []
194
+ for todo_task in todo_list:
195
+ filter_description = todo_filter.description.lower().strip()
196
+ if (
197
+ filter_description != ""
198
+ and filter_description not in todo_task.description.lower()
199
+ ):
200
+ continue
201
+ if not all(context in todo_task.contexts for context in todo_filter.contexts):
202
+ continue
203
+ if not all(project in todo_task.projects for project in todo_filter.projects):
204
+ continue
205
+ if not all(
206
+ key in todo_task.keyval and todo_task.keyval[key] == val
207
+ for key, val in todo_filter.keyval.items()
208
+ ):
209
+ continue
210
+ filtered_todo_list.append(todo_task)
211
+ if len(filtered_todo_list) == 0:
178
212
  return "\n".join(["", " Empty todo list... 🌵🦖", ""])
179
- max_desc_name_length = max(len(todo_task.description) for todo_task in todo_list)
180
- if max_desc_name_length < len("DESCRIPTION"):
181
- max_desc_name_length = len("DESCRIPTION")
213
+ max_desc_length = max(
214
+ len(todo_task.description) for todo_task in filtered_todo_list
215
+ )
216
+ if max_desc_length < len("DESCRIPTION"):
217
+ max_desc_length = len("DESCRIPTION")
218
+ if max_desc_length > 70:
219
+ max_desc_length = 70
220
+ max_additional_info_length = max(
221
+ todo_task.get_additional_info_length() for todo_task in filtered_todo_list
222
+ )
223
+ if max_additional_info_length < len("PROJECT/CONTEXT/OTHERS"):
224
+ max_additional_info_length = len("PROJECT/CONTEXT/OTHERS")
225
+ terminal_width, _ = shutil.get_terminal_size()
182
226
  # Headers
183
227
  results = [
184
- stylize_bold_green(
185
- " ".join(
186
- [
187
- "".ljust(3), # priority
188
- "".ljust(3), # completed
189
- "COMPLETED AT".rjust(14), # completed date
190
- "CREATED AT".rjust(14), # completed date
191
- "DESCRIPTION".ljust(max_desc_name_length),
192
- "PROJECT/CONTEXT/OTHERS",
193
- ]
228
+ stylize_faint(
229
+ get_visual_todo_header(
230
+ terminal_width, max_desc_length, max_additional_info_length
194
231
  )
195
232
  )
196
233
  ]
197
- for todo_task in todo_list:
198
- completed = "[x]" if todo_task.completed else "[ ]"
199
- priority = " " if todo_task.priority is None else f"({todo_task.priority})"
200
- completion_date = stylize_yellow(_date_to_str(todo_task.completion_date))
201
- creation_date = stylize_cyan(_date_to_str(todo_task.creation_date))
202
- description = todo_task.description.ljust(max_desc_name_length)
203
- additions = ", ".join(
204
- [stylize_yellow(f"+{project}") for project in todo_task.projects]
205
- + [stylize_cyan(f"@{context}") for context in todo_task.contexts]
206
- + [stylize_magenta(f"{key}:{val}") for key, val in todo_task.keyval.items()]
207
- )
234
+ for todo_task in filtered_todo_list:
208
235
  results.append(
236
+ get_visual_todo_line(
237
+ terminal_width, max_desc_length, max_additional_info_length, todo_task
238
+ )
239
+ )
240
+ return "\n".join(results)
241
+
242
+
243
+ def get_visual_todo_header(
244
+ terminal_width: int, max_desc_length: int, max_additional_info_length: int
245
+ ) -> str:
246
+ priority = "".ljust(3)
247
+ completed = "".ljust(3)
248
+ completed_at = "COMPLETED AT".rjust(14)
249
+ created_at = "CREATED_AT".ljust(14)
250
+ description = "DESCRIPTION".ljust(min(max_desc_length, 70))
251
+ additional_info = "PROJECT/CONTEXT/OTHERS"
252
+ if terminal_width <= 14 + max_desc_length + max_additional_info_length:
253
+ return " ".join([priority, completed, description])
254
+ if terminal_width <= 36 + max_desc_length + max_additional_info_length:
255
+ return " ".join([priority, completed, description, additional_info])
256
+ return " ".join(
257
+ [priority, completed, completed_at, created_at, description, additional_info]
258
+ )
259
+
260
+
261
+ def get_visual_todo_line(
262
+ terminal_width: int,
263
+ max_desc_length: int,
264
+ max_additional_info_length: int,
265
+ todo_task: TodoTaskModel,
266
+ ) -> str:
267
+ completed = "[x]" if todo_task.completed else "[ ]"
268
+ priority = " " if todo_task.priority is None else f"({todo_task.priority})"
269
+ completed_at = stylize_yellow(_date_to_str(todo_task.completion_date))
270
+ created_at = stylize_cyan(_date_to_str(todo_task.creation_date))
271
+ description = todo_task.description
272
+ if len(description) > max_desc_length:
273
+ description = description[: max_desc_length - 4] + " ..."
274
+ description = description.ljust(max_desc_length)
275
+ description = description[:max_desc_length]
276
+ if todo_task.completed:
277
+ description = stylize_faint(description)
278
+ elif "duration" in todo_task.keyval:
279
+ description = stylize_bold_yellow(description)
280
+ additional_info = ", ".join(
281
+ [stylize_yellow(f"+{project}") for project in todo_task.projects]
282
+ + [stylize_cyan(f"@{context}") for context in todo_task.contexts]
283
+ + [stylize_magenta(f"{key}:{val}") for key, val in todo_task.keyval.items()]
284
+ )
285
+ if terminal_width <= 14 + max_desc_length + max_additional_info_length:
286
+ return " ".join([priority, completed, description])
287
+ if terminal_width <= 36 + max_desc_length + max_additional_info_length:
288
+ return " ".join([priority, completed, description, additional_info])
289
+ return " ".join(
290
+ [priority, completed, completed_at, created_at, description, additional_info]
291
+ )
292
+
293
+
294
+ def get_visual_todo_card(
295
+ todo_task: TodoTaskModel, log_work_list: list[dict[str, str]]
296
+ ) -> str:
297
+ description = todo_task.description
298
+ status = "TODO"
299
+ if todo_task.completed:
300
+ status = "DONE"
301
+ elif "duration" in todo_task.keyval:
302
+ status = "DOING"
303
+ priority = todo_task.priority
304
+ completed_at = (
305
+ _date_to_str(todo_task.completion_date)
306
+ if todo_task.completion_date is not None
307
+ else ""
308
+ )
309
+ created_at = (
310
+ _date_to_str(todo_task.creation_date)
311
+ if todo_task.creation_date is not None
312
+ else ""
313
+ )
314
+ log_work_str = "\n".join(
315
+ [
209
316
  " ".join(
210
317
  [
211
- completed,
212
- priority,
213
- completion_date,
214
- creation_date,
215
- description,
216
- additions,
318
+ log_work.get("duration", "").strip().rjust(12),
319
+ log_work.get("start", "").strip().rjust(20),
320
+ log_work.get("log", "").strip(),
217
321
  ]
218
322
  )
323
+ for log_work in log_work_list
324
+ ]
325
+ )
326
+ detail = [
327
+ f"{'📄 Description'.ljust(16)}: {description}",
328
+ f"{'🎯 Priority'.ljust(16)}: {priority}",
329
+ f"{'📊 Status'.ljust(16)}: {status}",
330
+ f"{'📅 Created at'.ljust(16)}: {created_at}",
331
+ f"{'✅ Completed at'.ljust(16)}: {completed_at}",
332
+ ]
333
+ if log_work_str != "":
334
+ detail.append(
335
+ stylize_faint(" ".join(["Time Spent".rjust(12), "Start".rjust(20), "Log"]))
219
336
  )
220
- return "\n".join(results)
337
+ detail.append(log_work_str)
338
+ return "\n".join(detail)
221
339
 
222
340
 
223
341
  def _date_to_str(date: datetime.date | None) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.0.0a5
3
+ Version: 1.0.0a12
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -1,12 +1,12 @@
1
1
  zrb/__init__.py,sha256=ESskletjBpLO78a6wLigi9wnEGtmhfc3i_rbyMvrSyU,2767
2
- zrb/__main__.py,sha256=Z3nrDdLh5qz4fHhsxMzo8-ui543uAkeE9PMeREX7DwQ,388
2
+ zrb/__main__.py,sha256=aiIGigf24Yh4B8KVvJxxAcjvb_CSc13yfpeB6EkRHhE,645
3
3
  zrb/attr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  zrb/attr/type.py,sha256=4TV5gPYMMrKh5V-yB6iRYKCbsXAH_AvGXMsjxKLHcUs,568
5
- zrb/builtin/__init__.py,sha256=hBnr175f1UsMFYPeD5GBoyL-uqEUy9jSrtosq87pmkU,1347
5
+ zrb/builtin/__init__.py,sha256=seqFeTQk4k9I31oTdVrCDoud4_AzCrdVEZx1VxVUtZk,1744
6
6
  zrb/builtin/base64.py,sha256=1YnSwASp7OEAvQcsnHZGpJEvYoI1Z2zTIJ1bCDHfcPQ,921
7
- zrb/builtin/git.py,sha256=m3uFadPTQvnwH4hxZVoU52znY5G3OST0-Xh_GplN0Ms,4351
8
- zrb/builtin/git_subtree.py,sha256=5SndE5zdjBGERJjOg30W5pIvti3dlGakAFvY6NXXSmE,2603
9
- zrb/builtin/group.py,sha256=FQnBUlHN2JFtVXTBQj0FYJDMMC-BJXoj74NFlsARwNU,1415
7
+ zrb/builtin/git.py,sha256=ypxGT4JyokYbXMvxdWFG684sEa6x7wht1b4PxpddTMA,4544
8
+ zrb/builtin/git_subtree.py,sha256=M5Fr8NB4LaC3ra997tzZMLeD4H5o84MvvwefrLcWEIk,3016
9
+ zrb/builtin/group.py,sha256=3xfEx9aEDcq6rDprGKYGqOXN2i0ts4W_RQVErL51o1o,1594
10
10
  zrb/builtin/llm/llm_chat.py,sha256=ATENrihXUMkQ8IoarhacohUe-I_43yb7c0Tl5f69mAI,1397
11
11
  zrb/builtin/llm/tool/cli.py,sha256=n8THj513k1vrXUoZrTcxESmdZzhBOP1-L3Dmup5ZW54,225
12
12
  zrb/builtin/llm/tool/rag.py,sha256=rpfTMhLpkH9ZEyBcmFqLTz3UB2F6VP6w_Se2mPQVZXM,6845
@@ -69,19 +69,27 @@ zrb/builtin/project/create/create.py,sha256=IUU-4oUlESiw-ZHtnkbhnEA62_thKMDwGdAq
69
69
  zrb/builtin/project/create/project-template/README.md,sha256=BHeWF_txdTDzKewWdWfGhO3YOTiW8E3YwTMnd0T1LVA,39
70
70
  zrb/builtin/project/create/project-template/zrb_init.py,sha256=cbPl2xZbr1LXBGd296yCvfullzmryG5nTZ8mcBmu_vU,89
71
71
  zrb/builtin/python.py,sha256=herHFZl5wHsMFcqHhpisg9Ql3pQXqoCuTTwzNUTXzkw,281
72
+ zrb/builtin/setup/asdf/asdf.py,sha256=n_dWoyYa7vZ9tBCy8hgxmSWZ-XHltC1R70mIVZQhnXY,2419
73
+ zrb/builtin/setup/asdf/asdf_helper.py,sha256=804vfpsDPH3bpOmpAZyGxJdtwcmxNvuj9i0vaIW2qNI,1318
74
+ zrb/builtin/setup/common_input.py,sha256=M8q9Unt7dCfBHTHqV3__Mxk9YC2Pl3DDtxat2BanZCQ,870
75
+ zrb/builtin/setup/latex/ubuntu.py,sha256=er9wJAT4CpmghIaiIPFb3FvgqAn1aqU5UgX7GHL3FjA,577
76
+ zrb/builtin/setup/tmux/tmux.py,sha256=-MEIGP2OwM55Fi-ug1TjMgQGiTbwKlQ6aASSLLjjz7A,1630
77
+ zrb/builtin/setup/tmux/tmux_config.sh,sha256=wQCb4Q-mNkxIPOcvpN84X9RUWkGY16u3Vd-pOhVidgg,416
78
+ zrb/builtin/setup/tmux/tmux_helper.py,sha256=M03l0wfL25TzGGp6lnVfX40ayT_x7N2lz-nz2chO7PU,396
79
+ zrb/builtin/setup/ubuntu.py,sha256=oOSN7Eq7arEpY2i0vWHPR2owio6dqqOvceteYrgmbYw,1019
72
80
  zrb/builtin/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
81
  zrb/builtin/shell/autocomplete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
82
  zrb/builtin/shell/autocomplete/bash.py,sha256=-7YDVV7txgJH9mAYSYN0jmvUEeDIzWFvVNY-cY0myF8,1181
75
83
  zrb/builtin/shell/autocomplete/subcmd.py,sha256=WZI6cGWJcn80zSyxOHG7sCMO3Ucix3mZf4xm_xyB_Y0,606
76
84
  zrb/builtin/shell/autocomplete/zsh.py,sha256=9hlq0Wt3fhRz326mAQTypEd4_4lZdrbBx_3A-Ti3mvw,1022
77
- zrb/builtin/todo.py,sha256=tMz3ACo5TibJok9Dyw3T8rtSIFZYyL4ZdqXvL6sfmT8,6855
85
+ zrb/builtin/todo.py,sha256=2JTk0CQKGXyBll3l097CGRLEPCqAZ5f4luR7nL-Ad1o,9480
78
86
  zrb/callback/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
87
  zrb/callback/any_callback.py,sha256=Yhdv5UWHAZSVzj5K2JdxcVQx8x8VX8aZJEivj3NTfZc,247
80
88
  zrb/callback/callback.py,sha256=IQ7r9EnXYHHcNXKBJAk4WFqCqj7WDvflAuCyu5y-27I,849
81
89
  zrb/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
90
  zrb/cmd/cmd_result.py,sha256=L8bQJzWCpcYexIxHBNsXj2pT3BtLmWex0iJSMkvimOA,597
83
91
  zrb/cmd/cmd_val.py,sha256=LGuE85zQt0KSjpmW7bwIE5dnfIq-ULB8V2CDAiQ-SFk,960
84
- zrb/config.py,sha256=1mLvHi7YFbr4JTeD7gxNSCBP0MVS8bsD0Sngy233Eww,2927
92
+ zrb/config.py,sha256=M__WVxBTU9zMxZvm1t2icEV8oU6-QK0Edl1XDyhJ9c8,3067
85
93
  zrb/content_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
94
  zrb/content_transformer/any_content_transformer.py,sha256=3XHM6ZdsJFXxRD7YlUkv0Gn7-mexsH8c8zdHt3C0x8k,741
87
95
  zrb/content_transformer/content_transformer.py,sha256=8luyLZZneBIBAMgGZvydy0TTjhI-TWFgEiQbuCxCAbk,1640
@@ -102,17 +110,17 @@ zrb/group/any_group.py,sha256=1rNcsi5eu_86JAx_6Jy46SK4BTeppcb89MORynJd-4o,1115
102
110
  zrb/group/group.py,sha256=KVaBZQ9Evihm84JCg5ZayWMbbA6iNTUiLmMgCk4OTcc,1862
103
111
  zrb/input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
112
  zrb/input/any_input.py,sha256=07KgoPusxLMOwBHRjiImL955J33qC-24qGf_3My6fCE,701
105
- zrb/input/base_input.py,sha256=zW2X2H-s4snu_xthgHwEsbBlqDwFbSKMxt4F1PaZW7w,2572
106
- zrb/input/bool_input.py,sha256=Pgr34bpVpXkR3rrxnF_rsST-yGv_XvCWra9z9589Iyo,1383
107
- zrb/input/float_input.py,sha256=YOPxMq6iOQXc0C3fS1k03fBSzToPV-gK5IFeuyMtlmQ,1004
108
- zrb/input/int_input.py,sha256=DmzgGjaxgq3uLUtjI8VVvYDAwol3lu2InPBcltR_BLE,1005
109
- zrb/input/option_input.py,sha256=KE2gJqxYT0I1M60KQf9eJ14xOscBla42FxUWdw3UvsQ,1940
110
- zrb/input/password_input.py,sha256=SNZZv3YCfX5MAgVSiM69IMdRyH4Kd6QovXEBC48HVHA,1312
113
+ zrb/input/base_input.py,sha256=noLPZUZYJGhyNJ5b1cZyeOff6m7zUT-Cnh6n63S-DiM,2573
114
+ zrb/input/bool_input.py,sha256=m_mwzFtcAs26QIjVSiEDcqTQBukRtQ535RPGmH-b1_A,1384
115
+ zrb/input/float_input.py,sha256=FqpAIsszHw7-eFyOzVmXaXNcCCLEL1_M3XwsevsNWX0,1005
116
+ zrb/input/int_input.py,sha256=1knorHwOvSLuCPkcqA9iuYQG6Huy-8Vel5JNZqEFc44,1006
117
+ zrb/input/option_input.py,sha256=xG0K6uQCqEpsO0pRsOyPWPEE77PYl65t2VwtCfeHYbA,1941
118
+ zrb/input/password_input.py,sha256=C0h3kWJDI5KdXXQa-IXTQzyuCfjbx5tO34mn7kjmf2M,1313
111
119
  zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
112
- zrb/input/text_input.py,sha256=te86xFpzIZnWb9xOeKHykNKTbY3pe1CdoaRCKr7UUQM,3054
120
+ zrb/input/text_input.py,sha256=ju-DgBRK3RpuWNomZXcw3V5QAgaMGeTFaNn_MKM13Xc,3055
113
121
  zrb/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
122
  zrb/runner/cli.py,sha256=tM61thLwJNfjrHFVJqWmGuzE0MB273JZ8ANlROsKH1E,7024
115
- zrb/runner/web_app.py,sha256=nV9WQIT1d7UxtJxRhB8_hxPtdpwRBaYswoh0dZj2KqA,6189
123
+ zrb/runner/web_app.py,sha256=nO5EsGs8MMcvTdA41NU1yVlBu23HTD0FY82oXwOLIRM,6323
116
124
  zrb/runner/web_controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
125
  zrb/runner/web_controller/group_info_ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
126
  zrb/runner/web_controller/group_info_ui/controller.py,sha256=sI1UKnRcr5K-a_lGMm5H54hbhdQwIMLlXYmwfxoIqSY,2831
@@ -149,14 +157,14 @@ zrb/session_state_logger/any_session_state_logger.py,sha256=W_G1fCw9ZVj4LRTplTpB
149
157
  zrb/session_state_logger/default_session_state_logger.py,sha256=w_cAaNUg1ZmJk-ge1kh3xtag3SApC3ZdB3VbxUvU5Ro,197
150
158
  zrb/session_state_logger/file_session_state_logger.py,sha256=0lMtx7Othu4-jhL_iDHFbZWF_5HX84StU134QNCVgeQ,3753
151
159
  zrb/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- zrb/task/any_task.py,sha256=QCuFCDXmfzvS09SWN1uFGUHheJlkKkii5oZDjO3s9tA,3896
153
- zrb/task/base_task.py,sha256=pXFhZ0aJNdGXBBnOLSNiAXQ9MCRIpuqjB-Yfn_t8MB8,16293
160
+ zrb/task/any_task.py,sha256=9rCdKe-Sayr34Han9AsbhRxFpkbk6Rteg1DOyETulwQ,4917
161
+ zrb/task/base_task.py,sha256=Vn_MTR5aa3jIEWmh5LXpzezh-JwaEXPbjGKptx-Q-U8,19161
154
162
  zrb/task/base_trigger.py,sha256=milE5BNeIeq8jGCP38qTfstSvrc0CkSnO2sV-vlhzsM,4491
155
- zrb/task/cmd_task.py,sha256=3N3pyvz7qZ8lDB9pxGVFvfpubE33hXo48UKSmuZDGc0,10249
163
+ zrb/task/cmd_task.py,sha256=sF4fT-inYhbR831Oht0LDMMuPCjY5TnIx9-rgPghnsI,11446
156
164
  zrb/task/http_check.py,sha256=TwQCql3589a4-H2c7hgS1HayyU-NdBAdJ4qQNTvjXHM,2474
157
- zrb/task/llm_task.py,sha256=5TQPEvuHKex8qj9zhQcgX6TNTFOFU4E27JfR7UxWvNI,8333
165
+ zrb/task/llm_task.py,sha256=-OpLLXl39H1diHlPq1S8uiIwfQk_TY7nN8GHKqL4_m4,8643
158
166
  zrb/task/make_task.py,sha256=ldXRfe3rA8utJrEPjWrie-_tg6NM2G8sFnZ0UNqzT08,2179
159
- zrb/task/rsync_task.py,sha256=rmC2lWEkIrN4ejnV7gNZjN5sB-IbXmSHiTbs-PGh80c,6267
167
+ zrb/task/rsync_task.py,sha256=vENITMBXShKgj-NNgjM8eUK2ujU3wD8MUvyS_69ePEA,6227
160
168
  zrb/task/scaffolder.py,sha256=tRSHsy3nXSRNu9QY7hRMZ8ppfjYmFswiWDMRmLlv3VI,6220
161
169
  zrb/task/scheduler.py,sha256=kggRClk_RrAa5fAHfkqM6c-e2tUQiFSeyeLuFT26UZ4,3047
162
170
  zrb/task/task.py,sha256=KCrCaWYOQQvv1RJsYtHDeo9RBFmlXQ28oKyEFU4Q7pA,73
@@ -169,6 +177,7 @@ zrb/util/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
177
  zrb/util/cli/style.py,sha256=Pbqzu_fuhMDYDRjAH6Wl-oUW4-68tEOmv_ugJ3xH8qI,3671
170
178
  zrb/util/cli/subcommand.py,sha256=gYr-CzVeKFQhY43s_FDstPwn8r-ypUz1Q2Rv_l2r-ck,1027
171
179
  zrb/util/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
180
+ zrb/util/cmd/command.py,sha256=dGihcEASO_5hkQbtpnLhd0FMZMNtdXk6W8X7ZP_2bQY,1545
172
181
  zrb/util/cmd/remote.py,sha256=VklVORobTmE7FqdtYsVLq9xkSYTR2W5r2Zou0-soidw,710
173
182
  zrb/util/codemod/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
183
  zrb/util/codemod/add_code_to_class.py,sha256=jg-ISD3sHCecOJ1CCJGR9quizRgvzddKH9GZ33-IQ1A,1358
@@ -176,22 +185,23 @@ zrb/util/codemod/add_code_to_function.py,sha256=iJT-cDxS_H72j3ec03Lqmm4YPe-6svB2
176
185
  zrb/util/codemod/add_code_to_method.py,sha256=TiYj9N0eMi3dutwQw_y4gnu1G6PW_-fZDqHatvZxJDo,2359
177
186
  zrb/util/codemod/add_key_to_dict.py,sha256=ROw7Ds73gP5G5vOYlSqcHGUQQmJP_6Vb2jPnV2kZPQM,2110
178
187
  zrb/util/codemod/add_param_to_function_call.py,sha256=cNC16uYbkjl33QEZ7i3pYvifGJXSXEoyfyCYx96S8ZI,1567
188
+ zrb/util/codemod/add_parent_to_class.py,sha256=xHLKAYDUShiaShocZTrIUUFbEw0obKRVB7WX5ktQ0kc,1416
179
189
  zrb/util/codemod/add_property_to_class.py,sha256=43ll7b7SUWHPDpIoMp8Zp_I71wG1eAvnW_acp-HVF_4,2075
180
190
  zrb/util/cron.py,sha256=9fTGatUMYCRgmDFGg-z6_XerT4U5Vq72nD05NnEVUm4,2852
181
- zrb/util/git.py,sha256=4HJk15tpFmsBcnU1iapv6osx250SPAtWOo99e6mpwfY,4457
182
- zrb/util/git_subtree.py,sha256=7hxiLWw7el77amT1hrXMHrPyi76KMp11jciEfvfKXHk,2509
191
+ zrb/util/git.py,sha256=QNGvJJ9kY1Hy6WNO4d22D_GXyC1l3yGtTOMJ9nXqqpc,5151
192
+ zrb/util/git_subtree.py,sha256=DidHZdKcpylomlJLiUyQJSpPSXaY399e-97H0WbOcvs,2619
183
193
  zrb/util/group.py,sha256=Bg7HrSycoK110U5s_Tca6-uUQuZ5CMgb8wxZSrvDQ98,2790
184
194
  zrb/util/llm/tool.py,sha256=9ezbPEAyMKLWABgeqAimJ82KBFl7ciWNFVGhtllXg6s,2106
185
- zrb/util/load.py,sha256=VMScnycP8blLFOGXjFAKShbV-yvPXwRA_J2vt96T-wc,1552
195
+ zrb/util/load.py,sha256=GEhvaS5ne25Pf5dPTOK_yuxZ-kHqZ0xe6WjfehLOAZA,1614
186
196
  zrb/util/run.py,sha256=DGHUP9x1Q8V8UF3FbpmjLGuhVVCCLfjTH2teT8qXlNI,207
187
197
  zrb/util/string/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
198
  zrb/util/string/conversion.py,sha256=utfzaCLS2LTWMr9YbjXt2Z0a_pgzOjq76ZEPUh2UKCc,2876
189
- zrb/util/string/format.py,sha256=LuKznDICnnbMOjM7_CEY0drlIlpdNqbBL-n6M4yEUVI,306
199
+ zrb/util/string/format.py,sha256=c9dUrsl_DII7jZZPJi9NBTvxKnrzZDPcQuksW6FJ_Lk,611
190
200
  zrb/util/string/name.py,sha256=8picJfUBXNpdh64GNaHv3om23QHhUZux7DguFLrXHp8,1163
191
- zrb/util/todo.py,sha256=Nbe1a-7O5FSkIE7BZxQQt7AhbHFPDbreJJI6C7Rga4o,9171
201
+ zrb/util/todo.py,sha256=DEqBrEqzm2o9aATEyROtPsP4D7dbHIlTFVn4kvqOd4M,13498
192
202
  zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
203
  zrb/xcom/xcom.py,sha256=P4aYHdE3FRsTsNrXGyW8N44IWZjw-vG_qys1Ymn3aBg,1572
194
- zrb-1.0.0a5.dist-info/METADATA,sha256=DRy4eC0I32_wytKpBkqDOomSb0eN_hSeCc_SrQ7aumQ,4105
195
- zrb-1.0.0a5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
196
- zrb-1.0.0a5.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
197
- zrb-1.0.0a5.dist-info/RECORD,,
204
+ zrb-1.0.0a12.dist-info/METADATA,sha256=yAtlpL0LBftuJRrC8zSn5erNKzCCkQAUGFFe6p_i9tg,4106
205
+ zrb-1.0.0a12.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
206
+ zrb-1.0.0a12.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
207
+ zrb-1.0.0a12.dist-info/RECORD,,
File without changes