dynamic-config-loader 2.6.0__tar.gz → 2.7.1__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.
- {dynamic_config_loader-2.6.0/src/dynamic_config_loader.egg-info → dynamic_config_loader-2.7.1}/PKG-INFO +40 -3
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/README.md +37 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/pyproject.toml +9 -4
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/environment.py +5 -8
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1/src/dynamic_config_loader.egg-info}/PKG-INFO +40 -3
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader.egg-info/requires.txt +2 -2
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_env_injection.py +5 -5
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/AUTHORS +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/LICENSE +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/NOTICE +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/setup.cfg +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/loader.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/base_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/env/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/env/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/env/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/ini/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/ini/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/ini/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/json/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/json/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/json/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/properties/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/properties/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/properties/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/toml/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/toml/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/toml/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/xml/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/xml/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/xml/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/yaml/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/yaml/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/strategies/yaml/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader.egg-info/SOURCES.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader.egg-info/dependency_links.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader.egg-info/top_level.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_deep_merge.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_env_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_factory.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_ini_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_json_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_loader.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_logging_safety.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_properties_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_toml_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_xml_strategy.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dynamic-config-loader
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: An enterprise-grade configuration orchestration engine designed to ingest, cascade, and deeply merge multiple configuration file layers.
|
|
5
5
|
Author-email: Avinash Kumar <halfhiddencode@gmail.com>
|
|
6
6
|
License:
|
|
@@ -231,8 +231,8 @@ Description-Content-Type: text/markdown
|
|
|
231
231
|
License-File: LICENSE
|
|
232
232
|
License-File: NOTICE
|
|
233
233
|
License-File: AUTHORS
|
|
234
|
-
Requires-Dist: pyyaml>=6.0.
|
|
235
|
-
Requires-Dist: tomli>=2.0
|
|
234
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
235
|
+
Requires-Dist: tomli>=2.5.0; python_version < "3.11"
|
|
236
236
|
Dynamic: license-file
|
|
237
237
|
|
|
238
238
|
# Dynamic Configuration Loader
|
|
@@ -241,6 +241,26 @@ A lightweight, production-grade, strategy-driven configuration orchestration eng
|
|
|
241
241
|
|
|
242
242
|
---
|
|
243
243
|
|
|
244
|
+
> [!TIP]
|
|
245
|
+
> ### 👋 NEW TO DYNAMIC CONFIG LOADER? START HERE!
|
|
246
|
+
>
|
|
247
|
+
> Choose your role to find the fastest path to get up and running:
|
|
248
|
+
>
|
|
249
|
+
> * **🆕 Application Developer (First Time User):** Start with the **[3-Line Quick Start Tutorial](docs/tutorials/getting_started.md)**.
|
|
250
|
+
> * **🚀 DevOps / SRE Engineer:** Check the **[Configuration Lifecycle Matrix](docs/guides/user_usage.md#1-minimal-to-advanced-configuration-lifecycle-guide)** & **[K8s Deployment Scenarios](docs/guides/user_usage.md#7-production-deployment-scenarios)**.
|
|
251
|
+
> * **🛠️ Open-Source Contributor:** See the **[Track A vs Track B Contributor Guide](docs/guides/contributor_guide.md#1-contributing-features-vs-format-strategies)**.
|
|
252
|
+
> * **📦 Maintainer / DevOps Release:** Read the **[Release & OIDC Deployment Guide](docs/guides/release_guide.md)**.
|
|
253
|
+
|
|
254
|
+
> [!NOTE]
|
|
255
|
+
> ### 🌐 DYNAMIC CONFIG LOADER ECOSYSTEM & OTHER LANGUAGES
|
|
256
|
+
>
|
|
257
|
+
> Looking for this library in another programming language? Dynamic Config Loader is available for:
|
|
258
|
+
>
|
|
259
|
+
> * 🐍 **Python Version:** [`python-dynamic-config-loader`](https://gitlab.com/halfhiddencode/python-dynamic-config-loader) (This repository)
|
|
260
|
+
> * 🟢 **Node.js / TypeScript Version:** [`node-dynamic-config-loader`](https://gitlab.com/halfhiddencode/node-dynamic-config-loader)
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
244
264
|
## 📌 Quick Navigation Index
|
|
245
265
|
|
|
246
266
|
- [⚡ Minimal Quick Start](#-quick-start-minimal-3-lines)
|
|
@@ -369,9 +389,26 @@ export DCL_LOG_LEVEL=info
|
|
|
369
389
|
| **🚀 Getting Started Tutorial** | [getting_started.md](docs/tutorials/getting_started.md) | Step-by-step onboarding & minimal execution tracks. |
|
|
370
390
|
| **📖 Operations & Usage Guide** | [user_usage.md](docs/guides/user_usage.md) | Complete format matrix, K8s/DevOps deployment scenarios, & path edge cases. |
|
|
371
391
|
| **🛠️ Contributor Guide** | [contributor_guide.md](docs/guides/contributor_guide.md) | Adding custom format strategies & factory registry hooks. |
|
|
392
|
+
| **🚀 Release & OIDC Guide** | [release_guide.md](docs/guides/release_guide.md) | OIDC Trusted Publishing, version bump rules, & PyPI deployment protocols. |
|
|
372
393
|
| **🏗️ Architecture Reference** | [architecture.md](docs/reference/architecture.md) | System design, UML diagrams, & deep merge algorithms. |
|
|
373
394
|
|
|
374
395
|
---
|
|
375
396
|
|
|
397
|
+
## 🤖 AI Agent & Coding Assistant Integration Skills
|
|
398
|
+
|
|
399
|
+
`python-dynamic-config-loader` includes dedicated Python AI Skills designed for AI pair programmers (Cursor, Antigravity, Claude Code, Codex, GitHub Copilot):
|
|
400
|
+
|
|
401
|
+
| AI Skill Name | Description & Target Persona | Location in Repository |
|
|
402
|
+
| :--- | :--- | :--- |
|
|
403
|
+
| **`python-dynamic-config-loader-usage`** | **Consumer AI Skill:** Guides AI models when writing Python application code, integrating configurations, and setting container environment variables. | [.agents/skills/python-dynamic-config-loader-usage/SKILL.md](.agents/skills/python-dynamic-config-loader-usage/SKILL.md) |
|
|
404
|
+
| **`python-dynamic-config-loader-contributor`** | **Contributor AI Skill:** Guides AI models when adding new format strategies (`BaseStrategy`), extending logger logic, or writing Python unit tests. | [.agents/skills/python-dynamic-config-loader-contributor/SKILL.md](.agents/skills/python-dynamic-config-loader-contributor/SKILL.md) |
|
|
405
|
+
|
|
406
|
+
### How to use with AI Models:
|
|
407
|
+
- **Cursor / Claude Code / Antigravity:** The agent automatically discovers skills in `.agents/skills/`. You can trigger them directly by prompting:
|
|
408
|
+
> *"Use the `python-dynamic-config-loader-usage` skill to configure python-dynamic-config-loader in my application."*
|
|
409
|
+
- **GitHub Copilot / Codex:** Reference [.agents/skills/python-dynamic-config-loader-usage/SKILL.md](.agents/skills/python-dynamic-config-loader-usage/SKILL.md) in your prompt or workspace instructions.
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
376
413
|
## 📜 License
|
|
377
414
|
Licensed under the [Apache License, Version 2.0](LICENSE).
|
|
@@ -4,6 +4,26 @@ A lightweight, production-grade, strategy-driven configuration orchestration eng
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
> [!TIP]
|
|
8
|
+
> ### 👋 NEW TO DYNAMIC CONFIG LOADER? START HERE!
|
|
9
|
+
>
|
|
10
|
+
> Choose your role to find the fastest path to get up and running:
|
|
11
|
+
>
|
|
12
|
+
> * **🆕 Application Developer (First Time User):** Start with the **[3-Line Quick Start Tutorial](docs/tutorials/getting_started.md)**.
|
|
13
|
+
> * **🚀 DevOps / SRE Engineer:** Check the **[Configuration Lifecycle Matrix](docs/guides/user_usage.md#1-minimal-to-advanced-configuration-lifecycle-guide)** & **[K8s Deployment Scenarios](docs/guides/user_usage.md#7-production-deployment-scenarios)**.
|
|
14
|
+
> * **🛠️ Open-Source Contributor:** See the **[Track A vs Track B Contributor Guide](docs/guides/contributor_guide.md#1-contributing-features-vs-format-strategies)**.
|
|
15
|
+
> * **📦 Maintainer / DevOps Release:** Read the **[Release & OIDC Deployment Guide](docs/guides/release_guide.md)**.
|
|
16
|
+
|
|
17
|
+
> [!NOTE]
|
|
18
|
+
> ### 🌐 DYNAMIC CONFIG LOADER ECOSYSTEM & OTHER LANGUAGES
|
|
19
|
+
>
|
|
20
|
+
> Looking for this library in another programming language? Dynamic Config Loader is available for:
|
|
21
|
+
>
|
|
22
|
+
> * 🐍 **Python Version:** [`python-dynamic-config-loader`](https://gitlab.com/halfhiddencode/python-dynamic-config-loader) (This repository)
|
|
23
|
+
> * 🟢 **Node.js / TypeScript Version:** [`node-dynamic-config-loader`](https://gitlab.com/halfhiddencode/node-dynamic-config-loader)
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
7
27
|
## 📌 Quick Navigation Index
|
|
8
28
|
|
|
9
29
|
- [⚡ Minimal Quick Start](#-quick-start-minimal-3-lines)
|
|
@@ -132,9 +152,26 @@ export DCL_LOG_LEVEL=info
|
|
|
132
152
|
| **🚀 Getting Started Tutorial** | [getting_started.md](docs/tutorials/getting_started.md) | Step-by-step onboarding & minimal execution tracks. |
|
|
133
153
|
| **📖 Operations & Usage Guide** | [user_usage.md](docs/guides/user_usage.md) | Complete format matrix, K8s/DevOps deployment scenarios, & path edge cases. |
|
|
134
154
|
| **🛠️ Contributor Guide** | [contributor_guide.md](docs/guides/contributor_guide.md) | Adding custom format strategies & factory registry hooks. |
|
|
155
|
+
| **🚀 Release & OIDC Guide** | [release_guide.md](docs/guides/release_guide.md) | OIDC Trusted Publishing, version bump rules, & PyPI deployment protocols. |
|
|
135
156
|
| **🏗️ Architecture Reference** | [architecture.md](docs/reference/architecture.md) | System design, UML diagrams, & deep merge algorithms. |
|
|
136
157
|
|
|
137
158
|
---
|
|
138
159
|
|
|
160
|
+
## 🤖 AI Agent & Coding Assistant Integration Skills
|
|
161
|
+
|
|
162
|
+
`python-dynamic-config-loader` includes dedicated Python AI Skills designed for AI pair programmers (Cursor, Antigravity, Claude Code, Codex, GitHub Copilot):
|
|
163
|
+
|
|
164
|
+
| AI Skill Name | Description & Target Persona | Location in Repository |
|
|
165
|
+
| :--- | :--- | :--- |
|
|
166
|
+
| **`python-dynamic-config-loader-usage`** | **Consumer AI Skill:** Guides AI models when writing Python application code, integrating configurations, and setting container environment variables. | [.agents/skills/python-dynamic-config-loader-usage/SKILL.md](.agents/skills/python-dynamic-config-loader-usage/SKILL.md) |
|
|
167
|
+
| **`python-dynamic-config-loader-contributor`** | **Contributor AI Skill:** Guides AI models when adding new format strategies (`BaseStrategy`), extending logger logic, or writing Python unit tests. | [.agents/skills/python-dynamic-config-loader-contributor/SKILL.md](.agents/skills/python-dynamic-config-loader-contributor/SKILL.md) |
|
|
168
|
+
|
|
169
|
+
### How to use with AI Models:
|
|
170
|
+
- **Cursor / Claude Code / Antigravity:** The agent automatically discovers skills in `.agents/skills/`. You can trigger them directly by prompting:
|
|
171
|
+
> *"Use the `python-dynamic-config-loader-usage` skill to configure python-dynamic-config-loader in my application."*
|
|
172
|
+
- **GitHub Copilot / Codex:** Reference [.agents/skills/python-dynamic-config-loader-usage/SKILL.md](.agents/skills/python-dynamic-config-loader-usage/SKILL.md) in your prompt or workspace instructions.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
139
176
|
## 📜 License
|
|
140
177
|
Licensed under the [Apache License, Version 2.0](LICENSE).
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = [
|
|
2
|
+
requires = [
|
|
3
|
+
"setuptools>=82.0.1; python_version >= '3.9'",
|
|
4
|
+
"setuptools>=61.0.0; python_version < '3.9'",
|
|
5
|
+
"wheel>=0.48.0; python_version >= '3.9'",
|
|
6
|
+
"wheel; python_version < '3.9'",
|
|
7
|
+
]
|
|
3
8
|
build-backend = "setuptools.build_meta"
|
|
4
9
|
|
|
5
10
|
[project]
|
|
6
11
|
name = "dynamic-config-loader"
|
|
7
|
-
version = "2.
|
|
12
|
+
version = "2.7.1"
|
|
8
13
|
description = "An enterprise-grade configuration orchestration engine designed to ingest, cascade, and deeply merge multiple configuration file layers."
|
|
9
14
|
readme = "README.md"
|
|
10
15
|
requires-python = ">=3.8"
|
|
@@ -51,8 +56,8 @@ classifiers = [
|
|
|
51
56
|
]
|
|
52
57
|
|
|
53
58
|
dependencies = [
|
|
54
|
-
"pyyaml>=6.0.
|
|
55
|
-
"tomli>=2.0
|
|
59
|
+
"pyyaml>=6.0.3",
|
|
60
|
+
"tomli>=2.5.0; python_version < '3.11'",
|
|
56
61
|
]
|
|
57
62
|
|
|
58
63
|
[project.urls]
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/environment.py
RENAMED
|
@@ -58,18 +58,15 @@ def inject_environment_variables(
|
|
|
58
58
|
sliced_key = env_key[len(prefix):]
|
|
59
59
|
parsed_val = _parse_env_value(env_val)
|
|
60
60
|
|
|
61
|
+
# Resolution order:
|
|
62
|
+
# 1. Explicit double-underscore '__': Splits into nested objects (e.g. DCL_AUTH__TENANT_ID -> config_data["auth"]["tenant_id"])
|
|
63
|
+
# 2. Default: Preserves as 100% FLAT key (e.g. DCL_SERVICE_GATEWAY_NAME -> config_data["service_gateway_name"])
|
|
61
64
|
flat_key = sliced_key.strip().lower()
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
# 1. Direct flat key match in config_data (e.g. DCL_TEST_NAME -> config_data["test_name"])
|
|
65
|
-
# 2. Double-underscore '__' explicit namespace splitting (e.g. DCL_AUTH__TENANT_ID -> config_data["auth"]["tenant_id"])
|
|
66
|
-
# 3. Single-underscore '_' nested path splitting (e.g. DCL_DATABASE_PORT -> config_data["database"]["port"])
|
|
67
|
-
if flat_key in config_data:
|
|
68
|
-
parts = [flat_key]
|
|
69
|
-
elif "__" in sliced_key:
|
|
66
|
+
if "__" in sliced_key:
|
|
70
67
|
parts = [p.lower() for p in sliced_key.split("__") if p]
|
|
71
68
|
else:
|
|
72
|
-
parts = [
|
|
69
|
+
parts = [flat_key]
|
|
73
70
|
|
|
74
71
|
if not parts:
|
|
75
72
|
continue
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dynamic-config-loader
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: An enterprise-grade configuration orchestration engine designed to ingest, cascade, and deeply merge multiple configuration file layers.
|
|
5
5
|
Author-email: Avinash Kumar <halfhiddencode@gmail.com>
|
|
6
6
|
License:
|
|
@@ -231,8 +231,8 @@ Description-Content-Type: text/markdown
|
|
|
231
231
|
License-File: LICENSE
|
|
232
232
|
License-File: NOTICE
|
|
233
233
|
License-File: AUTHORS
|
|
234
|
-
Requires-Dist: pyyaml>=6.0.
|
|
235
|
-
Requires-Dist: tomli>=2.0
|
|
234
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
235
|
+
Requires-Dist: tomli>=2.5.0; python_version < "3.11"
|
|
236
236
|
Dynamic: license-file
|
|
237
237
|
|
|
238
238
|
# Dynamic Configuration Loader
|
|
@@ -241,6 +241,26 @@ A lightweight, production-grade, strategy-driven configuration orchestration eng
|
|
|
241
241
|
|
|
242
242
|
---
|
|
243
243
|
|
|
244
|
+
> [!TIP]
|
|
245
|
+
> ### 👋 NEW TO DYNAMIC CONFIG LOADER? START HERE!
|
|
246
|
+
>
|
|
247
|
+
> Choose your role to find the fastest path to get up and running:
|
|
248
|
+
>
|
|
249
|
+
> * **🆕 Application Developer (First Time User):** Start with the **[3-Line Quick Start Tutorial](docs/tutorials/getting_started.md)**.
|
|
250
|
+
> * **🚀 DevOps / SRE Engineer:** Check the **[Configuration Lifecycle Matrix](docs/guides/user_usage.md#1-minimal-to-advanced-configuration-lifecycle-guide)** & **[K8s Deployment Scenarios](docs/guides/user_usage.md#7-production-deployment-scenarios)**.
|
|
251
|
+
> * **🛠️ Open-Source Contributor:** See the **[Track A vs Track B Contributor Guide](docs/guides/contributor_guide.md#1-contributing-features-vs-format-strategies)**.
|
|
252
|
+
> * **📦 Maintainer / DevOps Release:** Read the **[Release & OIDC Deployment Guide](docs/guides/release_guide.md)**.
|
|
253
|
+
|
|
254
|
+
> [!NOTE]
|
|
255
|
+
> ### 🌐 DYNAMIC CONFIG LOADER ECOSYSTEM & OTHER LANGUAGES
|
|
256
|
+
>
|
|
257
|
+
> Looking for this library in another programming language? Dynamic Config Loader is available for:
|
|
258
|
+
>
|
|
259
|
+
> * 🐍 **Python Version:** [`python-dynamic-config-loader`](https://gitlab.com/halfhiddencode/python-dynamic-config-loader) (This repository)
|
|
260
|
+
> * 🟢 **Node.js / TypeScript Version:** [`node-dynamic-config-loader`](https://gitlab.com/halfhiddencode/node-dynamic-config-loader)
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
244
264
|
## 📌 Quick Navigation Index
|
|
245
265
|
|
|
246
266
|
- [⚡ Minimal Quick Start](#-quick-start-minimal-3-lines)
|
|
@@ -369,9 +389,26 @@ export DCL_LOG_LEVEL=info
|
|
|
369
389
|
| **🚀 Getting Started Tutorial** | [getting_started.md](docs/tutorials/getting_started.md) | Step-by-step onboarding & minimal execution tracks. |
|
|
370
390
|
| **📖 Operations & Usage Guide** | [user_usage.md](docs/guides/user_usage.md) | Complete format matrix, K8s/DevOps deployment scenarios, & path edge cases. |
|
|
371
391
|
| **🛠️ Contributor Guide** | [contributor_guide.md](docs/guides/contributor_guide.md) | Adding custom format strategies & factory registry hooks. |
|
|
392
|
+
| **🚀 Release & OIDC Guide** | [release_guide.md](docs/guides/release_guide.md) | OIDC Trusted Publishing, version bump rules, & PyPI deployment protocols. |
|
|
372
393
|
| **🏗️ Architecture Reference** | [architecture.md](docs/reference/architecture.md) | System design, UML diagrams, & deep merge algorithms. |
|
|
373
394
|
|
|
374
395
|
---
|
|
375
396
|
|
|
397
|
+
## 🤖 AI Agent & Coding Assistant Integration Skills
|
|
398
|
+
|
|
399
|
+
`python-dynamic-config-loader` includes dedicated Python AI Skills designed for AI pair programmers (Cursor, Antigravity, Claude Code, Codex, GitHub Copilot):
|
|
400
|
+
|
|
401
|
+
| AI Skill Name | Description & Target Persona | Location in Repository |
|
|
402
|
+
| :--- | :--- | :--- |
|
|
403
|
+
| **`python-dynamic-config-loader-usage`** | **Consumer AI Skill:** Guides AI models when writing Python application code, integrating configurations, and setting container environment variables. | [.agents/skills/python-dynamic-config-loader-usage/SKILL.md](.agents/skills/python-dynamic-config-loader-usage/SKILL.md) |
|
|
404
|
+
| **`python-dynamic-config-loader-contributor`** | **Contributor AI Skill:** Guides AI models when adding new format strategies (`BaseStrategy`), extending logger logic, or writing Python unit tests. | [.agents/skills/python-dynamic-config-loader-contributor/SKILL.md](.agents/skills/python-dynamic-config-loader-contributor/SKILL.md) |
|
|
405
|
+
|
|
406
|
+
### How to use with AI Models:
|
|
407
|
+
- **Cursor / Claude Code / Antigravity:** The agent automatically discovers skills in `.agents/skills/`. You can trigger them directly by prompting:
|
|
408
|
+
> *"Use the `python-dynamic-config-loader-usage` skill to configure python-dynamic-config-loader in my application."*
|
|
409
|
+
- **GitHub Copilot / Codex:** Reference [.agents/skills/python-dynamic-config-loader-usage/SKILL.md](.agents/skills/python-dynamic-config-loader-usage/SKILL.md) in your prompt or workspace instructions.
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
376
413
|
## 📜 License
|
|
377
414
|
Licensed under the [Apache License, Version 2.0](LICENSE).
|
|
@@ -39,9 +39,9 @@ class TestEnvInjection(unittest.TestCase):
|
|
|
39
39
|
Verifies that configuration parameters are injected correctly with the default prefix.
|
|
40
40
|
"""
|
|
41
41
|
os.environ["DCL_ENV_LOADER"] = "true"
|
|
42
|
-
os.environ["
|
|
43
|
-
os.environ["
|
|
44
|
-
os.environ["
|
|
42
|
+
os.environ["DCL_DATABASE__PORT"] = "9000"
|
|
43
|
+
os.environ["DCL_DATABASE__USER"] = "postgres_env"
|
|
44
|
+
os.environ["DCL_SERVICE_GATEWAY_NAME"] = "payment_gateway"
|
|
45
45
|
|
|
46
46
|
loader = DynamicConfigLoader(default_config_path=str(self.base_file))
|
|
47
47
|
result = loader.load()
|
|
@@ -49,7 +49,7 @@ class TestEnvInjection(unittest.TestCase):
|
|
|
49
49
|
# Check nested structures are created or overridden
|
|
50
50
|
self.assertEqual(result["database"]["port"], 9000) # String "9000" is parsed to int 9000
|
|
51
51
|
self.assertEqual(result["database"]["user"], "postgres_env")
|
|
52
|
-
self.
|
|
52
|
+
self.assertEqual(result["service_gateway_name"], "payment_gateway") # Single _ is 100% flat!
|
|
53
53
|
|
|
54
54
|
def test_injection_double_underscore_delimiter(self):
|
|
55
55
|
"""
|
|
@@ -83,7 +83,7 @@ class TestEnvInjection(unittest.TestCase):
|
|
|
83
83
|
Verifies that configuration parameters are injected correctly using a custom prefix.
|
|
84
84
|
"""
|
|
85
85
|
os.environ["DCL_ENV_LOADER"] = "true"
|
|
86
|
-
os.environ["
|
|
86
|
+
os.environ["MYAPP_DB__HOST"] = "remote.db"
|
|
87
87
|
|
|
88
88
|
# Pass custom prefix to constructor
|
|
89
89
|
loader = DynamicConfigLoader(default_config_path=str(self.base_file), prefix="MYAPP_")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/__init__.py
RENAMED
|
File without changes
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/src/dynamic_config_loader/loader.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
|
|
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
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.1}/tests/test_properties_strategy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|