oxutils 0.1.2__py3-none-any.whl → 0.1.3__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.
oxutils/__init__.py CHANGED
@@ -10,7 +10,7 @@ This package provides:
10
10
  - Custom exceptions
11
11
  """
12
12
 
13
- __version__ = "0.1.1"
13
+ __version__ = "0.1.3"
14
14
 
15
15
  from oxutils.settings import oxi_settings
16
16
  from oxutils.conf import UTILS_APPS, AUDIT_MIDDLEWARE
File without changes
@@ -0,0 +1,11 @@
1
+ """
2
+ Context processor for site name
3
+ """
4
+
5
+ def site_name(request):
6
+ from oxutils.settings import oxi_settings
7
+
8
+ return {
9
+ 'site_name': oxi_settings.site_name,
10
+ 'site_domain': oxi_settings.site_domain,
11
+ }
oxutils/functions.py CHANGED
@@ -6,12 +6,15 @@ from ninja_extra.exceptions import ValidationError
6
6
 
7
7
 
8
8
  def get_absolute_url(url: str, request=None):
9
+ if url.startswith('http'):
10
+ return url
11
+
9
12
  if request:
10
13
  # Build absolute URL using request
11
14
  return request.build_absolute_uri(url)
12
15
  else:
13
- # Fallback: build URL using MEDIA_URL and domain
14
- base_url = getattr(settings, 'SITE_URL', 'http://localhost:8000')
16
+ # Fallback: build URL using SITE_DOMAIN and domain
17
+ base_url = getattr(settings, 'SITE_DOMAIN', 'http://localhost:8000')
15
18
  return urljoin(base_url, url)
16
19
 
17
20
 
oxutils/settings.py CHANGED
@@ -21,6 +21,8 @@ class OxUtilsSettings(BaseSettings):
21
21
 
22
22
  # Service
23
23
  service_name: Optional[str] = 'Oxutils'
24
+ site_name: Optional[str] = 'Oxiliere'
25
+ site_domain: Optional[str] = 'oxiliere.com'
24
26
 
25
27
  # Auth JWT Settings (JWT_SIGNING_KEY)
26
28
  jwt_signing_key: Optional[str] = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oxutils
3
- Version: 0.1.2
3
+ Version: 0.1.3
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
@@ -47,7 +47,7 @@ Description-Content-Type: text/markdown
47
47
  [![PyPI version](https://img.shields.io/pypi/v/oxutils.svg)](https://pypi.org/project/oxutils/)
48
48
  [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/)
49
49
  [![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/)
50
+ [![Tests](https://img.shields.io/badge/tests-145%20passed-success.svg)](tests/)
51
51
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
52
52
  [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
53
53
 
@@ -60,6 +60,7 @@ Description-Content-Type: text/markdown
60
60
  - ⚙️ **Celery Integration** - Pre-configured task processing
61
61
  - 🛠️ **Django Mixins** - UUID, timestamps, user tracking
62
62
  - ⚡ **Custom Exceptions** - Standardized API errors
63
+ - 🎨 **Context Processors** - Site name and domain for templates
63
64
 
64
65
  ---
65
66
 
@@ -126,6 +127,17 @@ class Product(BaseModelMixin): # UUID + timestamps + is_active
126
127
  # Custom Exceptions
127
128
  from oxutils.exceptions import NotFoundException
128
129
  raise NotFoundException(detail="User not found")
130
+
131
+ # Context Processors
132
+ # settings.py
133
+ TEMPLATES = [{
134
+ 'OPTIONS': {
135
+ 'context_processors': [
136
+ 'oxutils.context.site_name_processor.site_name',
137
+ ],
138
+ },
139
+ }]
140
+ # Now {{ site_name }} and {{ site_domain }} are available in templates
129
141
  ```
130
142
 
131
143
  ## Documentation
@@ -150,7 +162,7 @@ raise NotFoundException(detail="User not found")
150
162
  git clone https://github.com/oxiliere/oxutils.git
151
163
  cd oxutils
152
164
  uv sync
153
- uv run pytest # 126 tests
165
+ uv run pytest # 145 tests
154
166
  ```
155
167
 
156
168
  ### Creating Migrations
@@ -1,4 +1,4 @@
1
- oxutils/__init__.py,sha256=3P1RgwJOYUc9uXjd_PhSprxHiOLf_qZrSxX2nuxBRWU,536
1
+ oxutils/__init__.py,sha256=O_DKaIil9dbZtBsTRsICXaymyDp7zz_4eqqO2fO0eGk,536
2
2
  oxutils/apps.py,sha256=8pO8eXUZeKYn8fPo0rkoytmHACwDNuTNhdRcpkPTxGM,347
3
3
  oxutils/audit/__init__.py,sha256=uonc00G73Xm7RwRHVWD-wBn8lJYNCq3iBgnRGMWAEWs,583
4
4
  oxutils/audit/apps.py,sha256=xvnmB5Z6nLV7ejzhSeQbesTkwRoFygoPFob8H5QTHgU,304
@@ -12,16 +12,17 @@ oxutils/celery/__init__.py,sha256=29jo4DfdvOoThX-jfL0ZiDjsy3-Z_fNhwHVJaLO5rsk,29
12
12
  oxutils/celery/base.py,sha256=qLlBU2XvT2zj8qszy8togqH7hM_wUYyWWA3JAQPPJx0,3378
13
13
  oxutils/celery/settings.py,sha256=njhHBErpcFczV2e23NCPX_Jxs015jr4dIig4Is_wbgE,33
14
14
  oxutils/conf.py,sha256=JT0Zj4Wmn9HCEDpk7eOIY47YLBGP793tstsm34cLb1A,296
15
+ oxutils/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ oxutils/context/site_name_processor.py,sha256=1gc0Td_3HVlUn9ThhQBCQ8kfnRnI88bEflK9vEzTvEc,225
15
17
  oxutils/enums/__init__.py,sha256=gFhZG8ER6ArGZO5agWhdfs7NiD2h9FzrzfQRHq18dD0,40
16
18
  oxutils/enums/audit.py,sha256=ju2Z9CrtdyPziRQ7oOe4Ygw85t9sW3jynO_1DkgZoAM,126
17
19
  oxutils/enums/invoices.py,sha256=E33QGQeutZUqvlovJY0VGDxWUb0i_kdfhEiir1ARKuQ,201
18
20
  oxutils/exceptions.py,sha256=CCjENOD0of6_noif2ajrpfbBLoG16DWa46iB9_uEe3M,3592
19
- oxutils/functions.py,sha256=p4SycMykom6H2AoryX-X4W_Acphf2_tx-LY2WxFD0Xc,3190
21
+ oxutils/functions.py,sha256=4stHj94VebWX0s1XeWshubMD2v8w8QztTWppbkTE_Gg,3246
20
22
  oxutils/jwt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
23
  oxutils/jwt/auth.py,sha256=rO-xWNfug9Ok6zA7EIPvVkpD8TBUdq05CdrnMrL-t9Q,1597
22
24
  oxutils/jwt/client.py,sha256=bskLpmSBrehi_snbo3Qbq1m99Kbfg2GP7jqfcXKHvys,3341
23
25
  oxutils/jwt/constants.py,sha256=MUahZjm8plTYpHjLOMQCuH0H18lkIwS45EtRm617wq8,26
24
- oxutils/locale/fr/LC_MESSAGES/django.mo,sha256=Qk5R90E-JqJX2JxSnveKXxecKVHR-a76uFlwkHTF7f0,8114
25
26
  oxutils/locale/fr/LC_MESSAGES/django.po,sha256=APXt_8R99seCWjJyS5ELOawvRLvUqqBT32O252BaG5s,7971
26
27
  oxutils/logger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
28
  oxutils/logger/receivers.py,sha256=U8JVjHRK1zUaCRnPn6p1qsm6FFXgTkXp67PpJ1LnjgU,542
@@ -38,8 +39,8 @@ oxutils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
39
  oxutils/s3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
40
  oxutils/s3/settings.py,sha256=NIlVhaOzWdsepOgCpxdTTJRHfM0tM5EcAoy4kaFC1R8,1190
40
41
  oxutils/s3/storages.py,sha256=gjQg05edVn6NuyfJZ-NwUB2lRWwg8GqgzHB8I1D5vbI,5402
41
- oxutils/settings.py,sha256=PLcBElUpsZe7imvcRXA_-J1r9Z8Mvmu03Tk2xrdTlKc,9652
42
+ oxutils/settings.py,sha256=mp_ZSf8bcCUe2Zc9YdOe_EtltBgIY2n_8lUERQtsIFk,9742
42
43
  oxutils/types.py,sha256=DIz8YK8xMpLc7FYbf88yEElyLsYN_-rbvaZXvENQkOQ,234
43
- oxutils-0.1.2.dist-info/WHEEL,sha256=4n27za1eEkOnA7dNjN6C5-O2rUiw6iapszm14Uj-Qmk,79
44
- oxutils-0.1.2.dist-info/METADATA,sha256=Ud9P1yRUNUumfv-LRED-rRCHg65KKy_QAnhlZWDet-E,5934
45
- oxutils-0.1.2.dist-info/RECORD,,
44
+ oxutils-0.1.3.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
45
+ oxutils-0.1.3.dist-info/METADATA,sha256=vv_16w64xVv_z5oBhs6s-hd4PggohmXePcPQh8U-RRw,6254
46
+ oxutils-0.1.3.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