lib-layered-config 1.0.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.

Potentially problematic release.


This version of lib-layered-config might be problematic. Click here for more details.

Files changed (105) hide show
  1. lib_layered_config-1.0.0/.devcontainer/devcontainer.json +22 -0
  2. lib_layered_config-1.0.0/.devcontainer/settings.json +6 -0
  3. lib_layered_config-1.0.0/.env.example +14 -0
  4. lib_layered_config-1.0.0/.github/dependabot.yml +22 -0
  5. lib_layered_config-1.0.0/.github/workflows/ci.yml +186 -0
  6. lib_layered_config-1.0.0/.github/workflows/codeql.yml +40 -0
  7. lib_layered_config-1.0.0/.github/workflows/release.yml +42 -0
  8. lib_layered_config-1.0.0/.gitignore +186 -0
  9. lib_layered_config-1.0.0/.qlty/qlty.toml +2 -0
  10. lib_layered_config-1.0.0/.snyk +5 -0
  11. lib_layered_config-1.0.0/AGENTS.md +212 -0
  12. lib_layered_config-1.0.0/CHANGELOG.md +20 -0
  13. lib_layered_config-1.0.0/CONTRIBUTING.md +51 -0
  14. lib_layered_config-1.0.0/DEVELOPMENT.md +106 -0
  15. lib_layered_config-1.0.0/LICENSE +22 -0
  16. lib_layered_config-1.0.0/Makefile +51 -0
  17. lib_layered_config-1.0.0/PKG-INFO +366 -0
  18. lib_layered_config-1.0.0/README.md +326 -0
  19. lib_layered_config-1.0.0/codecov.yml +26 -0
  20. lib_layered_config-1.0.0/docs/systemdesign/concept.md +94 -0
  21. lib_layered_config-1.0.0/docs/systemdesign/module_reference.md +1389 -0
  22. lib_layered_config-1.0.0/docs/systemdesign/test_matrix.md +17 -0
  23. lib_layered_config-1.0.0/notebooks/Quickstart.ipynb +309 -0
  24. lib_layered_config-1.0.0/pyproject.toml +132 -0
  25. lib_layered_config-1.0.0/scripts/__init__.py +3 -0
  26. lib_layered_config-1.0.0/scripts/__main__.py +7 -0
  27. lib_layered_config-1.0.0/scripts/_utils.py +447 -0
  28. lib_layered_config-1.0.0/scripts/build.py +45 -0
  29. lib_layered_config-1.0.0/scripts/bump.py +37 -0
  30. lib_layered_config-1.0.0/scripts/bump_major.py +24 -0
  31. lib_layered_config-1.0.0/scripts/bump_minor.py +24 -0
  32. lib_layered_config-1.0.0/scripts/bump_patch.py +24 -0
  33. lib_layered_config-1.0.0/scripts/bump_version.py +80 -0
  34. lib_layered_config-1.0.0/scripts/clean.py +48 -0
  35. lib_layered_config-1.0.0/scripts/cli.py +206 -0
  36. lib_layered_config-1.0.0/scripts/dev.py +25 -0
  37. lib_layered_config-1.0.0/scripts/help.py +40 -0
  38. lib_layered_config-1.0.0/scripts/install.py +25 -0
  39. lib_layered_config-1.0.0/scripts/menu.py +570 -0
  40. lib_layered_config-1.0.0/scripts/push.py +76 -0
  41. lib_layered_config-1.0.0/scripts/release.py +108 -0
  42. lib_layered_config-1.0.0/scripts/run_cli.py +137 -0
  43. lib_layered_config-1.0.0/scripts/target_metadata.py +162 -0
  44. lib_layered_config-1.0.0/scripts/test.py +467 -0
  45. lib_layered_config-1.0.0/scripts/version_current.py +25 -0
  46. lib_layered_config-1.0.0/src/lib_layered_config/__init__.py +60 -0
  47. lib_layered_config-1.0.0/src/lib_layered_config/__main__.py +19 -0
  48. lib_layered_config-1.0.0/src/lib_layered_config/_layers.py +457 -0
  49. lib_layered_config-1.0.0/src/lib_layered_config/_platform.py +200 -0
  50. lib_layered_config-1.0.0/src/lib_layered_config/adapters/__init__.py +13 -0
  51. lib_layered_config-1.0.0/src/lib_layered_config/adapters/dotenv/__init__.py +1 -0
  52. lib_layered_config-1.0.0/src/lib_layered_config/adapters/dotenv/default.py +438 -0
  53. lib_layered_config-1.0.0/src/lib_layered_config/adapters/env/__init__.py +5 -0
  54. lib_layered_config-1.0.0/src/lib_layered_config/adapters/env/default.py +509 -0
  55. lib_layered_config-1.0.0/src/lib_layered_config/adapters/file_loaders/__init__.py +1 -0
  56. lib_layered_config-1.0.0/src/lib_layered_config/adapters/file_loaders/structured.py +410 -0
  57. lib_layered_config-1.0.0/src/lib_layered_config/adapters/path_resolvers/__init__.py +1 -0
  58. lib_layered_config-1.0.0/src/lib_layered_config/adapters/path_resolvers/default.py +727 -0
  59. lib_layered_config-1.0.0/src/lib_layered_config/application/__init__.py +12 -0
  60. lib_layered_config-1.0.0/src/lib_layered_config/application/merge.py +442 -0
  61. lib_layered_config-1.0.0/src/lib_layered_config/application/ports.py +109 -0
  62. lib_layered_config-1.0.0/src/lib_layered_config/cli/__init__.py +162 -0
  63. lib_layered_config-1.0.0/src/lib_layered_config/cli/common.py +232 -0
  64. lib_layered_config-1.0.0/src/lib_layered_config/cli/constants.py +12 -0
  65. lib_layered_config-1.0.0/src/lib_layered_config/cli/deploy.py +70 -0
  66. lib_layered_config-1.0.0/src/lib_layered_config/cli/fail.py +21 -0
  67. lib_layered_config-1.0.0/src/lib_layered_config/cli/generate.py +60 -0
  68. lib_layered_config-1.0.0/src/lib_layered_config/cli/info.py +31 -0
  69. lib_layered_config-1.0.0/src/lib_layered_config/cli/read.py +117 -0
  70. lib_layered_config-1.0.0/src/lib_layered_config/core.py +384 -0
  71. lib_layered_config-1.0.0/src/lib_layered_config/domain/__init__.py +7 -0
  72. lib_layered_config-1.0.0/src/lib_layered_config/domain/config.py +490 -0
  73. lib_layered_config-1.0.0/src/lib_layered_config/domain/errors.py +65 -0
  74. lib_layered_config-1.0.0/src/lib_layered_config/examples/__init__.py +29 -0
  75. lib_layered_config-1.0.0/src/lib_layered_config/examples/deploy.py +305 -0
  76. lib_layered_config-1.0.0/src/lib_layered_config/examples/generate.py +537 -0
  77. lib_layered_config-1.0.0/src/lib_layered_config/observability.py +306 -0
  78. lib_layered_config-1.0.0/src/lib_layered_config/py.typed +0 -0
  79. lib_layered_config-1.0.0/src/lib_layered_config/testing.py +55 -0
  80. lib_layered_config-1.0.0/test-serialable.toml +109 -0
  81. lib_layered_config-1.0.0/test.toml +109 -0
  82. lib_layered_config-1.0.0/tests/__init__.py +1 -0
  83. lib_layered_config-1.0.0/tests/adapters/test_dotenv_loader.py +124 -0
  84. lib_layered_config-1.0.0/tests/adapters/test_env_loader.py +127 -0
  85. lib_layered_config-1.0.0/tests/adapters/test_file_loaders.py +89 -0
  86. lib_layered_config-1.0.0/tests/adapters/test_path_resolver.py +508 -0
  87. lib_layered_config-1.0.0/tests/adapters/test_port_contracts.py +157 -0
  88. lib_layered_config-1.0.0/tests/application/test_merge.py +174 -0
  89. lib_layered_config-1.0.0/tests/conftest.py +8 -0
  90. lib_layered_config-1.0.0/tests/e2e/test_cli.py +328 -0
  91. lib_layered_config-1.0.0/tests/e2e/test_notebooks.py +88 -0
  92. lib_layered_config-1.0.0/tests/e2e/test_read_config.py +171 -0
  93. lib_layered_config-1.0.0/tests/examples/test_deploy.py +678 -0
  94. lib_layered_config-1.0.0/tests/examples/test_generate.py +133 -0
  95. lib_layered_config-1.0.0/tests/support/__init__.py +14 -0
  96. lib_layered_config-1.0.0/tests/support/layered.py +203 -0
  97. lib_layered_config-1.0.0/tests/support/os_markers.py +53 -0
  98. lib_layered_config-1.0.0/tests/unit/test_cli_helpers.py +305 -0
  99. lib_layered_config-1.0.0/tests/unit/test_config.py +155 -0
  100. lib_layered_config-1.0.0/tests/unit/test_core.py +72 -0
  101. lib_layered_config-1.0.0/tests/unit/test_errors.py +26 -0
  102. lib_layered_config-1.0.0/tests/unit/test_examples.py +66 -0
  103. lib_layered_config-1.0.0/tests/unit/test_layers_helpers.py +85 -0
  104. lib_layered_config-1.0.0/tests/unit/test_observability.py +55 -0
  105. lib_layered_config-1.0.0/tests/unit/test_testing.py +21 -0
