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.
Files changed (89) hide show
  1. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/HISTORY.md +12 -0
  2. {config_cli_gui-0.3.6/src/config_cli_gui.egg-info → config_cli_gui-0.3.8}/PKG-INFO +2 -2
  3. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/pyproject.toml +1 -1
  4. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/_version.py +3 -3
  5. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/config.py +19 -10
  6. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8/src/config_cli_gui.egg-info}/PKG-INFO +2 -2
  7. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/scm_file_list.json +54 -54
  8. config_cli_gui-0.3.8/src/config_cli_gui.egg-info/scm_version.json +8 -0
  9. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/config/config_example.py +2 -1
  10. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/gui/gui_example.py +18 -2
  11. config_cli_gui-0.3.8/uv.lock +1217 -0
  12. config_cli_gui-0.3.6/src/config_cli_gui.egg-info/scm_version.json +0 -8
  13. config_cli_gui-0.3.6/uv.lock +0 -882
  14. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/FUNDING.yml +0 -0
  15. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  16. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  17. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  18. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/actions/setup-environment/action.yml +0 -0
  19. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/dependabot.yml +0 -0
  20. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/init.sh +0 -0
  21. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/release_message.sh +0 -0
  22. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/update_funding.py +0 -0
  23. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/workflows/main.yml +0 -0
  24. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/workflows/release.yml +0 -0
  25. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.github/workflows/update_readme.yml +0 -0
  26. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.gitignore +0 -0
  27. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.idea/runConfigurations/config_generate.xml +0 -0
  28. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.idea/runConfigurations/example_project_cli.xml +0 -0
  29. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.idea/runConfigurations/example_project_gui.xml +0 -0
  30. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.pre-commit-config.yaml +0 -0
  31. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/.readthedocs.yaml +0 -0
  32. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/LICENSE +0 -0
  33. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/Makefile +0 -0
  34. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/README.md +0 -0
  35. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/config.yaml +0 -0
  36. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/.nav.yml +0 -0
  37. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/favicon.png +0 -0
  38. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/logo.png +0 -0
  39. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/settings_dlg.png +0 -0
  40. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/_static/img/settings_doc.png +0 -0
  41. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/css/custom.css +0 -0
  42. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/develop/contributing.md +0 -0
  43. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/develop/make_windows.md +0 -0
  44. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/develop/naming_convention.md +0 -0
  45. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/funding/funding.md +0 -0
  46. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/getting-started/install.md +0 -0
  47. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/getting-started/virtual-environment.md +0 -0
  48. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/index.md +0 -0
  49. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/usage/cli.md +0 -0
  50. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/docs/usage/config.md +0 -0
  51. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/mkdocs.yml +0 -0
  52. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/show_filelist.ps1 +0 -0
  53. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/show_tree.ps1 +0 -0
  54. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/show_tree.py +0 -0
  55. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/scripts/update_readme.py +0 -0
  56. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/setup.cfg +0 -0
  57. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/__init__.py +0 -0
  58. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/__init__.py +0 -0
  59. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/cli.py +0 -0
  60. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/__init__.py +0 -0
  61. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/color.py +0 -0
  62. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/font.py +0 -0
  63. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/configtypes/vector.py +0 -0
  64. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/docs.py +0 -0
  65. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/gui.py +0 -0
  66. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/logging.py +0 -0
  67. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui/persistence.py +0 -0
  68. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/SOURCES.txt +0 -0
  69. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/dependency_links.txt +0 -0
  70. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/entry_points.txt +0 -0
  71. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/requires.txt +0 -0
  72. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/src/config_cli_gui.egg-info/top_level.txt +0 -0
  73. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/template.yml.url +0 -0
  74. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/__init__.py +0 -0
  75. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/__init__.py +0 -0
  76. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/__main__.py +0 -0
  77. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/cli/__init__.py +0 -0
  78. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/cli/__main__.py +0 -0
  79. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/cli/cli_example.py +0 -0
  80. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/config/__init__.py +0 -0
  81. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/core/__init__.py +0 -0
  82. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/core/base.py +0 -0
  83. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/example.gpx +0 -0
  84. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/gui/__init__.py +0 -0
  85. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/example_project/gui/__main__.py +0 -0
  86. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_cli.py +0 -0
  87. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_config_manager.py +0 -0
  88. {config_cli_gui-0.3.6 → config_cli_gui-0.3.8}/tests/test_docs.py +0 -0
  89. {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.6
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.12,>=3.11
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
@@ -6,7 +6,7 @@ authors = [
6
6
  {name = "pamagister"}
7
7
  ]
8
8
  readme = "docs/index.md"
9
- requires-python = ">=3.11,<3.12"
9
+ requires-python = ">=3.10,<3.14"
10
10
  dependencies = [
11
11
  "pydantic>=2.11.7",
12
12
  "pyyaml>=6.0.2",
@@ -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.6'
22
- __version_tuple__ = version_tuple = (0, 3, 6)
21
+ __version__ = version = '0.3.8'
22
+ __version_tuple__ = version_tuple = (0, 3, 8)
23
23
 
24
- __commit_id__ = commit_id = 'g7d530e99f'
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: (datetime.fromisoformat(v) if isinstance(v, str) else 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
- self.load_from_file(config_file)
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
- def get_app_name(self) -> str:
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
- try:
255
- persistence.write_last_used_config(self.get_app_name(), str(path))
256
- except Exception:
257
- # Persistence should not break normal config loading.
258
- pass
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.6
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.12,>=3.11
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
@@ -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
- "README.md",
5
- "uv.lock",
6
- "Makefile",
7
- "LICENSE",
8
- "pyproject.toml",
9
- "mkdocs.yml",
20
+ ".readthedocs.yaml",
10
21
  "HISTORY.md",
11
- "template.yml.url",
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/index.md",
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/gui.py",
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
- ".idea/runConfigurations/example_project_cli.xml",
65
- ".idea/runConfigurations/config_generate.xml",
66
- ".idea/runConfigurations/example_project_gui.xml",
67
- ".github/PULL_REQUEST_TEMPLATE.md",
68
- ".github/init.sh",
69
- ".github/update_funding.py",
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
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.3.8",
3
+ "distance": 0,
4
+ "node": "g250985e4a0c10f70ecf64392a37ba8294e8c45ae",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-02"
8
+ }
@@ -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
- def get_app_name(self) -> str:
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
- self._config = ConfigParameterManager("config.yaml")
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("example-app")
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: