django-queuebie 0.3.4__tar.gz → 0.3.6__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 (79) hide show
  1. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.ambient-package-update/metadata.py +1 -0
  2. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.github/workflows/ci.yml +11 -9
  3. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.gitignore +4 -1
  4. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.pre-commit-config.yaml +6 -6
  5. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.readthedocs.yaml +1 -1
  6. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/CHANGES.md +6 -0
  7. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/CONTRIBUTING.md +4 -6
  8. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/PKG-INFO +70 -49
  9. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/README.md +37 -25
  10. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/conf.py +0 -1
  11. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/manage.py +1 -1
  12. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/pyproject.toml +50 -40
  13. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/__init__.py +1 -1
  14. django_queuebie-0.3.6/scripts/unix/install_requirements.sh +3 -0
  15. django_queuebie-0.3.6/scripts/unix/publish_to_pypi.sh +4 -0
  16. django_queuebie-0.3.6/scripts/windows/install_requirements.ps1 +2 -0
  17. django_queuebie-0.3.6/scripts/windows/publish_to_pypi.ps1 +3 -0
  18. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_database_blocker.py +1 -1
  19. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_registry.py +4 -3
  20. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_runner.py +3 -4
  21. django_queuebie-0.3.6/uv.lock +997 -0
  22. django_queuebie-0.3.4/scripts/unix/install_requirements.sh +0 -4
  23. django_queuebie-0.3.4/scripts/unix/publish_to_pypi.sh +0 -3
  24. django_queuebie-0.3.4/scripts/windows/install_requirements.ps1 +0 -3
  25. django_queuebie-0.3.4/scripts/windows/publish_to_pypi.ps1 +0 -2
  26. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.ambient-package-update/templates/snippets/content.tpl +0 -0
  27. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.ambient-package-update/templates/snippets/tagline.tpl +0 -0
  28. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/.editorconfig +0 -0
  29. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/LICENSE +0 -0
  30. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/LICENSE.md +0 -0
  31. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/MANIFEST.in +0 -0
  32. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/SECURITY.md +0 -0
  33. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/Makefile +0 -0
  34. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/features/changelog.rst +0 -0
  35. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/features/getting-started.md +0 -0
  36. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/features/introduction.md +0 -0
  37. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/features/motivation.md +0 -0
  38. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/features/settings.md +0 -0
  39. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/features/setup.md +0 -0
  40. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/index.rst +0 -0
  41. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/docs/make.bat +0 -0
  42. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/apps.py +0 -0
  43. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/database_blocker.py +0 -0
  44. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/exceptions.py +0 -0
  45. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/logger.py +0 -0
  46. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/management/__init__.py +0 -0
  47. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/management/commands/__init__.py +0 -0
  48. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/management/commands/clear_queuebie_registry.py +0 -0
  49. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/messages.py +0 -0
  50. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/registry.py +0 -0
  51. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/runner.py +0 -0
  52. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/settings.py +0 -0
  53. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/queuebie/utils.py +0 -0
  54. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/settings.py +0 -0
  55. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/__init__.py +0 -0
  56. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/handlers/__init__.py +0 -0
  57. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/handlers/commands/__init__.py +0 -0
  58. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/handlers/commands/testapp.py +0 -0
  59. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/handlers/events/__init__.py +0 -0
  60. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/handlers/events/testapp.py +0 -0
  61. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/messages/__init__.py +0 -0
  62. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/messages/commands/__init__.py +0 -0
  63. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/messages/commands/my_commands.py +0 -0
  64. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/messages/commands/other_commands.py +0 -0
  65. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/messages/events/__init__.py +0 -0
  66. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/messages/events/my_events.py +0 -0
  67. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/testapp/urls.py +0 -0
  68. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/__init__.py +0 -0
  69. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/helpers/__init__.py +0 -0
  70. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/helpers/commands.py +0 -0
  71. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/helpers/events.py +0 -0
  72. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/management_commands/__init__.py +0 -0
  73. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/management_commands/test_clear_queuebie_registry.py +0 -0
  74. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_apps.py +0 -0
  75. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_exceptions.py +0 -0
  76. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_logger.py +0 -0
  77. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_messages.py +0 -0
  78. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_settings.py +0 -0
  79. {django_queuebie-0.3.4 → django_queuebie-0.3.6}/tests/test_utils.py +0 -0