@@ -0,0 +1,22 @@
1
+ {
2
+ "image": "mcr.microsoft.com/devcontainers/python:3.13",
3
+
4
+ "postCreateCommand": "bash -lc '\nPY=/usr/local/bin/python;\n$PY -m pip install -U pip && \\\n$PY -m pip install ipykernel && \\\n$PY -m pip install -e . && \\\n# register kernel using this exact interpreter\n$PY -m ipykernel install --name=python3 --display-name=\"Python 3 (3.13)\" --user && \\\n# patch the notebook to point to the python3 kernelspec (VS Code will bind to /usr/local/bin/python)\n$PY - <<\"PY\"\nimport json, pathlib\np = pathlib.Path(\"notebooks/Quickstart.ipynb\")\nif p.exists():\n nb = json.loads(p.read_text(encoding=\"utf-8\"))\n md = nb.setdefault(\"metadata\", {})\n md[\"kernelspec\"] = {\n \"name\": \"python3\",\n \"display_name\": \"Python 3 (3.13)\",\n \"language\": \"python\"\n }\n md[\"language_info\"] = {\"name\": \"python\"}\n p.write_text(json.dumps(nb, ensure_ascii=False, indent=1), encoding=\"utf-8\")\n print(\"Pinned kernelspec to python3 in\", p)\nelse:\n print(\"Notebook not found:\", p)\nPY'\n",
5
+
6
+ "customizations": {
7
+ "vscode": {
8
+ "extensions": ["ms-toolsai.jupyter", "ms-python.python"],
9
+ "settings": {
10
+ "workbench.startupEditor": "none",
11
+ "jupyter.alwaysTrustNotebooks": true,
12
+ "jupyter.kernelPickerType": "OnlyRecommended",
13
+ "python.defaultInterpreterPath": "/usr/local/bin/python"
14
+ }
15
+ },
16
+ "codespaces": {
17
+ "openFiles": ["README.md"]
18
+ }
19
+ },
20
+
21
+ "postAttachCommand": "bash -lc 'if [ -f notebooks/Quickstart.ipynb ]; then code -r notebooks/Quickstart.ipynb; fi'"
22
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "python.defaultInterpreterPath": "/usr/local/bin/python3.13",
3
+ "jupyter.alwaysTrustNotebooks": true,
4
+ "jupyter.kernelPickerType": "OnlyRecommended",
5
+ "jupyter.askForKernelRestart": false
6
+ }
@@ -0,0 +1,14 @@
1
+ # Copy to .env and fill values as needed.
2
+
3
+ # Codecov upload token (required for private repos; optional for public repos)
4
+ CODECOV_TOKEN=
5
+
6
+ # PyPI API token for release workflow (.github/workflows/release.yml)
7
+ # Format: pypi-AgENdGVzdC5weXBpLm9yZwIk...
8
+ PYPI_API_TOKEN=
9
+
10
+ # Optional: GitHub token for API-limited tasks (e.g., brew audits against GitHub API)
11
+ GITHUB_TOKEN=
12
+
13
+ # Optional: Homebrew resources may be fetched via GitHub; token can increase rate limits
14
+ HOMEBREW_GITHUB_API_TOKEN=
@@ -0,0 +1,22 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ allow:
8
+ - dependency-type: "direct"
9
+ labels:
10
+ - "dependencies"
11
+ commit-message:
12
+ prefix: "deps"
13
+ include: "scope"
14
+ - package-ecosystem: "github-actions"
15
+ directory: "/"
16
+ schedule:
17
+ interval: "weekly"
18
+ labels:
19
+ - "dependencies"
20
+ commit-message:
21
+ prefix: "deps"
22
+ include: "scope"
@@ -0,0 +1,186 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
7
+ branches: [ main, master ]
8
+
9
+ jobs:
10
+ test:
11
+ name: Tests (Python ${{ matrix.python }}, ${{ matrix.os }})
12
+ runs-on: ${{ matrix.os }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-latest, macos-latest, windows-latest]
17
+ # Test against Python 3.13 and the latest 3.x available on Actions runners
18
+ python: ["3.13", "3.x"]
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - uses: actions/setup-python@v5
22
+ with:
23
+ python-version: ${{ matrix.python }}
24
+ - name: Extract project metadata
25
+ shell: python
26
+ run: |
27
+ import os
28
+ import tomllib
29
+ from pathlib import Path
30
+
31
+ data = tomllib.loads(Path('pyproject.toml').read_text('utf-8'))
32
+ project = data['project']['name']
33
+ module = project.replace('-', '_')
34
+ dash = project.replace('_', '-')
35
+ scripts = list(data['project'].get('scripts', {}).keys())
36
+ cli_bin = scripts[0] if scripts else dash
37
+
38
+ with open(os.environ['GITHUB_ENV'], 'a', encoding='utf-8') as env:
39
+ env.write(f"PROJECT_NAME={project}\n")
40
+ env.write(f"PACKAGE_MODULE={module}\n")
41
+ env.write(f"CLI_BIN={cli_bin}\n")
42
+ - name: Install make on Windows
43
+ if: runner.os == 'Windows'
44
+ shell: pwsh
45
+ run: |
46
+ choco install -y make
47
+ echo "C:\\ProgramData\\chocolatey\\bin" >> $env:GITHUB_PATH
48
+ - name: Install journald prerequisites
49
+ if: runner.os == 'Linux'
50
+ shell: bash
51
+ run: |
52
+ sudo apt-get update
53
+ sudo apt-get install -y python3-systemd
54
+
55
+ - name: Upgrade pip
56
+ shell: bash
57
+ run: python -m pip install --upgrade pip
58
+
59
+ - name: Install dev deps
60
+ shell: bash
61
+ run: |
62
+ pip install -e .[dev]
63
+
64
+ - name: Install Windows Event Log prerequisites
65
+ if: runner.os == 'Windows'
66
+ shell: bash
67
+ run: |
68
+ pip install pywin32
69
+ - name: Run full test suite (lint, types, tests, coverage, codecov)
70
+ shell: bash
71
+ env:
72
+ TEST_VERBOSE: "1"
73
+ run: make test
74
+ - name: Build wheel/sdist
75
+ shell: bash
76
+ run: python -m build
77
+ - name: Verify wheel install in clean env
78
+ shell: bash
79
+ run: |
80
+ python -m venv .venv_wheel
81
+ . .venv_wheel/bin/activate 2>/dev/null || . .venv_wheel/Scripts/activate 2>/dev/null
82
+ pip install dist/*.whl
83
+ "$CLI_BIN" --version 2>/dev/null || python -m "$PACKAGE_MODULE" --version
84
+
85
+ pipx-uv:
86
+ name: pipx/uv verification (ubuntu)
87
+ runs-on: ubuntu-latest
88
+ steps:
89
+ - uses: actions/checkout@v4
90
+ - uses: actions/setup-python@v5
91
+ with:
92
+ python-version: "3.13"
93
+ - name: Extract project metadata
94
+ shell: python
95
+ run: |
96
+ import os
97
+ import tomllib
98
+ from pathlib import Path
99
+
100
+ data = tomllib.loads(Path('pyproject.toml').read_text('utf-8'))
101
+ project = data['project']['name']
102
+ module = project.replace('-', '_')
103
+ dash = project.replace('_', '-')
104
+ scripts = list(data['project'].get('scripts', {}).keys())
105
+ cli_bin = scripts[0] if scripts else dash
106
+
107
+ with open(os.environ['GITHUB_ENV'], 'a', encoding='utf-8') as env:
108
+ env.write(f"PROJECT_NAME={project}\n")
109
+ env.write(f"PACKAGE_MODULE={module}\n")
110
+ env.write(f"CLI_BIN={cli_bin}\n")
111
+ - name: Build wheel
112
+ run: |
113
+ python -m pip install --upgrade pip build
114
+ python -m build
115
+ - name: pipx install from wheel
116
+ run: |
117
+ python -m pip install pipx
118
+ pipx install dist/*.whl
119
+ "$CLI_BIN" --version 2>/dev/null || python -m "$PACKAGE_MODULE" --version
120
+ - name: Install uv
121
+ uses: astral-sh/setup-uv@v6
122
+ with:
123
+ enable-cache: true
124
+ - name: uv tool install
125
+ run: |
126
+ uv tool install .
127
+ "$CLI_BIN" --version 2>/dev/null || python -m "$PACKAGE_MODULE" --version
128
+
129
+ notebooks:
130
+ name: Execute notebooks (ubuntu, Python 3.13)
131
+ runs-on: ubuntu-latest
132
+ steps:
133
+ - uses: actions/checkout@v4
134
+ - uses: actions/setup-python@v5
135
+ with:
136
+ python-version: "3.13"
137
+ - name: Install notebook runner deps
138
+ run: |
139
+ python -m pip install --upgrade pip
140
+ pip install nbclient nbformat ipykernel jupyter_client
141
+ python -m ipykernel install --user --name python3 --display-name "Python 3"
142
+ - name: Execute Quickstart notebook
143
+ env:
144
+ PIP_DISABLE_PIP_VERSION_CHECK: "1"
145
+ PIP_NO_INPUT: "1"
146
+ run: |
147
+ python - << 'PY'
148
+ import json, sys
149
+ from pathlib import Path
150
+ import nbformat
151
+ try:
152
+ from nbformat.validator import normalize # type: ignore
153
+ except Exception:
154
+ normalize = None # type: ignore
155
+ from nbclient import NotebookClient
156
+
157
+ nb_path = Path('notebooks/Quickstart.ipynb')
158
+ if not nb_path.exists():
159
+ raise SystemExit(f"Notebook not found: {nb_path}")
160
+
161
+ with nb_path.open('r', encoding='utf-8') as f:
162
+ nb = nbformat.read(f, as_version=4)
163
+ # Normalize to ensure required fields like cell ids are present (supports older nbformat return types)
164
+ if normalize is not None:
165
+ nb_norm = normalize(nb) # may return notebook or a tuple
166
+ # pick the first element that looks like a notebook
167
+ cand = nb_norm
168
+ if isinstance(nb_norm, tuple):
169
+ for item in nb_norm:
170
+ if hasattr(item, 'cells') and hasattr(item, 'metadata'):
171
+ cand = item
172
+ break
173
+ nb = cand
174
+ # Final guard for robustness
175
+ if isinstance(nb, tuple) or not (hasattr(nb, 'cells') and hasattr(nb, 'metadata')):
176
+ raise SystemExit(f"Unexpected notebook object type after normalize: {type(nb)}")
177
+
178
+ client = NotebookClient(nb, timeout=900, kernel_name='python3', allow_errors=False)
179
+ client.execute()
180
+
181
+ # Optionally write executed notebook artifact (not committed)
182
+ out_path = Path('notebooks/Quickstart-executed.ipynb')
183
+ with out_path.open('w', encoding='utf-8') as f:
184
+ nbformat.write(nb, f)
185
+ print(f"Executed notebook written to: {out_path}")
186
+ PY
@@ -0,0 +1,40 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [ main, master ]
6
+ pull_request:
7
+ branches: [ main, master ]
8
+ schedule:
9
+ - cron: '0 8 * * 1'
10
+
11
+ jobs:
12
+ analyze:
13
+ name: CodeQL Analyze
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+ security-events: write
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ language: [ 'python' ]
23
+
24
+ steps:
25
+ - name: Checkout repository
26
+ uses: actions/checkout@v4
27
+
28
+ - name: Initialize CodeQL
29
+ uses: github/codeql-action/init@v3
30
+ with:
31
+ languages: ${{ matrix.language }}
32
+
33
+ - name: Autobuild
34
+ uses: github/codeql-action/autobuild@v3
35
+
36
+ - name: Perform CodeQL Analysis
37
+ uses: github/codeql-action/analyze@v3
38
+ with:
39
+ category: "/language:${{ matrix.language }}"
40
+
@@ -0,0 +1,42 @@
1
+ name: Release
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ push:
7
+ tags:
8
+ - 'v*'
9
+ workflow_dispatch: {}
10
+
11
+ jobs:
12
+ build-and-publish:
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ contents: read
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - name: Verify PyPI token is set
19
+ run: |
20
+ if [ -z "${{ secrets.PYPI_API_TOKEN }}" ]; then
21
+ echo "::error title=Missing PyPI token::Set the PYPI_API_TOKEN secret in GitHub repository settings to enable PyPI publishing on releases."
22
+ echo "See: https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions"
23
+ exit 1
24
+ fi
25
+ - uses: actions/setup-python@v5
26
+ with:
27
+ python-version: '3.13'
28
+ - name: Build artifacts
29
+ run: |
30
+ python -m pip install --upgrade pip build
31
+ python -m build
32
+ - name: Publish to PyPI
33
+ # Use the rolling major tag to get latest Twine/standards support (e.g., Core Metadata 2.4)
34
+ uses: pypa/gh-action-pypi-publish@release/v1
35
+ with:
36
+ password: ${{ secrets.PYPI_API_TOKEN }}
37
+ skip-existing: true
38
+ - name: Upload artifacts
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: dist
42
+ path: dist/*
@@ -0,0 +1,186 @@
1
+ # ====================================
2
+ # ROTEK SPEZIFISCH: Git commands you might run once
3
+ # git add .gitignore && git commit -m "Ignore IDE settings"
4
+ # git push
5
+ # git rm -r --cached .idea
6
+ # git commit -m "Remove .idea and add to .gitignore"
7
+ # git push
8
+ # alternative : BE CAREFUL: overwrites remote history
9
+ # git push origin master --force
10
+
11
+ # ====================================
12
+ # APP
13
+ # ====================================
14
+ website/build/
15
+ website/.docusaurus/
16
+ website/node_modules/
17
+ node_modules/
18
+ web-local-preview/
19
+ translation_app*.log
20
+ translation_web*.log
21
+ tmp_github_web_pages/
22
+ tmp_linkcheck_web_pages/
23
+ .eslintcache
24
+ .vitest/
25
+ npm-debug.log*
26
+ yarn-error.log*
27
+ pnpm-debug.log*
28
+ .env.*
29
+ !.env.example
30
+ todo.md
31
+ tmp_*
32
+
33
+ # ====================================
34
+ # IDEs & Editors
35
+ # ====================================
36
+ # IntelliJ, PyCharm, etc.
37
+ .idea/
38
+ # VS Code workspace settings
39
+ .vscode/
40
+ *.code-workspace
41
+
42
+ # ====================================
43
+ # Python bytecode & caches
44
+ # ====================================
45
+ # __pycache__: compiled .pyc files at any depth
46
+ # *.py[cod]: catches .pyc, .pyo, .pyd
47
+ __pycache__/
48
+ *.py[cod]
49
+ *$py.class # other compiled artifacts
50
+
51
+ # pytest, coverage, MyPy, Hypothesis
52
+ .pytest_cache/
53
+ .mypy_cache/
54
+ .pyright/
55
+ .coverage*
56
+ htmlcov/
57
+ nosetests.xml
58
+ coverage.xml
59
+ *.cover
60
+ .hypothesis/
61
+ .tox/
62
+ .nox/
63
+
64
+ # general cache directories (any project-level caching)
65
+ .cache/
66
+ .run/
67
+ .import_linter_cache/
68
+
69
+ # ====================================
70
+ # Build & distribution artifacts
71
+ # ====================================
72
+ # source/package builds
73
+ build/
74
+ dist/
75
+ *.egg-info/ # metadata for pip installs
76
+ *.egg
77
+ *.whl
78
+ pip-wheel-metadata/
79
+ *.manifest # PyInstaller metadata
80
+ *.spec # PyInstaller spec files
81
+
82
+ # Eggs, parts, wheels, sdist, etc.
83
+ develop-eggs/
84
+ .eggs/
85
+ parts/
86
+ sdist/
87
+ wheels/
88
+ downloads/
89
+ var/
90
+
91
+ # pip logs & installer leftovers
92
+ pip-log.txt
93
+ pip-delete-this-directory.txt
94
+ .installed.cfg
95
+
96
+ # ====================================
97
+ # Virtual environments & secrets
98
+ # ====================================
99
+ # common venv folder names
100
+ env/
101
+ venv/
102
+ ENV/
103
+ .venv/
104
+ # allow the library adapter package despite the ignore rule
105
+ !src/lib_layered_config/adapters/env/
106
+ !src/lib_layered_config/adapters/env/**/*.py
107
+ # but still ignore compiled bytecode inside the adapter package
108
+ src/lib_layered_config/adapters/env/__pycache__/
109
+ src/lib_layered_config/adapters/env/**/*.pyc
110
+ # backups, alternate names
111
+ env.bak/
112
+ venv.bak/
113
+ # dotenv files with credentials
114
+ .env
115
+
116
+ # ====================================
117
+ # Project-specific & framework files
118
+ # ====================================
119
+ # Django logs & local overrides
120
+ *.log
121
+ local_settings.py
122
+
123
+ # Flask instance folder
124
+ instance/
125
+ .webassets-cache
126
+
127
+ # Scrapy cache
128
+ .scrapy
129
+
130
+ # Sphinx docs
131
+ docs/_build/
132
+
133
+ # PyBuilder output
134
+ target/
135
+
136
+ # Jupyter notebooks checkpoints
137
+ .ipynb_checkpoints
138
+
139
+ # pyenv Python version file
140
+ .python-version
141
+
142
+ # Celery beat schedule
143
+ celerybeat-schedule
144
+
145
+ # SageMath parsed files
146
+ *.sage.py
147
+
148
+ # Spyder IDE
149
+ .spyderproject
150
+ .spyproject
151
+
152
+ # Rope IDE
153
+ .ropeproject
154
+
155
+ # MkDocs static site folder
156
+ /site
157
+
158
+ # ====================================
159
+ # OS-specific files
160
+ # ====================================
161
+ # macOS
162
+ .DS_Store
163
+ # Windows
164
+ Thumbs.db
165
+ ehthumbs.db
166
+
167
+ # Archives
168
+ *.zip
169
+
170
+ # Thunderbird build artifact (created temporarily by pack script)
171
+ sources/manifest.json
172
+
173
+ # ====================================
174
+ # Tool-specific extras
175
+ # ====================================
176
+ # Codecov uploader script (downloaded during local uploads)
177
+ codecov.sh
178
+ codecov.xml
179
+
180
+ # Nix build result symlink
181
+ result
182
+
183
+ # Optional lockfiles (for alternative managers)
184
+ poetry.lock
185
+ pdm.lock
186
+ uv.lock
@@ -0,0 +1,2 @@
1
+ exclude_patterns = ["scripts/**"]
2
+ test_patterns = ["tests/**"]
@@ -0,0 +1,5 @@
1
+ # Snyk (https://snyk.io) policy file
2
+ exclude:
3
+ global:
4
+ - scripts/**
5
+ - tests/**