oxutils 0.1.1__py3-none-any.whl → 0.1.5__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 (56) hide show
  1. oxutils/__init__.py +1 -1
  2. oxutils/audit/settings.py +1 -16
  3. oxutils/audit/utils.py +22 -0
  4. oxutils/conf.py +1 -3
  5. oxutils/constants.py +2 -0
  6. oxutils/context/__init__.py +0 -0
  7. oxutils/context/site_name_processor.py +11 -0
  8. oxutils/currency/__init__.py +0 -0
  9. oxutils/currency/admin.py +57 -0
  10. oxutils/currency/apps.py +7 -0
  11. oxutils/currency/controllers.py +79 -0
  12. oxutils/currency/enums.py +7 -0
  13. oxutils/currency/migrations/0001_initial.py +41 -0
  14. oxutils/currency/migrations/__init__.py +0 -0
  15. oxutils/currency/models.py +100 -0
  16. oxutils/currency/schemas.py +38 -0
  17. oxutils/currency/tests.py +3 -0
  18. oxutils/currency/utils.py +69 -0
  19. oxutils/functions.py +5 -2
  20. oxutils/logger/receivers.py +0 -2
  21. oxutils/oxiliere/__init__.py +0 -0
  22. oxutils/oxiliere/admin.py +3 -0
  23. oxutils/oxiliere/apps.py +6 -0
  24. oxutils/oxiliere/cacheops.py +7 -0
  25. oxutils/oxiliere/caches.py +33 -0
  26. oxutils/oxiliere/controllers.py +36 -0
  27. oxutils/oxiliere/enums.py +10 -0
  28. oxutils/oxiliere/management/__init__.py +0 -0
  29. oxutils/oxiliere/management/commands/__init__.py +0 -0
  30. oxutils/oxiliere/management/commands/init_oxiliere_system.py +86 -0
  31. oxutils/oxiliere/middleware.py +97 -0
  32. oxutils/oxiliere/migrations/__init__.py +0 -0
  33. oxutils/oxiliere/models.py +55 -0
  34. oxutils/oxiliere/permissions.py +104 -0
  35. oxutils/oxiliere/schemas.py +65 -0
  36. oxutils/oxiliere/settings.py +17 -0
  37. oxutils/oxiliere/tests.py +3 -0
  38. oxutils/oxiliere/utils.py +76 -0
  39. oxutils/pdf/__init__.py +10 -0
  40. oxutils/pdf/printer.py +81 -0
  41. oxutils/pdf/utils.py +94 -0
  42. oxutils/pdf/views.py +208 -0
  43. oxutils/s3/storages.py +4 -4
  44. oxutils/settings.py +15 -13
  45. oxutils/users/__init__.py +0 -0
  46. oxutils/users/admin.py +3 -0
  47. oxutils/users/apps.py +6 -0
  48. oxutils/users/migrations/__init__.py +0 -0
  49. oxutils/users/models.py +88 -0
  50. oxutils/users/tests.py +3 -0
  51. oxutils/users/utils.py +15 -0
  52. {oxutils-0.1.1.dist-info → oxutils-0.1.5.dist-info}/METADATA +92 -11
  53. oxutils-0.1.5.dist-info/RECORD +88 -0
  54. {oxutils-0.1.1.dist-info → oxutils-0.1.5.dist-info}/WHEEL +1 -1
  55. oxutils/locale/fr/LC_MESSAGES/django.mo +0 -0
  56. oxutils-0.1.1.dist-info/RECORD +0 -45
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oxutils
3
- Version: 0.1.1
3
+ Version: 0.1.5
4
4
  Summary: Production-ready utilities for Django applications in the Oxiliere ecosystem
5
5
  Keywords: django,utilities,jwt,s3,audit,logging,celery,structlog
6
6
  Author: Edimedia Mutoke
@@ -13,7 +13,6 @@ Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.11
17
16
  Classifier: Programming Language :: Python :: 3.12
18
17
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
18
  Classifier: Topic :: Internet :: WWW/HTTP
@@ -22,7 +21,6 @@ Requires-Dist: celery>=5.5.3
22
21
  Requires-Dist: cryptography>=46.0.3
23
22
  Requires-Dist: django-auditlog>=3.3.0
24
23
  Requires-Dist: django-celery-results>=2.6.0
25
- Requires-Dist: django-cid>=3.0
26
24
  Requires-Dist: django-extensions>=4.1
