wry 0.2.3__tar.gz → 0.2.4.dev1__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 (141) hide show
  1. wry-0.2.4.dev1/.github/workflows/ci-cd.yml +218 -0
  2. wry-0.2.4.dev1/.gitignore +139 -0
  3. wry-0.2.4.dev1/.markdownlint.json +3 -0
  4. wry-0.2.4.dev1/.pre-commit-config.yaml +52 -0
  5. wry-0.2.4.dev1/AI_KNOWLEDGE_BASE.md +2390 -0
  6. wry-0.2.4.dev1/CHANGELOG.md +332 -0
  7. {wry-0.2.3 → wry-0.2.4.dev1}/PKG-INFO +106 -60
  8. {wry-0.2.3 → wry-0.2.4.dev1}/README.md +78 -44
  9. wry-0.2.4.dev1/RELEASE_PROCESS.md +80 -0
  10. wry-0.2.4.dev1/TODO.md +104 -0
  11. wry-0.2.4.dev1/check.sh +3 -0
  12. wry-0.2.4.dev1/examples/argument_help_injection.py +51 -0
  13. wry-0.2.4.dev1/examples/auto_instantiate_edge_cases.py +165 -0
  14. wry-0.2.4.dev1/examples/auto_instantiate_poc.py +330 -0
  15. wry-0.2.4.dev1/examples/auto_model_example.py +187 -0
  16. wry-0.2.4.dev1/examples/config.json +6 -0
  17. wry-0.2.4.dev1/examples/explicit_argument_help.py +48 -0
  18. wry-0.2.4.dev1/examples/field_exclusion.py +82 -0
  19. wry-0.2.4.dev1/examples/field_exclusion_example.py +52 -0
  20. wry-0.2.4.dev1/examples/intermediate_example.py +89 -0
  21. wry-0.2.4.dev1/examples/multi_model_example.py +171 -0
  22. wry-0.2.4.dev1/examples/sample_config.json +5 -0
  23. wry-0.2.4.dev1/examples/simple_cli.py +55 -0
  24. wry-0.2.4.dev1/examples/source_tracking_comprehensive.py +133 -0
  25. wry-0.2.4.dev1/examples/source_tracking_example.py +102 -0
  26. {wry-0.2.3 → wry-0.2.4.dev1}/pyproject.toml +54 -49
  27. wry-0.2.4.dev1/scripts/README.md +23 -0
  28. wry-0.2.4.dev1/scripts/extract_release_notes.py +112 -0
  29. wry-0.2.4.dev1/scripts/test_all_versions.sh +86 -0
  30. wry-0.2.4.dev1/scripts/test_ci_locally.sh +71 -0
  31. wry-0.2.4.dev1/scripts/test_with_act.sh +36 -0
  32. wry-0.2.4.dev1/scripts/update-dependencies.sh +40 -0
  33. wry-0.2.4.dev1/setup.cfg +4 -0
  34. wry-0.2.4.dev1/tests/README.md +65 -0
  35. wry-0.2.4.dev1/tests/__init__.py +1 -0
  36. wry-0.2.4.dev1/tests/features/__init__.py +1 -0
  37. wry-0.2.4.dev1/tests/features/test_auto_model.py +253 -0
  38. wry-0.2.4.dev1/tests/features/test_multi_model.py +304 -0
  39. wry-0.2.4.dev1/tests/features/test_source_precedence.py +302 -0
  40. wry-0.2.4.dev1/tests/integration/__init__.py +1 -0
  41. wry-0.2.4.dev1/tests/integration/test_click_edge_cases.py +171 -0
  42. wry-0.2.4.dev1/tests/integration/test_click_integration.py +217 -0
  43. wry-0.2.4.dev1/tests/integration/test_click_integration_extended.py +495 -0
  44. wry-0.2.4.dev1/tests/integration/test_context_handling.py +124 -0
  45. wry-0.2.4.dev1/tests/unit/__init__.py +1 -0
  46. wry-0.2.4.dev1/tests/unit/auto_model/test_auto_model_annotation_inference.py +47 -0
  47. wry-0.2.4.dev1/tests/unit/auto_model/test_auto_model_edge_cases.py +138 -0
  48. wry-0.2.4.dev1/tests/unit/auto_model/test_auto_model_field_processing.py +64 -0
  49. wry-0.2.4.dev1/tests/unit/auto_model/test_field_annotation_handling.py +64 -0
  50. wry-0.2.4.dev1/tests/unit/auto_model/test_field_annotations.py +172 -0
  51. wry-0.2.4.dev1/tests/unit/auto_model/test_type_inference.py +70 -0
  52. wry-0.2.4.dev1/tests/unit/click/README_TESTING_STRATEGY.md +50 -0
  53. wry-0.2.4.dev1/tests/unit/click/__init__.py +0 -0
  54. wry-0.2.4.dev1/tests/unit/click/test_argument_types.py +109 -0
  55. wry-0.2.4.dev1/tests/unit/click/test_bool_flag_handling.py +58 -0
  56. wry-0.2.4.dev1/tests/unit/click/test_click_config_building.py +51 -0
  57. wry-0.2.4.dev1/tests/unit/click/test_click_constraint_formatting.py +90 -0
  58. wry-0.2.4.dev1/tests/unit/click/test_click_decorator_edge_cases.py +81 -0
  59. wry-0.2.4.dev1/tests/unit/click/test_click_interval_constraints.py +45 -0
  60. wry-0.2.4.dev1/tests/unit/click/test_click_lambda_parsing.py +56 -0
  61. wry-0.2.4.dev1/tests/unit/click/test_click_length_constraints.py +47 -0
  62. wry-0.2.4.dev1/tests/unit/click/test_click_parameter_generation.py +108 -0
  63. wry-0.2.4.dev1/tests/unit/click/test_click_predicate_handling.py +69 -0
  64. wry-0.2.4.dev1/tests/unit/click/test_closure_extraction_errors.py +94 -0
  65. wry-0.2.4.dev1/tests/unit/click/test_closure_handling.py +82 -0
  66. wry-0.2.4.dev1/tests/unit/click/test_constraint_behavior.py +113 -0
  67. wry-0.2.4.dev1/tests/unit/click/test_constraint_edge_cases.py +84 -0
  68. wry-0.2.4.dev1/tests/unit/click/test_env_vars_option.py +70 -0
  69. wry-0.2.4.dev1/tests/unit/click/test_explicit_argument_help_injection.py +97 -0
  70. wry-0.2.4.dev1/tests/unit/click/test_format_constraint_text.py +183 -0
  71. wry-0.2.4.dev1/tests/unit/click/test_json_config_loading.py +102 -0
  72. wry-0.2.4.dev1/tests/unit/click/test_lambda_behavior.py +85 -0
  73. wry-0.2.4.dev1/tests/unit/click/test_lambda_error_handling.py +62 -0
  74. wry-0.2.4.dev1/tests/unit/click/test_predicate_source_errors.py +46 -0
  75. wry-0.2.4.dev1/tests/unit/click/test_strict_mode_errors.py +81 -0
  76. wry-0.2.4.dev1/tests/unit/click/test_type_handling.py +87 -0
  77. wry-0.2.4.dev1/tests/unit/core/__init__.py +0 -0
  78. wry-0.2.4.dev1/tests/unit/core/test_accessors.py +69 -0
  79. wry-0.2.4.dev1/tests/unit/core/test_advanced_features.py +518 -0
  80. wry-0.2.4.dev1/tests/unit/core/test_core.py +176 -0
  81. wry-0.2.4.dev1/tests/unit/core/test_edge_cases.py +291 -0
  82. wry-0.2.4.dev1/tests/unit/core/test_env_utils.py +73 -0
  83. wry-0.2.4.dev1/tests/unit/core/test_field_constraint_extraction.py +65 -0
  84. wry-0.2.4.dev1/tests/unit/core/test_field_utils.py +107 -0
  85. wry-0.2.4.dev1/tests/unit/core/test_field_utils_edge_cases.py +66 -0
  86. wry-0.2.4.dev1/tests/unit/core/test_sources.py +32 -0
  87. wry-0.2.4.dev1/tests/unit/core/test_type_checking_blocks.py +56 -0
  88. wry-0.2.4.dev1/tests/unit/model/__init__.py +0 -0
  89. wry-0.2.4.dev1/tests/unit/model/test_accessor_caching.py +78 -0
  90. wry-0.2.4.dev1/tests/unit/model/test_extract_edge_cases.py +118 -0
  91. wry-0.2.4.dev1/tests/unit/model/test_extract_subset_edge_cases.py +82 -0
  92. wry-0.2.4.dev1/tests/unit/model/test_model_click_context_handling.py +123 -0
  93. wry-0.2.4.dev1/tests/unit/model/test_model_data_extraction.py +96 -0
  94. wry-0.2.4.dev1/tests/unit/model/test_model_default_handling.py +74 -0
  95. wry-0.2.4.dev1/tests/unit/model/test_model_edge_cases.py +196 -0
  96. wry-0.2.4.dev1/tests/unit/model/test_model_environment_integration.py +66 -0
  97. wry-0.2.4.dev1/tests/unit/model/test_model_extract_subset_edge_cases.py +116 -0
  98. wry-0.2.4.dev1/tests/unit/model/test_model_extraction_methods.py +88 -0
  99. wry-0.2.4.dev1/tests/unit/model/test_model_field_errors.py +54 -0
  100. wry-0.2.4.dev1/tests/unit/model/test_model_object_extraction.py +102 -0
  101. wry-0.2.4.dev1/tests/unit/model/test_non_dict_object_extraction.py +84 -0
  102. wry-0.2.4.dev1/tests/unit/model/test_object_attribute_extraction.py +110 -0
  103. wry-0.2.4.dev1/tests/unit/multi_model/__init__.py +0 -0
  104. wry-0.2.4.dev1/tests/unit/multi_model/test_multi_model.py +48 -0
  105. wry-0.2.4.dev1/tests/unit/multi_model/test_type_checking.py +24 -0
  106. wry-0.2.4.dev1/tests/unit/test_argument_help_injection.py +140 -0
  107. wry-0.2.4.dev1/tests/unit/test_auto_model_field_processing.py +64 -0
  108. wry-0.2.4.dev1/tests/unit/test_comprehensive_imports.py +81 -0
  109. wry-0.2.4.dev1/tests/unit/test_exclude_enum.py +138 -0
  110. wry-0.2.4.dev1/tests/unit/test_generate_click_classmethod.py +47 -0
  111. wry-0.2.4.dev1/tests/unit/test_help_system.py +82 -0
  112. wry-0.2.4.dev1/tests/unit/test_init.py +90 -0
  113. wry-0.2.4.dev1/tests/unit/test_init_edge_cases.py +118 -0
  114. wry-0.2.4.dev1/tests/unit/test_init_version_edge_cases.py +64 -0
  115. wry-0.2.4.dev1/tests/unit/test_model_extraction_methods.py +88 -0
  116. wry-0.2.4.dev1/tests/unit/test_multiple_option_bug.py +340 -0
  117. wry-0.2.4.dev1/tests/unit/test_type_checking_imports.py +39 -0
  118. wry-0.2.4.dev1/tests/unit/test_variadic_argument_bug.py +154 -0
  119. wry-0.2.4.dev1/tests/unit/test_version_fallback.py +60 -0
  120. wry-0.2.4.dev1/tests/unit/test_version_parsing.py +62 -0
  121. {wry-0.2.3 → wry-0.2.4.dev1}/wry/__init__.py +9 -1
  122. wry-0.2.4.dev1/wry/_version.py +34 -0
  123. wry-0.2.4.dev1/wry/help_system.py +161 -0
  124. wry-0.2.4.dev1/wry/py.typed +0 -0
  125. wry-0.2.4.dev1/wry.egg-info/PKG-INFO +758 -0
  126. wry-0.2.4.dev1/wry.egg-info/SOURCES.txt +138 -0
  127. wry-0.2.4.dev1/wry.egg-info/dependency_links.txt +1 -0
  128. wry-0.2.4.dev1/wry.egg-info/requires.txt +17 -0
  129. wry-0.2.4.dev1/wry.egg-info/top_level.txt +1 -0
  130. wry-0.2.3/wry/_version.py +0 -14
  131. {wry-0.2.3 → wry-0.2.4.dev1}/LICENSE +0 -0
  132. /wry-0.2.3/wry/py.typed → /wry-0.2.4.dev1/tests/unit/auto_model/__init__.py +0 -0
  133. {wry-0.2.3 → wry-0.2.4.dev1}/wry/auto_model.py +0 -0
  134. {wry-0.2.3 → wry-0.2.4.dev1}/wry/click_integration.py +0 -0
  135. {wry-0.2.3 → wry-0.2.4.dev1}/wry/core/__init__.py +0 -0
  136. {wry-0.2.3 → wry-0.2.4.dev1}/wry/core/accessors.py +0 -0
  137. {wry-0.2.3 → wry-0.2.4.dev1}/wry/core/env_utils.py +0 -0
  138. {wry-0.2.3 → wry-0.2.4.dev1}/wry/core/field_utils.py +0 -0
  139. {wry-0.2.3 → wry-0.2.4.dev1}/wry/core/model.py +0 -0
  140. {wry-0.2.3 → wry-0.2.4.dev1}/wry/core/sources.py +0 -0
  141. {wry-0.2.3 → wry-0.2.4.dev1}/wry/multi_model.py +0 -0
