dotenvmodel 0.5.2__tar.gz → 0.5.3__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 (116) hide show
  1. dotenvmodel-0.5.3/.github/workflows/publish.yml +25 -0
  2. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/workflows/release-please.yml +4 -3
  3. dotenvmodel-0.5.3/.release-please-manifest.json +3 -0
  4. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/CHANGELOG.md +7 -0
  5. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/PKG-INFO +1 -1
  6. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/__init__.py +1 -1
  7. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/pyproject.toml +1 -1
  8. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/uv.lock +1 -1
  9. dotenvmodel-0.5.2/.github/workflows/publish.yml +0 -125
  10. dotenvmodel-0.5.2/.release-please-manifest.json +0 -3
  11. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/CODEOWNERS +0 -0
  12. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  13. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  14. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/dependabot.yml +0 -0
  15. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/pull_request_template.md +0 -0
  16. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/workflows/ci.yml +0 -0
  17. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.github/workflows/docs.yml +0 -0
  18. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.gitignore +0 -0
  19. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/.python-version +0 -0
  20. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/CODE_OF_CONDUCT.md +0 -0
  21. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/CONTRIBUTING.md +0 -0
  22. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/LICENSE +0 -0
  23. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/Makefile +0 -0
  24. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/README.md +0 -0
  25. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/SECURITY.md +0 -0
  26. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/coercion.md +0 -0
  27. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/config.md +0 -0
  28. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/constants.md +0 -0
  29. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/describe-formatters.md +0 -0
  30. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/describe-renderers.md +0 -0
  31. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/describe.md +0 -0
  32. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/dotenvmodel.md +0 -0
  33. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/exceptions.md +0 -0
  34. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/fields.md +0 -0
  35. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/loading.md +0 -0
  36. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/logging-config.md +0 -0
  37. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/metaclass.md +0 -0
  38. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/types.md +0 -0
  39. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/api-reference/validation.md +0 -0
  40. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/changelog.md +0 -0
  41. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/examples/complete-app.md +0 -0
  42. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/getting-started/installation.md +0 -0
  43. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/getting-started/quick-start.md +0 -0
  44. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/configuration-docs.md +0 -0
  45. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/error-handling.md +0 -0
  46. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/fields.md +0 -0
  47. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/loading.md +0 -0
  48. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/logging.md +0 -0
  49. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/prefixes.md +0 -0
  50. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/types.md +0 -0
  51. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/guides/validation.md +0 -0
  52. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/docs/index.md +0 -0
  53. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/_constants.py +0 -0
  54. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/_redaction.py +0 -0
  55. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/coercion.py +0 -0
  56. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/config.py +0 -0
  57. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/describe/__init__.py +0 -0
  58. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/describe/formatters.py +0 -0
  59. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/describe/renderers.py +0 -0
  60. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/exceptions.py +0 -0
  61. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/fields.py +0 -0
  62. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/loading.py +0 -0
  63. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/logging_config.py +0 -0
  64. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/metaclass.py +0 -0
  65. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/py.typed +0 -0
  66. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/types.py +0 -0
  67. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/dotenvmodel/validation.py +0 -0
  68. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/examples/advanced_types.py +0 -0
  69. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/examples/basic_usage.py +0 -0
  70. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/examples/describe_documentation.py +0 -0
  71. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/examples/generate_env_example.py +0 -0
  72. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/examples/logging_example.py +0 -0
  73. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/mkdocs.yml +0 -0
  74. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/release-please-config.json +0 -0
  75. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/__init__.py +0 -0
  76. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/conftest.py +0 -0
  77. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_basic.py +0 -0
  78. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_coercion.py +0 -0
  79. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_collection_validators.py +0 -0
  80. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_defaults_coercion.py +0 -0
  81. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_describe.py +0 -0
  82. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_adoption.py +0 -0
  83. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_datetime.py +0 -0
  84. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_describe_output.py +0 -0
  85. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_enum.py +0 -0
  86. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_field_options.py +0 -0
  87. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_numbers.py +0 -0
  88. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_path_options.py +0 -0
  89. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_edge_strings.py +0 -0
  90. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_empty_collection_items.py +0 -0
  91. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_empty_strings.py +0 -0
  92. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_enum.py +0 -0
  93. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_errors.py +0 -0
  94. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_field_constraints.py +0 -0
  95. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_future_annotations.py +0 -0
  96. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_inheritance.py +0 -0
  97. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_json.py +0 -0
  98. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_json_and_optional.py +0 -0
  99. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_loading.py +0 -0
  100. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_logging_config.py +0 -0
  101. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_nested_config.py +0 -0
  102. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_post_load.py +0 -0
  103. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_prefix.py +0 -0
  104. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_reload.py +0 -0
  105. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_secret_redaction.py +0 -0
  106. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_secretstr_security.py +0 -0
  107. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_string_affixes.py +0 -0
  108. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_strip.py +0 -0
  109. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_strip_integration.py +0 -0
  110. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_types.py +0 -0
  111. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_union_types.py +0 -0
  112. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_url_dsn.py +0 -0
  113. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_url_password_decoding.py +0 -0
  114. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_url_unquote.py +0 -0
  115. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_urls.py +0 -0
  116. {dotenvmodel-0.5.2 → dotenvmodel-0.5.3}/tests/test_validator.py +0 -0
