zrb 1.0.0a10__py3-none-any.whl → 1.0.0a11__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/builtin/__init__.py CHANGED
@@ -12,14 +12,21 @@ from zrb.builtin.md5 import hash_md5, sum_md5
12
12
  from zrb.builtin.project.add.fastapp import add_fastapp_to_project
13
13
  from zrb.builtin.project.create.create import create_project
14
14
  from zrb.builtin.python import format_python_code
15
- from zrb.builtin.setup.dev.asdf import setup_asdf
16
- from zrb.builtin.setup.dev.tmux import setup_tmux
17
- from zrb.builtin.setup.system.latex.ubuntu import setup_latex_on_ubuntu
18
- from zrb.builtin.setup.system.ubuntu import setup_ubuntu
15
+ from zrb.builtin.setup.asdf.asdf import setup_asdf
16
+ from zrb.builtin.setup.latex.ubuntu import setup_latex_on_ubuntu
17
+ from zrb.builtin.setup.tmux.tmux import setup_tmux
18
+ from zrb.builtin.setup.ubuntu import setup_ubuntu
19
19
  from zrb.builtin.shell.autocomplete.bash import make_bash_autocomplete
20
20
  from zrb.builtin.shell.autocomplete.subcmd import get_shell_subcommands
21
21
  from zrb.builtin.shell.autocomplete.zsh import make_zsh_autocomplete
22
- from zrb.builtin.todo import add_todo, complete_todo, edit_todo, list_todo, log_todo
22
+ from zrb.builtin.todo import (
23
+ add_todo,
24
+ archive_todo,
25
+ complete_todo,
26
+ edit_todo,
27
+ list_todo,
28
+ log_todo,
29
+ )
23
30
 
24
31
  assert create_project
25
32
  assert add_fastapp_to_project
@@ -42,6 +49,7 @@ assert git_pull_subtree
42
49
  assert git_push_subtree
43
50
  assert list_todo
44
51
  assert add_todo
52
+ assert archive_todo
45
53
  assert edit_todo
46
54
  assert complete_todo
47
55
  assert log_todo
@@ -1,6 +1,12 @@
1
1
  import os
2
2
 
3
3
  from zrb.builtin.group import setup_group
