falyx 0.1.21__py3-none-any.whl → 0.1.22__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.
- falyx/__main__.py +2 -0
- falyx/command.py +6 -0
- falyx/config.py +28 -3
- falyx/falyx.py +31 -7
- falyx/io_action.py +1 -0
- falyx/parsers.py +13 -1
- falyx/select_file_action.py +3 -1
- falyx/selection.py +69 -59
- falyx/selection_action.py +4 -3
- falyx/version.py +1 -1
- {falyx-0.1.21.dist-info → falyx-0.1.22.dist-info}/METADATA +1 -1
- {falyx-0.1.21.dist-info → falyx-0.1.22.dist-info}/RECORD +15 -15
- {falyx-0.1.21.dist-info → falyx-0.1.22.dist-info}/LICENSE +0 -0
- {falyx-0.1.21.dist-info → falyx-0.1.22.dist-info}/WHEEL +0 -0
- {falyx-0.1.21.dist-info → falyx-0.1.22.dist-info}/entry_points.txt +0 -0
falyx/__main__.py
CHANGED
@@ -14,6 +14,7 @@ from typing import Any
|
|
14
14
|
from falyx.config import loader
|
15
15
|
from falyx.falyx import Falyx
|
16
16
|
from falyx.parsers import FalyxParsers, get_arg_parsers
|
17
|
+
from falyx.themes.colors import OneColors
|
17
18
|
|
18
19
|
|
19
20
|
def find_falyx_config() -> Path | None:
|
@@ -71,6 +72,7 @@ def run(args: Namespace) -> Any:
|
|
71
72
|
title="🛠️ Config-Driven CLI",
|
72
73
|
cli_args=args,
|
73
74
|
columns=4,
|
75
|
+
prompt=[(OneColors.BLUE_b, "FALYX > ")],
|
74
76
|
)
|
75
77
|
flx.add_commands(loader(bootstrap_path))
|
76
78
|
return asyncio.run(flx.run())
|
falyx/command.py
CHANGED
@@ -272,15 +272,21 @@ class Command(BaseModel):
|
|
272
272
|
if hasattr(self.action, "preview") and callable(self.action.preview):
|
273
273
|
tree = Tree(label)
|
274
274
|
await self.action.preview(parent=tree)
|
275
|
+
if self.help_text:
|
276
|
+
tree.add(f"[dim]💡 {self.help_text}[/dim]")
|
275
277
|
console.print(tree)
|
276
278
|
elif callable(self.action) and not isinstance(self.action, BaseAction):
|
277
279
|
console.print(f"{label}")
|
280
|
+
if self.help_text:
|
281
|
+
console.print(f"[dim]💡 {self.help_text}[/dim]")
|
278
282
|
console.print(
|
279
283
|
f"[{OneColors.LIGHT_RED_b}]→ Would call:[/] {self.action.__name__}"
|
280
284
|
f"[dim](args={self.args}, kwargs={self.kwargs})[/dim]"
|
281
285
|
)
|
282
286
|
else:
|
283
287
|
console.print(f"{label}")
|
288
|
+
if self.help_text:
|
289
|
+
console.print(f"[dim]💡 {self.help_text}[/dim]")
|
284
290
|
console.print(
|
285
291
|
f"[{OneColors.DARK_RED}]⚠️ Action is not callable or lacks a preview method.[/]"
|
286
292
|
)
|
falyx/config.py
CHANGED
@@ -3,15 +3,21 @@
|
|
3
3
|
Configuration loader for Falyx CLI commands."""
|
4
4
|
|
5
5
|
import importlib
|
6
|
+
import sys
|
6
7
|
from pathlib import Path
|
7
8
|
from typing import Any
|
8
9
|
|
9
10
|
import toml
|
10
11
|
import yaml
|
12
|
+
from rich.console import Console
|
11
13
|
|
12
14
|
from falyx.action import Action, BaseAction
|
13
15
|
from falyx.command import Command
|
14
16
|
from falyx.retry import RetryPolicy
|
17
|
+
from falyx.themes.colors import OneColors
|
18
|
+
from falyx.utils import logger
|
19
|
+
|
20
|
+
console = Console(color_system="auto")
|
15
21
|
|
16
22
|
|
17
23
|
def wrap_if_needed(obj: Any, name=None) -> BaseAction | Command:
|
@@ -30,9 +36,28 @@ def import_action(dotted_path: str) -> Any:
|
|
30
36
|
"""Dynamically imports a callable from a dotted path like 'my.module.func'."""
|
31
37
|
module_path, _, attr = dotted_path.rpartition(".")
|
32
38
|
if not module_path:
|
33
|
-
|
34
|
-
|
35
|
-
|
39
|
+
console.print(f"[{OneColors.DARK_RED}]❌ Invalid action path:[/] {dotted_path}")
|
40
|
+
sys.exit(1)
|
41
|
+
try:
|
42
|
+
module = importlib.import_module(module_path)
|
43
|
+
except ModuleNotFoundError as error:
|
44
|
+
logger.error("Failed to import module '%s': %s", module_path, error)
|
45
|
+
console.print(
|
46
|
+
f"[{OneColors.DARK_RED}]❌ Could not import '{dotted_path}': {error}[/]\n"
|
47
|
+
f"[{OneColors.COMMENT_GREY}]Ensure the module is installed and discoverable via PYTHONPATH."
|
48
|
+
)
|
49
|
+
sys.exit(1)
|
50
|
+
try:
|
51
|
+
action = getattr(module, attr)
|
52
|
+
except AttributeError as error:
|
53
|
+
logger.error(
|
54
|
+
"Module '%s' does not have attribute '%s': %s", module_path, attr, error
|
55
|
+
)
|
56
|
+
console.print(
|
57
|
+
f"[{OneColors.DARK_RED}]❌ Module '{module_path}' has no attribute '{attr}': {error}[/]"
|
58
|
+
)
|
59
|
+
sys.exit(1)
|
60
|
+
return action
|
36
61
|
|
37
62
|
|
38
63
|
def loader(file_path: Path | str) -> list[dict[str, Any]]:
|
falyx/falyx.py
CHANGED
@@ -283,7 +283,7 @@ class Falyx:
|
|
283
283
|
self.console.print(table, justify="center")
|
284
284
|
if self.mode == FalyxMode.MENU:
|
285
285
|
self.console.print(
|
286
|
-
f"📦 Tip:
|
286
|
+
f"📦 Tip: '[{OneColors.LIGHT_YELLOW}]?[KEY][/]' to preview a command before running it.\n",
|
287
287
|
justify="center",
|
288
288
|
)
|
289
289
|
|
@@ -343,7 +343,9 @@ class Falyx:
|
|
343
343
|
error_message = " ".join(message_lines)
|
344
344
|
|
345
345
|
def validator(text):
|
346
|
-
|
346
|
+
is_preview, choice = self.get_command(text, from_validate=True)
|
347
|
+
if is_preview and choice is None:
|
348
|
+
return True
|
347
349
|
return True if choice else False
|
348
350
|
|
349
351
|
return Validator.from_callable(
|
@@ -694,6 +696,13 @@ class Falyx:
|
|
694
696
|
) -> tuple[bool, Command | None]:
|
695
697
|
"""Returns the selected command based on user input. Supports keys, aliases, and abbreviations."""
|
696
698
|
is_preview, choice = self.parse_preview_command(choice)
|
699
|
+
if is_preview and not choice:
|
700
|
+
if not from_validate:
|
701
|
+
self.console.print(
|
702
|
+
f"[{OneColors.DARK_RED}]❌ You must enter a command for preview mode.[/]"
|
703
|
+
)
|
704
|
+
return is_preview, None
|
705
|
+
|
697
706
|
choice = choice.upper()
|
698
707
|
name_map = self._name_map
|
699
708
|
|
@@ -788,12 +797,17 @@ class Falyx:
|
|
788
797
|
async def run_key(self, command_key: str, return_context: bool = False) -> Any:
|
789
798
|
"""Run a command by key without displaying the menu (non-interactive mode)."""
|
790
799
|
self.debug_hooks()
|
791
|
-
|
800
|
+
is_preview, selected_command = self.get_command(command_key)
|
792
801
|
self.last_run_command = selected_command
|
793
802
|
|
794
803
|
if not selected_command:
|
795
804
|
return None
|
796
805
|
|
806
|
+
if is_preview:
|
807
|
+
logger.info(f"Preview command '{selected_command.key}' selected.")
|
808
|
+
await selected_command.preview()
|
809
|
+
return None
|
810
|
+
|
797
811
|
logger.info(
|
798
812
|
"[run_key] 🚀 Executing: %s — %s",
|
799
813
|
selected_command.key,
|
@@ -943,11 +957,14 @@ class Falyx:
|
|
943
957
|
|
944
958
|
if self.cli_args.command == "run":
|
945
959
|
self.mode = FalyxMode.RUN
|
946
|
-
|
960
|
+
is_preview, command = self.get_command(self.cli_args.name)
|
961
|
+
if is_preview:
|
962
|
+
if command is None:
|
963
|
+
sys.exit(1)
|
964
|
+
logger.info(f"Preview command '{command.key}' selected.")
|
965
|
+
await command.preview()
|
966
|
+
sys.exit(0)
|
947
967
|
if not command:
|
948
|
-
self.console.print(
|
949
|
-
f"[{OneColors.DARK_RED}]❌ Command '{self.cli_args.name}' not found.[/]"
|
950
|
-
)
|
951
968
|
sys.exit(1)
|
952
969
|
self._set_retry_policy(command)
|
953
970
|
try:
|
@@ -955,6 +972,9 @@ class Falyx:
|
|
955
972
|
except FalyxError as error:
|
956
973
|
self.console.print(f"[{OneColors.DARK_RED}]❌ Error: {error}[/]")
|
957
974
|
sys.exit(1)
|
975
|
+
|
976
|
+
if self.cli_args.summary:
|
977
|
+
er.summary()
|
958
978
|
sys.exit(0)
|
959
979
|
|
960
980
|
if self.cli_args.command == "run-all":
|
@@ -976,6 +996,10 @@ class Falyx:
|
|
976
996
|
for cmd in matching:
|
977
997
|
self._set_retry_policy(cmd)
|
978
998
|
await self.run_key(cmd.key)
|
999
|
+
|
1000
|
+
if self.cli_args.summary:
|
1001
|
+
er.summary()
|
1002
|
+
|
979
1003
|
sys.exit(0)
|
980
1004
|
|
981
1005
|
await self.menu()
|
falyx/io_action.py
CHANGED
falyx/parsers.py
CHANGED
@@ -36,7 +36,9 @@ def get_arg_parsers(
|
|
36
36
|
prog: str | None = "falyx",
|
37
37
|
usage: str | None = None,
|
38
38
|
description: str | None = "Falyx CLI - Run structured async command workflows.",
|
39
|
-
epilog:
|
39
|
+
epilog: (
|
40
|
+
str | None
|
41
|
+
) = "Tip: Use 'falyx run ?[COMMAND]' to preview any command from the CLI.",
|
40
42
|
parents: Sequence[ArgumentParser] = [],
|
41
43
|
prefix_chars: str = "-",
|
42
44
|
fromfile_prefix_chars: str | None = None,
|
@@ -79,6 +81,11 @@ def get_arg_parsers(
|
|
79
81
|
|
80
82
|
run_parser = subparsers.add_parser("run", help="Run a specific command")
|
81
83
|
run_parser.add_argument("name", help="Key, alias, or description of the command")
|
84
|
+
run_parser.add_argument(
|
85
|
+
"--summary",
|
86
|
+
action="store_true",
|
87
|
+
help="Print an execution summary after command completes",
|
88
|
+
)
|
82
89
|
run_parser.add_argument(
|
83
90
|
"--retries", type=int, help="Number of retries on failure", default=0
|
84
91
|
)
|
@@ -111,6 +118,11 @@ def get_arg_parsers(
|
|
111
118
|
"run-all", help="Run all commands with a given tag"
|
112
119
|
)
|
113
120
|
run_all_parser.add_argument("-t", "--tag", required=True, help="Tag to match")
|
121
|
+
run_all_parser.add_argument(
|
122
|
+
"--summary",
|
123
|
+
action="store_true",
|
124
|
+
help="Print a summary after all tagged commands run",
|
125
|
+
)
|
114
126
|
run_all_parser.add_argument(
|
115
127
|
"--retries", type=int, help="Number of retries on failure", default=0
|
116
128
|
)
|
falyx/select_file_action.py
CHANGED
@@ -137,7 +137,9 @@ class SelectFileAction(BaseAction):
|
|
137
137
|
|
138
138
|
options = self.get_options(files)
|
139
139
|
|
140
|
-
table = render_selection_dict_table(
|
140
|
+
table = render_selection_dict_table(
|
141
|
+
title=self.title, selections=options, columns=self.columns
|
142
|
+
)
|
141
143
|
|
142
144
|
key = await prompt_for_selection(
|
143
145
|
options.keys(),
|
falyx/selection.py
CHANGED
@@ -31,6 +31,7 @@ class SelectionOption:
|
|
31
31
|
|
32
32
|
def render_table_base(
|
33
33
|
title: str,
|
34
|
+
*,
|
34
35
|
caption: str = "",
|
35
36
|
columns: int = 4,
|
36
37
|
box_style: box.Box = box.SIMPLE,
|
@@ -71,6 +72,7 @@ def render_table_base(
|
|
71
72
|
def render_selection_grid(
|
72
73
|
title: str,
|
73
74
|
selections: Sequence[str],
|
75
|
+
*,
|
74
76
|
columns: int = 4,
|
75
77
|
caption: str = "",
|
76
78
|
box_style: box.Box = box.SIMPLE,
|
@@ -86,19 +88,19 @@ def render_selection_grid(
|
|
86
88
|
) -> Table:
|
87
89
|
"""Create a selection table with the given parameters."""
|
88
90
|
table = render_table_base(
|
89
|
-
title,
|
90
|
-
caption,
|
91
|
-
columns,
|
92
|
-
box_style,
|
93
|
-
show_lines,
|
94
|
-
show_header,
|
95
|
-
show_footer,
|
96
|
-
style,
|
97
|
-
header_style,
|
98
|
-
footer_style,
|
99
|
-
title_style,
|
100
|
-
caption_style,
|
101
|
-
highlight,
|
91
|
+
title=title,
|
92
|
+
caption=caption,
|
93
|
+
columns=columns,
|
94
|
+
box_style=box_style,
|
95
|
+
show_lines=show_lines,
|
96
|
+
show_header=show_header,
|
97
|
+
show_footer=show_footer,
|
98
|
+
style=style,
|
99
|
+
header_style=header_style,
|
100
|
+
footer_style=footer_style,
|
101
|
+
title_style=title_style,
|
102
|
+
caption_style=caption_style,
|
103
|
+
highlight=highlight,
|
102
104
|
)
|
103
105
|
|
104
106
|
for chunk in chunks(selections, columns):
|
@@ -110,6 +112,7 @@ def render_selection_grid(
|
|
110
112
|
def render_selection_indexed_table(
|
111
113
|
title: str,
|
112
114
|
selections: Sequence[str],
|
115
|
+
*,
|
113
116
|
columns: int = 4,
|
114
117
|
caption: str = "",
|
115
118
|
box_style: box.Box = box.SIMPLE,
|
@@ -126,19 +129,19 @@ def render_selection_indexed_table(
|
|
126
129
|
) -> Table:
|
127
130
|
"""Create a selection table with the given parameters."""
|
128
131
|
table = render_table_base(
|
129
|
-
title,
|
130
|
-
caption,
|
131
|
-
columns,
|
132
|
-
box_style,
|
133
|
-
show_lines,
|
134
|
-
show_header,
|
135
|
-
show_footer,
|
136
|
-
style,
|
137
|
-
header_style,
|
138
|
-
footer_style,
|
139
|
-
title_style,
|
140
|
-
caption_style,
|
141
|
-
highlight,
|
132
|
+
title=title,
|
133
|
+
caption=caption,
|
134
|
+
columns=columns,
|
135
|
+
box_style=box_style,
|
136
|
+
show_lines=show_lines,
|
137
|
+
show_header=show_header,
|
138
|
+
show_footer=show_footer,
|
139
|
+
style=style,
|
140
|
+
header_style=header_style,
|
141
|
+
footer_style=footer_style,
|
142
|
+
title_style=title_style,
|
143
|
+
caption_style=caption_style,
|
144
|
+
highlight=highlight,
|
142
145
|
)
|
143
146
|
|
144
147
|
for indexes, chunk in zip(
|
@@ -156,6 +159,7 @@ def render_selection_indexed_table(
|
|
156
159
|
def render_selection_dict_table(
|
157
160
|
title: str,
|
158
161
|
selections: dict[str, SelectionOption],
|
162
|
+
*,
|
159
163
|
columns: int = 2,
|
160
164
|
caption: str = "",
|
161
165
|
box_style: box.Box = box.SIMPLE,
|
@@ -171,19 +175,19 @@ def render_selection_dict_table(
|
|
171
175
|
) -> Table:
|
172
176
|
"""Create a selection table with the given parameters."""
|
173
177
|
table = render_table_base(
|
174
|
-
title,
|
175
|
-
caption,
|
176
|
-
columns,
|
177
|
-
box_style,
|
178
|
-
show_lines,
|
179
|
-
show_header,
|
180
|
-
show_footer,
|
181
|
-
style,
|
182
|
-
header_style,
|
183
|
-
footer_style,
|
184
|
-
title_style,
|
185
|
-
caption_style,
|
186
|
-
highlight,
|
178
|
+
title=title,
|
179
|
+
caption=caption,
|
180
|
+
columns=columns,
|
181
|
+
box_style=box_style,
|
182
|
+
show_lines=show_lines,
|
183
|
+
show_header=show_header,
|
184
|
+
show_footer=show_footer,
|
185
|
+
style=style,
|
186
|
+
header_style=header_style,
|
187
|
+
footer_style=footer_style,
|
188
|
+
title_style=title_style,
|
189
|
+
caption_style=caption_style,
|
190
|
+
highlight=highlight,
|
187
191
|
)
|
188
192
|
|
189
193
|
for chunk in chunks(selections.items(), columns):
|
@@ -200,6 +204,7 @@ def render_selection_dict_table(
|
|
200
204
|
async def prompt_for_index(
|
201
205
|
max_index: int,
|
202
206
|
table: Table,
|
207
|
+
*,
|
203
208
|
min_index: int = 0,
|
204
209
|
default_selection: str = "",
|
205
210
|
console: Console | None = None,
|
@@ -224,6 +229,7 @@ async def prompt_for_index(
|
|
224
229
|
async def prompt_for_selection(
|
225
230
|
keys: Sequence[str] | KeysView[str],
|
226
231
|
table: Table,
|
232
|
+
*,
|
227
233
|
default_selection: str = "",
|
228
234
|
console: Console | None = None,
|
229
235
|
prompt_session: PromptSession | None = None,
|
@@ -249,6 +255,7 @@ async def prompt_for_selection(
|
|
249
255
|
async def select_value_from_list(
|
250
256
|
title: str,
|
251
257
|
selections: Sequence[str],
|
258
|
+
*,
|
252
259
|
console: Console | None = None,
|
253
260
|
prompt_session: PromptSession | None = None,
|
254
261
|
prompt_message: str = "Select an option > ",
|
@@ -268,20 +275,20 @@ async def select_value_from_list(
|
|
268
275
|
):
|
269
276
|
"""Prompt for a selection. Return the selected item."""
|
270
277
|
table = render_selection_indexed_table(
|
271
|
-
title,
|
272
|
-
selections,
|
273
|
-
columns,
|
274
|
-
caption,
|
275
|
-
box_style,
|
276
|
-
show_lines,
|
277
|
-
show_header,
|
278
|
-
show_footer,
|
279
|
-
style,
|
280
|
-
header_style,
|
281
|
-
footer_style,
|
282
|
-
title_style,
|
283
|
-
caption_style,
|
284
|
-
highlight,
|
278
|
+
title=title,
|
279
|
+
selections=selections,
|
280
|
+
columns=columns,
|
281
|
+
caption=caption,
|
282
|
+
box_style=box_style,
|
283
|
+
show_lines=show_lines,
|
284
|
+
show_header=show_header,
|
285
|
+
show_footer=show_footer,
|
286
|
+
style=style,
|
287
|
+
header_style=header_style,
|
288
|
+
footer_style=footer_style,
|
289
|
+
title_style=title_style,
|
290
|
+
caption_style=caption_style,
|
291
|
+
highlight=highlight,
|
285
292
|
)
|
286
293
|
prompt_session = prompt_session or PromptSession()
|
287
294
|
console = console or Console(color_system="auto")
|
@@ -301,6 +308,7 @@ async def select_value_from_list(
|
|
301
308
|
async def select_key_from_dict(
|
302
309
|
selections: dict[str, SelectionOption],
|
303
310
|
table: Table,
|
311
|
+
*,
|
304
312
|
console: Console | None = None,
|
305
313
|
prompt_session: PromptSession | None = None,
|
306
314
|
prompt_message: str = "Select an option > ",
|
@@ -325,6 +333,7 @@ async def select_key_from_dict(
|
|
325
333
|
async def select_value_from_dict(
|
326
334
|
selections: dict[str, SelectionOption],
|
327
335
|
table: Table,
|
336
|
+
*,
|
328
337
|
console: Console | None = None,
|
329
338
|
prompt_session: PromptSession | None = None,
|
330
339
|
prompt_message: str = "Select an option > ",
|
@@ -351,6 +360,7 @@ async def select_value_from_dict(
|
|
351
360
|
async def get_selection_from_dict_menu(
|
352
361
|
title: str,
|
353
362
|
selections: dict[str, SelectionOption],
|
363
|
+
*,
|
354
364
|
console: Console | None = None,
|
355
365
|
prompt_session: PromptSession | None = None,
|
356
366
|
prompt_message: str = "Select an option > ",
|
@@ -363,10 +373,10 @@ async def get_selection_from_dict_menu(
|
|
363
373
|
)
|
364
374
|
|
365
375
|
return await select_value_from_dict(
|
366
|
-
selections,
|
367
|
-
table,
|
368
|
-
console,
|
369
|
-
prompt_session,
|
370
|
-
prompt_message,
|
371
|
-
default_selection,
|
376
|
+
selections=selections,
|
377
|
+
table=table,
|
378
|
+
console=console,
|
379
|
+
prompt_session=prompt_session,
|
380
|
+
prompt_message=prompt_message,
|
381
|
+
default_selection=default_selection,
|
372
382
|
)
|
falyx/selection_action.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# Falyx CLI Framework — (c) 2025 rtj.dev LLC — MIT Licensed
|
2
2
|
"""selection_action.py"""
|
3
|
-
from pathlib import Path
|
4
3
|
from typing import Any
|
5
4
|
|
6
5
|
from prompt_toolkit import PromptSession
|
@@ -117,7 +116,9 @@ class SelectionAction(BaseAction):
|
|
117
116
|
await self.hooks.trigger(HookType.BEFORE, context)
|
118
117
|
if isinstance(self.selections, list):
|
119
118
|
table = render_selection_indexed_table(
|
120
|
-
self.title,
|
119
|
+
title=self.title,
|
120
|
+
selections=self.selections,
|
121
|
+
columns=self.columns,
|
121
122
|
)
|
122
123
|
if not self.never_prompt:
|
123
124
|
index = await prompt_for_index(
|
@@ -134,7 +135,7 @@ class SelectionAction(BaseAction):
|
|
134
135
|
result = self.selections[int(index)]
|
135
136
|
elif isinstance(self.selections, dict):
|
136
137
|
table = render_selection_dict_table(
|
137
|
-
self.title, self.selections, self.columns
|
138
|
+
title=self.title, selections=self.selections, columns=self.columns
|
138
139
|
)
|
139
140
|
if not self.never_prompt:
|
140
141
|
key = await prompt_for_selection(
|
falyx/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.
|
1
|
+
__version__ = "0.1.22"
|
@@ -1,40 +1,40 @@
|
|
1
1
|
falyx/.pytyped,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
falyx/__init__.py,sha256=dYRamQJlT1Zoy5Uu1uG4NCV05Xk98nN1LAQrSR1CT2A,643
|
3
|
-
falyx/__main__.py,sha256=
|
3
|
+
falyx/__main__.py,sha256=559pd3P1iScvC-V__gfXUbEQTxeV7PXlRcQI9kpMQcg,2286
|
4
4
|
falyx/action.py,sha256=J-SG5zltYbqtdvTwBBUeEj4jp44DOKBR6G5rvmdkkTs,32147
|
5
5
|
falyx/action_factory.py,sha256=SMucCBuigKk3rlKXCEN69Sew4dVaBUxQqxyUUAHMZeo,3629
|
6
6
|
falyx/bottom_bar.py,sha256=NTen52Nfz32eWSBmJtEUuJO33u5sGQj-33IeudPVsqQ,7403
|
7
|
-
falyx/command.py,sha256=
|
8
|
-
falyx/config.py,sha256=
|
7
|
+
falyx/command.py,sha256=8J3xeHw3fYiqf05EUbXd--aEIJso5bzxb5JECGuISQk,12199
|
8
|
+
falyx/config.py,sha256=MnZeyti2TpeuOKrvXVaslIxYPHFyE4liREJsmUKlySg,5455
|
9
9
|
falyx/context.py,sha256=Dm7HV-eigU-aTv5ERah6Ow9fIRdrOsB1G6ETPIu42Gw,10070
|
10
10
|
falyx/debug.py,sha256=-jbTti29UC5zP9qQlWs3TbkOQR2f3zKSuNluh-r56wY,1551
|
11
11
|
falyx/exceptions.py,sha256=YVbhPp2BNvZoO_xqeGSRKHVQ2rdLOLf1HCjH4JTj9w8,776
|
12
12
|
falyx/execution_registry.py,sha256=IZvZr2hElzsYcMX3bAXg7sc7V2zi4RURn0OR7de2iCo,2864
|
13
|
-
falyx/falyx.py,sha256=
|
13
|
+
falyx/falyx.py,sha256=Yj7dYpEiqnswVRWSJyqS45wlRTUKvABIQR8Bh2axA9I,40453
|
14
14
|
falyx/hook_manager.py,sha256=E9Vk4bdoUTeXPQ_BQEvY2Jt-jUAusc40LI8JDy3NLUw,2381
|
15
15
|
falyx/hooks.py,sha256=9zXk62DsJLJrmwTdyeNy5s-rVRvl8feuYRrfMmz6cVQ,2802
|
16
16
|
falyx/http_action.py,sha256=JfopEleXJ0goVHi0VCn983c22GrmJhobnPIP7sTRqzU,5796
|
17
17
|
falyx/init.py,sha256=jP4ZNw7ycDMKw4n1HDifxWSa0NYHaGLq7_LiFt85NpA,1832
|
18
|
-
falyx/io_action.py,sha256=
|
18
|
+
falyx/io_action.py,sha256=mBRX8rqQ11gkcUnJluZ87XT4QBA1oFkof6PaCtuK5o8,8997
|
19
19
|
falyx/menu_action.py,sha256=kagtnn3djDxUm_Cyynp0lj-sZ9D_FZn4IEBYnFYqB74,7986
|
20
20
|
falyx/options_manager.py,sha256=yYpn-moYN-bRYgMLccmi_de4mUzhTT7cv_bR2FFWZ8c,2798
|
21
|
-
falyx/parsers.py,sha256=
|
21
|
+
falyx/parsers.py,sha256=r2FZTN26PqrnEQG4hVPorzzTPQZihsb4ca23fQY4Lgo,5574
|
22
22
|
falyx/prompt_utils.py,sha256=JOg3p8Juv6ZdY1srfy_HlMNYfE-ajggDWLqNsjZq87I,560
|
23
23
|
falyx/protocols.py,sha256=yNtQEugq9poN-SbOJf5LL_j6HBWdglbTNghpyopLpTs,216
|
24
24
|
falyx/retry.py,sha256=GncBUiDDfDHUvLsWsWQw2Nq2XYL0TR0Fne3iXPzvQ48,3551
|
25
25
|
falyx/retry_utils.py,sha256=SN5apcsg71IG2-KylysqdJd-PkPBLoCVwsgrSTF9wrQ,666
|
26
|
-
falyx/select_file_action.py,sha256=
|
27
|
-
falyx/selection.py,sha256=
|
28
|
-
falyx/selection_action.py,sha256=
|
26
|
+
falyx/select_file_action.py,sha256=5Pt9ThIfwqd8ZJLEVDapevV6SF_AQEQFkk-i9Y1to_Q,7315
|
27
|
+
falyx/selection.py,sha256=aeJZPDwb5LR9e9iTjCYx4D5bh1mWyn3uBPA-M1AXdAw,10553
|
28
|
+
falyx/selection_action.py,sha256=MAKZeDwfCEE3hOoL1hpiMVlFUEDYV6X0oNCVGEcT_ZU,8324
|
29
29
|
falyx/signal_action.py,sha256=wfhW9miSUj9MUoc1WOyk4tU9CtYKAXusHxQdBPYLoyQ,829
|
30
30
|
falyx/signals.py,sha256=tlUbz3x6z3rYlUggan_Ntoy4bU5RbOd8UfR4cNcV6kQ,694
|
31
31
|
falyx/tagged_table.py,sha256=sn2kosRRpcpeMB8vKk47c9yjpffSz_9FXH_e6kw15mA,1019
|
32
32
|
falyx/themes/colors.py,sha256=4aaeAHJetmeNInI0Zytg4E3YqKfPFelpf04vtjSvsS8,19776
|
33
33
|
falyx/utils.py,sha256=b1GQ3ooz4Io3zPE7MsoDm7j42AioTG-ZcWH-N2TRpbI,7710
|
34
34
|
falyx/validators.py,sha256=NMxqCk8Fr8HQGVDYpg8B_JRk5SKR41E_G9gj1YfQnxg,1316
|
35
|
-
falyx/version.py,sha256=
|
36
|
-
falyx-0.1.
|
37
|
-
falyx-0.1.
|
38
|
-
falyx-0.1.
|
39
|
-
falyx-0.1.
|
40
|
-
falyx-0.1.
|
35
|
+
falyx/version.py,sha256=zmP2TRnzKPjZJ1eiBcT-cRInsji6FW-OVD3FafQFCc4,23
|
36
|
+
falyx-0.1.22.dist-info/LICENSE,sha256=B0yqgaHuSdhN7T3OBmgQSiDTy8HqT5Oe_dLypRe4Ra4,1073
|
37
|
+
falyx-0.1.22.dist-info/METADATA,sha256=jXADXacZ3y4WPCwGkMSg5aGsseu-G98twHd2YIK5Hzg,5484
|
38
|
+
falyx-0.1.22.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
39
|
+
falyx-0.1.22.dist-info/entry_points.txt,sha256=j8owOSl2j1Ss8DtGMnKfgehKaolqnIPhVFHaUBLUnMs,45
|
40
|
+
falyx-0.1.22.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|