cardo-python-utils 0.5.dev41__tar.gz → 0.5.dev43__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 (62) hide show
  1. {cardo_python_utils-0.5.dev41/cardo_python_utils.egg-info → cardo_python_utils-0.5.dev43}/PKG-INFO +1 -1
  2. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43/cardo_python_utils.egg-info}/PKG-INFO +1 -1
  3. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/pyproject.toml +1 -1
  4. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/oidc_settings.py +13 -1
  5. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/settings.py +1 -2
  6. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/tenant_context.py +2 -2
  7. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/LICENSE +0 -0
  8. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/MANIFEST.in +0 -0
  9. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/README.rst +0 -0
  10. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/cardo_python_utils.egg-info/SOURCES.txt +0 -0
  11. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/cardo_python_utils.egg-info/dependency_links.txt +0 -0
  12. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/cardo_python_utils.egg-info/requires.txt +0 -0
  13. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/cardo_python_utils.egg-info/top_level.txt +0 -0
  14. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/__init__.py +0 -0
  15. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/choices.py +0 -0
  16. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/data_structures.py +0 -0
  17. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/db.py +0 -0
  18. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/README.md +0 -0
  19. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/__init__.py +0 -0
  20. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/admin/__init__.py +0 -0
  21. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/admin/auth.py +0 -0
  22. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/admin/templates/__init__.py +0 -0
  23. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/admin/templates/user_groups_changelist.html +0 -0
  24. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/admin/user_group.py +0 -0
  25. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/admin/views.py +0 -0
  26. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/api/__init__.py +0 -0
  27. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/api/drf.py +0 -0
  28. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/api/ninja.py +0 -0
  29. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/api/utils.py +0 -0
  30. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/apps.py +0 -0
  31. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/auth/service.py +0 -0
  32. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/celery/__init__.py +0 -0
  33. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/celery/tenant_aware_database_scheduler.py +0 -0
  34. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/celery/tenant_aware_task.py +0 -0
  35. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/db/__init__.py +0 -0
  36. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/db/routers.py +0 -0
  37. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/db/transaction.py +0 -0
  38. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/db/utils.py +0 -0
  39. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/management/__init__.py +0 -0
  40. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/management/commands/__init__.py +0 -0
  41. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/management/commands/migrateall.py +0 -0
  42. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/management/commands/tenant_aware_command.py +0 -0
  43. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/middleware/__init__.py +0 -0
  44. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/middleware/tenant_aware_http_middleware.py +0 -0
  45. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/middleware/tenant_aware_websocket_middleware.py +0 -0
  46. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/models/__init__.py +0 -0
  47. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/models/user_group.py +0 -0
  48. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/redis/__init__.py +0 -0
  49. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/redis/key_function.py +0 -0
  50. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/storage/__init__.py +0 -0
  51. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/storage/tenant_aware_storage.py +0 -0
  52. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/tests/__init__.py +0 -0
  53. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django/tests/conftest.py +0 -0
  54. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/django_utils.py +0 -0
  55. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/esma_choices.py +0 -0
  56. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/exceptions.py +0 -0
  57. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/imports.py +0 -0
  58. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/math.py +0 -0
  59. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/text.py +0 -0
  60. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/time.py +0 -0
  61. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/python_utils/types_hinting.py +0 -0
  62. {cardo_python_utils-0.5.dev41 → cardo_python_utils-0.5.dev43}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cardo-python-utils
3
- Version: 0.5.dev41
3
+ Version: 0.5.dev43
4
4
  Summary: Python library enhanced with a wide range of functions for different scenarios.
5
5
  Author-email: CardoAI <hello@cardoai.com>
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cardo-python-utils
3
- Version: 0.5.dev41
3
+ Version: 0.5.dev43
4
4
  Summary: Python library enhanced with a wide range of functions for different scenarios.
5
5
  Author-email: CardoAI <hello@cardoai.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cardo-python-utils"
7
- version = "0.5.dev41"
7
+ version = "0.5.dev43"
8
8
  description = "Python library enhanced with a wide range of functions for different scenarios."
9
9
  readme = "README.rst"
10
10
  requires-python = ">=3.8"
@@ -32,11 +32,23 @@ KEYCLOAK_CONFIDENTIAL_CLIENT_SECRETS: dict[str, str] = json.loads(
32
32
  os.getenv("KEYCLOAK_CONFIDENTIAL_CLIENT_SECRETS", "{}")
33
33
  )
34
34
 
35
+ TENANT_REALM_MAPPING: dict[str, str] = getattr(
36
+ settings, "TENANT_REALM_MAPPING", json.loads(os.getenv("TENANT_REALM_MAPPING", "{}"))
37
+ )
38
+
39
+
40
+ def get_realm_for_tenant(tenant: str) -> str:
41
+ """
42
+ Get the Keycloak realm name for a given tenant.
43
+ By default, we assume the realm name is the same as the tenant name.
44
+ """
45
+ return TENANT_REALM_MAPPING.get(tenant, tenant)
46
+
35
47
 
36
48
  def get_oidc_op_base_url() -> str:
37
49
  """Get the base URL for the OIDC provider (Keycloak realm URL)."""
38
50
 
39
- realm = TenantContext.get()
51
+ realm = get_realm_for_tenant(TenantContext.get())
40
52
  return f"{KEYCLOAK_SERVER_URL}/realms/{realm}"
41
53
 
42
54
 
@@ -1,7 +1,6 @@
1
1
  from django.conf import settings
2
2
 
3
3
  TENANT_KEY = "tenant"
4
- DATABASES = settings.DATABASES
5
4
  TENANT_DATABASES = set(settings.DATABASES.keys()) - {"default"}
6
5
 
7
6
  TENANT_AWARE_EXCLUDED_PATHS = getattr(settings, "TENANT_AWARE_EXCLUDED_PATHS", ())
@@ -20,4 +19,4 @@ if DEVELOPMENT_TENANT is None:
20
19
  if TENANT_DATABASES:
21
20
  DEVELOPMENT_TENANT = list(TENANT_DATABASES)[0]
22
21
  else:
23
- DEVELOPMENT_TENANT = list(DATABASES.keys())[0]
22
+ DEVELOPMENT_TENANT = list(settings.DATABASES.keys())[0]
@@ -3,7 +3,7 @@ from contextlib import ContextDecorator
3
3
  from contextvars import ContextVar
4
4
  from typing import Optional
5
5
 
6
- from .settings import DATABASES
6
+ from django.conf import settings
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
@@ -84,7 +84,7 @@ class TenantContext(ContextDecorator):
84
84
  # If the tenant is already set to the same value, we do nothing and return None.
85
85
  return None
86
86
 
87
- if tenant not in DATABASES:
87
+ if tenant not in settings.DATABASES:
88
88
  raise ValueError(f"Tenant '{tenant}' not found in DATABASES settings.")
89
89
 
90
90
  token = _tenant_var.set(tenant)