django-dynamic-admin-forms 3.2.9__tar.gz → 3.2.10__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 (61) hide show
  1. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.ambient-package-update/metadata.py +1 -0
  2. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.github/workflows/ci.yml +12 -10
  3. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.gitignore +4 -1
  4. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.pre-commit-config.yaml +7 -7
  5. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.readthedocs.yaml +1 -1
  6. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/CHANGES.md +3 -0
  7. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/CONTRIBUTING.md +4 -6
  8. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/PKG-INFO +62 -41
  9. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/README.md +29 -15
  10. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/django_dynamic_admin_forms/__init__.py +1 -1
  11. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/docs/conf.py +0 -1
  12. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/manage.py +1 -1
  13. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/pyproject.toml +49 -42
  14. django_dynamic_admin_forms-3.2.10/scripts/unix/install_requirements.sh +3 -0
  15. django_dynamic_admin_forms-3.2.10/scripts/unix/publish_to_pypi.sh +4 -0
  16. django_dynamic_admin_forms-3.2.10/scripts/windows/install_requirements.ps1 +2 -0
  17. django_dynamic_admin_forms-3.2.10/scripts/windows/publish_to_pypi.ps1 +3 -0
  18. django_dynamic_admin_forms-3.2.10/uv.lock +1008 -0
  19. django_dynamic_admin_forms-3.2.9/scripts/unix/install_requirements.sh +0 -4
  20. django_dynamic_admin_forms-3.2.9/scripts/unix/publish_to_pypi.sh +0 -3
  21. django_dynamic_admin_forms-3.2.9/scripts/windows/install_requirements.ps1 +0 -3
  22. django_dynamic_admin_forms-3.2.9/scripts/windows/publish_to_pypi.ps1 +0 -2
  23. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.ambient-package-update/templates/snippets/content.tpl +0 -0
  24. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.ambient-package-update/templates/snippets/installation.tpl +0 -0
  25. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.editorconfig +0 -0
  26. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/.python-version +0 -0
  27. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/LICENSE.md +0 -0
  28. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/MANIFEST.in +0 -0
  29. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/SECURITY.md +0 -0
  30. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/django_dynamic_admin_forms/admin.py +0 -0
  31. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/django_dynamic_admin_forms/apps.py +0 -0
  32. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/django_dynamic_admin_forms/static/js/dynamic_admin.js +0 -0
  33. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/django_dynamic_admin_forms/templates/admin/change_form.html +0 -0
  34. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/django_dynamic_admin_forms/urls.py +0 -0
  35. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/docs/Makefile +0 -0
  36. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/docs/demo.gif +0 -0
  37. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/docs/features/changelog.rst +0 -0
  38. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/docs/index.rst +0 -0
  39. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/docs/make.bat +0 -0
  40. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/cypress/integration/dynamic-select.spec.js +0 -0
  41. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/cypress/plugins/index.js +0 -0
  42. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/cypress/support/commands.js +0 -0
  43. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/cypress/support/index.js +0 -0
  44. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/cypress/support/paths.js +0 -0
  45. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/cypress.json +0 -0
  46. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/package.json +0 -0
  47. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/e2e/yarn.lock +0 -0
  48. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/fixtures/fixtures-dev.json +0 -0
  49. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/settings.py +0 -0
  50. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/__init__.py +0 -0
  51. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/admin.py +0 -0
  52. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/apps.py +0 -0
  53. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/migrations/0001_initial.py +0 -0
  54. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/migrations/0002_extend_example.py +0 -0
  55. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/migrations/0003_example_file_field.py +0 -0
  56. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/migrations/__init__.py +0 -0
  57. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/models.py +0 -0
  58. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/testapp/urls.py +0 -0
  59. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/tests/__init__.py +0 -0
  60. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/tests/test_admin_generic.py +0 -0
  61. {django_dynamic_admin_forms-3.2.9 → django_dynamic_admin_forms-3.2.10}/tests/test_admin_unit.py +0 -0