@@ -27,6 +27,7 @@ METADATA = PackageMetadata(
27
27
  development_status=DEPLOYMENT_STATUS_BETA,
28
28
  has_migrations=False,
29
29
  main_branch="main",
30
+ claim="A simple and synchronous message queue for commands and events for Django",
30
31
  readme_content=ReadmeContent(uses_internationalisation=True),
31
32
  dependencies=[
32
33
  f"Django>={SUPPORTED_DJANGO_VERSIONS[0]}",
@@ -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,7 +23,6 @@ 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
@@ -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,11 +12,11 @@ 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
@@ -26,13 +26,13 @@ repos:
26
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,11 @@
1
1
  # Changelog
2
2
 
3
+ **0.3.6** (2025-10-10)
4
+ * Maintenance updates via ambient-package-update
5
+
6
+ **0.3.5** (2025-10-09)
7
+ * Maintenance updates via ambient-package-update
8
+
3
9
  **0.3.4** (2025-05-29)
4
10
  * Maintenance updates via ambient-package-update
5
11
 
@@ -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-queuebie`
67
+ * Navigate to `queuebie`
70
68
  * `python manage.py makemessages -l de`
71
69
  * Have a look at the new/changed files within `queuebie/locale`
72
70
 
73
71
  How to compile translation files:
74
72
 
75
- * Navigate to `django-queuebie`
73
+ * Navigate to `queuebie`
76
74
  * `python manage.py compilemessages`
77
75
  * Have a look at the new/changed files within `queuebie/locale`
@@ -1,9 +1,36 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: django-queuebie
3
- Version: 0.3.4
3
+ Version: 0.3.6
4
4
  Summary: A simple and synchronous message queue for commands and events for Django
5
+ Project-URL: Homepage, https://github.com/ambient-innovation/django-queuebie/
6
+ Project-URL: Documentation, https://django-queuebie.readthedocs.io/en/latest/index.html
7
+ Project-URL: Maintained by, https://ambient.digital/
8
+ Project-URL: Bugtracker, https://github.com/ambient-innovation/django-queuebie/issues
9
+ Project-URL: Changelog, https://django-queuebie.readthedocs.io/en/latest/features/changelog.html
5
10
  Author-email: Ambient Digital <hello@ambient.digital>
6
- Description-Content-Type: text/markdown
11
+ License: MIT License
12
+
13
+ Copyright (c) 2025 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
33
+ License-File: LICENSE.md
7
34
  Classifier: Development Status :: 4 - Beta
8
35
  Classifier: Environment :: Web Environment
9
36
  Classifier: Framework :: Django
@@ -21,26 +48,9 @@ Classifier: Programming Language :: Python :: 3.11
21
48
  Classifier: Programming Language :: Python :: 3.12
22
49
  Classifier: Programming Language :: Python :: 3.13
23
50
  Classifier: Topic :: Utilities
24
- Requires-Dist: Django>=4.2
25
- Requires-Dist: typer~=0.12 ; extra == "dev"
26
- Requires-Dist: pytest-django~=4.9 ; extra == "dev"
27
- Requires-Dist: pytest-mock~=3.14 ; extra == "dev"
28
- Requires-Dist: coverage~=7.6 ; extra == "dev"
29
- Requires-Dist: pre-commit~=4.2 ; extra == "dev"
30
- Requires-Dist: ruff~=0.11 ; extra == "dev"
31
- Requires-Dist: sphinx~=7.1 ; extra == "dev"
32
- Requires-Dist: sphinx-rtd-theme~=2.0 ; extra == "dev"
33
- Requires-Dist: m2r2==0.3.3.post2 ; extra == "dev"
34
- Requires-Dist: mistune<2.0.0 ; extra == "dev"
35
- Requires-Dist: flit~=3.12 ; extra == "dev"
36
- Requires-Dist: keyring~=25.6 ; extra == "dev"
37
- Requires-Dist: ambient-package-update ; extra == "dev"
38
- Project-URL: Bugtracker, https://github.com/ambient-innovation/django-queuebie/issues
39
- Project-URL: Changelog, https://django-queuebie.readthedocs.io/en/latest/features/changelog.html
40
- Project-URL: Documentation, https://django-queuebie.readthedocs.io/en/latest/index.html
41
- Project-URL: Homepage, https://github.com/ambient-innovation/django-queuebie/
42
- Project-URL: Maintained by, https://ambient.digital/
43
- Provides-Extra: dev
51
+ Requires-Python: >=3.10
52
+ Requires-Dist: django>=4.2
53
+ Description-Content-Type: text/markdown
44
54
 
45
55
  [![PyPI release](https://img.shields.io/pypi/v/django-queuebie.svg)](https://pypi.org/project/django-queuebie/)
46
56
  [![Downloads](https://static.pepy.tech/badge/django-queuebie)](https://pepy.tech/project/django-queuebie)
@@ -51,11 +61,9 @@ Provides-Extra: dev
51
61
 
52
62
  A simple and synchronous message queue for commands and events for Django.
53
63
 
54
- * [PyPI](https://pypi.org/project/django-queuebie/)
55
- * [GitHub](https://github.com/ambient-innovation/django-queuebie)
56
- * [Full documentation](https://django-queuebie.readthedocs.io/en/latest/index.html)
57
- * Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
64
+ [PyPI](https://pypi.org/project/django-queuebie/) | [GitHub](https://github.com/ambient-innovation/django-queuebie) | [Full documentation](https://django-queuebie.readthedocs.io/en/latest/index.html)
58
65
 
66
+ Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
59
67
 
60
68
  ## Features
61
69
 
@@ -117,20 +125,18 @@ handle_message(
117
125
 
118
126
  `pip install django_queuebie`
119
127
 
120
- or via pipenv:
128
+ or via uv:
121
129
 
122
- `pipenv install django_queuebie`
130
+ `uv add django_queuebie`
123
131
 
124
132
  - Add module to `INSTALLED_APPS` within the main django `settings.py`:
125
133
 
126
- ```python
127
- INSTALLED_APPS = (
128
- # ...
129
- "queuebie",
130
- )
131
- ```
132
-
133
-
134
+ ```python
135
+ INSTALLED_APPS = (
136
+ # ...
137
+ "queuebie",
138
+ )
139
+ ```
134
140
 
135
141
  ### Publish to ReadTheDocs.io
136
142
 
@@ -138,27 +144,43 @@ handle_message(
138
144
  - Trigger new build at ReadTheDocs.io (follow instructions in admin panel at RTD) if the GitHub webhook is not yet set
139
145
  up.
140
146
 
141
- ### Publish to PyPi
147
+ ### Preparation and building
148
+
149
+ This package uses [uv](https://github.com/astral-sh/uv) for dependency management and building.
142
150
 
143
151
  - Update documentation about new/changed functionality
144
152
 
145
- - Update the `Changelog`
153
+ - Update the `CHANGES.md`
146
154
 
147
155
  - Increment version in main `__init__.py`
148
156
 
149
- - Create pull request / merge to main
157
+ - Create pull request / merge to "main"
150
158
 
151
- - This project uses the flit package to publish to PyPI. Thus, publishing should be as easy as running:
152
- ```
153
- flit publish
159
+ - This project uses uv to publish to PyPI. This will create distribution files in the `dist/` directory.
160
+
161
+ ```bash
162
+ uv build
154
163
  ```
155
164
 
156
- To publish to TestPyPI use the following to ensure that you have set up your .pypirc as
157
- shown [here](https://flit.readthedocs.io/en/latest/upload.html#using-pypirc) and use the following command:
165
+ ### Publishing to PyPI
158
166
 
159
- ```
160
- flit publish --repository testpypi
161
- ```
167
+ To publish to the production PyPI:
168
+
169
+ ```bash
170
+ uv publish
171
+ ```
172
+
173
+ To publish to TestPyPI first (recommended for testing):
174
+
175
+ ```bash
176
+ uv publish --publish-url https://test.pypi.org/legacy/
177
+ ```
178
+
179
+ You can then test the installation from TestPyPI:
180
+
181
+ ```bash
182
+ uv pip install --index-url https://test.pypi.org/simple/ ambient-package-update
183
+ ```
162
184
 
163
185
  ### Maintenance
164
186
 
@@ -168,4 +190,3 @@ configuration and setup files. It works similar to well-known updaters like `pyu
168
190
 
169
191
  To run an update, refer to the [documentation page](https://pypi.org/project/ambient-package-update/)
170
192
  of the "ambient-package-update".
171
-
@@ -7,11 +7,9 @@
7
7
 
8
8
  A simple and synchronous message queue for commands and events for Django.
9
9
 
10
- * [PyPI](https://pypi.org/project/django-queuebie/)
11
- * [GitHub](https://github.com/ambient-innovation/django-queuebie)
12
- * [Full documentation](https://django-queuebie.readthedocs.io/en/latest/index.html)
13
- * Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
10
+ [PyPI](https://pypi.org/project/django-queuebie/) | [GitHub](https://github.com/ambient-innovation/django-queuebie) | [Full documentation](https://django-queuebie.readthedocs.io/en/latest/index.html)
14
11
 
12
+ Creator & Maintainer: [Ambient Digital](https://ambient.digital/)
15
13
 
16
14
  ## Features
17
15
 
@@ -73,20 +71,18 @@ handle_message(
73
71
 
74
72
  `pip install django_queuebie`
75
73
 
76
- or via pipenv:
74
+ or via uv:
77
75
 
78
- `pipenv install django_queuebie`
76
+ `uv add django_queuebie`
79
77
 
80
78
  - Add module to `INSTALLED_APPS` within the main django `settings.py`:
81
79
 
82
- ```python
83
- INSTALLED_APPS = (
84
- # ...
85
- "queuebie",
86
- )
87
- ```
88
-
89
-
80
+ ```python
81
+ INSTALLED_APPS = (
82
+ # ...
83
+ "queuebie",
84
+ )
85
+ ```
90
86
 
91
87
  ### Publish to ReadTheDocs.io
92
88
 
@@ -94,27 +90,43 @@ handle_message(
94
90
  - Trigger new build at ReadTheDocs.io (follow instructions in admin panel at RTD) if the GitHub webhook is not yet set
95
91
  up.
96
92
 
97
- ### Publish to PyPi
93
+ ### Preparation and building
94
+
95
+ This package uses [uv](https://github.com/astral-sh/uv) for dependency management and building.
98
96
 
99
97
  - Update documentation about new/changed functionality
100
98
 
101
- - Update the `Changelog`
99
+ - Update the `CHANGES.md`
102
100
 
103
101
  - Increment version in main `__init__.py`
104
102
 
105
- - Create pull request / merge to main
103
+ - Create pull request / merge to "main"
106
104
 
107
- - This project uses the flit package to publish to PyPI. Thus, publishing should be as easy as running:
108
- ```
109
- flit publish
105
+ - This project uses uv to publish to PyPI. This will create distribution files in the `dist/` directory.
106
+
107
+ ```bash
108
+ uv build
110
109
  ```
111
110
 
112
- To publish to TestPyPI use the following to ensure that you have set up your .pypirc as
113
- shown [here](https://flit.readthedocs.io/en/latest/upload.html#using-pypirc) and use the following command:
111
+ ### Publishing to PyPI
114
112
 
115
- ```
116
- flit publish --repository testpypi
117
- ```
113
+ To publish to the production PyPI:
114
+
115
+ ```bash
116
+ uv publish
117
+ ```
118
+
119
+ To publish to TestPyPI first (recommended for testing):
120
+
121
+ ```bash
122
+ uv publish --publish-url https://test.pypi.org/legacy/
123
+ ```
124
+
125
+ You can then test the installation from TestPyPI:
126
+
127
+ ```bash
128
+ uv pip install --index-url https://test.pypi.org/simple/ ambient-package-update
129
+ ```
118
130
 
119
131
  ### Maintenance
120
132
 
@@ -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( # noqa: TRY003
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-queuebie"
@@ -27,35 +27,28 @@ classifiers = [
27
27
  "Programming Language :: Python :: 3.13",
28
28
  "Topic :: Utilities",
29
29
  ]
30
- dynamic = ["version", "description"]
30
+ dynamic = ["version"]
31
+ description = "A simple and synchronous message queue for commands and events for Django"
31
32
  license = {"file" = "LICENSE.md"}
33
+ requires-python = ">=3.10"
32
34
  dependencies = [
33
35
  'Django>=4.2',
34
36
  ]
35
37
 
36
-
37
-
38
-
39
- [project.optional-dependencies]
38
+ [dependency-groups]
40
39
  dev = [
41
- 'typer~=0.12',
42
- 'pytest-django~=4.9',
43
- 'pytest-mock~=3.14',
44
- 'coverage~=7.6',
45
- 'pre-commit~=4.2',
46
- 'ruff~=0.11',
47
- 'sphinx~=7.1',
48
- 'sphinx-rtd-theme~=2.0',
49
- 'm2r2==0.3.3.post2',
50
- 'mistune<2.0.0',
51
- 'flit~=3.12',
52
- 'keyring~=25.6',
40
+ 'typer~=0.19',
41
+ 'pytest-cov~=7.0',
42
+ 'pytest-django~=4.11',
43
+ 'pytest-mock~=3.15',
44
+ 'pre-commit~=4.3',
45
+ 'sphinx~=7.4',
46
+ 'sphinx-rtd-theme~=3.0',
47
+ 'm2r2~=0.3',
48
+ 'uv~=0.9',
53
49
  'ambient-package-update',
54
50
  ]
55
51
 
56
- [tool.flit.module]
57
- name = "queuebie"
58
-
59
52
  [project.urls]
60
53
  'Homepage' = 'https://github.com/ambient-innovation/django-queuebie/'
61
54
  'Documentation' = 'https://django-queuebie.readthedocs.io/en/latest/index.html'
@@ -92,6 +85,7 @@ lint.select = [
92
85
  "ERA", # Commented out code
93
86
  "INP", # Ban PEP-420 implicit namespace packages
94
87
  "C90", # McCabe code complexity
88
+ "FURB", # Refurbish Python code
95
89
  ]
96
90
  lint.ignore = [
97
91
  "TD002", # Missing author in TODO
@@ -127,6 +121,7 @@ lint.fixable = [
127
121
  "ERA", # Commented out code
128
122
  "INP", # Ban PEP-420 implicit namespace packages
129
123
  "C90", # McCabe code complexity
124
+ "FURB", # Refurbish Python code
130
125
  ]
131
126
  lint.unfixable = []
132
127
 
@@ -160,8 +155,8 @@ line-length = 120
160
155
  # Allow unused variables when underscore-prefixed.
161
156
  lint.dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
162
157
 
163
- # Assume Python 3.12
164
- target-version = "py312"
158
+ # Assume Python 3.13
159
+ target-version = "py313"
165
160
 
166
161
  [tool.ruff.format]
167
162
  # Like Black, use double quotes for strings.
@@ -199,24 +194,33 @@ line-ending = "auto"
199
194
  ]
200
195
 
201
196
  [tool.tox]
202
- legacy_tox_ini = """
203
- [testenv]
197
+ requires = ["tox>=4", "tox-uv>=1.0.0"]
198
+ env_list = ["django42", "django51", "django52", ]
199
+
200
+ [tool.tox.env_run_base]
204
201
  # Django deprecation overview: https://www.djangoproject.com/download/
205
- deps =
206
- django42: Django==4.2.*
207
- django51: Django==5.1.*
208
- django52: Django==5.2.*
209
- extras = dev,
210
- commands =
211
- coverage run -m pytest --ds settings tests
202
+ package = "wheel"
203
+ wheel_build_env = ".pkg"
204
+ runner = "uv-venv-lock-runner"
205
+ dependency_groups = ["dev", ]
206
+ commands = [
207
+ ["pytest", "--cov=queuebie", "--cov-report=term", "--cov-report=xml", "--ds", "settings", "tests"]
208
+ ]
212
209
 
213
- [gh-actions]
214
- python =
215
- 3.10: py310
216
- 3.11: py311
217
- 3.12: py312
218
- 3.13: py313
219
- """
210
+ [tool.tox.env.django42]
211
+ deps = ["Django==4.2.*"]
212
+
213
+ [tool.tox.env.django51]
214
+ deps = ["Django==5.1.*"]
215
+
216
+ [tool.tox.env.django52]
217
+ deps = ["Django==5.2.*"]
218
+
219
+ [tool.tox.gh_actions.python]
220
+ "3.10" = "py310"
221
+ "3.11" = "py311"
222
+ "3.12" = "py312"
223
+ "3.13" = "py313"
220
224
 
221
225
  [tool.pytest.ini_options]
222
226
  python_files = [
@@ -258,3 +262,9 @@ source = [
258
262
  "queuebie",
259
263
  ".tox/**/site-packages",
260
264
  ]
265
+
266
+ [tool.hatch.build.targets.wheel]
267
+ packages = ["queuebie"]
268
+
269
+ [tool.hatch.version]
270
+ path = "queuebie/__init__.py"
@@ -1,6 +1,6 @@
1
1
  """A simple and synchronous message queue for commands and events for Django"""
2
2
 
3
- __version__ = "0.3.4"
3
+ __version__ = "0.3.6"
4
4
 
5
5
  from queuebie.registry import MessageRegistry
6
6
 
@@ -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
@@ -5,7 +5,7 @@ from queuebie.database_blocker import BlockDatabaseAccess, DatabaseAccessDeniedE
5
5
 
6
6
 
7
7
  def test_block_database_access_use_db():
8
- with pytest.raises(DatabaseAccessDeniedError, match="Database access is disabled in this context."):
8
+ with pytest.raises(DatabaseAccessDeniedError, match=r"Database access is disabled in this context."):
9
9
  with BlockDatabaseAccess():
10
10
  User.objects.get(pk=1)
11
11