cardo-python-utils 0.5.2__tar.gz → 0.5.3__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 (76) hide show
  1. {cardo_python_utils-0.5.2/cardo_python_utils.egg-info → cardo_python_utils-0.5.3}/PKG-INFO +1 -1
  2. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3/cardo_python_utils.egg-info}/PKG-INFO +1 -1
  3. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/pyproject.toml +1 -1
  4. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/admin/user_group.py +3 -3
  5. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/models/user_group.py +1 -0
  6. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/tenant_context.py +5 -2
  7. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/LICENSE +0 -0
  8. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/MANIFEST.in +0 -0
  9. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/README.rst +0 -0
  10. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/cardo_python_utils.egg-info/SOURCES.txt +0 -0
  11. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/cardo_python_utils.egg-info/dependency_links.txt +0 -0
  12. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/cardo_python_utils.egg-info/requires.txt +0 -0
  13. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/cardo_python_utils.egg-info/top_level.txt +0 -0
  14. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/__init__.py +0 -0
  15. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/choices.py +0 -0
  16. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/data_structures.py +0 -0
  17. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/db.py +0 -0
  18. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/README.md +0 -0
  19. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/__init__.py +0 -0
  20. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/admin/__init__.py +0 -0
  21. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/admin/auth.py +0 -0
  22. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/admin/templates/__init__.py +0 -0
  23. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/admin/templates/user_groups_changelist.html +0 -0
  24. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/admin/views.py +0 -0
  25. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/api/__init__.py +0 -0
  26. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/api/drf.py +0 -0
  27. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/api/ninja.py +0 -0
  28. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/api/utils.py +0 -0
  29. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/apps.py +0 -0
  30. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/auth/service.py +0 -0
  31. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/celery/__init__.py +0 -0
  32. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/celery/tenant_aware_database_scheduler.py +0 -0
  33. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/celery/tenant_aware_task.py +0 -0
  34. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/db/__init__.py +0 -0
  35. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/db/alias.py +0 -0
  36. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/db/routers.py +0 -0
  37. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/db/transaction.py +0 -0
  38. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/db/utils.py +0 -0
  39. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/management/__init__.py +0 -0
  40. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/management/commands/__init__.py +0 -0
  41. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/management/commands/migrateall.py +0 -0
  42. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/management/commands/shell.py +0 -0
  43. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/management/commands/showmigrations.py +0 -0
  44. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/management/commands/tenant_aware_command.py +0 -0
  45. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/middleware/__init__.py +0 -0
  46. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/middleware/tenant_aware_http_middleware.py +0 -0
  47. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/middleware/tenant_aware_websocket_middleware.py +0 -0
  48. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0001_initial.py +0 -0
  49. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0001_initial_squashed_0005_alter_userrole_id.py +0 -0
  50. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0002_auto_20220120_1617.py +0 -0
  51. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0003_auto_20220513_1025.py +0 -0
  52. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0004_auto_20220817_1526.py +0 -0
  53. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0005_alter_userrole_id.py +0 -0
  54. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0006_userrole_organization_and_more.py +0 -0
  55. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0007_user_demo.py +0 -0
  56. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/0008_delete_userrole.py +0 -0
  57. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/migrations/__init__.py +0 -0
  58. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/models/__init__.py +0 -0
  59. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/models/user.py +0 -0
  60. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/oidc_settings.py +0 -0
  61. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/redis/__init__.py +0 -0
  62. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/redis/key_function.py +0 -0
  63. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/settings.py +0 -0
  64. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/storage/__init__.py +0 -0
  65. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/storage/tenant_aware_storage.py +0 -0
  66. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/tests/__init__.py +0 -0
  67. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django/tests/conftest.py +0 -0
  68. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/django_utils.py +0 -0
  69. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/esma_choices.py +0 -0
  70. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/exceptions.py +0 -0
  71. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/imports.py +0 -0
  72. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/math.py +0 -0
  73. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/text.py +0 -0
  74. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/time.py +0 -0
  75. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/python_utils/types_hinting.py +0 -0
  76. {cardo_python_utils-0.5.2 → cardo_python_utils-0.5.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cardo-python-utils
3
- Version: 0.5.2
3
+ Version: 0.5.3
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.2
3
+ Version: 0.5.3
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.2"
7
+ version = "0.5.3"
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"
@@ -70,9 +70,9 @@ class UserGroupAdminBase(admin.ModelAdmin, metaclass=UserGroupAdminMetaclass):
70
70
  def get_queryset(self, request):
71
71
  queryset = super().get_queryset(request)
72
72
 
73
- for entity in self.app_entities:
74
- count_attr = f"allowed_{entity}_count"
75
- queryset = queryset.annotate(**{count_attr: Count(f"allowed_{entity}")})
73
+ queryset = queryset.annotate(**{
74
+ f"allowed_{entity}_count": Count(f"allowed_{entity}") for entity in self.app_entities
75
+ })
76
76
 
77
77
  return queryset
78
78
 
@@ -20,3 +20,4 @@ class UserGroupBase(models.Model):
20
20
 
21
21
  class Meta:
22
22
  abstract = True
23
+ ordering = ["path"]
@@ -11,6 +11,9 @@ logger = logging.getLogger(__name__)
11
11
  _tenant_var: ContextVar[Optional[str]] = ContextVar("tenant", default=None)
12
12
 
13
13
 
14
+ ALLOW_TENANT_CONTEXT_CHANGE = getattr(settings, "ALLOW_TENANT_CONTEXT_CHANGE", False)
15
+
16
+
14
17
  class TenantContext(ContextDecorator):
15
18
  """
16
19
  Context manager that sets the current tenant.
@@ -68,14 +71,14 @@ class TenantContext(ContextDecorator):
68
71
  def set(tenant):
69
72
  if TenantContext.is_set():
70
73
  # If the tenant is already set, we do not allow to set it
71
- # again unless it is the same value.
74
+ # again unless it is the same value or ALLOW_TENANT_CONTEXT_CHANGE is True.
72
75
  # This is to prevent the tenant to be set to a different
73
76
  # value in the same thread.
74
77
  # A request-response cycle is required to set the tenant
75
78
  # only once and operate on the same tenant in its lifecycle.
76
79
  # The same applies to a single task, it is not allowed to set the
77
80
  # tenant in the same task to a different value.
78
- if TenantContext.get() != tenant:
81
+ if TenantContext.get() != tenant and not ALLOW_TENANT_CONTEXT_CHANGE:
79
82
  raise RuntimeError(
80
83
  f"Tenant context already set to '{TenantContext.get()}', "
81
84
  f"cannot change to '{tenant}' within the same request/task lifecycle."