falyx 0.1.26__py3-none-any.whl → 0.1.28__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/action/__init__.py +2 -0
- falyx/action/action_factory.py +11 -2
- falyx/action/menu_action.py +4 -0
- falyx/action/user_input_action.py +94 -0
- falyx/argparse.py +596 -0
- falyx/command.py +35 -4
- falyx/exceptions.py +4 -0
- falyx/execution_registry.py +1 -1
- falyx/falyx.py +95 -43
- falyx/parsers.py +7 -1
- falyx/protocols.py +8 -2
- falyx/signals.py +14 -0
- falyx/utils.py +1 -0
- falyx/version.py +1 -1
- {falyx-0.1.26.dist-info → falyx-0.1.28.dist-info}/METADATA +1 -1
- {falyx-0.1.26.dist-info → falyx-0.1.28.dist-info}/RECORD +19 -17
- {falyx-0.1.26.dist-info → falyx-0.1.28.dist-info}/LICENSE +0 -0
- {falyx-0.1.26.dist-info → falyx-0.1.28.dist-info}/WHEEL +0 -0
- {falyx-0.1.26.dist-info → falyx-0.1.28.dist-info}/entry_points.txt +0 -0
falyx/exceptions.py
CHANGED
falyx/execution_registry.py
CHANGED
@@ -100,7 +100,7 @@ class ExecutionRegistry:
|
|
100
100
|
|
101
101
|
@classmethod
|
102
102
|
def summary(cls):
|
103
|
-
table = Table(title="
|
103
|
+
table = Table(title="📊 Execution History", expand=True, box=box.SIMPLE)
|
104
104
|
|
105
105
|
table.add_column("Name", style="bold cyan")
|
106
106
|
table.add_column("Start", justify="right", style="dim")
|
falyx/falyx.py
CHANGED
@@ -23,6 +23,7 @@ from __future__ import annotations
|
|
23
23
|
|
24
24
|
import asyncio
|
25
25
|
import logging
|
26
|
+
import shlex
|
26
27
|
import sys
|
27
28
|
from argparse import Namespace
|
28
29
|
from difflib import get_close_matches
|
@@ -34,7 +35,8 @@ from prompt_toolkit import PromptSession
|
|
34
35
|
from prompt_toolkit.completion import WordCompleter
|
35
36
|
from prompt_toolkit.formatted_text import AnyFormattedText
|
36
37
|
from prompt_toolkit.key_binding import KeyBindings
|
37
|
-
from prompt_toolkit.
|
38
|
+
from prompt_toolkit.patch_stdout import patch_stdout
|
39
|
+
from prompt_toolkit.validation import ValidationError, Validator
|
38
40
|
from rich import box
|
39
41
|
from rich.console import Console
|
40
42
|
from rich.markdown import Markdown
|
@@ -47,6 +49,7 @@ from falyx.context import ExecutionContext
|
|
47
49
|
from falyx.debug import log_after, log_before, log_error, log_success
|
48
50
|
from falyx.exceptions import (
|
49
51
|
CommandAlreadyExistsError,
|
52
|
+
CommandArgumentError,
|
50
53
|
FalyxError,
|
51
54
|
InvalidActionError,
|
52
55
|
NotAFalyxError,
|
@@ -57,19 +60,39 @@ from falyx.logger import logger
|
|
57
60
|
from falyx.options_manager import OptionsManager
|
58
61
|
from falyx.parsers import get_arg_parsers
|
59
62
|
from falyx.retry import RetryPolicy
|
60
|
-
from falyx.signals import BackSignal, QuitSignal
|
63
|
+
from falyx.signals import BackSignal, CancelSignal, HelpSignal, QuitSignal
|
61
64
|
from falyx.themes import OneColors, get_nord_theme
|
62
|
-
from falyx.utils import CaseInsensitiveDict, chunks, get_program_invocation
|
65
|
+
from falyx.utils import CaseInsensitiveDict, _noop, chunks, get_program_invocation
|
63
66
|
from falyx.version import __version__
|
64
67
|
|
65
68
|
|
66
|
-
class FalyxMode(
|
69
|
+
class FalyxMode(Enum):
|
67
70
|
MENU = "menu"
|
68
71
|
RUN = "run"
|
69
72
|
PREVIEW = "preview"
|
70
73
|
RUN_ALL = "run-all"
|
71
74
|
|
72
75
|
|
76
|
+
class CommandValidator(Validator):
|
77
|
+
"""Validator to check if the input is a valid command or toggle key."""
|
78
|
+
|
79
|
+
def __init__(self, falyx: Falyx, error_message: str) -> None:
|
80
|
+
super().__init__()
|
81
|
+
self.falyx = falyx
|
82
|
+
self.error_message = error_message
|
83
|
+
|
84
|
+
def validate(self, document) -> None:
|
85
|
+
text = document.text
|
86
|
+
is_preview, choice, _, __ = self.falyx.get_command(text, from_validate=True)
|
87
|
+
if is_preview:
|
88
|
+
return None
|
89
|
+
if not choice:
|
90
|
+
raise ValidationError(
|
91
|
+
message=self.error_message,
|
92
|
+
cursor_position=document.get_end_of_document_position(),
|
93
|
+
)
|
94
|
+
|
95
|
+
|
73
96
|
class Falyx:
|
74
97
|
"""
|
75
98
|
Main menu controller for Falyx CLI applications.
|
@@ -237,8 +260,9 @@ class Falyx:
|
|
237
260
|
def _get_exit_command(self) -> Command:
|
238
261
|
"""Returns the back command for the menu."""
|
239
262
|
return Command(
|
240
|
-
key="
|
263
|
+
key="X",
|
241
264
|
description="Exit",
|
265
|
+
action=Action("Exit", action=_noop),
|
242
266
|
aliases=["EXIT", "QUIT"],
|
243
267
|
style=OneColors.DARK_RED,
|
244
268
|
)
|
@@ -266,9 +290,9 @@ class Falyx:
|
|
266
290
|
help_text += " [dim](requires input)[/dim]"
|
267
291
|
table.add_row(
|
268
292
|
f"[{command.style}]{command.key}[/]",
|
269
|
-
", ".join(command.aliases) if command.aliases else "
|
293
|
+
", ".join(command.aliases) if command.aliases else "",
|
270
294
|
help_text,
|
271
|
-
", ".join(command.tags) if command.tags else "
|
295
|
+
", ".join(command.tags) if command.tags else "",
|
272
296
|
)
|
273
297
|
|
274
298
|
table.add_row(
|
@@ -305,7 +329,7 @@ class Falyx:
|
|
305
329
|
key="H",
|
306
330
|
aliases=["HELP", "?"],
|
307
331
|
description="Help",
|
308
|
-
action=self._show_help,
|
332
|
+
action=Action("Help", self._show_help),
|
309
333
|
style=OneColors.LIGHT_YELLOW,
|
310
334
|
)
|
311
335
|
|
@@ -324,7 +348,7 @@ class Falyx:
|
|
324
348
|
keys.extend(cmd.aliases)
|
325
349
|
return WordCompleter(keys, ignore_case=True)
|
326
350
|
|
327
|
-
def
|
351
|
+
def _get_validator_error_message(self) -> str:
|
328
352
|
"""Validator to check if the input is a valid command or toggle key."""
|
329
353
|
keys = {self.exit_command.key.upper()}
|
330
354
|
keys.update({alias.upper() for alias in self.exit_command.aliases})
|
@@ -353,18 +377,7 @@ class Falyx:
|
|
353
377
|
if toggle_keys:
|
354
378
|
message_lines.append(f" Toggles: {toggles_str}")
|
355
379
|
error_message = " ".join(message_lines)
|
356
|
-
|
357
|
-
def validator(text):
|
358
|
-
is_preview, choice = self.get_command(text, from_validate=True)
|
359
|
-
if is_preview and choice is None:
|
360
|
-
return True
|
361
|
-
return bool(choice)
|
362
|
-
|
363
|
-
return Validator.from_callable(
|
364
|
-
validator,
|
365
|
-
error_message=error_message,
|
366
|
-
move_cursor_to_end=True,
|
367
|
-
)
|
380
|
+
return error_message
|
368
381
|
|
369
382
|
def _invalidate_prompt_session_cache(self):
|
370
383
|
"""Forces the prompt session to be recreated on the next access."""
|
@@ -427,9 +440,10 @@ class Falyx:
|
|
427
440
|
multiline=False,
|
428
441
|
completer=self._get_completer(),
|
429
442
|
reserve_space_for_menu=1,
|
430
|
-
validator=self.
|
443
|
+
validator=CommandValidator(self, self._get_validator_error_message()),
|
431
444
|
bottom_toolbar=self._get_bottom_bar_render(),
|
432
445
|
key_bindings=self.key_bindings,
|
446
|
+
validate_while_typing=False,
|
433
447
|
)
|
434
448
|
return self._prompt_session
|
435
449
|
|
@@ -507,18 +521,19 @@ class Falyx:
|
|
507
521
|
|
508
522
|
def update_exit_command(
|
509
523
|
self,
|
510
|
-
key: str = "
|
524
|
+
key: str = "X",
|
511
525
|
description: str = "Exit",
|
512
526
|
aliases: list[str] | None = None,
|
513
|
-
action: Callable[[], Any] =
|
527
|
+
action: Callable[[], Any] | None = None,
|
514
528
|
style: str = OneColors.DARK_RED,
|
515
529
|
confirm: bool = False,
|
516
530
|
confirm_message: str = "Are you sure?",
|
517
531
|
) -> None:
|
518
532
|
"""Updates the back command of the menu."""
|
533
|
+
self._validate_command_key(key)
|
534
|
+
action = action or Action(description, action=_noop)
|
519
535
|
if not callable(action):
|
520
536
|
raise InvalidActionError("Action must be a callable.")
|
521
|
-
self._validate_command_key(key)
|
522
537
|
self.exit_command = Command(
|
523
538
|
key=key,
|
524
539
|
description=description,
|
@@ -537,7 +552,7 @@ class Falyx:
|
|
537
552
|
raise NotAFalyxError("submenu must be an instance of Falyx.")
|
538
553
|
self._validate_command_key(key)
|
539
554
|
self.add_command(key, description, submenu.menu, style=style)
|
540
|
-
if submenu.exit_command.key == "
|
555
|
+
if submenu.exit_command.key == "X":
|
541
556
|
submenu.update_exit_command(key="B", description="Back", aliases=["BACK"])
|
542
557
|
|
543
558
|
def add_commands(self, commands: list[Command] | list[dict]) -> None:
|
@@ -692,32 +707,52 @@ class Falyx:
|
|
692
707
|
return False, input_str.strip()
|
693
708
|
|
694
709
|
def get_command(
|
695
|
-
self,
|
696
|
-
) -> tuple[bool, Command | None]:
|
710
|
+
self, raw_choices: str, from_validate=False
|
711
|
+
) -> tuple[bool, Command | None, tuple, dict[str, Any]]:
|
697
712
|
"""
|
698
713
|
Returns the selected command based on user input.
|
699
714
|
Supports keys, aliases, and abbreviations.
|
700
715
|
"""
|
716
|
+
args = ()
|
717
|
+
kwargs: dict[str, Any] = {}
|
718
|
+
choice, *input_args = shlex.split(raw_choices)
|
701
719
|
is_preview, choice = self.parse_preview_command(choice)
|
702
720
|
if is_preview and not choice and self.help_command:
|
703
721
|
is_preview = False
|
704
722
|
choice = "?"
|
705
723
|
elif is_preview and not choice:
|
724
|
+
# No help command enabled
|
706
725
|
if not from_validate:
|
707
726
|
self.console.print(
|
708
727
|
f"[{OneColors.DARK_RED}]❌ You must enter a command for preview mode."
|
709
728
|
)
|
710
|
-
return is_preview, None
|
729
|
+
return is_preview, None, args, kwargs
|
711
730
|
|
712
731
|
choice = choice.upper()
|
713
732
|
name_map = self._name_map
|
714
|
-
|
715
733
|
if choice in name_map:
|
716
|
-
|
734
|
+
if not from_validate:
|
735
|
+
logger.info("Command '%s' selected.", choice)
|
736
|
+
if input_args and name_map[choice].arg_parser:
|
737
|
+
try:
|
738
|
+
args, kwargs = name_map[choice].parse_args(input_args)
|
739
|
+
except CommandArgumentError as error:
|
740
|
+
if not from_validate:
|
741
|
+
if not name_map[choice].show_help():
|
742
|
+
self.console.print(
|
743
|
+
f"[{OneColors.DARK_RED}]❌ Invalid arguments for '{choice}': {error}"
|
744
|
+
)
|
745
|
+
else:
|
746
|
+
name_map[choice].show_help()
|
747
|
+
raise ValidationError(
|
748
|
+
message=str(error), cursor_position=len(raw_choices)
|
749
|
+
)
|
750
|
+
return is_preview, None, args, kwargs
|
751
|
+
return is_preview, name_map[choice], args, kwargs
|
717
752
|
|
718
753
|
prefix_matches = [cmd for key, cmd in name_map.items() if key.startswith(choice)]
|
719
754
|
if len(prefix_matches) == 1:
|
720
|
-
return is_preview, prefix_matches[0]
|
755
|
+
return is_preview, prefix_matches[0], args, kwargs
|
721
756
|
|
722
757
|
fuzzy_matches = get_close_matches(choice, list(name_map.keys()), n=3, cutoff=0.7)
|
723
758
|
if fuzzy_matches:
|
@@ -734,7 +769,7 @@ class Falyx:
|
|
734
769
|
self.console.print(
|
735
770
|
f"[{OneColors.LIGHT_YELLOW}]⚠️ Unknown command '{choice}'[/]"
|
736
771
|
)
|
737
|
-
return is_preview, None
|
772
|
+
return is_preview, None, args, kwargs
|
738
773
|
|
739
774
|
def _create_context(self, selected_command: Command) -> ExecutionContext:
|
740
775
|
"""Creates a context dictionary for the selected command."""
|
@@ -757,8 +792,9 @@ class Falyx:
|
|
757
792
|
|
758
793
|
async def process_command(self) -> bool:
|
759
794
|
"""Processes the action of the selected command."""
|
760
|
-
|
761
|
-
|
795
|
+
with patch_stdout(raw=True):
|
796
|
+
choice = await self.prompt_session.prompt_async()
|
797
|
+
is_preview, selected_command, args, kwargs = self.get_command(choice)
|
762
798
|
if not selected_command:
|
763
799
|
logger.info("Invalid command '%s'.", choice)
|
764
800
|
return True
|
@@ -787,8 +823,8 @@ class Falyx:
|
|
787
823
|
context.start_timer()
|
788
824
|
try:
|
789
825
|
await self.hooks.trigger(HookType.BEFORE, context)
|
790
|
-
|
791
|
-
result = await selected_command()
|
826
|
+
print(args, kwargs)
|
827
|
+
result = await selected_command(*args, **kwargs)
|
792
828
|
context.result = result
|
793
829
|
await self.hooks.trigger(HookType.ON_SUCCESS, context)
|
794
830
|
except Exception as error:
|
@@ -801,10 +837,18 @@ class Falyx:
|
|
801
837
|
await self.hooks.trigger(HookType.ON_TEARDOWN, context)
|
802
838
|
return True
|
803
839
|
|
804
|
-
async def run_key(
|
840
|
+
async def run_key(
|
841
|
+
self,
|
842
|
+
command_key: str,
|
843
|
+
return_context: bool = False,
|
844
|
+
args: tuple = (),
|
845
|
+
kwargs: dict[str, Any] | None = None,
|
846
|
+
) -> Any:
|
805
847
|
"""Run a command by key without displaying the menu (non-interactive mode)."""
|
806
848
|
self.debug_hooks()
|
807
|
-
is_preview, selected_command = self.get_command(command_key)
|
849
|
+
is_preview, selected_command, _, __ = self.get_command(command_key)
|
850
|
+
kwargs = kwargs or {}
|
851
|
+
|
808
852
|
self.last_run_command = selected_command
|
809
853
|
|
810
854
|
if not selected_command:
|
@@ -825,7 +869,7 @@ class Falyx:
|
|
825
869
|
context.start_timer()
|
826
870
|
try:
|
827
871
|
await self.hooks.trigger(HookType.BEFORE, context)
|
828
|
-
result = await selected_command()
|
872
|
+
result = await selected_command(*args, **kwargs)
|
829
873
|
context.result = result
|
830
874
|
|
831
875
|
await self.hooks.trigger(HookType.ON_SUCCESS, context)
|
@@ -918,6 +962,10 @@ class Falyx:
|
|
918
962
|
break
|
919
963
|
except BackSignal:
|
920
964
|
logger.info("BackSignal received.")
|
965
|
+
except CancelSignal:
|
966
|
+
logger.info("CancelSignal received.")
|
967
|
+
except HelpSignal:
|
968
|
+
logger.info("HelpSignal received.")
|
921
969
|
finally:
|
922
970
|
logger.info("Exiting menu: %s", self.get_title())
|
923
971
|
if self.exit_message:
|
@@ -952,7 +1000,7 @@ class Falyx:
|
|
952
1000
|
|
953
1001
|
if self.cli_args.command == "preview":
|
954
1002
|
self.mode = FalyxMode.PREVIEW
|
955
|
-
_, command = self.get_command(self.cli_args.name)
|
1003
|
+
_, command, args, kwargs = self.get_command(self.cli_args.name)
|
956
1004
|
if not command:
|
957
1005
|
self.console.print(
|
958
1006
|
f"[{OneColors.DARK_RED}]❌ Command '{self.cli_args.name}' not found."
|
@@ -966,7 +1014,7 @@ class Falyx:
|
|
966
1014
|
|
967
1015
|
if self.cli_args.command == "run":
|
968
1016
|
self.mode = FalyxMode.RUN
|
969
|
-
is_preview, command = self.get_command(self.cli_args.name)
|
1017
|
+
is_preview, command, _, __ = self.get_command(self.cli_args.name)
|
970
1018
|
if is_preview:
|
971
1019
|
if command is None:
|
972
1020
|
sys.exit(1)
|
@@ -977,7 +1025,11 @@ class Falyx:
|
|
977
1025
|
sys.exit(1)
|
978
1026
|
self._set_retry_policy(command)
|
979
1027
|
try:
|
980
|
-
|
1028
|
+
args, kwargs = command.parse_args(self.cli_args.command_args)
|
1029
|
+
except HelpSignal:
|
1030
|
+
sys.exit(0)
|
1031
|
+
try:
|
1032
|
+
await self.run_key(self.cli_args.name, args=args, kwargs=kwargs)
|
981
1033
|
except FalyxError as error:
|
982
1034
|
self.console.print(f"[{OneColors.DARK_RED}]❌ Error: {error}[/]")
|
983
1035
|
sys.exit(1)
|
falyx/parsers.py
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
"""parsers.py
|
3
3
|
This module contains the argument parsers used for the Falyx CLI.
|
4
4
|
"""
|
5
|
-
from argparse import ArgumentParser, Namespace, _SubParsersAction
|
5
|
+
from argparse import REMAINDER, ArgumentParser, Namespace, _SubParsersAction
|
6
6
|
from dataclasses import asdict, dataclass
|
7
7
|
from typing import Any, Sequence
|
8
8
|
|
@@ -114,6 +114,12 @@ def get_arg_parsers(
|
|
114
114
|
help="Skip confirmation prompts",
|
115
115
|
)
|
116
116
|
|
117
|
+
run_group.add_argument(
|
118
|
+
"command_args",
|
119
|
+
nargs=REMAINDER,
|
120
|
+
help="Arguments to pass to the command (if applicable)",
|
121
|
+
)
|
122
|
+
|
117
123
|
run_all_parser = subparsers.add_parser(
|
118
124
|
"run-all", help="Run all commands with a given tag"
|
119
125
|
)
|
falyx/protocols.py
CHANGED
@@ -2,10 +2,16 @@
|
|
2
2
|
"""protocols.py"""
|
3
3
|
from __future__ import annotations
|
4
4
|
|
5
|
-
from typing import Any, Protocol
|
5
|
+
from typing import Any, Awaitable, Protocol, runtime_checkable
|
6
6
|
|
7
7
|
from falyx.action.action import BaseAction
|
8
8
|
|
9
9
|
|
10
|
+
@runtime_checkable
|
10
11
|
class ActionFactoryProtocol(Protocol):
|
11
|
-
def __call__(self, *args: Any, **kwargs: Any) -> BaseAction: ...
|
12
|
+
async def __call__(self, *args: Any, **kwargs: Any) -> Awaitable[BaseAction]: ...
|
13
|
+
|
14
|
+
|
15
|
+
@runtime_checkable
|
16
|
+
class ArgParserProtocol(Protocol):
|
17
|
+
def __call__(self, args: list[str]) -> tuple[tuple, dict]: ...
|
falyx/signals.py
CHANGED
@@ -22,3 +22,17 @@ class BackSignal(FlowSignal):
|
|
22
22
|
|
23
23
|
def __init__(self, message: str = "Back signal received."):
|
24
24
|
super().__init__(message)
|
25
|
+
|
26
|
+
|
27
|
+
class CancelSignal(FlowSignal):
|
28
|
+
"""Raised to cancel the current command or action."""
|
29
|
+
|
30
|
+
def __init__(self, message: str = "Cancel signal received."):
|
31
|
+
super().__init__(message)
|
32
|
+
|
33
|
+
|
34
|
+
class HelpSignal(FlowSignal):
|
35
|
+
"""Raised to display help information."""
|
36
|
+
|
37
|
+
def __init__(self, message: str = "Help signal received."):
|
38
|
+
super().__init__(message)
|
falyx/utils.py
CHANGED
falyx/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.1.
|
1
|
+
__version__ = "0.1.28"
|
@@ -1,46 +1,48 @@
|
|
1
1
|
falyx/.pytyped,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
falyx/__init__.py,sha256=L40665QyjAqHQxHdxxY2_yPeDa4p0LE7Nu_2dkm08Ls,650
|
3
3
|
falyx/__main__.py,sha256=g_LwJieofK3DJzCYtpkAMEeOXhzSLQenb7pRVUqcf-Y,2152
|
4
|
-
falyx/action/__init__.py,sha256=
|
4
|
+
falyx/action/__init__.py,sha256=zpOK5g4DybydV8d3QI0Zq52aWaKFPYi-J6szAQTsQ2c,974
|
5
5
|
falyx/action/action.py,sha256=CJB9eeeEqBGkZHjMpG24eXHRjouKSfESCI1zWzoE7JQ,32488
|
6
|
-
falyx/action/action_factory.py,sha256=
|
6
|
+
falyx/action/action_factory.py,sha256=qNtEnsbKsNl-WijChbTQYfdI3k14fN-1bzDsGFx8yZI,4517
|
7
7
|
falyx/action/http_action.py,sha256=aIieGHyZSkz1ZGay-fwgDYZ0QF17XypAWtKeVAYp5f4,5806
|
8
8
|
falyx/action/io_action.py,sha256=zdDq07zSLlaShBQ3ztXTRC6aZL0JoERNZSmvHy1V22w,9718
|
9
|
-
falyx/action/menu_action.py,sha256=
|
9
|
+
falyx/action/menu_action.py,sha256=cboCpXyl0fZUxpFsvEPu0dGhFfr_vdfllceQnICA0gU,5683
|
10
10
|
falyx/action/select_file_action.py,sha256=hHLhmTSacWaUXhRTeIIiXt8gR7zbjkXJ2MAkKQYCpp4,7799
|
11
11
|
falyx/action/selection_action.py,sha256=22rF7UqRrQAMjGIheDqAbUizVMBg9aCl9e4VOLLZZJo,8811
|
12
12
|
falyx/action/signal_action.py,sha256=5UMqvzy7fBnLANGwYUWoe1VRhrr7e-yOVeLdOnCBiJo,1350
|
13
13
|
falyx/action/types.py,sha256=iVD-bHm1GRXOTIlHOeT_KcDBRZm4Hz5Xzl_BOalvEf4,961
|
14
|
+
falyx/action/user_input_action.py,sha256=LSTzC_3TfsfXdz-qV3GlOIGpZWAOgO9J5DnNsHO7ee8,3398
|
15
|
+
falyx/argparse.py,sha256=kI_tLYD6KOiWvXEHEvOi8bprx5sQm9KTrgens2_nWKU,24498
|
14
16
|
falyx/bottom_bar.py,sha256=iWxgOKWgn5YmREeZBuGA50FzqzEfz1-Vnqm0V_fhldc,7383
|
15
|
-
falyx/command.py,sha256=
|
17
|
+
falyx/command.py,sha256=Vr5YHehZB6GavBbHe9diNbdeXNWfnWTkuDZ-NfymcFo,13437
|
16
18
|
falyx/config.py,sha256=8dkQfL-Ro-vWw1AcO2fD1PGZ92Cyfnwl885ZlpLkp4Y,9636
|
17
19
|
falyx/config_schema.py,sha256=j5GQuHVlaU-VLxLF9t8idZRjqOP9MIKp1hyd9NhpAGU,3124
|
18
20
|
falyx/context.py,sha256=FNF-IS7RMDxel2l3kskEqQImZ0mLO6zvGw_xC9cIzgI,10338
|
19
21
|
falyx/debug.py,sha256=oWWTLOF8elrx_RGZ1G4pbzfFr46FjB0woFXpVU2wmjU,1567
|
20
|
-
falyx/exceptions.py,sha256=
|
21
|
-
falyx/execution_registry.py,sha256=
|
22
|
-
falyx/falyx.py,sha256=
|
22
|
+
falyx/exceptions.py,sha256=kK9k1v7LVNjJSwYztRa9Krhr3ZOI-6Htq2ZjlYICPKg,922
|
23
|
+
falyx/execution_registry.py,sha256=rctsz0mrIHPToLZqylblVjDdKWdq1x_JBc8GwMP5sJ8,4710
|
24
|
+
falyx/falyx.py,sha256=3OrmQ0p7ZOpjLaH5mqTYVEZ96KKTygSLYlPqg3eH5eM,43061
|
23
25
|
falyx/hook_manager.py,sha256=GuGxVVz9FXrU39Tk220QcsLsMXeut7ZDkGW3hU9GcwQ,2952
|
24
26
|
falyx/hooks.py,sha256=IV2nbj5FjY2m3_L7x4mYBnaRDG45E8tWQU90i4butlw,2940
|
25
27
|
falyx/init.py,sha256=abcSlPmxVeByLIHdUkNjqtO_tEkO3ApC6f9WbxsSEWg,3393
|
26
28
|
falyx/logger.py,sha256=1Mfb_vJFJ1tQwziuyU2p-cSMi2Js8N2byniFEnI6vOQ,132
|
27
29
|
falyx/menu.py,sha256=faxGgocqQYY6HtzVbenHaFj8YqsmycBEyziC8Ahzqjo,2870
|
28
30
|
falyx/options_manager.py,sha256=dFAnQw543tQ6Xupvh1PwBrhiSWlSACHw8K-sHP_lUh4,2842
|
29
|
-
falyx/parsers.py,sha256=
|
31
|
+
falyx/parsers.py,sha256=KsDFEmJLM86d2X4Kh4SHA9mBbUk351NjLhhFYzQkaPk,5762
|
30
32
|
falyx/prompt_utils.py,sha256=qgk0bXs7mwzflqzWyFhEOTpKQ_ZtMIqGhKeg-ocwNnE,1542
|
31
|
-
falyx/protocols.py,sha256=
|
33
|
+
falyx/protocols.py,sha256=mesdq5CjPF_5Kyu7Evwr6qMT71tUHlw0SjjtmnggTZw,495
|
32
34
|
falyx/retry.py,sha256=UUzY6FlKobr84Afw7yJO9rj3AIQepDk2fcWs6_1gi6Q,3788
|
33
35
|
falyx/retry_utils.py,sha256=EAzc-ECTu8AxKkmlw28ioOW9y-Y9tLQ0KasvSkBRYgs,694
|
34
36
|
falyx/selection.py,sha256=l2LLISqgP8xfHdcTAEbTTqs_Bae4-LVUKMN7VQH7tM0,10731
|
35
|
-
falyx/signals.py,sha256=
|
37
|
+
falyx/signals.py,sha256=Y_neFXpfHs7qY0syw9XcfR9WeAGRcRw1nG_2L1JJqKE,1083
|
36
38
|
falyx/tagged_table.py,sha256=4SV-SdXFrAhy1JNToeBCvyxT-iWVf6cWY7XETTys4n8,1067
|
37
39
|
falyx/themes/__init__.py,sha256=1CZhEUCin9cUk8IGYBUFkVvdHRNNJBEFXccHwpUKZCA,284
|
38
40
|
falyx/themes/colors.py,sha256=4aaeAHJetmeNInI0Zytg4E3YqKfPFelpf04vtjSvsS8,19776
|
39
|
-
falyx/utils.py,sha256=
|
41
|
+
falyx/utils.py,sha256=u3puR4Bh-unNBw9a0V9sw7PDTIzRaNLolap0oz5bVIk,6718
|
40
42
|
falyx/validators.py,sha256=t5iyzVpY8tdC4rfhr4isEfWpD5gNTzjeX_Hbi_Uq6sA,1328
|
41
|
-
falyx/version.py,sha256=
|
42
|
-
falyx-0.1.
|
43
|
-
falyx-0.1.
|
44
|
-
falyx-0.1.
|
45
|
-
falyx-0.1.
|
46
|
-
falyx-0.1.
|
43
|
+
falyx/version.py,sha256=MWZDdAHrdUZS0c3VlLqX4O1eaxPodI7irMtEvknKQ94,23
|
44
|
+
falyx-0.1.28.dist-info/LICENSE,sha256=B0yqgaHuSdhN7T3OBmgQSiDTy8HqT5Oe_dLypRe4Ra4,1073
|
45
|
+
falyx-0.1.28.dist-info/METADATA,sha256=n-VK44OFgjFxyRn1-LdysM1ciDF8RKxlKfAy_0Yz_Zc,5521
|
46
|
+
falyx-0.1.28.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
47
|
+
falyx-0.1.28.dist-info/entry_points.txt,sha256=j8owOSl2j1Ss8DtGMnKfgehKaolqnIPhVFHaUBLUnMs,45
|
48
|
+
falyx-0.1.28.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|