@@ -0,0 +1,218 @@
1
+ name: CI/CD
2
+
3
+ on:
4
+ push: # Run on all pushes
5
+ pull_request:
6
+ branches: [ main ]
7
+
8
+ permissions:
9
+ contents: read
10
+ id-token: write # For OIDC/trusted publishing
11
+
12
+ jobs:
13
+ test:
14
+ name: Test Python ${{ matrix.python-version }}
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ python-version: ["3.10", "3.11", "3.12"]
20
+
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+ with:
25
+ fetch-depth: 0 # Need full history for setuptools-scm
26
+ # Don't fetch tags on main branch builds to avoid version conflicts
27
+ fetch-tags: ${{ !startsWith(github.ref, 'refs/heads/main') }}
28
+
29
+ - name: Set up Python ${{ matrix.python-version }}
30
+ uses: actions/setup-python@v5
31
+ with:
32
+ python-version: ${{ matrix.python-version }}
33
+
34
+ - name: Cache pip dependencies
35
+ uses: actions/cache@v4
36
+ with:
37
+ path: ~/.cache/pip
38
+ key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }}
39
+ restore-keys: |
40
+ ${{ runner.os }}-pip-
41
+
42
+ - name: Install dependencies
43
+ run: |
44
+ python -m pip install --upgrade pip
45
+ pip install -e ".[dev]"
46
+
47
+ - name: Run pre-commit checks
48
+ run: |
49
+ pre-commit run --all-files --show-diff-on-failure
50
+
51
+ - name: Upload coverage reports to Codecov
52
+ uses: codecov/codecov-action@v5
53
+ with:
54
+ token: ${{ secrets.CODECOV_TOKEN }}
55
+ files: ./coverage.xml
56
+ flags: unittests
57
+ name: codecov-${{ matrix.python-version }}
58
+ fail_ci_if_error: false
59
+
60
+ build:
61
+ name: Build distribution 📦
62
+ needs: [test]
63
+ runs-on: ubuntu-latest
64
+
65
+ steps:
66
+ - uses: actions/checkout@v4
67
+ with:
68
+ fetch-depth: 0 # Need full history for setuptools-scm
69
+ # Don't fetch tags on main branch builds to avoid version conflicts
70
+ fetch-tags: ${{ !startsWith(github.ref, 'refs/heads/main') }}
71
+
72
+ - name: Set up Python
73
+ uses: actions/setup-python@v5
74
+ with:
75
+ python-version: "3.x"
76
+
77
+ - name: Install build tools
78
+ run: |
79
+ python -m pip install --upgrade pip
80
+ pip install build setuptools-scm
81
+
82
+ - name: Build a binary wheel and a source tarball
83
+ run: python -m build
84
+
85
+ - name: Check build artifacts
86
+ run: |
87
+ python3 -m pip install twine
88
+ twine check dist/*
89
+
90
+ - name: Store distribution packages
91
+ uses: actions/upload-artifact@v4
92
+ with:
93
+ name: python-package-distributions
94
+ path: dist/
95
+
96
+ publish-to-testpypi:
97
+ name: Publish to TestPyPI
98
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
99
+ needs: [build]
100
+ runs-on: ubuntu-latest
101
+ environment:
102
+ name: testpypi
103
+ url: https://test.pypi.org/p/wry
104
+ permissions:
105
+ id-token: write # IMPORTANT: mandatory for trusted publishing
106
+
107
+ steps:
108
+ - name: Download dists
109
+ uses: actions/download-artifact@v4
110
+ with:
111
+ name: python-package-distributions
112
+ path: dist/
113
+
114
+ - name: Publish to TestPyPI
115
+ uses: pypa/gh-action-pypi-publish@release/v1
116
+ with:
117
+ repository-url: https://test.pypi.org/legacy/
118
+ skip-existing: true
119
+
120
+ publish-to-pypi:
121
+ name: Publish to PyPI
122
+ if: github.event_name == 'push' && !contains(github.ref, 'pull')
123
+ needs: [build]
124
+ runs-on: ubuntu-latest
125
+ environment:
126
+ name: pypi
127
+ url: https://pypi.org/p/wry
128
+ permissions:
129
+ id-token: write # IMPORTANT: mandatory for trusted publishing
130
+
131
+ steps:
132
+ - name: Download dists
133
+ uses: actions/download-artifact@v4
134
+ with:
135
+ name: python-package-distributions
136
+ path: dist/
137
+
138
+ - name: Publish to PyPI
139
+ uses: pypa/gh-action-pypi-publish@release/v1
140
+ with:
141
+ skip-existing: true
142
+
143
+
144
+ github-release:
145
+ name: Create GitHub Release
146
+ if: startsWith(github.ref, 'refs/tags/')
147
+ needs: [publish-to-pypi]
148
+ runs-on: ubuntu-latest
149
+ permissions:
150
+ contents: write # For creating releases
151
+ id-token: write # For sigstore signing
152
+
153
+ steps:
154
+ - name: Checkout code
155
+ uses: actions/checkout@v4
156
+ with:
157
+ sparse-checkout: |
158
+ CHANGELOG.md
159
+ scripts/extract_release_notes.py
160
+
161
+ - name: Download artifacts
162
+ uses: actions/download-artifact@v4
163
+ with:
164
+ name: python-package-distributions
165
+ path: dist/
166
+
167
+ - name: Sign with Sigstore
168
+ uses: sigstore/gh-action-sigstore-python@v3.0.0
169
+ with:
170
+ inputs: >-
171
+ ./dist/*.tar.gz
172
+ ./dist/*.whl
173
+
174
+ - name: Get previous tag
175
+ id: previous_tag
176
+ run: |
177
+ # Get the previous tag (excluding the current one)
178
+ PREVIOUS_TAG=$(git tag --sort=-version:refname | grep -v '${{ github.ref_name }}' | head -n 1)
179
+ echo "previous_tag=$PREVIOUS_TAG" >> $GITHUB_OUTPUT
180
+ echo "Previous tag: $PREVIOUS_TAG"
181
+
182
+ - name: Extract release notes from CHANGELOG
183
+ id: release_notes
184
+ run: |
185
+ # Make script executable
186
+ chmod +x scripts/extract_release_notes.py
187
+
188
+ # Extract release notes and save to file
189
+ python scripts/extract_release_notes.py '${{ github.ref_name }}' > release_notes.md
190
+
191
+ # Add comparison link if we have a previous tag
192
+ if [ -n "${{ steps.previous_tag.outputs.previous_tag }}" ]; then
193
+ echo "" >> release_notes.md
194
+ echo "---" >> release_notes.md
195
+ echo "" >> release_notes.md
196
+ echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/${{ steps.previous_tag.outputs.previous_tag }}...${{ github.ref_name }}" >> release_notes.md
197
+ fi
198
+
199
+ # Read the content for the release body
200
+ echo 'RELEASE_NOTES<<EOF' >> $GITHUB_ENV
201
+ cat release_notes.md >> $GITHUB_ENV
202
+ echo 'EOF' >> $GITHUB_ENV
203
+
204
+ - name: Create GitHub Release
205
+ env:
206
+ GITHUB_TOKEN: ${{ github.token }}
207
+ run: |
208
+ gh release create '${{ github.ref_name }}' \
209
+ --repo '${{ github.repository }}' \
210
+ --title '${{ github.ref_name }}' \
211
+ --notes "$RELEASE_NOTES"
212
+
213
+ - name: Upload release artifacts
214
+ env:
215
+ GITHUB_TOKEN: ${{ github.token }}
216
+ run: |
217
+ gh release upload '${{ github.ref_name }}' dist/** \
218
+ --repo '${{ github.repository }}'
@@ -0,0 +1,139 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ .env
106
+ .venv
107
+ env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+
113
+ # Spyder project settings
114
+ .spyderproject
115
+ .spyproject
116
+
117
+ # Rope project settings
118
+ .ropeproject
119
+
120
+ # mkdocs documentation
121
+ /site
122
+
123
+ # mypy
124
+ .mypy_cache/
125
+ .dmypy.json
126
+ dmypy.json
127
+
128
+ # Pyre type checker
129
+ .pyre/
130
+
131
+ # IDEs
132
+ .vscode/
133
+ .idea/
134
+ *.swp
135
+ *.swo
136
+ *~
137
+
138
+ # macOS
139
+ .DS_Store
@@ -0,0 +1,3 @@
1
+ {
2
+ "MD024": false
3
+ }
@@ -0,0 +1,52 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v6.0.0
4
+ hooks:
5
+ - id: trailing-whitespace
6
+ - id: end-of-file-fixer
7
+ - id: check-yaml
8
+ - id: check-toml
9
+ - id: check-json
10
+ - id: check-merge-conflict
11
+ - id: check-added-large-files
12
+ - id: debug-statements
13
+
14
+ - repo: https://github.com/astral-sh/ruff-pre-commit
15
+ rev: v0.8.4
16
+ hooks:
17
+ - id: ruff
18
+ args: [--fix, --exit-non-zero-on-fix]
19
+ - id: ruff-format
20
+
21
+ - repo: local
22
+ hooks:
23
+ - id: pytest
24
+ name: pytest
25
+ entry: pytest
26
+ language: system
27
+ types: [python]
28
+ args: [tests/unit/, --cov=wry, --cov-branch, --cov-report=xml, --cov-report=term-missing, --cov-fail-under=85]
29
+ pass_filenames: false
30
+ always_run: true
31
+
32
+ - repo: https://github.com/pre-commit/mirrors-mypy
33
+ rev: v1.17.1
34
+ hooks:
35
+ - id: mypy
36
+ args: [wry/]
37
+ pass_filenames: false
38
+ additional_dependencies:
39
+ - pydantic>=2.9.2
40
+ - click>=8.0.0
41
+ - annotated-types>=0.6.0
42
+ - setuptools-scm>=8.0
43
+
44
+ exclude: |
45
+ (?x)(
46
+ # Exclude auto-generated files
47
+ wry/_version\.py|
48
+ # Exclude build artifacts
49
+ dist/|
50
+ build/|
51
+ \.egg-info/
52
+ )