cli-tools-kit 0.8.2__tar.gz → 0.8.4__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.
Files changed (43) hide show
  1. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/PKG-INFO +5 -1
  2. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/__init__.py +1 -1
  3. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/gui_installer.py +4 -3
  4. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/onboarding.py +1 -1
  5. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit.egg-info/PKG-INFO +5 -1
  6. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit.egg-info/requires.txt +4 -0
  7. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/pyproject.toml +29 -1
  8. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_capability_groups.py +0 -2
  9. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_llm_groups.py +0 -2
  10. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_sources.py +1 -1
  11. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_taxonomy_cluster.py +0 -2
  12. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_tui_installer.py +4 -3
  13. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/LICENSE +0 -0
  14. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/README.md +0 -0
  15. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/__main__.py +0 -0
  16. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/advertise.py +0 -0
  17. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/autostart_gate.py +0 -0
  18. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/cron_installer.py +0 -0
  19. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/host.py +0 -0
  20. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/identity.py +0 -0
  21. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/skills.py +0 -0
  22. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/sources.py +0 -0
  23. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/__init__.py +0 -0
  24. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/build.py +0 -0
  25. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/capability.py +0 -0
  26. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/cluster.py +0 -0
  27. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/corpus.py +0 -0
  28. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/embedder.py +0 -0
  29. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/groups.py +0 -0
  30. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/taxonomy/llm_groups.py +0 -0
  31. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/tool_installer.py +0 -0
  32. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit/tui_installer.py +0 -0
  33. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit.egg-info/SOURCES.txt +0 -0
  34. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit.egg-info/dependency_links.txt +0 -0
  35. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit.egg-info/entry_points.txt +0 -0
  36. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/cli_tools_kit.egg-info/top_level.txt +0 -0
  37. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/setup.cfg +0 -0
  38. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_autostart_gate.py +0 -0
  39. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_cron_installer.py +0 -0
  40. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_host.py +0 -0
  41. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_identity.py +0 -0
  42. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_skills.py +0 -0
  43. {cli_tools_kit-0.8.2 → cli_tools_kit-0.8.4}/tests/test_tool_installer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cli-tools-kit
3
- Version: 0.8.2
3
+ Version: 0.8.4
4
4
  Summary: Installer protocol + helpers for self-installing Python CLI/GUI tools (desktop shortcuts, bash aliases, cron entries), plus reusable tkinter and curses installer screens
5
5
  Author: Steffen Probst
6
6
  License: MIT License
@@ -47,6 +47,10 @@ Requires-Dist: termcolor>=2.0
47
47
  Requires-Dist: tomli>=2.0; python_version < "3.11"
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: pytest>=7.0; extra == "dev"
50
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
51
+ Requires-Dist: ruff>=0.6; extra == "dev"
52
+ Requires-Dist: build>=1.0; extra == "dev"
53
+ Requires-Dist: twine>=5.0; extra == "dev"
50
54
  Provides-Extra: gui
51
55
  Requires-Dist: Pillow>=9.0; extra == "gui"
52
56
  Dynamic: license-file
@@ -56,4 +56,4 @@ __all__ = [
56
56
  "read_installed_skill",
57
57
  ]
58
58
 
59
- __version__ = "0.8.2"
59
+ __version__ = "0.8.4"
@@ -3382,7 +3382,6 @@ class InstallerApp:
3382
3382
  return
3383
3383
 
3384
3384
  model_idx = idx // samples_per_model
3385
- sample_num = idx % samples_per_model
3386
3385
  model_name = selected_models[model_idx]
3387
3386
  model_path = os.path.join(models_dir, model_name)
3388
3387
 
@@ -3783,8 +3782,10 @@ class InstallerApp:
3783
3782
  dialog.after(0, mark_failed)
3784
3783
 
3785
3784
  except Exception as e:
3785
+ error_msg = str(e)[:20]
3786
+
3786
3787
  def mark_error():
3787
- update_grid_cell(idx, None, f"Error: {str(e)[:20]}")
3788
+ update_grid_cell(idx, None, f"Error: {error_msg}")
3788
3789
  current_index[0] += 1
3789
3790
  dialog.after(100, generate_next_varied)
3790
3791
  dialog.after(0, mark_error)
@@ -4663,7 +4664,7 @@ class InstallerApp:
4663
4664
  autostart_var.trace_add("write", self._on_checkbox_changed)
4664
4665
  # A tool with conditions gets the checkbox and a ⚙ side by side;
4665
4666
  # without them the checkbox stays centred as before.
4666
- if tool.autostart_conditions:
4667
+ if parent.autostart_conditions:
4667
4668
  holder = ttk.Frame(autostart_frame, style="Card.TFrame")
4668
4669
  holder.pack(expand=True)
4669
4670
  autostart_cb = ttk.Checkbutton(holder, variable=autostart_var, style="Card.TCheckbutton")
@@ -157,7 +157,7 @@ def _ask(prompt: str, default: str = "") -> str:
157
157
  answer = input(f"{prompt}{suffix}: ").strip()
158
158
  except (EOFError, KeyboardInterrupt):
159
159
  print()
160
- raise SystemExit(1)
160
+ raise SystemExit(1) from None
161
161
  return answer or default
162
162
 
163
163
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cli-tools-kit
3
- Version: 0.8.2
3
+ Version: 0.8.4
4
4
  Summary: Installer protocol + helpers for self-installing Python CLI/GUI tools (desktop shortcuts, bash aliases, cron entries), plus reusable tkinter and curses installer screens
5
5
  Author: Steffen Probst
