dynamic-config-loader 2.6.0__tar.gz → 2.7.0__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.0}/PKG-INFO +14 -1
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/README.md +13 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/pyproject.toml +1 -1
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/environment.py +5 -8
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0/src/dynamic_config_loader.egg-info}/PKG-INFO +14 -1
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_env_injection.py +5 -5
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/AUTHORS +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/LICENSE +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/NOTICE +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/setup.cfg +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/loader.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/base_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/env/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/env/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/env/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/ini/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/ini/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/ini/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/json/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/json/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/json/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/properties/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/properties/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/properties/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/toml/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/toml/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/toml/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/xml/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/xml/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/xml/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/yaml/__init__.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/yaml/merger.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader/strategies/yaml/parser.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader.egg-info/SOURCES.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader.egg-info/dependency_links.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader.egg-info/requires.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/src/dynamic_config_loader.egg-info/top_level.txt +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_deep_merge.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_env_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_factory.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_ini_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_json_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_loader.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_logging_safety.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_properties_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_toml_strategy.py +0 -0
- {dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/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.0
|
|
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:
|
|
@@ -241,6 +241,18 @@ 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
|
+
---
|
|
255
|
+
|
|
244
256
|
## 📌 Quick Navigation Index
|
|
245
257
|
|
|
246
258
|
- [⚡ Minimal Quick Start](#-quick-start-minimal-3-lines)
|
|
@@ -369,6 +381,7 @@ export DCL_LOG_LEVEL=info
|
|
|
369
381
|
| **🚀 Getting Started Tutorial** | [getting_started.md](docs/tutorials/getting_started.md) | Step-by-step onboarding & minimal execution tracks. |
|
|
370
382
|
| **📖 Operations & Usage Guide** | [user_usage.md](docs/guides/user_usage.md) | Complete format matrix, K8s/DevOps deployment scenarios, & path edge cases. |
|
|
371
383
|
| **🛠️ Contributor Guide** | [contributor_guide.md](docs/guides/contributor_guide.md) | Adding custom format strategies & factory registry hooks. |
|
|
384
|
+
| **🚀 Release & OIDC Guide** | [release_guide.md](docs/guides/release_guide.md) | OIDC Trusted Publishing, version bump rules, & PyPI deployment protocols. |
|
|
372
385
|
| **🏗️ Architecture Reference** | [architecture.md](docs/reference/architecture.md) | System design, UML diagrams, & deep merge algorithms. |
|
|
373
386
|
|
|
374
387
|
---
|
|
@@ -4,6 +4,18 @@ 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
|
+
---
|
|
18
|
+
|
|
7
19
|
## 📌 Quick Navigation Index
|
|
8
20
|
|
|
9
21
|
- [⚡ Minimal Quick Start](#-quick-start-minimal-3-lines)
|
|
@@ -132,6 +144,7 @@ export DCL_LOG_LEVEL=info
|
|
|
132
144
|
| **🚀 Getting Started Tutorial** | [getting_started.md](docs/tutorials/getting_started.md) | Step-by-step onboarding & minimal execution tracks. |
|
|
133
145
|
| **📖 Operations & Usage Guide** | [user_usage.md](docs/guides/user_usage.md) | Complete format matrix, K8s/DevOps deployment scenarios, & path edge cases. |
|
|
134
146
|
| **🛠️ Contributor Guide** | [contributor_guide.md](docs/guides/contributor_guide.md) | Adding custom format strategies & factory registry hooks. |
|
|
147
|
+
| **🚀 Release & OIDC Guide** | [release_guide.md](docs/guides/release_guide.md) | OIDC Trusted Publishing, version bump rules, & PyPI deployment protocols. |
|
|
135
148
|
| **🏗️ Architecture Reference** | [architecture.md](docs/reference/architecture.md) | System design, UML diagrams, & deep merge algorithms. |
|
|
136
149
|
|
|
137
150
|
---
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dynamic-config-loader"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.7.0"
|
|
8
8
|
description = "An enterprise-grade configuration orchestration engine designed to ingest, cascade, and deeply merge multiple configuration file layers."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/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.0
|
|
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:
|
|
@@ -241,6 +241,18 @@ 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
|
+
---
|
|
255
|
+
|
|
244
256
|
## 📌 Quick Navigation Index
|
|
245
257
|
|
|
246
258
|
- [⚡ Minimal Quick Start](#-quick-start-minimal-3-lines)
|
|
@@ -369,6 +381,7 @@ export DCL_LOG_LEVEL=info
|
|
|
369
381
|
| **🚀 Getting Started Tutorial** | [getting_started.md](docs/tutorials/getting_started.md) | Step-by-step onboarding & minimal execution tracks. |
|
|
370
382
|
| **📖 Operations & Usage Guide** | [user_usage.md](docs/guides/user_usage.md) | Complete format matrix, K8s/DevOps deployment scenarios, & path edge cases. |
|
|
371
383
|
| **🛠️ Contributor Guide** | [contributor_guide.md](docs/guides/contributor_guide.md) | Adding custom format strategies & factory registry hooks. |
|
|
384
|
+
| **🚀 Release & OIDC Guide** | [release_guide.md](docs/guides/release_guide.md) | OIDC Trusted Publishing, version bump rules, & PyPI deployment protocols. |
|
|
372
385
|
| **🏗️ Architecture Reference** | [architecture.md](docs/reference/architecture.md) | System design, UML diagrams, & deep merge algorithms. |
|
|
373
386
|
|
|
374
387
|
---
|
|
@@ -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.0}/src/dynamic_config_loader/__init__.py
RENAMED
|
File without changes
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/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
|
|
File without changes
|
{dynamic_config_loader-2.6.0 → dynamic_config_loader-2.7.0}/tests/test_properties_strategy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|