config-cli-gui 0.3.6__tar.gz → 0.3.8__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.3.6 → config_cli_gui-0.3.8}/HISTORY.md +12 -0
- {config_cli_gui-0.3.6/src/config_cli_gui.egg-info → config_cli_gui-0.3.8}/PKG-INFO +2 -2
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/pyproject.toml +1 -1
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/_version.py +3 -3
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/config.py +19 -10
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8/src/config_cli_gui.egg-info}/PKG-INFO +2 -2
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/scm_file_list.json +54 -54
- config_cli_gui-0.3.8/src/config_cli_gui.egg-info/scm_version.json +8 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/config/config_example.py +2 -1
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/gui/gui_example.py +18 -2
- config_cli_gui-0.3.8/uv.lock +1217 -0
- config_cli_gui-0.3.6/src/config_cli_gui.egg-info/scm_version.json +0 -8
- config_cli_gui-0.3.6/uv.lock +0 -882
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/FUNDING.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/actions/setup-environment/action.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/dependabot.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/init.sh +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/release_message.sh +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/update_funding.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/workflows/main.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/workflows/release.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/workflows/update_readme.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.gitignore +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.idea/runConfigurations/config_generate.xml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.idea/runConfigurations/example_project_cli.xml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.idea/runConfigurations/example_project_gui.xml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.pre-commit-config.yaml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.readthedocs.yaml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/LICENSE +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/Makefile +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/README.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/config.yaml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/.nav.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/favicon.png +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/logo.png +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/settings_dlg.png +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/settings_doc.png +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/css/custom.css +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/develop/contributing.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/develop/make_windows.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/develop/naming_convention.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/funding/funding.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/getting-started/install.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/getting-started/virtual-environment.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/index.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/usage/cli.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/usage/config.md +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/mkdocs.yml +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/show_filelist.ps1 +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/show_tree.ps1 +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/show_tree.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/update_readme.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/setup.cfg +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/cli.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/color.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/font.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/vector.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/docs.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/gui.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/logging.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/persistence.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/SOURCES.txt +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/dependency_links.txt +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/entry_points.txt +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/requires.txt +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/top_level.txt +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/template.yml.url +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/__main__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/cli/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/cli/__main__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/cli/cli_example.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/config/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/core/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/core/base.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/example.gpx +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/gui/__init__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/gui/__main__.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_cli.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_config_manager.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_docs.py +0 -0
- {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_generic_cli.py +0 -0
|
@@ -4,6 +4,18 @@ Changelog
|
|
|
4
4
|
|
|
5
5
|
(unreleased)
|
|
6
6
|
------------
|
|
7
|
+
- Bump python version to <3.14. [Paul Magister]
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
0.3.7 (2026-06-24)
|
|
11
|
+
------------------
|
|
12
|
+
- Docs: Update HISTORY.md for release 0.3.7. [Paul Magister]
|
|
13
|
+
- Keep last used config file. [Paul Magister]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
0.3.6 (2026-06-24)
|
|
17
|
+
------------------
|
|
18
|
+
- Docs: Update HISTORY.md for release 0.3.6. [Paul Magister]
|
|
7
19
|
- Dynamically set app name for config persistence. [Paul Magister]
|
|
8
20
|
- Dynamically set app name for config persistence. [Paul Magister]
|
|
9
21
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: config-cli-gui
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: Feature-rich Python project template for config-cli-gui.
|
|
5
5
|
Author: pamagister
|
|
6
|
-
Requires-Python: <3.
|
|
6
|
+
Requires-Python: <3.14,>=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
License-File: LICENSE
|
|
9
9
|
Requires-Dist: pydantic>=2.11.7
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.3.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 3,
|
|
21
|
+
__version__ = version = '0.3.8'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 3, 8)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'g250985e4a'
|
|
@@ -91,7 +91,7 @@ class ConfigSerializer:
|
|
|
91
91
|
},
|
|
92
92
|
datetime: {
|
|
93
93
|
"to_serializable": lambda v: v.isoformat(),
|
|
94
|
-
"from_serializable": lambda v:
|
|
94
|
+
"from_serializable": lambda v: datetime.fromisoformat(v) if isinstance(v, str) else v,
|
|
95
95
|
},
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -185,6 +185,7 @@ class ConfigManager:
|
|
|
185
185
|
self,
|
|
186
186
|
categories: tuple[ConfigCategory, ...],
|
|
187
187
|
config_file: str | None = None,
|
|
188
|
+
persist_last_used: bool = True,
|
|
188
189
|
**overrides: Any,
|
|
189
190
|
):
|
|
190
191
|
self._categories: dict[str, ConfigCategory] = {}
|
|
@@ -200,11 +201,16 @@ class ConfigManager:
|
|
|
200
201
|
self.add_category(category.get_category_name(), category)
|
|
201
202
|
|
|
202
203
|
if config_file:
|
|
203
|
-
|
|
204
|
+
# Allow callers to opt-out of writing the "last used" persistence
|
|
205
|
+
# entry when loading a configuration during initialization. This
|
|
206
|
+
# is useful for GUIs or libraries that want to load a default
|
|
207
|
+
# config without marking it as the user's last-used file.
|
|
208
|
+
self.load_from_file(config_file, persist_last_used=persist_last_used)
|
|
204
209
|
|
|
205
210
|
self.apply_overrides(overrides)
|
|
206
211
|
|
|
207
|
-
|
|
212
|
+
@staticmethod
|
|
213
|
+
def get_app_name() -> str:
|
|
208
214
|
"""Return the application identifier used by persistence helpers.
|
|
209
215
|
|
|
210
216
|
Projects can override this method in their concrete ConfigManager to
|
|
@@ -239,7 +245,7 @@ class ConfigManager:
|
|
|
239
245
|
else:
|
|
240
246
|
setattr(category, param_name, value)
|
|
241
247
|
|
|
242
|
-
def load_from_file(self, config_file: str) -> None:
|
|
248
|
+
def load_from_file(self, config_file: str, persist_last_used: bool = True) -> None:
|
|
243
249
|
"""Load configuration from a YAML or JSON file."""
|
|
244
250
|
path = Path(config_file)
|
|
245
251
|
if not path.exists():
|
|
@@ -250,12 +256,15 @@ class ConfigManager:
|
|
|
250
256
|
|
|
251
257
|
self._apply_config_data(data)
|
|
252
258
|
# Persist the information about the last used configuration file so the
|
|
253
|
-
# application can restore the same config on next start.
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
+
# application can restore the same config on next start. This can be
|
|
260
|
+
# disabled by callers (e.g. GUI startup loading a default file) by
|
|
261
|
+
# passing `persist_last_used=False`.
|
|
262
|
+
if persist_last_used:
|
|
263
|
+
try:
|
|
264
|
+
persistence.write_last_used_config(self.get_app_name(), str(path))
|
|
265
|
+
except Exception:
|
|
266
|
+
# Persistence should not break normal config loading.
|
|
267
|
+
pass
|
|
259
268
|
try:
|
|
260
269
|
logging.getLogger("config_cli_gui").info(f"Loaded configuration from: {path}")
|
|
261
270
|
except Exception:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: config-cli-gui
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: Feature-rich Python project template for config-cli-gui.
|
|
5
5
|
Author: pamagister
|
|
6
|
-
Requires-Python: <3.
|
|
6
|
+
Requires-Python: <3.14,>=3.10
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
License-File: LICENSE
|
|
9
9
|
Requires-Dist: pydantic>=2.11.7
|
{config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/scm_file_list.json
RENAMED
|
@@ -1,80 +1,80 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": [
|
|
3
|
+
".github/FUNDING.yml",
|
|
4
|
+
".github/ISSUE_TEMPLATE/bug_report.md",
|
|
5
|
+
".github/ISSUE_TEMPLATE/feature_request.md",
|
|
6
|
+
".github/PULL_REQUEST_TEMPLATE.md",
|
|
7
|
+
".github/actions/setup-environment/action.yml",
|
|
8
|
+
".github/dependabot.yml",
|
|
9
|
+
".github/init.sh",
|
|
10
|
+
".github/release_message.sh",
|
|
11
|
+
".github/update_funding.py",
|
|
12
|
+
".github/workflows/main.yml",
|
|
13
|
+
".github/workflows/release.yml",
|
|
14
|
+
".github/workflows/update_readme.yml",
|
|
15
|
+
".gitignore",
|
|
16
|
+
".idea/runConfigurations/config_generate.xml",
|
|
17
|
+
".idea/runConfigurations/example_project_cli.xml",
|
|
18
|
+
".idea/runConfigurations/example_project_gui.xml",
|
|
3
19
|
".pre-commit-config.yaml",
|
|
4
|
-
"
|
|
5
|
-
"uv.lock",
|
|
6
|
-
"Makefile",
|
|
7
|
-
"LICENSE",
|
|
8
|
-
"pyproject.toml",
|
|
9
|
-
"mkdocs.yml",
|
|
20
|
+
".readthedocs.yaml",
|
|
10
21
|
"HISTORY.md",
|
|
11
|
-
"
|
|
22
|
+
"LICENSE",
|
|
23
|
+
"Makefile",
|
|
24
|
+
"README.md",
|
|
12
25
|
"config.yaml",
|
|
13
|
-
".gitignore",
|
|
14
|
-
".readthedocs.yaml",
|
|
15
|
-
"scripts/show_filelist.ps1",
|
|
16
|
-
"scripts/show_tree.ps1",
|
|
17
|
-
"scripts/show_tree.py",
|
|
18
|
-
"scripts/update_readme.py",
|
|
19
26
|
"docs/.nav.yml",
|
|
20
|
-
"docs/
|
|
27
|
+
"docs/_static/img/favicon.png",
|
|
28
|
+
"docs/_static/img/logo.png",
|
|
29
|
+
"docs/_static/img/settings_dlg.png",
|
|
30
|
+
"docs/_static/img/settings_doc.png",
|
|
31
|
+
"docs/css/custom.css",
|
|
21
32
|
"docs/develop/contributing.md",
|
|
22
33
|
"docs/develop/make_windows.md",
|
|
23
34
|
"docs/develop/naming_convention.md",
|
|
24
35
|
"docs/funding/funding.md",
|
|
25
|
-
"docs/css/custom.css",
|
|
26
|
-
"docs/_static/img/logo.png",
|
|
27
|
-
"docs/_static/img/favicon.png",
|
|
28
|
-
"docs/_static/img/settings_dlg.png",
|
|
29
|
-
"docs/_static/img/settings_doc.png",
|
|
30
|
-
"docs/usage/config.md",
|
|
31
|
-
"docs/usage/cli.md",
|
|
32
|
-
"docs/getting-started/virtual-environment.md",
|
|
33
36
|
"docs/getting-started/install.md",
|
|
37
|
+
"docs/getting-started/virtual-environment.md",
|
|
38
|
+
"docs/index.md",
|
|
39
|
+
"docs/usage/cli.md",
|
|
40
|
+
"docs/usage/config.md",
|
|
41
|
+
"mkdocs.yml",
|
|
42
|
+
"pyproject.toml",
|
|
43
|
+
"scripts/show_filelist.ps1",
|
|
44
|
+
"scripts/show_tree.ps1",
|
|
45
|
+
"scripts/show_tree.py",
|
|
46
|
+
"scripts/update_readme.py",
|
|
34
47
|
"src/__init__.py",
|
|
35
48
|
"src/config_cli_gui/__init__.py",
|
|
36
|
-
"src/config_cli_gui/config.py",
|
|
37
|
-
"src/config_cli_gui/docs.py",
|
|
38
|
-
"src/config_cli_gui/logging.py",
|
|
39
|
-
"src/config_cli_gui/persistence.py",
|
|
40
49
|
"src/config_cli_gui/cli.py",
|
|
41
|
-
"src/config_cli_gui/
|
|
50
|
+
"src/config_cli_gui/config.py",
|
|
42
51
|
"src/config_cli_gui/configtypes/__init__.py",
|
|
43
52
|
"src/config_cli_gui/configtypes/color.py",
|
|
44
|
-
"src/config_cli_gui/configtypes/vector.py",
|
|
45
53
|
"src/config_cli_gui/configtypes/font.py",
|
|
54
|
+
"src/config_cli_gui/configtypes/vector.py",
|
|
55
|
+
"src/config_cli_gui/docs.py",
|
|
56
|
+
"src/config_cli_gui/gui.py",
|
|
57
|
+
"src/config_cli_gui/logging.py",
|
|
58
|
+
"src/config_cli_gui/persistence.py",
|
|
59
|
+
"template.yml.url",
|
|
46
60
|
"tests/__init__.py",
|
|
47
|
-
"tests/test_docs.py",
|
|
48
|
-
"tests/test_config_manager.py",
|
|
49
|
-
"tests/test_cli.py",
|
|
50
|
-
"tests/test_generic_cli.py",
|
|
51
61
|
"tests/example_project/__init__.py",
|
|
52
|
-
"tests/example_project/example.gpx",
|
|
53
62
|
"tests/example_project/__main__.py",
|
|
54
|
-
"tests/example_project/core/__init__.py",
|
|
55
|
-
"tests/example_project/core/base.py",
|
|
56
|
-
"tests/example_project/config/__init__.py",
|
|
57
|
-
"tests/example_project/config/config_example.py",
|
|
58
63
|
"tests/example_project/cli/__init__.py",
|
|
59
|
-
"tests/example_project/cli/cli_example.py",
|
|
60
64
|
"tests/example_project/cli/__main__.py",
|
|
65
|
+
"tests/example_project/cli/cli_example.py",
|
|
66
|
+
"tests/example_project/config/__init__.py",
|
|
67
|
+
"tests/example_project/config/config_example.py",
|
|
68
|
+
"tests/example_project/core/__init__.py",
|
|
69
|
+
"tests/example_project/core/base.py",
|
|
70
|
+
"tests/example_project/example.gpx",
|
|
61
71
|
"tests/example_project/gui/__init__.py",
|
|
62
|
-
"tests/example_project/gui/gui_example.py",
|
|
63
72
|
"tests/example_project/gui/__main__.py",
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
".
|
|
70
|
-
".github/dependabot.yml",
|
|
71
|
-
".github/FUNDING.yml",
|
|
72
|
-
".github/release_message.sh",
|
|
73
|
-
".github/actions/setup-environment/action.yml",
|
|
74
|
-
".github/ISSUE_TEMPLATE/bug_report.md",
|
|
75
|
-
".github/ISSUE_TEMPLATE/feature_request.md",
|
|
76
|
-
".github/workflows/main.yml",
|
|
77
|
-
".github/workflows/release.yml",
|
|
78
|
-
".github/workflows/update_readme.yml"
|
|
73
|
+
"tests/example_project/gui/gui_example.py",
|
|
74
|
+
"tests/test_cli.py",
|
|
75
|
+
"tests/test_config_manager.py",
|
|
76
|
+
"tests/test_docs.py",
|
|
77
|
+
"tests/test_generic_cli.py",
|
|
78
|
+
"uv.lock"
|
|
79
79
|
]
|
|
80
80
|
}
|
{config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/config/config_example.py
RENAMED
|
@@ -176,7 +176,8 @@ class ConfigParameterManager(ConfigManager): # Inherit from ConfigManager
|
|
|
176
176
|
categories = (CliConfig(), GuiConfig(), MiscConfig())
|
|
177
177
|
super().__init__(categories, config_file, **kwargs)
|
|
178
178
|
|
|
179
|
-
|
|
179
|
+
@staticmethod
|
|
180
|
+
def get_app_name() -> str:
|
|
180
181
|
"""Return the application identifier for this example project.
|
|
181
182
|
|
|
182
183
|
This overrides the library default so that example files use
|
|
@@ -118,7 +118,21 @@ class MainGui:
|
|
|
118
118
|
self.root.geometry("1200x600") # Increased width for new layout
|
|
119
119
|
|
|
120
120
|
# Initialize configuration
|
|
121
|
-
|
|
121
|
+
# Prefer the user's last used configuration if present; otherwise
|
|
122
|
+
# load a local default config.yaml without marking it as "last used"
|
|
123
|
+
# (so we don't overwrite the user's actual last-used file).
|
|
124
|
+
try:
|
|
125
|
+
last = read_last_used_config(ConfigParameterManager.get_app_name())
|
|
126
|
+
except Exception:
|
|
127
|
+
last = None
|
|
128
|
+
|
|
129
|
+
if last and Path(last).exists():
|
|
130
|
+
self._config = ConfigParameterManager(last)
|
|
131
|
+
elif Path("config.yaml").exists():
|
|
132
|
+
# Load default config but do not persist it as the "last used"
|
|
133
|
+
self._config = ConfigParameterManager("config.yaml", persist_last_used=False)
|
|
134
|
+
else:
|
|
135
|
+
self._config = ConfigParameterManager()
|
|
122
136
|
|
|
123
137
|
# Initialize logging system using individual AppConfig values
|
|
124
138
|
self.logger_manager = initialize_logging(
|
|
@@ -392,6 +406,8 @@ class MainGui:
|
|
|
392
406
|
|
|
393
407
|
self.logger.info(f"Loading new configuration from: {config_file}")
|
|
394
408
|
try:
|
|
409
|
+
# When user explicitly selects a config file, we load it and
|
|
410
|
+
# allow the manager to persist it as the new last-used file.
|
|
395
411
|
self._config = ConfigParameterManager(config_file)
|
|
396
412
|
except Exception as e:
|
|
397
413
|
self.logger.error(f"Failed to load config file: {e}", exc_info=True)
|
|
@@ -576,7 +592,7 @@ def main():
|
|
|
576
592
|
|
|
577
593
|
# Try to restore the last used configuration file so the GUI can start
|
|
578
594
|
# with the user's preferred theme and settings.
|
|
579
|
-
last = read_last_used_config(
|
|
595
|
+
last = read_last_used_config(ConfigParameterManager.get_app_name())
|
|
580
596
|
if last and Path(last).exists():
|
|
581
597
|
_config = ConfigParameterManager(last)
|
|
582
598
|
else:
|