@@ -29,6 +29,7 @@ METADATA = PackageMetadata(
29
29
  development_status="5 - Production/Stable",
30
30
  has_migrations=False,
31
31
  main_branch="main",
32
+ claim="Add simple dynamic interaction to the otherwise static django admin.",
32
33
  readme_content=ReadmeContent(
33
34
  tagline="Add simple interactions to the otherwise static django admin.",
34
35
  ),
@@ -12,10 +12,10 @@ jobs:
12
12
  steps:
13
13
  - uses: actions/checkout@v4
14
14
 
15
- - name: Set up Python 3.12
15
+ - name: Set up Python 3.13
16
16
  uses: actions/setup-python@v5
17
17
  with:
18
- python-version: "3.12"
18
+ python-version: "3.13"
19
19
 
20
20
  - name: Install required packages
21
21
  run: pip install pre-commit
@@ -23,13 +23,12 @@ jobs:
23
23
  - name: Run pre-commit hooks
24
24
  run: pre-commit run --all-files
25
25
 
26
-
27
26
  tests:
28
27
  name: Python ${{ matrix.python-version }}, django ${{ matrix.django-version }}
29
28
  runs-on: ubuntu-24.04
30
29
  strategy:
31
30
  matrix:
32
- python-version: ['3.9', '3.10', '3.11', '3.12', '3.13', ]
31
+ python-version: ['3.10', '3.11', '3.12', '3.13', '3.14', ]
33
32
  django-version: ['42', '51', '52', ]
34
33
 
35
34
  exclude:
@@ -46,8 +45,10 @@ jobs:
46
45
  uses: actions/setup-python@v5
47
46
  with:
48
47
  python-version: ${{ matrix.python-version }}
48
+ - name: Install uv
49
+ uses: astral-sh/setup-uv@v5
49
50
  - name: Install tox
50
- run: pip install tox
51
+ run: uv pip install --system tox tox-uv
51
52
  - name: Run Tests
52
53
  env:
53
54
  TOXENV: django${{ matrix.django-version }}
@@ -56,7 +57,7 @@ jobs:
56
57
  uses: actions/upload-artifact@v4
57
58
  with:
58
59
  name: coverage-data-${{ matrix.python-version }}-${{ matrix.django-version }}
59
- path: '${{ github.workspace }}/.coverage.*'
60
+ path: '${{ github.workspace }}/.coverage'
60
61
  include-hidden-files: true
61
62
  if-no-files-found: error
62
63
 
@@ -69,7 +70,7 @@ jobs:
69
70
 
70
71
  - uses: actions/setup-python@v5
71
72
  with:
72
- python-version: '3.12'
73
+ python-version: '3.13'
73
74
 
74
75
  - name: Install dependencies
75
76
  run: python -m pip install --upgrade coverage[toml]
@@ -77,13 +78,14 @@ jobs:
77
78
  - name: Download data
78
79
  uses: actions/download-artifact@v4
79
80
  with:
80
- path: ${{ github.workspace }}
81
+ path: ${{ github.workspace }}/coverage-reports
81
82
  pattern: coverage-data-*
82
- merge-multiple: true
83
+ merge-multiple: false
83
84
 
84
85
  - name: Combine coverage and fail if it's <100.0%
85
86
  run: |
86
- python -m coverage combine
87
+ python -m coverage combine coverage-reports/*/.coverage
88
+ python -m coverage xml
87
89
  python -m coverage html --skip-covered --skip-empty
88
90
  python -m coverage report --fail-under=100.0
89
91
  echo "## Coverage summary" >> $GITHUB_STEP_SUMMARY
@@ -140,7 +140,7 @@ cython_debug/
140
140
  # option (not recommended) you can uncomment the following to ignore the entire idea folder.
141
141
  .idea/
142
142
 
143
- # Requirements.txt is managed by pip-tools
143
+ # Deprecated dependency files
144
144
  requirements.txt
145
145
 
146
146
  # sphinx build folder
@@ -156,3 +156,6 @@ _build
156
156
 
157
157
  # Test databases
158
158
  *.sqlite
159
+
160
+ # AI
161
+ .claude/
@@ -3,7 +3,7 @@
3
3
 
4
4
  repos:
5
5
  - repo: https://github.com/astral-sh/ruff-pre-commit
6
- rev: v0.11.11
6
+ rev: v0.14.0
7
7
  hooks:
8
8
  # Run the Ruff formatter.
9
9
  - id: ruff-format
@@ -12,27 +12,27 @@ repos:
12
12
  args: [--fix, --exit-non-zero-on-fix]
13
13
 
14
14
  - repo: https://github.com/adamchainz/blacken-docs
15
- rev: 1.19.1
15
+ rev: 1.20.0
16
16
  hooks:
17
17
  - id: blacken-docs
18
18
  additional_dependencies:
19
- - black==25.1.0
19
+ - black==25.9.0
20
20
  files: '(?:README\.md|\.ambient-package-update\/templates\/snippets\/.*\.tpl|docs\/.*\.(?:md|rst))'
21
21
 
22
22
  - repo: https://github.com/asottile/pyupgrade
23
23
  rev: v3.20.0
24
24
  hooks:
25
25
  - id: pyupgrade
26
- args: [ --py39-plus ]
26
+ args: [ --py310-plus ]
27
27
 
28
28
  - repo: https://github.com/adamchainz/django-upgrade
29
- rev: 1.25.0
29
+ rev: 1.29.0
30
30
  hooks:
31
31
  - id: django-upgrade
32
32
  args: [--target-version, "4.2"]
33
33
 
34
34
  - repo: https://github.com/adamchainz/djade-pre-commit
35
- rev: 1.4.0
35
+ rev: 1.6.0
36
36
  hooks:
37
37
  - id: djade
38
38
  args: [--target-version, "4.2"]
@@ -43,7 +43,7 @@ repos:
43
43
  )$
44
44
 
45
45
  - repo: https://github.com/pre-commit/pre-commit-hooks
46
- rev: v5.0.0
46
+ rev: v6.0.0
47
47
  hooks:
48
48
  - id: check-ast
49
49
  - id: check-builtin-literals
@@ -9,7 +9,7 @@ version: 2
9
9
  build:
10
10
  os: ubuntu-24.04
11
11
  tools:
12
- python: "3.12"
12
+ python: "3.13"
13
13
 
14
14
  # Build documentation in the "docs/" directory with Sphinx
15
15
  sphinx:
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ **3.2.10** (2025-10-09)
4
+ * Maintenance updates via ambient-package-update
5
+
3
6
  **3.2.9** (2025-05-29)
4
7
  * Maintenance updates via ambient-package-update
5
8
 
@@ -3,9 +3,8 @@
3
3
  ## Setup package for development
4
4
 
5
5
  - Create a Python virtualenv and activate it
6
- - Install "pip-tools" with `pip install -U pip-tools`
7
- - Compile the requirements with `pip-compile --extra dev, -o requirements.txt pyproject.toml --resolver=backtracking`
8
- - Sync the dependencies with your virtualenv with `pip-sync`
6
+ - Install "uv" with `pip install -U uv`
7
+ - Sync the requirements with `uv sync --frozen --group dev`
9
8
 
10
9
  ## Add functionality
11
10
 
@@ -58,7 +57,6 @@ Example: run all hooks of pre-push stage
58
57
  - To build the documentation, run: `sphinx-build docs/ docs/_build/html/`.
59
58
  - Open `docs/_build/html/index.html` to see the documentation.
60
59
 
61
-
62
60
  ### Translation files
63
61
 
64
62
  If you have added custom text, make sure to wrap it in `_()` where `_` is
@@ -66,12 +64,12 @@ gettext_lazy (`from django.utils.translation import gettext_lazy as _`).
66
64
 
67
65
  How to create translation file:
68
66
 
69
- * Navigate to `django-dynamic-admin-forms`
67
+ * Navigate to `django_dynamic_admin_forms`
70
68
  * `python manage.py makemessages -l de`
71
69
  * Have a look at the new/changed files within `django_dynamic_admin_forms/locale`
72
70
 
73
71
  How to compile translation files:
74
72
 
75
- * Navigate to `django-dynamic-admin-forms`
73
+ * Navigate to `django_dynamic_admin_forms`
76
74
  * `python manage.py compilemessages`
77
75
  * Have a look at the new/changed files within `django_dynamic_admin_forms/locale`
@@ -1,9 +1,35 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: django-dynamic-admin-forms
3
- Version: 3.2.9
3
+ Version: 3.2.10
4
4
  Summary: Add simple dynamic interaction to the otherwise static django admin.
5
+ Project-URL: Homepage, https://github.com/ambient-innovation/django-dynamic-admin/
6
+ Project-URL: Documentation, https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html
7
+ Project-URL: Maintained by, https://ambient.digital/
8
+ Project-URL: Bugtracker, https://github.com/ambient-innovation/django-dynamic-admin/issues
9
+ Project-URL: Changelog, https://django-dynamic-admin-forms.readthedocs.io/en/latest/features/changelog.html
5
10
  Author-email: Ambient Digital <hello@ambient.digital>, Fabian Binz <fabian.binz@ambient.digital>
6
- Description-Content-Type: text/markdown
11
+ License: MIT License
12
+
13
+ Copyright (c) 2022 Ambient Innovation: GmbH
14
+
15
+ Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ of this software and associated documentation files (the "Software"), to deal
17
+ in the Software without restriction, including without limitation the rights
18
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ copies of the Software, and to permit persons to whom the Software is
20
+ furnished to do so, subject to the following conditions:
21
+
22
+ The above copyright notice and this permission notice shall be included in all
23
+ copies or substantial portions of the Software.
24
+
25
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
+ SOFTWARE.
32
+ License-File: LICENSE.md
7
33
  Classifier: Development Status :: 5 - Production/Stable
8
34
  Classifier: Environment :: Web Environment
9
35
  Classifier: Framework :: Django
@@ -16,33 +42,15 @@ Classifier: Natural Language :: English
16
42
  Classifier: Operating System :: OS Independent
17
43
  Classifier: Programming Language :: Python
18
44
  Classifier: Programming Language :: Python :: 3
19
- Classifier: Programming Language :: Python :: 3.9
20
45
  Classifier: Programming Language :: Python :: 3.10
21
46
  Classifier: Programming Language :: Python :: 3.11
22
47
  Classifier: Programming Language :: Python :: 3.12
23
48
  Classifier: Programming Language :: Python :: 3.13
49
+ Classifier: Programming Language :: Python :: 3.14
24
50
  Classifier: Topic :: Utilities
25
- Requires-Dist: Django>=4.2
26
- Requires-Dist: typer~=0.12 ; extra == "dev"
27
- Requires-Dist: pytest-django~=4.9 ; extra == "dev"
28
- Requires-Dist: pytest-mock~=3.14 ; extra == "dev"
29
- Requires-Dist: coverage~=7.6 ; extra == "dev"
30
- Requires-Dist: pre-commit~=4.2 ; extra == "dev"
31
- Requires-Dist: ruff~=0.11 ; extra == "dev"
32
- Requires-Dist: sphinx~=7.1 ; extra == "dev"
33
- Requires-Dist: sphinx-rtd-theme~=2.0 ; extra == "dev"
34
- Requires-Dist: m2r2==0.3.3.post2 ; extra == "dev"
35
- Requires-Dist: mistune<2.0.0 ; extra == "dev"
36
- Requires-Dist: flit~=3.12 ; extra == "dev"
37
- Requires-Dist: keyring~=25.6 ; extra == "dev"
38
- Requires-Dist: ambient-package-update ; extra == "dev"
39
- Requires-Dist: unittest-parametrize~=1.4 ; extra == "dev"
40
- Project-URL: Bugtracker, https://github.com/ambient-innovation/django-dynamic-admin/issues
41
- Project-URL: Changelog, https://django-dynamic-admin-forms.readthedocs.io/en/latest/features/changelog.html
42
- Project-URL: Documentation, https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html
43
- Project-URL: Homepage, https://github.com/ambient-innovation/django-dynamic-admin/
44
- Project-URL: Maintained by, https://ambient.digital/
45
- Provides-Extra: dev
51
+ Requires-Python: >=3.10
52
+ Requires-Dist: django>=4.2
53
+ Description-Content-Type: text/markdown
46
54
 
47
55
  [![PyPI release](https://img.shields.io/pypi/v/django-dynamic-admin-forms.svg)](https://pypi.org/project/django-dynamic-admin-forms/)
48
56
  [![Downloads](https://static.pepy.tech/badge/django-dynamic-admin-forms)](https://pepy.tech/project/django-dynamic-admin-forms)
@@ -53,11 +61,9 @@ Provides-Extra: dev
53
61
 
54
62
  Add simple interactions to the otherwise static django admin.
55
63
 
56
- * [PyPI](https://pypi.org/project/django-dynamic-admin-forms/)
57
- * [GitHub](https://github.com/ambient-innovation/django-dynamic-admin)
58
- * [Full documentation](https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html)
59
- * Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
64
+ [PyPI](https://pypi.org/project/django-dynamic-admin-forms/) | [GitHub](https://github.com/ambient-innovation/django-dynamic-admin) | [Full documentation](https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html)
60
65
 
66
+ Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
61
67
 
62
68
  # django-dynamic-admin-forms
63
69
 
@@ -224,27 +230,43 @@ $ yarn cypress # or npm run cypress
224
230
  - Trigger new build at ReadTheDocs.io (follow instructions in admin panel at RTD) if the GitHub webhook is not yet set
225
231
  up.
226
232
 
227
- ### Publish to PyPi
233
+ ### Preparation and building
234
+
235
+ This package uses [uv](https://github.com/astral-sh/uv) for dependency management and building.
228
236
 
229
237
  - Update documentation about new/changed functionality
230
238
 
231
- - Update the `Changelog`
239
+ - Update the `CHANGES.md`
232
240
 
233
241
  - Increment version in main `__init__.py`
234
242
 
235
- - Create pull request / merge to main
243
+ - Create pull request / merge to "main"
236
244
 
237
- - This project uses the flit package to publish to PyPI. Thus, publishing should be as easy as running:
238
- ```
239
- flit publish
245
+ - This project uses uv to publish to PyPI. This will create distribution files in the `dist/` directory.
246
+
247
+ ```bash
248
+ uv build
240
249
  ```
241
250
 
242
- To publish to TestPyPI use the following to ensure that you have set up your .pypirc as
243
- shown [here](https://flit.readthedocs.io/en/latest/upload.html#using-pypirc) and use the following command:
251
+ ### Publishing to PyPI
244
252
 
245
- ```
246
- flit publish --repository testpypi
247
- ```
253
+ To publish to the production PyPI:
254
+
255
+ ```bash
256
+ uv publish
257
+ ```
258
+
259
+ To publish to TestPyPI first (recommended for testing):
260
+
261
+ ```bash
262
+ uv publish --publish-url https://test.pypi.org/legacy/
263
+ ```
264
+
265
+ You can then test the installation from TestPyPI:
266
+
267
+ ```bash
268
+ uv pip install --index-url https://test.pypi.org/simple/ ambient-package-update
269
+ ```
248
270
 
249
271
  ### Maintenance
250
272
 
@@ -254,4 +276,3 @@ configuration and setup files. It works similar to well-known updaters like `pyu
254
276
 
255
277
  To run an update, refer to the [documentation page](https://pypi.org/project/ambient-package-update/)
256
278
  of the "ambient-package-update".
257
-
@@ -7,11 +7,9 @@
7
7
 
8
8
  Add simple interactions to the otherwise static django admin.
9
9
 
10
- * [PyPI](https://pypi.org/project/django-dynamic-admin-forms/)
11
- * [GitHub](https://github.com/ambient-innovation/django-dynamic-admin)
12
- * [Full documentation](https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html)
13
- * Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
10
+ [PyPI](https://pypi.org/project/django-dynamic-admin-forms/) | [GitHub](https://github.com/ambient-innovation/django-dynamic-admin) | [Full documentation](https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html)
14
11
 
12
+ Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
15
13
 
16
14
  # django-dynamic-admin-forms
17
15
 
@@ -178,27 +176,43 @@ $ yarn cypress # or npm run cypress
178
176
  - Trigger new build at ReadTheDocs.io (follow instructions in admin panel at RTD) if the GitHub webhook is not yet set
179
177
  up.
180
178
 
181
- ### Publish to PyPi
179
+ ### Preparation and building
180
+
181
+ This package uses [uv](https://github.com/astral-sh/uv) for dependency management and building.
182
182
 
183
183
  - Update documentation about new/changed functionality
184
184
 
185
- - Update the `Changelog`
185
+ - Update the `CHANGES.md`
186
186
 
187
187
  - Increment version in main `__init__.py`
188
188
 
189
- - Create pull request / merge to main
189
+ - Create pull request / merge to "main"
190
190
 
191
- - This project uses the flit package to publish to PyPI. Thus, publishing should be as easy as running:
192
- ```
193
- flit publish
191
+ - This project uses uv to publish to PyPI. This will create distribution files in the `dist/` directory.
192
+
193
+ ```bash
194
+ uv build
194
195
  ```
195
196
 
196
- To publish to TestPyPI use the following to ensure that you have set up your .pypirc as
197
- shown [here](https://flit.readthedocs.io/en/latest/upload.html#using-pypirc) and use the following command:
197
+ ### Publishing to PyPI
198
198
 
199
- ```
200
- flit publish --repository testpypi
201
- ```
199
+ To publish to the production PyPI:
200
+
201
+ ```bash
202
+ uv publish
203
+ ```
204
+
205
+ To publish to TestPyPI first (recommended for testing):
206
+
207
+ ```bash
208
+ uv publish --publish-url https://test.pypi.org/legacy/
209
+ ```
210
+
211
+ You can then test the installation from TestPyPI:
212
+
213
+ ```bash
214
+ uv pip install --index-url https://test.pypi.org/simple/ ambient-package-update
215
+ ```
202
216
 
203
217
  ### Maintenance
204
218
 
@@ -1,3 +1,3 @@
1
1
  """Add simple dynamic interaction to the otherwise static django admin."""
2
2
 
3
- __version__ = "3.2.9"
3
+ __version__ = "3.2.10"
@@ -62,7 +62,6 @@ templates_path = ["_templates"]
62
62
  # This pattern also affects html_static_path and html_extra_path.
63
63
  exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
64
64
 
65
-
66
65
  # -- Options for HTML output -------------------------------------------------
67
66
 
68
67
  # The theme to use for HTML and HTML Help pages. See the documentation for
@@ -9,7 +9,7 @@ def main():
9
9
  """Run administrative tasks."""
10
10
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
11
11
  try:
12
- from django.core.management import execute_from_command_line
12
+ from django.core.management import execute_from_command_line # noqa: PLC0415
13
13
  except ImportError as exc:
14
14
  raise ImportError(
15
15
  "Couldn't import Django. Are you sure it's installed and "
@@ -1,6 +1,6 @@
1
1
  [build-system]
2
- requires = ["flit_core>=3.4"]
3
- build-backend = "flit_core.buildapi"
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-dynamic-admin-forms"
@@ -22,43 +22,36 @@ classifiers = [
22
22
  "Operating System :: OS Independent",
23
23
  "Programming Language :: Python",
24
24
  "Programming Language :: Python :: 3",
25
- "Programming Language :: Python :: 3.9",
26
25
  "Programming Language :: Python :: 3.10",
27
26
  "Programming Language :: Python :: 3.11",
28
27
  "Programming Language :: Python :: 3.12",
29
28
  "Programming Language :: Python :: 3.13",
29
+ "Programming Language :: Python :: 3.14",
30
30
  "Topic :: Utilities",
31
31
  ]
32
- dynamic = ["version", "description"]
32
+ dynamic = ["version"]
33
+ description = "Add simple dynamic interaction to the otherwise static django admin."
33
34
  license = {"file" = "LICENSE.md"}
35
+ requires-python = ">=3.10"
34
36
  dependencies = [
35
37
  'Django>=4.2',
36
38
  ]
37
39
 
38
-
39
-
40
-
41
- [project.optional-dependencies]
40
+ [dependency-groups]
42
41
  dev = [
43
- 'typer~=0.12',
44
- 'pytest-django~=4.9',
45
- 'pytest-mock~=3.14',
46
- 'coverage~=7.6',
47
- 'pre-commit~=4.2',
48
- 'ruff~=0.11',
49
- 'sphinx~=7.1',
50
- 'sphinx-rtd-theme~=2.0',
51
- 'm2r2==0.3.3.post2',
52
- 'mistune<2.0.0',
53
- 'flit~=3.12',
54
- 'keyring~=25.6',
42
+ 'typer~=0.19',
43
+ 'pytest-cov~=7.0',
44
+ 'pytest-django~=4.11',
45
+ 'pytest-mock~=3.15',
46
+ 'pre-commit~=4.3',
47
+ 'sphinx~=7.4',
48
+ 'sphinx-rtd-theme~=3.0',
49
+ 'm2r2~=0.3',
50
+ 'uv~=0.9',
55
51
  'ambient-package-update',
56
52
  'unittest-parametrize~=1.4',
57
53
  ]
58
54
 
59
- [tool.flit.module]
60
- name = "django_dynamic_admin_forms"
61
-
62
55
  [project.urls]
63
56
  'Homepage' = 'https://github.com/ambient-innovation/django-dynamic-admin/'
64
57
  'Documentation' = 'https://django-dynamic-admin-forms.readthedocs.io/en/latest/index.html'
@@ -95,6 +88,7 @@ lint.select = [
95
88
  "ERA", # Commented out code
96
89
  "INP", # Ban PEP-420 implicit namespace packages
97
90
  "C90", # McCabe code complexity
91
+ "FURB", # Refurbish Python code
98
92
  ]
99
93
  lint.ignore = [
100
94
  "RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
@@ -130,6 +124,7 @@ lint.fixable = [
130
124
  "ERA", # Commented out code
131
125
  "INP", # Ban PEP-420 implicit namespace packages
132
126
  "C90", # McCabe code complexity
127
+ "FURB", # Refurbish Python code
133
128
  ]
134
129
  lint.unfixable = []
135
130
 
@@ -163,8 +158,8 @@ line-length = 120
163
158
  # Allow unused variables when underscore-prefixed.
164
159
  lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
165
160
 
166
- # Assume Python 3.12
167
- target-version = "py312"
161
+ # Assume Python 3.13
162
+ target-version = "py313"
168
163
 
169
164
  [tool.ruff.format]
170
165
  # Like Black, use double quotes for strings.
@@ -202,25 +197,34 @@ line-ending = "auto"
202
197
  ]
203
198
 
204
199
  [tool.tox]
205
- legacy_tox_ini = """
206
- [testenv]
200
+ requires = ["tox>=4", "tox-uv>=1.0.0"]
201
+ env_list = ["django42", "django51", "django52", ]
202
+
203
+ [tool.tox.env_run_base]
207
204
  # Django deprecation overview: https://www.djangoproject.com/download/
208
- deps =
209
- django42: Django==4.2.*
210
- django51: Django==5.1.*
211
- django52: Django==5.2.*
212
- extras = dev,
213
- commands =
214
- coverage run -m pytest --ds settings tests
205
+ package = "wheel"
206
+ wheel_build_env = ".pkg"
207
+ runner = "uv-venv-lock-runner"
208
+ dependency_groups = ["dev", ]
209
+ commands = [
210
+ ["pytest", "--cov=django_dynamic_admin_forms", "--cov-report=term", "--cov-report=xml", "--ds", "settings", "tests"]
211
+ ]
212
+
213
+ [tool.tox.env.django42]
214
+ deps = ["Django==4.2.*"]
215
+
216
+ [tool.tox.env.django51]
217
+ deps = ["Django==5.1.*"]
215
218
 
216
- [gh-actions]
217
- python =
218
- 3.9: py39
219
- 3.10: py310
220
- 3.11: py311
221
- 3.12: py312
222
- 3.13: py313
223
- """
219
+ [tool.tox.env.django52]
220
+ deps = ["Django==5.2.*"]
221
+
222
+ [tool.tox.gh_actions.python]
223
+ "3.10" = "py310"
224
+ "3.11" = "py311"
225
+ "3.12" = "py312"
226
+ "3.13" = "py313"
227
+ "3.14" = "py314"
224
228
 
225
229
  [tool.pytest.ini_options]
226
230
  python_files = [
@@ -262,3 +266,6 @@ source = [
262
266
  "django_dynamic_admin_forms",
263
267
  ".tox/**/site-packages",
264
268
  ]
269
+
270
+ [tool.hatch.version]
271
+ path = "django_dynamic_admin_forms/__init__.py"
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+ pip install -U uv
3
+ uv sync --frozen --group dev
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+ uv build
3
+ uv publish --publish-url https://test.pypi.org/legacy/
4
+ uv publish
@@ -0,0 +1,2 @@
1
+ pip install -U uv
2
+ uv sync --frozen --group dev
@@ -0,0 +1,3 @@
1
+ uv build
2
+ uv publish --publish-url https://test.pypi.org/legacy/
3
+ uv publish