6
6
  License: MIT License
@@ -47,6 +47,10 @@ Requires-Dist: termcolor>=2.0
47
47
  Requires-Dist: tomli>=2.0; python_version < "3.11"
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: pytest>=7.0; extra == "dev"
50
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
51
+ Requires-Dist: ruff>=0.6; extra == "dev"
52
+ Requires-Dist: build>=1.0; extra == "dev"
53
+ Requires-Dist: twine>=5.0; extra == "dev"
50
54
  Provides-Extra: gui
51
55
  Requires-Dist: Pillow>=9.0; extra == "gui"
52
56
  Dynamic: license-file
@@ -5,6 +5,10 @@ tomli>=2.0
5
5
 
6
6
  [dev]
7
7
  pytest>=7.0
8
+ pytest-cov>=5.0
9
+ ruff>=0.6
10
+ build>=1.0
11
+ twine>=5.0
8
12
 
9
13
  [gui]
10
14
  Pillow>=9.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cli-tools-kit"
7
- version = "0.8.2"
7
+ version = "0.8.4"
8
8
  description = "Installer protocol + helpers for self-installing Python CLI/GUI tools (desktop shortcuts, bash aliases, cron entries), plus reusable tkinter and curses installer screens"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -36,6 +36,10 @@ dependencies = [
36
36
  [project.optional-dependencies]
37
37
  dev = [
38
38
  "pytest>=7.0",
39
+ "pytest-cov>=5.0",
40
+ "ruff>=0.6",
41
+ "build>=1.0",
42
+ "twine>=5.0",
39
43
  ]
40
44
  # The reusable tkinter GUI installer engine (cli_tools_kit.gui_installer) needs
41
45
  # Pillow for tool-icon rendering. tkinter itself ships with CPython. The engine
@@ -60,3 +64,27 @@ Issues = "https://github.com/Probst1nator/cli-tools-kit/issues"
60
64
  [tool.setuptools.packages.find]
61
65
  include = ["cli_tools_kit*"]
62
66
  exclude = ["tests*", "examples*"]
67
+
68
+ [tool.ruff]
69
+ target-version = "py310"
70
+ extend-exclude = ["build", "dist"]
71
+
72
+ [tool.ruff.lint]
73
+ # F catches undefined names (the 0.8.0-0.8.2 startup crash was one), E9
74
+ # syntax errors, B likely bugs, PLE pylint errors. B905 (zip strict) and
75
+ # B007 (unused loop variable) are style, not bugs, and strict= would change
76
+ # behaviour.
77
+ select = ["F", "E9", "B", "PLE"]
78
+ ignore = ["B905", "B007"]
79
+
80
+ [tool.pytest.ini_options]
81
+ testpaths = ["tests"]
82
+
83
+ [tool.coverage.run]
84
+ source = ["cli_tools_kit"]
85
+ branch = true
86
+
87
+ [tool.coverage.report]
88
+ fail_under = 34
89
+ show_missing = false
90
+ skip_covered = true
@@ -1,7 +1,5 @@
1
1
  """Tests for the network-free capability grouping tier."""
2
2
 
3
- import os
4
- import sys
5
3
 
6
4
  from cli_tools_kit.taxonomy.capability import DEFAULT_BANDS, capability_groups
7
5
 
@@ -1,8 +1,6 @@
1
1
  """Tests for the Gemini tool grouping: prompts, reply parsing, repair."""
2
2
 
3
3
  import json
4
- import os
5
- import sys
6
4
 
7
5
  import pytest
8
6
 
@@ -347,7 +347,7 @@ def test_local_root_is_the_default_when_no_flag(tmp_path: Path, engine,
347
347
  def test_the_hook_resolves_and_refills_the_roots(tmp_path: Path, engine,
348
348
  monkeypatch) -> None:
349
349
  config = _tree(tmp_path)
350
- _write(config, f"""
350
+ _write(config, """
351
351
  [[source]]
352
352
  name = "org/tools"
353
353
  path = "."
@@ -2,8 +2,6 @@
2
2
 
3
3
  import json
4
4
  import math
5
- import os
6
- import sys
7
5
 
8
6
  import pytest
9
7
 
@@ -5,7 +5,7 @@ The curses drawing itself is not tested; everything below it is plain data.
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
- from typing import List
8
+ from typing import List, Optional
9
9
 
10
10
  import pytest
11
11
 
@@ -22,7 +22,8 @@ def _tool(name: str, skill: str = "", script: str = "") -> ToolEntry:
22
22
  )
23
23
 
24
24
 
25
- def _fake_host(monkeypatch: pytest.MonkeyPatch, installed: List[str], stale: List[str] = []):
25
+ def _fake_host(monkeypatch: pytest.MonkeyPatch, installed: List[str], stale: Optional[List[str]] = None):
26
+ stale = stale or []
26
27
  monkeypatch.setattr(gi, "is_installed", lambda t: t.name in installed)
27
28
  monkeypatch.setattr(gi, "needs_update", lambda t: t.name in stale)
28
29
 
@@ -31,7 +32,7 @@ def _target(key: str, have: List[str]) -> tui.SkillTarget:
31
32
  return tui.SkillTarget(
32
33
  key=key, label=key,
33
34
  installed=lambda t: t.skill_name in have,
34
- install=lambda t: (True, f"Run: source ~/.bashrc"),
35
+ install=lambda t: (True, "Run: source ~/.bashrc"),
35
36
  uninstall=lambda t: (True, ""),
36
37
  )
37
38
 
File without changes
File without changes
File without changes