@@ -0,0 +1,25 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ workflow_dispatch:
8
+ inputs:
9
+ tag_name:
10
+ description: Existing tag to build and publish (e.g. v0.5.2)
11
+ required: true
12
+ type: string
13
+
14
+ permissions:
15
+ contents: read
16
+ id-token: write
17
+
18
+ jobs:
19
+ publish:
20
+ uses: AZX-PBC-OSS/gha-workflows/.github/workflows/publish-python.yml@e35a12e79176f05980e6f93eb2b935132df10672
21
+ with:
22
+ dist-name: dotenvmodel
23
+ python-version: "3.12"
24
+ tag-name: ${{ inputs.tag_name || github.ref_name }}
25
+ secrets: inherit
@@ -28,8 +28,9 @@ jobs:
28
28
  publish:
29
29
  needs: release-please
30
30
  if: needs.release-please.outputs.release_created
31
- uses: ./.github/workflows/publish.yml
31
+ uses: AZX-PBC-OSS/gha-workflows/.github/workflows/publish-python.yml@e35a12e79176f05980e6f93eb2b935132df10672
32
32
  with:
33
- release_created: true
34
- tag_name: ${{ needs.release-please.outputs.tag_name }}
33
+ dist-name: dotenvmodel
34
+ python-version: "3.12"
35
+ tag-name: ${{ needs.release-please.outputs.tag_name }}
35
36
  secrets: inherit
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.5.3"
3
+ }
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.5.3](https://github.com/AZX-PBC-OSS/dotenvmodel/compare/v0.5.2...v0.5.3) (2026-07-22)
9
+
10
+
11
+ ### Continuous Integration
12
+
13
+ * publish via centralized reusable workflow ([#44](https://github.com/AZX-PBC-OSS/dotenvmodel/issues/44)) ([d653161](https://github.com/AZX-PBC-OSS/dotenvmodel/commit/d653161cc426161838580bd0772ebb65b488198f))
14
+
8
15
  ## [0.5.2](https://github.com/AZX-PBC-OSS/dotenvmodel/compare/v0.5.1...v0.5.2) (2026-07-22)
9
16
 
10
17
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dotenvmodel
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: Type-safe environment configuration with automatic .env file loading
5
5
  Project-URL: Homepage, https://github.com/AZX-PBC-OSS/dotenvmodel
6
6
  Project-URL: Repository, https://github.com/AZX-PBC-OSS/dotenvmodel
@@ -34,7 +34,7 @@ Public API:
34
34
  Exception hierarchy
35
35
  """
36
36
 
37
- __version__ = "0.5.2" # x-release-please-version
37
+ __version__ = "0.5.3" # x-release-please-version
38
38
  __author__ = "AZX, PBC."
39
39
  __email__ = "oss@azx.io"
40
40
  __license__ = "MIT"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "dotenvmodel"
7
- version = "0.5.2"
7
+ version = "0.5.3"
8
8
  description = "Type-safe environment configuration with automatic .env file loading"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -245,7 +245,7 @@ wheels = [
245
245
 
246
246
  [[package]]
247
247
  name = "dotenvmodel"
248
- version = "0.5.2"
248
+ version = "0.5.3"
249
249
  source = { editable = "." }
250
250
  dependencies = [
251
251
  { name = "python-dotenv" },
@@ -1,125 +0,0 @@
1
- name: Publish to PyPI
2
-
3
- on:
4
- push:
5
- tags:
6
- - "v*"
7
- workflow_call:
8
- inputs:
9
- release_created:
10
- required: true
11
- type: boolean
12
- tag_name:
13
- required: true
14
- type: string
15
- workflow_dispatch:
16
- inputs:
17
- tag_name:
18
- description: Existing tag to build and publish (e.g. v0.2.0)
19
- required: true
20
- type: string
21
-
22
- permissions:
23
- contents: read
24
-
25
- jobs:
26
- build:
27
- runs-on: ubuntu-latest
28
- if: ${{ github.event_name != 'workflow_call' || inputs.release_created }}
29
- steps:
30
- - uses: actions/checkout@v7
31
- with:
32
- ref: ${{ inputs.tag_name || github.ref }}
33
-
34
- - name: Install uv
35
- uses: astral-sh/setup-uv@v8.3.2
36
- with:
37
- enable-cache: true
38
-
39
- - name: Set up Python
40
- run: uv python install 3.12
41
-
42
- - name: Verify tag matches pyproject.toml version
43
- env:
44
- TAG_NAME: ${{ inputs.tag_name || github.ref_name }}
45
- run: |
46
- set -euo pipefail
47
- tag="${TAG_NAME#v}"
48
- version="$(uv run python -c 'import importlib.metadata; print(importlib.metadata.version("dotenvmodel"))')"
49
- echo "Tag: ${tag}"
50
- echo "pyproject.toml version: ${version}"
51
- if [ "${tag}" != "${version}" ]; then
52
- echo "::error::Git tag ${tag} does not match pyproject.toml version ${version}"
53
- exit 1
54
- fi
55
-
56
- - name: Build sdist and wheel
57
- run: uv build
58
-
59
- - name: Assert wheel ships required non-code artifacts
60
- run: |
61
- set -euo pipefail
62
- listing="$(uv run python -m zipfile -l dist/*.whl)"
63
- echo "$listing" | grep -q "dotenvmodel/py.typed"
64
-
65
- - name: Test installation from wheel
66
- run: |
67
- uv venv test-env
68
- uv pip install --python test-env/bin/python dist/*.whl
69
- cd /tmp && $GITHUB_WORKSPACE/test-env/bin/python -c "import dotenvmodel; print(dotenvmodel.__version__)"
70
-
71
- - name: Upload build artifacts
72
- uses: actions/upload-artifact@v7.0.1
73
- with:
74
- name: release-dist
75
- path: dist/
76
- retention-days: 7
77
-
78
- publish:
79
- needs: [build]
80
- runs-on: ubuntu-latest
81
- environment:
82
- name: pypi
83
- url: https://pypi.org/project/dotenvmodel/
84
- permissions:
85
- id-token: write
86
- steps:
87
- - name: Download build artifacts
88
- uses: actions/download-artifact@v8.0.1
89
- with:
90
- name: release-dist
91
- path: dist/
92
-
93
- - name: Publish to PyPI
94
- uses: pypa/gh-action-pypi-publish@release/v1
95
- with:
96
- # Attestations are only valid when publish.yml is the top-level
97
- # workflow: the Sigstore certificate's Build Config URI records the
98
- # top-level workflow, and PyPI verifies it against the trusted
99
- # publisher (publish.yml). Via workflow_call from release-please.yml
100
- # the certificate says release-please.yml instead, which PyPI
101
- # rejects with a 400 (attestations under reusable workflows are
102
- # unsupported). The OIDC token validates on both paths because PyPI
103
- # matches it against job_workflow_ref (publish.yml).
104
- attestations: ${{ github.event_name != 'workflow_call' }}
105
-
106
- # Trusted Publishing (OIDC): no API token is stored in this repo.
107
- # The PyPI trusted publisher is configured for:
108
- # Repository: AZX-PBC-OSS/dotenvmodel
109
- # Workflow: publish.yml
110
- # Environment: (Any)
111
- # This workflow is invoked three ways:
112
- # 1. Direct push of a v* tag (manual fallback path).
113
- # 2. workflow_call from release-please.yml after release-please creates a
114
- # release (tags made with GITHUB_TOKEN don't trigger push workflows, so
115
- # release-please.yml calls this workflow explicitly).
116
- # 3. workflow_dispatch with an existing tag name (manual republish, e.g.
117
- # recovering a failed automated publish).
118
- # The PyPI publisher stays valid for all paths because it targets
119
- # publish.yml — the file containing the publish job. For reusable-workflow
120
- # calls, PyPI matches the OIDC token against the called workflow's filename
121
- # (job_workflow_ref), which is still this one. Sigstore attestations are the
122
- # exception: their certificate records the TOP-LEVEL workflow, so they are
123
- # only enabled when publish.yml runs top-level (paths 1 and 3); see the
124
- # attestations input on the publish step.
125
- # See https://docs.pypi.org/trusted-publishers/ for setup details.
@@ -1,3 +0,0 @@
1
- {
2
- ".": "0.5.2"
3
- }
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