config-cli-gui 0.2.1__tar.gz → 0.2.2__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 (79) hide show
  1. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/HISTORY.md +14 -0
  2. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/PKG-INFO +1 -1
  3. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/_version.py +3 -3
  4. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/PKG-INFO +1 -1
  5. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/SOURCES.txt +1 -0
  6. config_cli_gui-0.2.2/tests/test_cli.py +157 -0
  7. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/FUNDING.yml +0 -0
  8. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  9. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  10. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  11. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/actions/setup-environment/action.yml +0 -0
  12. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/dependabot.yml +0 -0
  13. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/init.sh +0 -0
  14. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/release_message.sh +0 -0
  15. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/update_funding.py +0 -0
  16. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/workflows/main.yml +0 -0
  17. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/workflows/release.yml +0 -0
  18. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/workflows/update_readme.yml +0 -0
  19. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.gitignore +0 -0
  20. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/config_generate.xml +0 -0
  21. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/example_project_cli.xml +0 -0
  22. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/example_project_gui.xml +0 -0
  23. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.pre-commit-config.yaml +0 -0
  24. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.readthedocs.yaml +0 -0
  25. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/LICENSE +0 -0
  26. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/Makefile +0 -0
  27. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/README.md +0 -0
  28. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/config.yaml +0 -0
  29. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/.nav.yml +0 -0
  30. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/_static/img/favicon.png +0 -0
  31. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/_static/img/logo.png +0 -0
  32. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/css/custom.css +0 -0
  33. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/develop/contributing.md +0 -0
  34. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/develop/make_windows.md +0 -0
  35. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/develop/naming_convention.md +0 -0
  36. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/funding/funding.md +0 -0
  37. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/getting-started/install.md +0 -0
  38. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/getting-started/virtual-environment.md +0 -0
  39. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/index.md +0 -0
  40. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/usage/cli.md +0 -0
  41. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/usage/config.md +0 -0
  42. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/mkdocs.yml +0 -0
  43. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/pyproject.toml +0 -0
  44. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/show_filelist.ps1 +0 -0
  45. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/show_tree.ps1 +0 -0
  46. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/show_tree.py +0 -0
  47. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/update_readme.py +0 -0
  48. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/setup.cfg +0 -0
  49. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/__init__.py +0 -0
  50. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/__init__.py +0 -0
  51. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/cli.py +0 -0
  52. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/config.py +0 -0
  53. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/docs.py +0 -0
  54. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/gui.py +0 -0
  55. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/dependency_links.txt +0 -0
  56. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/entry_points.txt +0 -0
  57. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/requires.txt +0 -0
  58. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/top_level.txt +0 -0
  59. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/template.yml.url +0 -0
  60. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/__init__.py +0 -0
  61. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/__init__.py +0 -0
  62. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/__main__.py +0 -0
  63. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/cli/__init__.py +0 -0
  64. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/cli/__main__.py +0 -0
  65. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/cli/cli_example.py +0 -0
  66. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/config/__init__.py +0 -0
  67. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/config/config_example.py +0 -0
  68. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/core/__init__.py +0 -0
  69. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/core/base.py +0 -0
  70. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/core/logging.py +0 -0
  71. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/example.gpx +0 -0
  72. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/__init__.py +0 -0
  73. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/__main__.py +0 -0
  74. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/config.yaml +0 -0
  75. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/gui_example.py +0 -0
  76. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/test_config_manager.py +0 -0
  77. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/test_docs.py +0 -0
  78. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/test_generic_cli.py +0 -0
  79. {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/uv.lock +0 -0
@@ -4,6 +4,20 @@ Changelog
4
4
 
5
5
  (unreleased)
6
6
  ------------
7
+ - #9 cli: unittests. [Paul Magister]
8
+
9
+
10
+ 0.2.1 (2025-11-14)
11
+ ------------------
12
+ - #9 Fix cli bugs: allow toggle or bool. [Paul Magister]
13
+ - #9 Fix cli bugs. [Paul Magister]
14
+ - #9 Fix problems and add ide configs. [Paul Magister]
15
+ - #9 fix cli_example.py. [Paul Magister]
16
+
17
+
18
+ 0.2.0 (2025-11-13)
19
+ ------------------
20
+ - Docs: Update HISTORY.md for release 0.2.0. [Paul Magister]
7
21
  - #9 fix posix path issue. [Paul Magister]
8
22
  - #9 fix posix path issue. [Paul Magister]
9
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: config-cli-gui
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Feature-rich Python project template for config-cli-gui.
5
5
  Author: pamagister
6
6
  Requires-Python: <3.12,>=3.10
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.2.1'
32
- __version_tuple__ = version_tuple = (0, 2, 1)
31
+ __version__ = version = '0.2.2'
32
+ __version_tuple__ = version_tuple = (0, 2, 2)
33
33
 
34
- __commit_id__ = commit_id = 'ge612edfc1'
34
+ __commit_id__ = commit_id = 'g965db4933'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: config-cli-gui
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Feature-rich Python project template for config-cli-gui.
5
5
  Author: pamagister
6
6
  Requires-Python: <3.12,>=3.10
@@ -56,6 +56,7 @@ src/config_cli_gui.egg-info/entry_points.txt
56
56
  src/config_cli_gui.egg-info/requires.txt
57
57
  src/config_cli_gui.egg-info/top_level.txt
58
58
  tests/__init__.py
59
+ tests/test_cli.py
59
60
  tests/test_config_manager.py
60
61
  tests/test_docs.py
61
62
  tests/test_generic_cli.py
@@ -0,0 +1,157 @@
1
+ import sys
2
+ from unittest.mock import mock_open, patch
3
+
4
+ import pytest
5
+
6
+ from config_cli_gui.cli import CliGenerator
7
+ from tests.example_project.config.config_example import ProjectConfigManager
8
+
9
+ # ----------------------------------------------------------------------
10
+ # Mock config.yaml content
11
+ # ----------------------------------------------------------------------
12
+ MOCK_YAML = """\
13
+ app:
14
+ date_format: '%Y-%m-%d'
15
+ enable_console_logging: true
16
+ enable_file_logging: true
17
+
18
+ cli:
19
+ elevation: true
20
+ extract_waypoints: true
21
+ input: ''
22
+ min_dist: 20
23
+ output: ''
24
+ """
25
+
26
+
27
+ # ----------------------------------------------------------------------
28
+ # Fixtures
29
+ # ----------------------------------------------------------------------
30
+ @pytest.fixture
31
+ def config_manager():
32
+ return ProjectConfigManager()
33
+
34
+
35
+ @pytest.fixture
36
+ def cli_gen(config_manager):
37
+ return CliGenerator(config_manager)
38
+
39
+
40
+ # ----------------------------------------------------------------------
41
+ # Tests
42
+ # ----------------------------------------------------------------------
43
+ def test_positional_argument_parsing(cli_gen):
44
+ argv = [
45
+ "prog",
46
+ "--min_dist",
47
+ "77",
48
+ "tests/example_project/example.gpx",
49
+ ]
50
+
51
+ with patch.object(sys, "argv", argv):
52
+ parser = cli_gen.create_argument_parser()
53
+ args = parser.parse_args()
54
+
55
+ assert args.input == "tests/example_project/example.gpx"
56
+ assert args.min_dist == "77" or args.min_dist == 77
57
+
58
+
59
+ def test_boolean_explicit_true(cli_gen):
60
+ argv = [
61
+ "prog",
62
+ "--elevation",
63
+ "true",
64
+ "tests/file.gpx",
65
+ ]
66
+
67
+ with patch.object(sys, "argv", argv):
68
+ parser = cli_gen.create_argument_parser()
69
+ args = parser.parse_args()
70
+
71
+ assert args.elevation is True
72
+
73
+
74
+ def test_boolean_explicit_false(cli_gen):
75
+ argv = [
76
+ "prog",
77
+ "--elevation",
78
+ "false",
79
+ "tests/file.gpx",
80
+ ]
81
+
82
+ with patch.object(sys, "argv", argv):
83
+ parser = cli_gen.create_argument_parser()
84
+ args = parser.parse_args()
85
+
86
+ assert args.elevation is False
87
+
88
+
89
+ def test_boolean_toggle(cli_gen):
90
+ # default elevation=False in CliConfig → toggle makes it True
91
+ argv = [
92
+ "prog",
93
+ "--elevation",
94
+ "--min_dist",
95
+ "42",
96
+ "tests/file.gpx",
97
+ ]
98
+
99
+ with patch.object(sys, "argv", argv):
100
+ parser = cli_gen.create_argument_parser()
101
+ args = parser.parse_args()
102
+
103
+ assert args.elevation is True
104
+
105
+
106
+ def test_load_config_file_and_override(cli_gen):
107
+ argv = [
108
+ "prog",
109
+ "--config",
110
+ "config.yaml",
111
+ "--min_dist",
112
+ "42",
113
+ "--elevation",
114
+ "false",
115
+ "tests/example_project/file.gpx",
116
+ ]
117
+
118
+ with patch.object(sys, "argv", argv):
119
+ with patch("builtins.open", mock_open(read_data=MOCK_YAML)):
120
+ with patch("pathlib.Path.exists", return_value=True):
121
+ params = {}
122
+
123
+ def fake_main(conf):
124
+ nonlocal params
125
+ params["input"] = conf.cli.input.value
126
+ params["min_dist"] = conf.cli.min_dist.value
127
+ params["elevation"] = conf.cli.elevation.value
128
+ params["extract_waypoints"] = conf.cli.extract_waypoints.value
129
+ return 0
130
+
131
+ exit_code = cli_gen.run_cli(main_function=fake_main)
132
+
133
+ assert exit_code == 0
134
+ assert params["input"] == "tests/example_project/file.gpx"
135
+ assert params["min_dist"] == "42" or params["min_dist"] == 42
136
+ assert params["elevation"] is False # override
137
+ assert params["extract_waypoints"] is True # from config file
138
+
139
+
140
+ def test_cli_overrides_applied_correctly(cli_gen):
141
+ argv = [
142
+ "prog",
143
+ "--min_dist",
144
+ "55",
145
+ "--output",
146
+ "out.gpx",
147
+ "tests/input.gpx",
148
+ ]
149
+
150
+ with patch.object(sys, "argv", argv):
151
+ parser = cli_gen.create_argument_parser()
152
+ args = parser.parse_args()
153
+ overrides = cli_gen.create_config_overrides(args)
154
+
155
+ assert overrides["cli__min_dist"] == "55" or overrides["cli__min_dist"] == 55
156
+ assert overrides["cli__output"] == "out.gpx"
157
+ assert overrides["cli__input"] == "tests/input.gpx"
File without changes
File without changes
File without changes
File without changes
File without changes