4
+ from zrb.builtin.setup.asdf.asdf_helper import (
5
+ check_inexist_asdf_dir,
6
+ get_install_prerequisites_cmd,
7
+ setup_asdf_ps_config,
8
+ setup_asdf_sh_config,
9
+ )
4
10
  from zrb.builtin.setup.common_input import (
5
11
  package_manager_input,
6
12
  setup_bash_input,
@@ -8,12 +14,6 @@ from zrb.builtin.setup.common_input import (
8
14
  setup_zsh_input,
9
15
  use_sudo_input,
10
16
  )
11
- from zrb.builtin.setup.dev.asdf_helper import (
12
- check_inexist_asdf_dir,
13
- get_install_prerequisites_cmd,
14
- setup_asdf_ps_config,
15
- setup_asdf_sh_config,
16
- )
17
17
  from zrb.context.any_context import AnyContext
18
18
  from zrb.task.cmd_task import CmdTask
19
19
  from zrb.task.make_task import make_task
@@ -1,5 +1,5 @@
1
1
  from zrb.builtin.group import setup_latex_group
2
- from zrb.builtin.setup.system.ubuntu import setup_ubuntu
2
+ from zrb.builtin.setup.ubuntu import setup_ubuntu
3
3
  from zrb.task.cmd_task import CmdTask
4
4
 
5
5
  setup_latex_on_ubuntu = setup_latex_group.add_task(
@@ -2,7 +2,7 @@ import os
2
2
 
3
3
  from zrb.builtin.group import setup_group
4
4
  from zrb.builtin.setup.common_input import package_manager_input, use_sudo_input
5
- from zrb.builtin.setup.dev.tmux_helper import get_install_tmux_cmd
5
+ from zrb.builtin.setup.tmux.tmux_helper import get_install_tmux_cmd
6
6
  from zrb.context.any_context import AnyContext
7
7
  from zrb.input.str_input import StrInput
8
8
  from zrb.task.cmd_task import CmdTask
@@ -0,0 +1,12 @@
1
+ set -g @plugin 'tmux-plugins/tpm'
2
+ set -g @plugin 'tmux-plugins/tmux-sensible'
3
+ run '~/.tmux/plugins/tpm/tpm'
4
+
5
+ set-option -sg escape-time 10
6
+ set-option -g focus-events On
7
+ set-option -g default-terminal "screen-256color"
8
+ set-option -sa terminal-overrides ',xterm-256color:RGB'
9
+
10
+ bind c new-window -c "#{pane_current_path}"
11
+ bind '"' split-window -c "#{pane_current_path}"
12
+ bind % split-window -h -c "#{pane_current_path}"
zrb/builtin/todo.py CHANGED
@@ -4,7 +4,7 @@ import os
4
4
  from typing import Any
5
5
 
6
6
  from zrb.builtin.group import todo_group
7
- from zrb.config import TODO_DIR
7
+ from zrb.config import TODO_DIR, TODO_VISUAL_FILTER
8
8
  from zrb.context.any_context import AnyContext
9
9
  from zrb.input.str_input import StrInput
10
10
  from zrb.input.text_input import TextInput
@@ -23,7 +23,7 @@ from zrb.util.todo import (
23
23
 
24
24
 
25
25
  @make_task(
26
- name="todo-add",
26
+ name="add-todo",
27
27
  input=[
28
28
  StrInput(
29
29
  name="description",
@@ -77,20 +77,20 @@ def add_todo(ctx: AnyContext):
77
77
  )
78
78
  )
79
79
  save_todo_list(todo_file_path, todo_list)
80
- return get_visual_todo_list(todo_list)
80
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
81
81
 
82
82
 
83
- @make_task(name="todo-list", description="📋 List todo", group=todo_group, alias="list")
83
+ @make_task(name="list-todo", description="📋 List todo", group=todo_group, alias="list")
84
84
  def list_todo(ctx: AnyContext):
85
85
  todo_file_path = os.path.join(TODO_DIR, "todo.txt")
86
- todo_tasks: list[TodoTaskModel] = []
86
+ todo_list: list[TodoTaskModel] = []
87
87
  if os.path.isfile(todo_file_path):
88
- todo_tasks = load_todo_list(todo_file_path)
89
- return get_visual_todo_list(todo_tasks)
88
+ todo_list = load_todo_list(todo_file_path)
89
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
90
90
 
91
91
 
92
92
  @make_task(
93
- name="todo-complete",
93
+ name="complete-todo",
94
94
  input=StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
95
95
  description="✅ Complete todo",
96
96
  group=todo_group,
@@ -105,7 +105,10 @@ def complete_todo(ctx: AnyContext):
105
105
  todo_task = select_todo_task(todo_list, ctx.input.keyword)
106
106
  if todo_task is None:
107
107
  ctx.log_error("Task not found")
108
- return get_visual_todo_list(todo_list)
108
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
109
+ if todo_task.completed:
110
+ ctx.log_error("Task already completed")
111
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
109
112
  # Update todo task
110
113
  todo_task = cascade_todo_task(todo_task)
111
114
  if todo_task.creation_date is not None:
@@ -113,11 +116,43 @@ def complete_todo(ctx: AnyContext):
113
116
  todo_task.completed = True
114
117
  # Save todo list
115
118
  save_todo_list(todo_file_path, todo_list)
116
- return get_visual_todo_list(todo_list)
119
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
120
+
121
+
122
+ @make_task(
123
+ name="archive-todo",
124
+ description="📚 Archive todo",
125
+ group=todo_group,
126
+ alias="archive",
127
+ )
128
+ def archive_todo(ctx: AnyContext):
129
+ todo_file_path = os.path.join(TODO_DIR, "todo.txt")
130
+ todo_list: list[TodoTaskModel] = []
131
+ if os.path.isfile(todo_file_path):
132
+ todo_list = load_todo_list(todo_file_path)
133
+ working_todo_list = [
134
+ todo_task for todo_task in todo_list if not todo_task.completed
135
+ ]
136
+ new_archived_todo_list = [
137
+ todo_task for todo_task in todo_list if todo_task.completed
138
+ ]
139
+ if len(new_archived_todo_list) == 0:
140
+ ctx.print("No completed task to archive")
141
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
142
+ archive_file_path = os.path.join(TODO_DIR, "archive.txt")
143
+ if not os.path.isdir(TODO_DIR):
144
+ os.make_dirs(TODO_DIR, exist_ok=True)
145
+ archived_todo_list = []
146
+ if os.path.isfile(archive_file_path):
147
+ archived_todo_list = load_todo_list(archive_file_path)
148
+ archived_todo_list += new_archived_todo_list
149
+ save_todo_list(archive_file_path, archived_todo_list)
150
+ save_todo_list(todo_file_path, working_todo_list)
151
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
117
152
 
118
153
 
119
154
  @make_task(
120
- name="todo-log",
155
+ name="log-todo",
121
156
  input=[
122
157
  StrInput(name="keyword", prompt="Task keyword", description="Task Keyword"),
123
158
  StrInput(
@@ -151,7 +186,7 @@ def log_todo(ctx: AnyContext):
151
186
  todo_task = select_todo_task(todo_list, ctx.input.keyword)
152
187
  if todo_task is None:
153
188
  ctx.log_error("Task not found")
154
- return get_visual_todo_list(todo_list)
189
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
155
190
  # Update todo task
156
191
  todo_task = cascade_todo_task(todo_task)
157
192
  current_duration = todo_task.keyval.get("duration", "0")
@@ -175,7 +210,7 @@ def log_todo(ctx: AnyContext):
175
210
  )
176
211
  with open(log_work_file_path, "w") as f:
177
212
  f.write(json.dumps(log_work, indent=2))
178
- return get_visual_todo_list(todo_list)
213
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
179
214
 
180
215
 
181
216
  def _get_default_start() -> str:
@@ -183,7 +218,7 @@ def _get_default_start() -> str:
183
218
 
184
219
 
185
220
  @make_task(
186
- name="todo-edit",
221
+ name="edit-todo",
187
222
  input=[
188
223
  TextInput(
189
224
  name="text",
@@ -207,7 +242,7 @@ def edit_todo(ctx: AnyContext):
207
242
  with open(todo_file_path, "w") as f:
208
243
  f.write(new_content)
209
244
  todo_list = load_todo_list(todo_file_path)
210
- return get_visual_todo_list(todo_list)
245
+ return get_visual_todo_list(todo_list, TODO_VISUAL_FILTER)
211
246
 
212
247
 
213
248
  def _get_todo_txt_content() -> str:
zrb/config.py CHANGED
@@ -56,6 +56,7 @@ SESSION_LOG_DIR = os.getenv(
56
56
  "ZRB_SESSION_LOG_DIR", os.path.expanduser(os.path.join("~", ".zrb-session"))
57
57
  )
58
58
  TODO_DIR = os.getenv("ZRB_TODO_DIR", os.path.expanduser(os.path.join("~", "todo")))
59
+ TODO_VISUAL_FILTER = os.getenv("ZRB_TODO_FILTER", "")
59
60
  VERSION = metadata.version("zrb")
60
61
  WEB_HTTP_PORT = int(os.getenv("ZRB_WEB_HTTP_PORT", "21213"))
61
62
  LLM_MODEL = os.getenv("ZRB_LLM_MODEL", "ollama_chat/llama3.1")
zrb/input/base_input.py CHANGED
@@ -14,7 +14,7 @@ class BaseInput(AnyInput):
14
14
  prompt: str | None = None,
15
15
  default_str: StrAttr = "",
16
16
  auto_render: bool = True,
17
- allow_empty: bool = True,
17
+ allow_empty: bool = False,
18
18
  ):
19
19
  self._name = name
20
20
  self._description = description
zrb/input/bool_input.py CHANGED
@@ -12,7 +12,7 @@ class BoolInput(BaseInput):
12
12
  prompt: str | None = None,
13
13
  default_str: StrAttr = "False",
14
14
  auto_render: bool = True,
15
- allow_empty: bool = True,
15
+ allow_empty: bool = False,
16
16
  ):
17
17
  super().__init__(
18
18
  name=name,
zrb/input/float_input.py CHANGED
@@ -11,7 +11,7 @@ class FloatInput(BaseInput):
11
11
  prompt: str | None = None,
12
12
  default_str: StrAttr = "0.0",
13
13
  auto_render: bool = True,
14
- allow_empty: bool = True,
14
+ allow_empty: bool = False,
15
15
  ):
16
16
  super().__init__(
17
17
  name=name,
zrb/input/int_input.py CHANGED
@@ -11,7 +11,7 @@ class IntInput(BaseInput):
11
11
  prompt: str | None = None,
12
12
  default_str: StrAttr = "0",
13
13
  auto_render: bool = True,
14
- allow_empty: bool = True,
14
+ allow_empty: bool = False,
15
15
  ):
16
16
  super().__init__(
17
17
  name=name,
zrb/input/option_input.py CHANGED
@@ -13,7 +13,7 @@ class OptionInput(BaseInput):
13
13
  options: StrListAttr = [],
14
14
  default_str: StrAttr = "",
15
15
  auto_render: bool = True,
16
- allow_empty: bool = True,
16
+ allow_empty: bool = False,
17
17
  ):
18
18
  super().__init__(
19
19
  name=name,
@@ -13,7 +13,7 @@ class PasswordInput(BaseInput):
13
13
  prompt: str | None = None,
14
14
  default_str: str | Callable[[AnySharedContext], str] = "",
15
15
  auto_render: bool = True,
16
- allow_empty: bool = True,
16
+ allow_empty: bool = False,
17
17
  ):
18
18
  super().__init__(
19
19
  name=name,
zrb/input/text_input.py CHANGED
@@ -16,7 +16,7 @@ class TextInput(BaseInput):
16
16
  prompt: str | None = None,
17
17
  default_str: str | Callable[[AnySharedContext], str] = "",
18
18
  auto_render: bool = True,
19
- allow_empty: bool = True,
19
+ allow_empty: bool = False,
20
20
  editor: str = DEFAULT_EDITOR,
21
21
  extension: str = ".txt",
22
22
  comment_start: str | None = None,
zrb/util/load.py CHANGED
@@ -3,6 +3,7 @@ import importlib.util
3
3
  import os
4
4
  import re
5
5
  import sys
6
+ from functools import lru_cache
6
7
  from typing import Any
7
8
 
8
9
  pattern = re.compile("[^a-zA-Z0-9]")
@@ -13,7 +14,7 @@ def load_zrb_init(dir_path: str | None = None):
13
14
  dir_path = os.getcwd()
14
15
  script_path = os.path.join(dir_path, "zrb_init.py")
15
16
  if os.path.isfile(script_path):
16
- load_file(script_path)
17
+ load_file(script_path, -1)
17
18
  return
18
19
  new_dir_path = os.path.dirname(dir_path)
19
20
  if new_dir_path == dir_path:
@@ -21,6 +22,7 @@ def load_zrb_init(dir_path: str | None = None):
21
22
  load_zrb_init(new_dir_path)
22
23
 
23
24
 
25
+ @lru_cache()
24
26
  def load_file(script_path: str, sys_path_index: int = 0):
25
27
  if not os.path.isfile(script_path):
26
28
  return
@@ -45,6 +47,7 @@ def _get_new_python_path(dir_path: str) -> str:
45
47
  return ":".join([current_python_path, dir_path])
46
48
 
47
49
 
50
+ @lru_cache()
48
51
  def load_module(module_name: str) -> Any:
49
52
  module = importlib.import_module(module_name)
50
53
  return module
zrb/util/todo.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import datetime
2
2
  import re
3
+ import shutil
3
4
 
4
5
  from pydantic import BaseModel, Field, model_validator
5
6
 
@@ -32,6 +33,16 @@ class TodoTaskModel(BaseModel):
32
33
  )
33
34
  return values
34
35
 
36
+ def get_additional_info_length(self):
37
+ results = []
38
+ for project in self.projects:
39
+ results.append(f"@{project}")
40
+ for context in self.contexts:
41
+ results.append(f"+{context}")
42
+ for key, val in self.keyval.items():
43
+ results.append(f"{key}:{val}")
44
+ return len(", ".join(results))
45
+
35
46
 
36
47
  TODO_TXT_PATTERN = re.compile(
37
48
  r"^(?P<status>x)?\s*" # Optional completion mark ('x')
@@ -80,7 +91,8 @@ def load_todo_list(todo_file_path: str) -> list[TodoTaskModel]:
80
91
  todo_line = todo_line.strip()
81
92
  if todo_line == "":
82
93
  continue
83
- todo_list.append(line_to_todo_task(todo_line))
94
+ todo_task = line_to_todo_task(todo_line)
95
+ todo_list.append(todo_task)
84
96
  todo_list.sort(
85
97
  key=lambda task: (
86
98
  task.completed,
@@ -173,53 +185,104 @@ def todo_task_to_line(task: TodoTaskModel) -> str:
173
185
  return " ".join(parts)
174
186
 
175
187
 
176
- def get_visual_todo_list(todo_list: list[TodoTaskModel]) -> str:
177
- if len(todo_list) == 0:
188
+ def get_visual_todo_list(todo_list: list[TodoTaskModel], filter: str) -> str:
189
+ todo_filter = line_to_todo_task(filter)
190
+ filtered_todo_list = []
191
+ for todo_task in todo_list:
192
+ filter_description = todo_filter.description.lower().strip()
193
+ if (
194
+ filter_description != ""
195
+ and filter_description not in todo_task.description.lower()
196
+ ):
197
+ continue
198
+ if not all(context in todo_task.contexts for context in todo_filter.contexts):
199
+ continue
200
+ if not all(project in todo_task.projects for project in todo_filter.projects):
201
+ continue
202
+ if not all(
203
+ key in todo_task.keyval and todo_task.keyval[key] == val
204
+ for key, val in todo_filter.keyval.items()
205
+ ):
206
+ continue
207
+ filtered_todo_list.append(todo_task)
208
+ if len(filtered_todo_list) == 0:
178
209
  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")
210
+ max_desc_length = max(
211
+ len(todo_task.description) for todo_task in filtered_todo_list
212
+ )
213
+ if max_desc_length < len("DESCRIPTION"):
214
+ max_desc_length = len("DESCRIPTION")
215
+ if max_desc_length > 70:
216
+ max_desc_length = 70
217
+ max_additional_info_length = max(
218
+ todo_task.get_additional_info_length() for todo_task in filtered_todo_list
219
+ )
220
+ if max_additional_info_length < len("PROJECT/CONTEXT/OTHERS"):
221
+ max_additional_info_length = len("PROJECT/CONTEXT/OTHERS")
222
+ terminal_width, _ = shutil.get_terminal_size()
182
223
  # Headers
183
224
  results = [
184
225
  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
- ]
226
+ get_visual_todo_header(
227
+ terminal_width, max_desc_length, max_additional_info_length
194
228
  )
195
229
  )
196
230
  ]
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
- )
231
+ for todo_task in filtered_todo_list:
208
232
  results.append(
209
- " ".join(
210
- [
211
- completed,
212
- priority,
213
- completion_date,
214
- creation_date,
215
- description,
216
- additions,
217
- ]
233
+ get_visual_todo_line(
234
+ terminal_width, max_desc_length, max_additional_info_length, todo_task
218
235
  )
219
236
  )
220
237
  return "\n".join(results)
221
238
 
222
239
 
240
+ def get_visual_todo_header(
241
+ terminal_width: int, max_desc_length: int, max_additional_info_length: int
242
+ ) -> str:
243
+ priority = "".ljust(3)
244
+ completed = "".ljust(3)
245
+ completed_at = "COMPLETED AT".rjust(14)
246
+ created_at = "CREATED_AT".ljust(14)
247
+ description = "DESCRIPTION".ljust(min(max_desc_length, 70))
248
+ additional_info = "PROJECT/CONTEXT/OTHERS"
249
+ if terminal_width <= 14 + max_desc_length + max_additional_info_length:
250
+ return " ".join([priority, completed, description])
251
+ if terminal_width <= 36 + max_desc_length + max_additional_info_length:
252
+ return " ".join([priority, completed, description, additional_info])
253
+ return " ".join(
254
+ [priority, completed, completed_at, created_at, description, additional_info]
255
+ )
256
+
257
+
258
+ def get_visual_todo_line(
259
+ terminal_width: int,
260
+ max_desc_length: int,
261
+ max_additional_info_length: int,
262
+ todo_task: TodoTaskModel,
263
+ ) -> str:
264
+ completed = "[x]" if todo_task.completed else "[ ]"
265
+ priority = " " if todo_task.priority is None else f"({todo_task.priority})"
266
+ completed_at = stylize_yellow(_date_to_str(todo_task.completion_date))
267
+ created_at = stylize_cyan(_date_to_str(todo_task.creation_date))
268
+ description = todo_task.description.ljust(max_desc_length)
269
+ if len(description) > max_desc_length:
270
+ description = description[: max_desc_length - 4] + " ..."
271
+ description = description[:max_desc_length]
272
+ additional_info = ", ".join(
273
+ [stylize_yellow(f"+{project}") for project in todo_task.projects]
274
+ + [stylize_cyan(f"@{context}") for context in todo_task.contexts]
275
+ + [stylize_magenta(f"{key}:{val}") for key, val in todo_task.keyval.items()]
276
+ )
277
+ if terminal_width <= 14 + max_desc_length + max_additional_info_length:
278
+ return " ".join([priority, completed, description])
279
+ if terminal_width <= 36 + max_desc_length + max_additional_info_length:
280
+ return " ".join([priority, completed, description, additional_info])
281
+ return " ".join(
282
+ [priority, completed, completed_at, created_at, description, additional_info]
283
+ )
284
+
285
+
223
286
  def _date_to_str(date: datetime.date | None) -> str:
224
287
  if date is None:
225
288
  return "".ljust(14)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.0.0a10
3
+ Version: 1.0.0a11
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -13,7 +13,6 @@ Classifier: Programming Language :: Python :: 3
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Classifier: Programming Language :: Python :: 3.11
15
15
  Classifier: Programming Language :: Python :: 3.12
16
- Classifier: Programming Language :: Python :: 3.13
17
16
  Provides-Extra: rag
18
17
  Requires-Dist: autopep8 (>=2.0.4,<3.0.0)
19
18
  Requires-Dist: beautifulsoup4 (>=4.12.3,<5.0.0)
@@ -2,7 +2,7 @@ zrb/__init__.py,sha256=ESskletjBpLO78a6wLigi9wnEGtmhfc3i_rbyMvrSyU,2767
2
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=4NvYylBjihEKRkPjTVtKXi4RGpl422ZZAHJFymhfksc,1661
5
+ zrb/builtin/__init__.py,sha256=nHPQscC9RTZ4Jq5IGUe3xtOWs0nc-Q_N0Y-_7vX1UTE,1712
6
6
  zrb/builtin/base64.py,sha256=1YnSwASp7OEAvQcsnHZGpJEvYoI1Z2zTIJ1bCDHfcPQ,921
7
7
  zrb/builtin/git.py,sha256=ypxGT4JyokYbXMvxdWFG684sEa6x7wht1b4PxpddTMA,4544
8
8
  zrb/builtin/git_subtree.py,sha256=M5Fr8NB4LaC3ra997tzZMLeD4H5o84MvvwefrLcWEIk,3016
@@ -69,27 +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
72
74
  zrb/builtin/setup/common_input.py,sha256=M8q9Unt7dCfBHTHqV3__Mxk9YC2Pl3DDtxat2BanZCQ,870
73
- zrb/builtin/setup/dev/asdf.py,sha256=A7tafOo8K8PlGV9y_GMFNQNmGywEIg3A3o_ReEYcUM4,2418
74
- zrb/builtin/setup/dev/asdf_helper.py,sha256=804vfpsDPH3bpOmpAZyGxJdtwcmxNvuj9i0vaIW2qNI,1318
75
- zrb/builtin/setup/dev/tmux.py,sha256=ndp3iOzrcgRU5EWwuYqhPPGLcBsJUhWzr50rmmXXjlg,1629
76
- zrb/builtin/setup/dev/tmux_config.sh,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
- zrb/builtin/setup/dev/tmux_helper.py,sha256=M03l0wfL25TzGGp6lnVfX40ayT_x7N2lz-nz2chO7PU,396
78
- zrb/builtin/setup/system/latex/ubuntu.py,sha256=jAyzN-LloT9z6V2Ibm0uO-PaEvVu4Vq5c61LSvxq1Ww,584
79
- zrb/builtin/setup/system/ubuntu.py,sha256=oOSN7Eq7arEpY2i0vWHPR2owio6dqqOvceteYrgmbYw,1019
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
80
80
  zrb/builtin/shell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
81
  zrb/builtin/shell/autocomplete/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
82
  zrb/builtin/shell/autocomplete/bash.py,sha256=-7YDVV7txgJH9mAYSYN0jmvUEeDIzWFvVNY-cY0myF8,1181
83
83
  zrb/builtin/shell/autocomplete/subcmd.py,sha256=WZI6cGWJcn80zSyxOHG7sCMO3Ucix3mZf4xm_xyB_Y0,606
84
84
  zrb/builtin/shell/autocomplete/zsh.py,sha256=9hlq0Wt3fhRz326mAQTypEd4_4lZdrbBx_3A-Ti3mvw,1022
85
- zrb/builtin/todo.py,sha256=DSSjFTuMDCvM9O_lo60nszw2FvErgI8K0i8xsM4erKQ,6809
85
+ zrb/builtin/todo.py,sha256=HtSrNXBlWJwfofHCDtmVWKfO66LsrqiltozVDsrpha8,8319
86
86
  zrb/callback/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  zrb/callback/any_callback.py,sha256=Yhdv5UWHAZSVzj5K2JdxcVQx8x8VX8aZJEivj3NTfZc,247
88
88
  zrb/callback/callback.py,sha256=IQ7r9EnXYHHcNXKBJAk4WFqCqj7WDvflAuCyu5y-27I,849
89
89
  zrb/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
90
  zrb/cmd/cmd_result.py,sha256=L8bQJzWCpcYexIxHBNsXj2pT3BtLmWex0iJSMkvimOA,597
91
91
  zrb/cmd/cmd_val.py,sha256=LGuE85zQt0KSjpmW7bwIE5dnfIq-ULB8V2CDAiQ-SFk,960
92
- zrb/config.py,sha256=5SACqVu_-Qsmv9L7cta4NeVdA9Q9DpxgYGGOlaWI2x4,3013
92
+ zrb/config.py,sha256=M__WVxBTU9zMxZvm1t2icEV8oU6-QK0Edl1XDyhJ9c8,3067
93
93
  zrb/content_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
94
  zrb/content_transformer/any_content_transformer.py,sha256=3XHM6ZdsJFXxRD7YlUkv0Gn7-mexsH8c8zdHt3C0x8k,741
95
95
  zrb/content_transformer/content_transformer.py,sha256=8luyLZZneBIBAMgGZvydy0TTjhI-TWFgEiQbuCxCAbk,1640
@@ -110,14 +110,14 @@ zrb/group/any_group.py,sha256=1rNcsi5eu_86JAx_6Jy46SK4BTeppcb89MORynJd-4o,1115
110
110
  zrb/group/group.py,sha256=KVaBZQ9Evihm84JCg5ZayWMbbA6iNTUiLmMgCk4OTcc,1862
111
111
  zrb/input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  zrb/input/any_input.py,sha256=07KgoPusxLMOwBHRjiImL955J33qC-24qGf_3My6fCE,701
113
- zrb/input/base_input.py,sha256=zW2X2H-s4snu_xthgHwEsbBlqDwFbSKMxt4F1PaZW7w,2572
114
- zrb/input/bool_input.py,sha256=Pgr34bpVpXkR3rrxnF_rsST-yGv_XvCWra9z9589Iyo,1383
115
- zrb/input/float_input.py,sha256=YOPxMq6iOQXc0C3fS1k03fBSzToPV-gK5IFeuyMtlmQ,1004
116
- zrb/input/int_input.py,sha256=DmzgGjaxgq3uLUtjI8VVvYDAwol3lu2InPBcltR_BLE,1005
117
- zrb/input/option_input.py,sha256=KE2gJqxYT0I1M60KQf9eJ14xOscBla42FxUWdw3UvsQ,1940
118
- 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
119
119
  zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
120
- zrb/input/text_input.py,sha256=te86xFpzIZnWb9xOeKHykNKTbY3pe1CdoaRCKr7UUQM,3054
120
+ zrb/input/text_input.py,sha256=ju-DgBRK3RpuWNomZXcw3V5QAgaMGeTFaNn_MKM13Xc,3055
121
121
  zrb/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
122
  zrb/runner/cli.py,sha256=tM61thLwJNfjrHFVJqWmGuzE0MB273JZ8ANlROsKH1E,7024
123
123
  zrb/runner/web_app.py,sha256=giULuphQhb_lJP95RiXm5i-Uk9MrnIrSXhRVLK73-8s,5987
@@ -192,16 +192,16 @@ zrb/util/git.py,sha256=QNGvJJ9kY1Hy6WNO4d22D_GXyC1l3yGtTOMJ9nXqqpc,5151
192
192
  zrb/util/git_subtree.py,sha256=DidHZdKcpylomlJLiUyQJSpPSXaY399e-97H0WbOcvs,2619
193
193
  zrb/util/group.py,sha256=Bg7HrSycoK110U5s_Tca6-uUQuZ5CMgb8wxZSrvDQ98,2790
194
194
  zrb/util/llm/tool.py,sha256=9ezbPEAyMKLWABgeqAimJ82KBFl7ciWNFVGhtllXg6s,2106
195
- zrb/util/load.py,sha256=VMScnycP8blLFOGXjFAKShbV-yvPXwRA_J2vt96T-wc,1552
195
+ zrb/util/load.py,sha256=GEhvaS5ne25Pf5dPTOK_yuxZ-kHqZ0xe6WjfehLOAZA,1614
196
196
  zrb/util/run.py,sha256=DGHUP9x1Q8V8UF3FbpmjLGuhVVCCLfjTH2teT8qXlNI,207
197
197
  zrb/util/string/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  zrb/util/string/conversion.py,sha256=utfzaCLS2LTWMr9YbjXt2Z0a_pgzOjq76ZEPUh2UKCc,2876
199
199
  zrb/util/string/format.py,sha256=c9dUrsl_DII7jZZPJi9NBTvxKnrzZDPcQuksW6FJ_Lk,611
200
200
  zrb/util/string/name.py,sha256=8picJfUBXNpdh64GNaHv3om23QHhUZux7DguFLrXHp8,1163
201
- zrb/util/todo.py,sha256=Nbe1a-7O5FSkIE7BZxQQt7AhbHFPDbreJJI6C7Rga4o,9171
201
+ zrb/util/todo.py,sha256=adJAVujaL56XrHewELnVluCQXQe7zPAIk60m4iVmZ6Q,11778
202
202
  zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
203
203
  zrb/xcom/xcom.py,sha256=P4aYHdE3FRsTsNrXGyW8N44IWZjw-vG_qys1Ymn3aBg,1572
204
- zrb-1.0.0a10.dist-info/METADATA,sha256=cXpfLAoOTH7MJvY7WI6Qjqnx7rcm5Yki_i2yrrgYQes,4157
205
- zrb-1.0.0a10.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
206
- zrb-1.0.0a10.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
207
- zrb-1.0.0a10.dist-info/RECORD,,
204
+ zrb-1.0.0a11.dist-info/METADATA,sha256=aQFpB9i0W5sQ94T41BtjOnce-fk4BhWCr-E1up1S4Jk,4106
205
+ zrb-1.0.0a11.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
206
+ zrb-1.0.0a11.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
207
+ zrb-1.0.0a11.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
File without changes
File without changes
File without changes
File without changes