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.
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/HISTORY.md +14 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/PKG-INFO +1 -1
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/_version.py +3 -3
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/PKG-INFO +1 -1
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/SOURCES.txt +1 -0
- config_cli_gui-0.2.2/tests/test_cli.py +157 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/FUNDING.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/actions/setup-environment/action.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/dependabot.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/init.sh +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/release_message.sh +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/update_funding.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/workflows/main.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/workflows/release.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.github/workflows/update_readme.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.gitignore +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/config_generate.xml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/example_project_cli.xml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/example_project_gui.xml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.pre-commit-config.yaml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.readthedocs.yaml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/LICENSE +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/Makefile +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/README.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/config.yaml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/.nav.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/_static/img/favicon.png +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/_static/img/logo.png +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/css/custom.css +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/develop/contributing.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/develop/make_windows.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/develop/naming_convention.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/funding/funding.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/getting-started/install.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/getting-started/virtual-environment.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/index.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/usage/cli.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/docs/usage/config.md +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/mkdocs.yml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/pyproject.toml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/show_filelist.ps1 +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/show_tree.ps1 +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/show_tree.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/scripts/update_readme.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/setup.cfg +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/cli.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/config.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/docs.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui/gui.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/dependency_links.txt +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/entry_points.txt +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/requires.txt +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/top_level.txt +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/template.yml.url +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/__main__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/cli/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/cli/__main__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/cli/cli_example.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/config/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/config/config_example.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/core/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/core/base.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/core/logging.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/example.gpx +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/__init__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/__main__.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/config.yaml +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/gui/gui_example.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/test_config_manager.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/test_docs.py +0 -0
- {config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/test_generic_cli.py +0 -0
- {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
|
|
|
@@ -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.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
31
|
+
__version__ = version = '0.2.2'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 2, 2)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g965db4933'
|
|
@@ -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
|
|
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
|
{config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/example_project_cli.xml
RENAMED
|
File without changes
|
{config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/.idea/runConfigurations/example_project_gui.xml
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
|
{config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/src/config_cli_gui.egg-info/dependency_links.txt
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
|
{config_cli_gui-0.2.1 → config_cli_gui-0.2.2}/tests/example_project/config/config_example.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
|