usecli 0.1.49__tar.gz → 0.1.50__tar.gz
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.
- {usecli-0.1.49 → usecli-0.1.50}/PKG-INFO +1 -1
- {usecli-0.1.49 → usecli-0.1.50}/pyproject.toml +1 -1
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/inspire_command.py +8 -3
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/ui/list.py +15 -3
- {usecli-0.1.49 → usecli-0.1.50}/LICENSE +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/README.md +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/README.md +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/custom/README.md +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/custom/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/about_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/help_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/internal/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/internal/fzf_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/core/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/core/utils.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/make/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/make/make_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/make/make_theme_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/init_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/config/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/config/colors.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/base_command.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/error/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/error/handler.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/error/utils.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/exceptions/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/exceptions/base.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/exceptions/config.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/exceptions/usage.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/exceptions/validation.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/ui/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/ui/title.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/ui/title.txt +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/validators/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/validators/network.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/validators/numeric.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/validators/path.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/core/validators/string.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/services/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/services/command_service.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/templates/command.py.j2 +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/templates/theme.toml.j2 +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/templates/usecli.config.toml.j2 +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/ayu_dark.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/catppuccin_frappe.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/catppuccin_latte.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/catppuccin_macchiato.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/catppuccin_mocha.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/default.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/dracula.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/gruvbox_dark.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/nord.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/themes/tokyo_night.toml +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/utils/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/utils/interactive/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/utils/interactive/terminal_menu.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/menu.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/params.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/shared/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/shared/config/__init__.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/shared/config/globals.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/shared/config/manager.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/ui.py +0 -0
- {usecli-0.1.49 → usecli-0.1.50}/src/usecli/usecli.config.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "usecli"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.50"
|
|
4
4
|
description = "A powerful Python CLI framework for building beautiful, developer-friendly command-line tools."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "Edward Boswell", email = "thememium@gmail.com" }]
|
|
@@ -33,9 +33,14 @@ class InspireCommand(BaseCommand):
|
|
|
33
33
|
def handle(self) -> None:
|
|
34
34
|
"""Handle the command execution."""
|
|
35
35
|
try:
|
|
36
|
-
|
|
37
|
-
"https://zenquotes.io/api/random/inspiration"
|
|
38
|
-
|
|
36
|
+
req = urllib.request.Request(
|
|
37
|
+
"https://zenquotes.io/api/random/inspiration",
|
|
38
|
+
headers={
|
|
39
|
+
"User-Agent": "Mozilla/5.0 (compatible; usecli/1.0)",
|
|
40
|
+
"Accept": "application/json",
|
|
41
|
+
},
|
|
42
|
+
)
|
|
43
|
+
with urllib.request.urlopen(req, timeout=10) as response:
|
|
39
44
|
data: list[dict[str, str]] = json.loads(response.read().decode())
|
|
40
45
|
quote = data[0]["q"]
|
|
41
46
|
author = data[0]["a"]
|
|
@@ -23,6 +23,17 @@ console = Console()
|
|
|
23
23
|
SPACER_LENGTH = 6
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def _is_click_group(obj: object) -> bool:
|
|
27
|
+
"""Check if an object is a Click group (has subcommands).
|
|
28
|
+
|
|
29
|
+
Works with both standard click.Group and Typer's vendored click
|
|
30
|
+
(TyperGroup in typer>=0.26 no longer extends click.Group directly).
|
|
31
|
+
"""
|
|
32
|
+
return isinstance(obj, click.Group) or (
|
|
33
|
+
hasattr(obj, "commands") and isinstance(getattr(obj, "commands", None), dict)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
26
37
|
class CommandEntry(TypedDict):
|
|
27
38
|
name: str
|
|
28
39
|
display_name: str
|
|
@@ -87,9 +98,10 @@ def list_commands(app: typer.Typer, prefix_filter: str | None = None) -> None:
|
|
|
87
98
|
commands.sort(key=lambda x: x["name"])
|
|
88
99
|
|
|
89
100
|
groups: dict[str, str] = {}
|
|
90
|
-
if
|
|
91
|
-
|
|
92
|
-
|
|
101
|
+
if _is_click_group(click_group):
|
|
102
|
+
sub_commands: dict[str, object] = getattr(click_group, "commands", {})
|
|
103
|
+
for cmd_name, cmd_obj in sub_commands.items():
|
|
104
|
+
if _is_click_group(cmd_obj):
|
|
93
105
|
if (
|
|
94
106
|
cmd_name in group_alias_to_primary
|
|
95
107
|
and group_alias_to_primary[cmd_name] != cmd_name
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{usecli-0.1.49 → usecli-0.1.50}/src/usecli/cli/commands/defaults/base/internal/fzf_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|