drf-subscription 0.1.0__py3-none-any.whl
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.
- drf_subscription-0.1.0.dist-info/METADATA +76 -0
- drf_subscription-0.1.0.dist-info/RECORD +39 -0
- drf_subscription-0.1.0.dist-info/WHEEL +4 -0
- drf_subscription-0.1.0.dist-info/licenses/LICENSE.md +674 -0
- subscription/__init__.py +3 -0
- subscription/admin.py +181 -0
- subscription/api.py +48 -0
- subscription/apps.py +8 -0
- subscription/fixtures/auth.json +30 -0
- subscription/fixtures/contenttypes.json +18 -0
- subscription/fixtures/subscription.json +93 -0
- subscription/managers.py +194 -0
- subscription/middleware.py +23 -0
- subscription/migrations/0001_initial.py +72 -0
- subscription/migrations/__init__.py +0 -0
- subscription/models/__init__.py +10 -0
- subscription/models/abstract.py +173 -0
- subscription/models/decorators.py +35 -0
- subscription/models/mixins.py +51 -0
- subscription/models/resource.py +135 -0
- subscription/models/subscription.py +119 -0
- subscription/serializers.py +37 -0
- subscription/signals.py +46 -0
- subscription/tests/__init__.py +0 -0
- subscription/tests/models/__init__.py +0 -0
- subscription/tests/models/test_mixins.py +66 -0
- subscription/tests/models/test_resource.py +8 -0
- subscription/tests/models/test_subscription.py +159 -0
- subscription/tests/test_api.py +44 -0
- subscription/tests/test_integration.py +0 -0
- subscription/tests/test_managers.py +21 -0
- subscription/tests/test_middleware.py +56 -0
- subscription/tests/test_serializers.py +32 -0
- subscription/tests/test_signals.py +11 -0
- subscription/tests/test_validators.py +36 -0
- subscription/tests/test_views.py +0 -0
- subscription/tests/utils.py +33 -0
- subscription/validators.py +24 -0
- subscription/views.py +3 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: drf-subscription
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A generic subscription app for Django.
|
|
5
|
+
Project-URL: Repository, https://github.com/gmork2/drf-subscription
|
|
6
|
+
Author: gmork2
|
|
7
|
+
License-Expression: GPL-3.0-only
|
|
8
|
+
License-File: LICENSE.md
|
|
9
|
+
Keywords: django,djangorestframework,drf,subscription
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Framework :: Django
|
|
12
|
+
Classifier: Framework :: Django :: 5.1
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Requires-Dist: django<6,>=5.1
|
|
23
|
+
Requires-Dist: djangorestframework<4,>=3.15
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
# drf-subscription
|
|
27
|
+
|
|
28
|
+
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
29
|
+
[](https://github.com/gmork2/drf-subscription/actions/workflows/ci.yml)
|
|
30
|
+
|
|
31
|
+
A generic subscription app for django.
|
|
32
|
+
|
|
33
|
+
## Installation
|
|
34
|
+
|
|
35
|
+
Dependencies are managed exclusively with [uv](https://docs.astral.sh/uv/):
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
uv sync
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## REST API
|
|
42
|
+
|
|
43
|
+
The app ships a DRF router exposing these endpoints (admin-only by default):
|
|
44
|
+
|
|
45
|
+
- `/api/subscriptions/`
|
|
46
|
+
- `/api/subscription-lines/`
|
|
47
|
+
- `/api/subscription-events/`
|
|
48
|
+
- `/api/resources/`
|
|
49
|
+
|
|
50
|
+
## Versioning
|
|
51
|
+
|
|
52
|
+
This project follows [Semantic Versioning](https://semver.org/). The version is
|
|
53
|
+
kept in `subscription/__init__.py` (`__version__`) and read by `pyproject.toml`.
|
|
54
|
+
To bump it:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
uv run python scripts/bump_version.py patch # or minor / major
|
|
58
|
+
uv run python scripts/bump_version.py patch --tag # and create the git tag vX.Y.Z
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Release
|
|
62
|
+
|
|
63
|
+
Publishing to PyPI is automatic: when a version change in `subscription/__init__.py`
|
|
64
|
+
is pushed to the default branch, GitHub Actions builds and publishes it to PyPI
|
|
65
|
+
(via trusted publishing).
|
|
66
|
+
|
|
67
|
+
You can trigger a release in two ways:
|
|
68
|
+
|
|
69
|
+
1. **From GitHub** — go to **Actions → Bump version → Run workflow** and choose
|
|
70
|
+
`patch`, `minor` or `major`. It bumps the version, commits, tags, pushes and
|
|
71
|
+
publishes.
|
|
72
|
+
2. **Locally** — bump and push; publication happens automatically:
|
|
73
|
+
|
|
74
|
+
```sh
|
|
75
|
+
uv run python scripts/bump_version.py patch --commit --tag --push
|
|
76
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
subscription/__init__.py,sha256=09tY0jARk7rnh0bxz8ooXNyuDMkkKoZqc2aYH5Ko37U,86
|
|
2
|
+
subscription/admin.py,sha256=aN5NYUB2xT4Tu5XjZHDmeXkhBsPV8KDOcKGRslxQyLw,5557
|
|
3
|
+
subscription/api.py,sha256=18D01jTs7Mzl_Zhad6b1YVAL7IQfefoQB0Q0-cWwfN0,1553
|
|
4
|
+
subscription/apps.py,sha256=kRZTsR6nu0FTmvOrKULWPVFZsMdaHcYOE6ND-8_3Pf0,157
|
|
5
|
+
subscription/managers.py,sha256=aaV9K-RKFEEXv4Ro9W2OAqFYmuj7NWOmcRM56Mls3G0,5833
|
|
6
|
+
subscription/middleware.py,sha256=TApXBmEsHBEBskFpKRhj3o5mLnxKu1EGnlxhXO0Vb6c,618
|
|
7
|
+
subscription/serializers.py,sha256=D9_IyPNPBDe0zoKQDHphB12lllmcFLYbPiju710tzsI,976
|
|
8
|
+
subscription/signals.py,sha256=Co4K3JGyEYRGQM7cWprAleZRim-8ghWcbpcewyU85DU,1193
|
|
9
|
+
subscription/validators.py,sha256=UocccCRV_SCU7NvZbHWzzMcv67jimwRyj1qxxK-7Ezo,852
|
|
10
|
+
subscription/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
|
|
11
|
+
subscription/fixtures/auth.json,sha256=ONbtbYkq5cncMuS6-c9_uzk8qNsLY3DKIL5tqDdNxew,629
|
|
12
|
+
subscription/fixtures/contenttypes.json,sha256=50VGpHQ9zCxTrhGd0shBDn9klO0R_5biVg58C3aiVEc,272
|
|
13
|
+
subscription/fixtures/subscription.json,sha256=uCjDVHtsccY6PqH9zV5U6jVfWg_n8BFpWNAf6rHcuXE,2272
|
|
14
|
+
subscription/migrations/0001_initial.py,sha256=3nqyaVpon-LoT0mAt_rnS-BEXUEvs5axavzX2g4cAKU,3493
|
|
15
|
+
subscription/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
subscription/models/__init__.py,sha256=Tr_qFffqeGSxo_JiQFKP2g-_zMbHwI3OL8KD3yr6DRY,311
|
|
17
|
+
subscription/models/abstract.py,sha256=Ij3M4v5Tw0QXb6n4r7IWl6I9Q586WihrtPyhraQ9NOU,4837
|
|
18
|
+
subscription/models/decorators.py,sha256=6XtaEwA5f9dckd01ig9Gqhhdio2tbESMKkFGs6Fl3DQ,873
|
|
19
|
+
subscription/models/mixins.py,sha256=UszVfgTcN25LrX5S1KkeOroe2mLRRVho7HTLXlhKtzc,1211
|
|
20
|
+
subscription/models/resource.py,sha256=yEcnPuE49LgcFwRoSvuiTHabON96UIe4nbCJu8QsGKE,4307
|
|
21
|
+
subscription/models/subscription.py,sha256=raFQwU91kr4Gv7oZ4fqx7XKVJuXxa_kl8ZQ3JpmSQlI,3503
|
|
22
|
+
subscription/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
+
subscription/tests/test_api.py,sha256=p14aRkQzXhb_DRzLRsDIOrkzIwv4psup_XZ9kdlJnLg,1227
|
|
24
|
+
subscription/tests/test_integration.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
subscription/tests/test_managers.py,sha256=UgAkpFQgWiF6s5xeReL0qHaorrXc4nLjUpoh-O-P8lw,393
|
|
26
|
+
subscription/tests/test_middleware.py,sha256=NRLTpxiutM2MOcmMS_9-cmP0E58qGQvv7G3zR7wwDF4,2027
|
|
27
|
+
subscription/tests/test_serializers.py,sha256=UP1GKsqc5GXo-VyKdCx_0v-qbxFwFVOovsARTlf7VRo,1167
|
|
28
|
+
subscription/tests/test_signals.py,sha256=p5mY2DcgnfnNc6L3uiflMqq61bVWBFBmSO17FZ18cKI,208
|
|
29
|
+
subscription/tests/test_validators.py,sha256=JqCWULydyrhk_xAbjHV0JfVQ84QcjViq9qW6qEcW-Ag,1426
|
|
30
|
+
subscription/tests/test_views.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
subscription/tests/utils.py,sha256=cmq2Vl-9uYZ5FciJ0DOjURN-BkAZIFFLRwkNfrkvHcA,739
|
|
32
|
+
subscription/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
+
subscription/tests/models/test_mixins.py,sha256=psyVWGD2vTJUlMrdNX_uil8hHsPmbz70OZMI08_cysg,2656
|
|
34
|
+
subscription/tests/models/test_resource.py,sha256=evKphsJbgDHxmI5lpdEJhx7FvRycpV6kCmxEgz3aePE,233
|
|
35
|
+
subscription/tests/models/test_subscription.py,sha256=gc1-sg_xOVlzT_-S2RGL-MfCNkVJmKXxl2kJX0XwhYQ,6492
|
|
36
|
+
drf_subscription-0.1.0.dist-info/METADATA,sha256=cwnwkE4HJhujqk5aN2DbYVBz-8TmwZydlWklIeDKmOk,2549
|
|
37
|
+
drf_subscription-0.1.0.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
|
|
38
|
+
drf_subscription-0.1.0.dist-info/licenses/LICENSE.md,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
39
|
+
drf_subscription-0.1.0.dist-info/RECORD,,
|