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.
Files changed (39) hide show
  1. drf_subscription-0.1.0.dist-info/METADATA +76 -0
  2. drf_subscription-0.1.0.dist-info/RECORD +39 -0
  3. drf_subscription-0.1.0.dist-info/WHEEL +4 -0
  4. drf_subscription-0.1.0.dist-info/licenses/LICENSE.md +674 -0
  5. subscription/__init__.py +3 -0
  6. subscription/admin.py +181 -0
  7. subscription/api.py +48 -0
  8. subscription/apps.py +8 -0
  9. subscription/fixtures/auth.json +30 -0
  10. subscription/fixtures/contenttypes.json +18 -0
  11. subscription/fixtures/subscription.json +93 -0
  12. subscription/managers.py +194 -0
  13. subscription/middleware.py +23 -0
  14. subscription/migrations/0001_initial.py +72 -0
  15. subscription/migrations/__init__.py +0 -0
  16. subscription/models/__init__.py +10 -0
  17. subscription/models/abstract.py +173 -0
  18. subscription/models/decorators.py +35 -0
  19. subscription/models/mixins.py +51 -0
  20. subscription/models/resource.py +135 -0
  21. subscription/models/subscription.py +119 -0
  22. subscription/serializers.py +37 -0
  23. subscription/signals.py +46 -0
  24. subscription/tests/__init__.py +0 -0
  25. subscription/tests/models/__init__.py +0 -0
  26. subscription/tests/models/test_mixins.py +66 -0
  27. subscription/tests/models/test_resource.py +8 -0
  28. subscription/tests/models/test_subscription.py +159 -0
  29. subscription/tests/test_api.py +44 -0
  30. subscription/tests/test_integration.py +0 -0
  31. subscription/tests/test_managers.py +21 -0
  32. subscription/tests/test_middleware.py +56 -0
  33. subscription/tests/test_serializers.py +32 -0
  34. subscription/tests/test_signals.py +11 -0
  35. subscription/tests/test_validators.py +36 -0
  36. subscription/tests/test_views.py +0 -0
  37. subscription/tests/utils.py +33 -0
  38. subscription/validators.py +24 -0
  39. 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
+ [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
29
+ [![CI](https://github.com/gmork2/drf-subscription/actions/workflows/ci.yml/badge.svg)](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,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.33.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any