27
25
  Requires-Dist: django-ninja>=1.5.0
28
26
  Requires-Dist: django-ninja-extra>=0.30.6
@@ -32,7 +30,7 @@ Requires-Dist: jwcrypto>=1.5.6
32
30
  Requires-Dist: pydantic-settings>=2.12.0
33
31
  Requires-Dist: pyjwt>=2.10.1
34
32
  Requires-Dist: requests>=2.32.5
35
- Requires-Python: >=3.11
33
+ Requires-Python: >=3.12
36
34
  Project-URL: Changelog, https://github.com/oxiliere/oxutils/blob/main/CHANGELOG.md
37
35
  Project-URL: Documentation, https://github.com/oxiliere/oxutils/tree/main/docs
38
36
  Project-URL: Homepage, https://github.com/oxiliere/oxutils
@@ -45,9 +43,9 @@ Description-Content-Type: text/markdown
45
43
  **Production-ready utilities for Django applications in the Oxiliere ecosystem.**
46
44
 
47
45
  [![PyPI version](https://img.shields.io/pypi/v/oxutils.svg)](https://pypi.org/project/oxutils/)
48
- [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/)
46
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/)
49
47
  [![Django 5.0+](https://img.shields.io/badge/django-5.0+-green.svg)](https://www.djangoproject.com/)
50
- [![Tests](https://img.shields.io/badge/tests-126%20passed-success.svg)](tests/)
48
+ [![Tests](https://img.shields.io/badge/tests-201%20passed-success.svg)](tests/)
51
49
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
52
50
  [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
53
51
 
@@ -55,11 +53,15 @@ Description-Content-Type: text/markdown
55
53
 
56
54
  - 🔐 **JWT Authentication** - RS256 with JWKS caching
57
55
  - 📦 **S3 Storage** - Static, media, private, and log backends
58
- - 📝 **Structured Logging** - JSON logs with correlation IDs
56
+ - 📝 **Structured Logging** - JSON logs with automatic request tracking
59
57
  - 🔍 **Audit System** - Change tracking with S3 export
60
58
  - ⚙️ **Celery Integration** - Pre-configured task processing
61
59
  - 🛠️ **Django Mixins** - UUID, timestamps, user tracking
62
60
  - ⚡ **Custom Exceptions** - Standardized API errors
61
+ - 🎨 **Context Processors** - Site name and domain for templates
62
+ - 💱 **Currency Module** - Multi-source exchange rates (BCC/OXR)
63
+ - 📄 **PDF Generation** - WeasyPrint integration for Django
64
+ - 🏢 **Multi-Tenant** - PostgreSQL schema-based isolation
63
65
 
64
66
  ---
65
67
 
@@ -82,12 +84,12 @@ uv add oxutils
82
84
  from oxutils.conf import UTILS_APPS, AUDIT_MIDDLEWARE
83
85
 
84
86
  INSTALLED_APPS = [
85
- *UTILS_APPS, # structlog, auditlog, cid, celery_results
87
+ *UTILS_APPS, # structlog, auditlog, celery_results
86
88
  # your apps...
87
89
  ]
88
90
 
89
91
  MIDDLEWARE = [
90
- *AUDIT_MIDDLEWARE, # CID, Auditlog, RequestMiddleware
92
+ *AUDIT_MIDDLEWARE, # RequestMiddleware, Auditlog
91
93
  # your middleware...
92
94
  ]
93
95
  ```
@@ -126,10 +128,22 @@ class Product(BaseModelMixin): # UUID + timestamps + is_active
126
128
  # Custom Exceptions
127
129
  from oxutils.exceptions import NotFoundException
128
130
  raise NotFoundException(detail="User not found")
131
+
132
+ # Context Processors
133
+ # settings.py
134
+ TEMPLATES = [{
135
+ 'OPTIONS': {
136
+ 'context_processors': [
137
+ 'oxutils.context.site_name_processor.site_name',
138
+ ],
139
+ },
140
+ }]
141
+ # Now {{ site_name }} and {{ site_domain }} are available in templates
129
142
  ```
130
143
 
131
144
  ## Documentation
132
145
 
146
+ ### Core Modules
133
147
  - **[Settings](docs/settings.md)** - Configuration reference
134
148
  - **[JWT](docs/jwt.md)** - Authentication
135
149
  - **[S3](docs/s3.md)** - Storage backends
@@ -138,9 +152,14 @@ raise NotFoundException(detail="User not found")
138
152
  - **[Mixins](docs/mixins.md)** - Model/service mixins
139
153
  - **[Celery](docs/celery.md)** - Task processing
140
154
 
155
+ ### Additional Modules
156
+ - **[Currency](docs/currency.md)** - Exchange rates management
157
+ - **[PDF](docs/pdf.md)** - PDF generation with WeasyPrint
158
+ - **[Oxiliere](docs/oxiliere.md)** - Multi-tenant architecture
159
+
141
160
  ## Requirements
142
161
 
143
- - Python 3.11+
162
+ - Python 3.12+
144
163
  - Django 5.0+
145
164
  - PostgreSQL (recommended)
146
165
 
@@ -150,7 +169,7 @@ raise NotFoundException(detail="User not found")
150
169
  git clone https://github.com/oxiliere/oxutils.git
151
170
  cd oxutils
152
171
  uv sync
153
- uv run pytest # 126 tests
172
+ uv run pytest # 201 tests passing, 4 skipped
154
173
  ```
155
174
 
156
175
  ### Creating Migrations
@@ -165,6 +184,19 @@ uv run make_migrations.py
165
184
 
166
185
  See [MIGRATIONS.md](MIGRATIONS.md) for detailed documentation.
167
186
 
187
+ ## Optional Dependencies
188
+
189
+ ```bash
190
+ # Multi-tenant support
191
+ uv add oxutils[oxiliere]
192
+
193
+ # PDF generation
194
+ uv add oxutils[pdf]
195
+
196
+ # Development tools
197
+ uv add oxutils[dev]
198
+ ```
199
+
168
200
  ## Advanced Examples
169
201
 
170
202
  ### JWT with Django Ninja
@@ -199,6 +231,55 @@ export = export_logs_from_date(from_date=from_date)
199
231
  print(f"Exported to {export.data.url}")
200
232
  ```
201
233
 
234
+ ### Currency Exchange Rates
235
+
236
+ ```python
237
+ from oxutils.currency.models import CurrencyState
238
+
239
+ # Sync rates from BCC (with OXR fallback)
240
+ state = CurrencyState.sync()
241
+
242
+ # Get latest rates
243
+ latest = CurrencyState.objects.latest()
244
+ usd_rate = latest.currencies.get(code='USD').rate
245
+ eur_rate = latest.currencies.get(code='EUR').rate
246
+ ```
247
+
248
+ ### PDF Generation
249
+
250
+ ```python
251
+ from oxutils.pdf.printer import Printer
252
+ from oxutils.pdf.views import WeasyTemplateView
253
+
254
+ # Standalone PDF generation
255
+ printer = Printer(
256
+ template_name='invoice.html',
257
+ context={'invoice': invoice},
258
+ stylesheets=['css/invoice.css']
259
+ )
260
+ pdf_bytes = printer.write_pdf()
261
+
262
+ # Class-based view
263
+ class InvoicePDFView(WeasyTemplateView):
264
+ template_name = 'invoice.html'
265
+ pdf_filename = 'invoice.pdf'
266
+ pdf_stylesheets = ['css/invoice.css']
267
+ ```
268
+
269
+ ### Multi-Tenant Setup
270
+
271
+ ```python
272
+ # settings.py
273
+ TENANT_MODEL = "oxiliere.Tenant"
274
+ MIDDLEWARE = [
275
+ 'oxutils.oxiliere.middleware.TenantMainMiddleware', # First!
276
+ # other middleware...
277
+ ]
278
+
279
+ # All requests must include X-Organization-ID header
280
+ # Data is automatically isolated per tenant schema
281
+ ```
282
+
202
283
  ## License
203
284
 
204
285
  Apache 2.0 License - see [LICENSE](LICENSE)
@@ -0,0 +1,88 @@
1
+ oxutils/__init__.py,sha256=5PuAYlbVIInYJZ43P2L9jEzxTTH-zn1XIMdRkSImF90,536
2
+ oxutils/apps.py,sha256=8pO8eXUZeKYn8fPo0rkoytmHACwDNuTNhdRcpkPTxGM,347
3
+ oxutils/audit/__init__.py,sha256=uonc00G73Xm7RwRHVWD-wBn8lJYNCq3iBgnRGMWAEWs,583
4
+ oxutils/audit/apps.py,sha256=xvnmB5Z6nLV7ejzhSeQbesTkwRoFygoPFob8H5QTHgU,304
5
+ oxutils/audit/export.py,sha256=MVf2RhLzXatBaGK7bIEvSY1VTwEojrPEKwYMvH1stwE,7992
6
+ oxutils/audit/masks.py,sha256=BRCz2m8dbaLgqn5umxpWCwn9mT6Z_ww_WIedl36AmPM,2345
7
+ oxutils/audit/migrations/0001_initial.py,sha256=xDOxV6NqkU8yuEDPvqG2AKANKrOJsOIAEJn5IbuLLFU,2151
8
+ oxutils/audit/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ oxutils/audit/models.py,sha256=NWzZjwgRGB212PeSb0E_aSxSComrTSR0knt2aBCiWhg,2100
10
+ oxutils/audit/settings.py,sha256=NNCFaN6tilDj-0WsVRK9HJNcr2nJOBYJT9E8cY5n9iI,133
11
+ oxutils/audit/utils.py,sha256=VJESUbMb5bC155XNlkIvr8DMc_o6ZTAIn5r8NDr7k_E,581
12
+ oxutils/celery/__init__.py,sha256=29jo4DfdvOoThX-jfL0ZiDjsy3-Z_fNhwHVJaLO5rsk,29
13
+ oxutils/celery/base.py,sha256=qLlBU2XvT2zj8qszy8togqH7hM_wUYyWWA3JAQPPJx0,3378
14
+ oxutils/celery/settings.py,sha256=njhHBErpcFczV2e23NCPX_Jxs015jr4dIig4Is_wbgE,33
15
+ oxutils/conf.py,sha256=TR0RIVaLMHvG0gm3NgbKsoU25eJFBjItAhknFJdiOiQ,231
16
+ oxutils/constants.py,sha256=CW-ho9Vasys-L2ZNJHFMovG5NzHNU6GPldE9vqyVcLM,89
17
+ oxutils/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ oxutils/context/site_name_processor.py,sha256=1gc0Td_3HVlUn9ThhQBCQ8kfnRnI88bEflK9vEzTvEc,225
19
+ oxutils/currency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
+ oxutils/currency/admin.py,sha256=cCd4tXIZTctr3Ksa1jTEpaECw-on7aRHibAfYxEjGek,1831
21
+ oxutils/currency/apps.py,sha256=w35QaiH3BIjCYv2IU6AadENAyBOw7Hmejy9kT5e_law,194
22
+ oxutils/currency/controllers.py,sha256=xDvPBpgXYjCiWyhRQ09fifbdPRSZAG_HC28_sGRfRYc,3042
23
+ oxutils/currency/enums.py,sha256=AHm8zpYCyGv0WMnh8XHLa3cAJnQx3aNOCjGug2Q94VQ,141
24
+ oxutils/currency/migrations/0001_initial.py,sha256=GHypakExy4jW5iQ6hB9x2UUjBoPgaz0OaHNTcBU64Pw,1707
25
+ oxutils/currency/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
+ oxutils/currency/models.py,sha256=-NrVq-degRc4sAO2BZ_LqSuIAP-IzCwwZJVxfYlNL8o,2448
27
+ oxutils/currency/schemas.py,sha256=4DyEjpL_HaMNDhKyu48fZtcXfRdemVP4rdyHUFit8uI,658
28
+ oxutils/currency/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
29
+ oxutils/currency/utils.py,sha256=eNa9CNlOFC6NMZLJn8VTwLrkME9q7quMTX7NMSZtTv8,2074
30
+ oxutils/enums/__init__.py,sha256=gFhZG8ER6ArGZO5agWhdfs7NiD2h9FzrzfQRHq18dD0,40
31
+ oxutils/enums/audit.py,sha256=ju2Z9CrtdyPziRQ7oOe4Ygw85t9sW3jynO_1DkgZoAM,126
32
+ oxutils/enums/invoices.py,sha256=E33QGQeutZUqvlovJY0VGDxWUb0i_kdfhEiir1ARKuQ,201
33
+ oxutils/exceptions.py,sha256=CCjENOD0of6_noif2ajrpfbBLoG16DWa46iB9_uEe3M,3592
34
+ oxutils/functions.py,sha256=4stHj94VebWX0s1XeWshubMD2v8w8QztTWppbkTE_Gg,3246
35
+ oxutils/jwt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ oxutils/jwt/auth.py,sha256=rO-xWNfug9Ok6zA7EIPvVkpD8TBUdq05CdrnMrL-t9Q,1597
37
+ oxutils/jwt/client.py,sha256=bskLpmSBrehi_snbo3Qbq1m99Kbfg2GP7jqfcXKHvys,3341
38
+ oxutils/jwt/constants.py,sha256=MUahZjm8plTYpHjLOMQCuH0H18lkIwS45EtRm617wq8,26
39
+ oxutils/locale/fr/LC_MESSAGES/django.po,sha256=APXt_8R99seCWjJyS5ELOawvRLvUqqBT32O252BaG5s,7971
40
+ oxutils/logger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ oxutils/logger/receivers.py,sha256=EBpkwMCHYacOJvuOPzUtM_8ttWWetz17kIwoudGiV34,488
42
+ oxutils/logger/settings.py,sha256=aiKiJqNNkw1g5vQgjk3Zfh6UgY7jx-lbmcFgATiXrGI,1805
43
+ oxutils/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
+ oxutils/mixins/base.py,sha256=0cGY4mGKhL-hJTEBsbETYiaKMVuUgio5DISCv5iYtGI,589
45
+ oxutils/mixins/schemas.py,sha256=DGW0GQBJc9K7hwOJLX-fEryi7KCoY1QaCLny8fjtQMI,319
46
+ oxutils/mixins/services.py,sha256=i4MrkCE3y1W7Xrrz6YeMMaY9xMtCQs4WgBIpM7hrDTI,5399
47
+ oxutils/models/__init__.py,sha256=mR9hhncZMGKefovg9xSPBtb9Yu2AssAdta26ihcNvI4,77
48
+ oxutils/models/base.py,sha256=1HGHB8MnhPpaa1SpnUVgiknCSHTwajz5LxprB2zicbc,2884
49
+ oxutils/models/billing.py,sha256=aCDZcMx4CUyAwh3wgJGypAJl_fSEuWrL27-cSYv3gCs,3323
50
+ oxutils/models/invoice.py,sha256=nqphkhlBhssODm2H4dBYyb1cOmHS29fToER40UN0cXo,13216
51
+ oxutils/oxiliere/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ oxutils/oxiliere/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
53
+ oxutils/oxiliere/apps.py,sha256=DAb8O1Vt4XPTIlFg5NB6SISTYRHyW3TY55-l7TC08Lo,148
54
+ oxutils/oxiliere/cacheops.py,sha256=VGG5qG5IsxvWJTu1aTlmsaDXV2aiuIMVdVcvHGHeY3g,163
55
+ oxutils/oxiliere/caches.py,sha256=PljqpDxkaE5F8Gsmvdqoq8W0MDh6aDtgXxCrN2T8b-4,976
56
+ oxutils/oxiliere/controllers.py,sha256=hL_snutY1EuSO0n06NDbjkz-3A3hkqa3sYGie3Grbmg,847
57
+ oxutils/oxiliere/enums.py,sha256=etpHgzsHTQKMrPIxVH-d592_DYSRJ2_o0c8bOdIza-8,201
58
+ oxutils/oxiliere/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
+ oxutils/oxiliere/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
60
+ oxutils/oxiliere/management/commands/init_oxiliere_system.py,sha256=ogNQGARqUUfTv4JgZsRuEh4FInfMUO4nFHHCbgeLLbk,3659
61
+ oxutils/oxiliere/middleware.py,sha256=mGOUs0bjtp_TKkZRgcC6kE7euZrZ6mIG1PgKHBhTDCc,4013
62
+ oxutils/oxiliere/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ oxutils/oxiliere/models.py,sha256=IqASvymJ6EcLc9bhxnas7-XXZStQYz7_UqroFkqS8xE,1543
64
+ oxutils/oxiliere/permissions.py,sha256=BVSbXqMa9Ohb1joBA_uXRCkYsYc3_CabhAWL9-VS4IU,3227
65
+ oxutils/oxiliere/schemas.py,sha256=kjX6N1INx9wikatniEM5s-ECuuVtDCcu6VEBbbEIdZE,1897
66
+ oxutils/oxiliere/settings.py,sha256=ZuKppEyrucWxvvYC2-wLap4RzKfaEfaRdjJnsNZzpuY,440
67
+ oxutils/oxiliere/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
68
+ oxutils/oxiliere/utils.py,sha256=iZc3BjaqVSrZkELVpYsYiwMHC5MfDeDQPKn8iTsB3Bk,2488
69
+ oxutils/pdf/__init__.py,sha256=Uu_yOEd-FcNHIB7CV6y76c53wjL5Hce2GMjho8gnkbM,236
70
+ oxutils/pdf/printer.py,sha256=VVvpGU5GdSNTOP06wLqgm36ICDfRTRaRjmmiS-vJ0wM,2449
71
+ oxutils/pdf/utils.py,sha256=cn1Yc7KnjuATSQKM3hrYptCo0IsQurBdrNHh7Nu08b8,3786
72
+ oxutils/pdf/views.py,sha256=DBxCh_UXVywlvlWZh9sVBtYc0gZxMo7ut1j1U_gqPA4,6523
73
+ oxutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ oxutils/s3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
+ oxutils/s3/settings.py,sha256=NIlVhaOzWdsepOgCpxdTTJRHfM0tM5EcAoy4kaFC1R8,1190
76
+ oxutils/s3/storages.py,sha256=gjQg05edVn6NuyfJZ-NwUB2lRWwg8GqgzHB8I1D5vbI,5402
77
+ oxutils/settings.py,sha256=mp_ZSf8bcCUe2Zc9YdOe_EtltBgIY2n_8lUERQtsIFk,9742
78
+ oxutils/types.py,sha256=DIz8YK8xMpLc7FYbf88yEElyLsYN_-rbvaZXvENQkOQ,234
79
+ oxutils/users/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
+ oxutils/users/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
81
+ oxutils/users/apps.py,sha256=u3PAY2AZGQXSWH2DSkQ1lOTIVm33qUbzeKls0J8H8No,142
82
+ oxutils/users/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ oxutils/users/models.py,sha256=YXAHcXuhmHZfcRDOqA5lBiSRcJ24snBs9X6tcJPCcFs,2960
84
+ oxutils/users/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
85
+ oxutils/users/utils.py,sha256=jY-zL8vLT5U3E2FV3DqCvrPORjKLutbkPZTQ-z96dCw,376
86
+ oxutils-0.1.5.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
87
+ oxutils-0.1.5.dist-info/METADATA,sha256=My2FOK0fKzrb7w4hrYmg3HWj1Qyf9Ig-USJNFtqN6Zo,7878
88
+ oxutils-0.1.5.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.8.13
2
+ Generator: uv 0.8.24
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
Binary file
@@ -1,45 +0,0 @@
1
- oxutils/__init__.py,sha256=3P1RgwJOYUc9uXjd_PhSprxHiOLf_qZrSxX2nuxBRWU,536
2
- oxutils/apps.py,sha256=8pO8eXUZeKYn8fPo0rkoytmHACwDNuTNhdRcpkPTxGM,347
3
- oxutils/audit/__init__.py,sha256=uonc00G73Xm7RwRHVWD-wBn8lJYNCq3iBgnRGMWAEWs,583
4
- oxutils/audit/apps.py,sha256=xvnmB5Z6nLV7ejzhSeQbesTkwRoFygoPFob8H5QTHgU,304
5
- oxutils/audit/export.py,sha256=MVf2RhLzXatBaGK7bIEvSY1VTwEojrPEKwYMvH1stwE,7992
6
- oxutils/audit/masks.py,sha256=BRCz2m8dbaLgqn5umxpWCwn9mT6Z_ww_WIedl36AmPM,2345
7
- oxutils/audit/migrations/0001_initial.py,sha256=xDOxV6NqkU8yuEDPvqG2AKANKrOJsOIAEJn5IbuLLFU,2151
8
- oxutils/audit/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- oxutils/audit/models.py,sha256=NWzZjwgRGB212PeSb0E_aSxSComrTSR0knt2aBCiWhg,2100
10
- oxutils/audit/settings.py,sha256=E4AoTpbvL1svDogux-OTjAdccD5LzyJ1G-lBeCZTbDU,353
11
- oxutils/celery/__init__.py,sha256=29jo4DfdvOoThX-jfL0ZiDjsy3-Z_fNhwHVJaLO5rsk,29
12
- oxutils/celery/base.py,sha256=qLlBU2XvT2zj8qszy8togqH7hM_wUYyWWA3JAQPPJx0,3378
13
- oxutils/celery/settings.py,sha256=njhHBErpcFczV2e23NCPX_Jxs015jr4dIig4Is_wbgE,33
14
- oxutils/conf.py,sha256=JT0Zj4Wmn9HCEDpk7eOIY47YLBGP793tstsm34cLb1A,296
15
- oxutils/enums/__init__.py,sha256=gFhZG8ER6ArGZO5agWhdfs7NiD2h9FzrzfQRHq18dD0,40
16
- oxutils/enums/audit.py,sha256=ju2Z9CrtdyPziRQ7oOe4Ygw85t9sW3jynO_1DkgZoAM,126
17
- oxutils/enums/invoices.py,sha256=E33QGQeutZUqvlovJY0VGDxWUb0i_kdfhEiir1ARKuQ,201
18
- oxutils/exceptions.py,sha256=CCjENOD0of6_noif2ajrpfbBLoG16DWa46iB9_uEe3M,3592
19
- oxutils/functions.py,sha256=p4SycMykom6H2AoryX-X4W_Acphf2_tx-LY2WxFD0Xc,3190
20
- oxutils/jwt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- oxutils/jwt/auth.py,sha256=rO-xWNfug9Ok6zA7EIPvVkpD8TBUdq05CdrnMrL-t9Q,1597
22
- oxutils/jwt/client.py,sha256=bskLpmSBrehi_snbo3Qbq1m99Kbfg2GP7jqfcXKHvys,3341
23
- oxutils/jwt/constants.py,sha256=MUahZjm8plTYpHjLOMQCuH0H18lkIwS45EtRm617wq8,26
24
- oxutils/locale/fr/LC_MESSAGES/django.mo,sha256=Qk5R90E-JqJX2JxSnveKXxecKVHR-a76uFlwkHTF7f0,8114
25
- oxutils/locale/fr/LC_MESSAGES/django.po,sha256=APXt_8R99seCWjJyS5ELOawvRLvUqqBT32O252BaG5s,7971
26
- oxutils/logger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- oxutils/logger/receivers.py,sha256=U8JVjHRK1zUaCRnPn6p1qsm6FFXgTkXp67PpJ1LnjgU,542
28
- oxutils/logger/settings.py,sha256=aiKiJqNNkw1g5vQgjk3Zfh6UgY7jx-lbmcFgATiXrGI,1805
29
- oxutils/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- oxutils/mixins/base.py,sha256=0cGY4mGKhL-hJTEBsbETYiaKMVuUgio5DISCv5iYtGI,589
31
- oxutils/mixins/schemas.py,sha256=DGW0GQBJc9K7hwOJLX-fEryi7KCoY1QaCLny8fjtQMI,319
32
- oxutils/mixins/services.py,sha256=i4MrkCE3y1W7Xrrz6YeMMaY9xMtCQs4WgBIpM7hrDTI,5399
33
- oxutils/models/__init__.py,sha256=mR9hhncZMGKefovg9xSPBtb9Yu2AssAdta26ihcNvI4,77
34
- oxutils/models/base.py,sha256=1HGHB8MnhPpaa1SpnUVgiknCSHTwajz5LxprB2zicbc,2884
35
- oxutils/models/billing.py,sha256=aCDZcMx4CUyAwh3wgJGypAJl_fSEuWrL27-cSYv3gCs,3323
36
- oxutils/models/invoice.py,sha256=nqphkhlBhssODm2H4dBYyb1cOmHS29fToER40UN0cXo,13216
37
- oxutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- oxutils/s3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
- oxutils/s3/settings.py,sha256=NIlVhaOzWdsepOgCpxdTTJRHfM0tM5EcAoy4kaFC1R8,1190
40
- oxutils/s3/storages.py,sha256=vW8BlxLwkqMgVJPf9z2rkjmlrL_RArlN3YA6y4BJ7Zw,5414
41
- oxutils/settings.py,sha256=iOVRgkurkv6UtlEvY0dkO71oxxgPAIdyXgHhf3RJaTU,9673
42
- oxutils/types.py,sha256=DIz8YK8xMpLc7FYbf88yEElyLsYN_-rbvaZXvENQkOQ,234
43
- oxutils-0.1.1.dist-info/WHEEL,sha256=4n27za1eEkOnA7dNjN6C5-O2rUiw6iapszm14Uj-Qmk,79
44
- oxutils-0.1.1.dist-info/METADATA,sha256=H5gVh_JOIWKKesVrHu8o6orUe2stxJhmeDm31wRrUa0,5934
45
- oxutils-0.1.1.dist-info/RECORD,,