django-bulk-hooks 0.1.74__tar.gz → 0.1.76__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.
Potentially problematic release.
This version of django-bulk-hooks might be problematic. Click here for more details.
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/PKG-INFO +1 -1
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/context.py +0 -10
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/manager.py +8 -22
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/queryset.py +3 -19
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/pyproject.toml +1 -1
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/LICENSE +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/README.md +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/engine.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/priority.py +0 -0
- {django_bulk_hooks-0.1.74 → django_bulk_hooks-0.1.76}/django_bulk_hooks/registry.py +0 -0
|
@@ -10,16 +10,6 @@ def get_hook_queue():
|
|
|
10
10
|
return _hook_context.queue
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def is_in_bulk_operation():
|
|
14
|
-
"""Check if we're currently in a bulk operation to prevent recursion."""
|
|
15
|
-
return getattr(_hook_context, "in_bulk_operation", False)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def set_bulk_operation_flag(value):
|
|
19
|
-
"""Set the bulk operation flag to prevent recursion."""
|
|
20
|
-
_hook_context.in_bulk_operation = value
|
|
21
|
-
|
|
22
|
-
|
|
23
13
|
class HookContext:
|
|
24
14
|
def __init__(self, model_cls, metadata=None):
|
|
25
15
|
self.model_cls = model_cls
|
|
@@ -12,7 +12,7 @@ from django_bulk_hooks.constants import (
|
|
|
12
12
|
VALIDATE_DELETE,
|
|
13
13
|
VALIDATE_UPDATE,
|
|
14
14
|
)
|
|
15
|
-
from django_bulk_hooks.context import HookContext
|
|
15
|
+
from django_bulk_hooks.context import HookContext
|
|
16
16
|
from django_bulk_hooks.queryset import HookQuerySet
|
|
17
17
|
|
|
18
18
|
|
|
@@ -37,20 +37,10 @@ class BulkHookManager(models.Manager):
|
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
if not bypass_hooks:
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if hasattr(threading.current_thread(), "_hook_context"):
|
|
45
|
-
# We're in a recursive call - refetch current DB state
|
|
46
|
-
originals = list(
|
|
47
|
-
model_cls.objects.filter(pk__in=[obj.pk for obj in objs])
|
|
48
|
-
)
|
|
49
|
-
else:
|
|
50
|
-
# First call - use the passed originals
|
|
51
|
-
originals = list(
|
|
52
|
-
model_cls.objects.filter(pk__in=[obj.pk for obj in objs])
|
|
53
|
-
)
|
|
40
|
+
# Load originals for hook comparison
|
|
41
|
+
originals = list(
|
|
42
|
+
model_cls.objects.filter(pk__in=[obj.pk for obj in objs])
|
|
43
|
+
)
|
|
54
44
|
|
|
55
45
|
ctx = HookContext(model_cls)
|
|
56
46
|
|
|
@@ -178,13 +168,9 @@ class BulkHookManager(models.Manager):
|
|
|
178
168
|
|
|
179
169
|
pks = [obj.pk for obj in objs if obj.pk is not None]
|
|
180
170
|
|
|
181
|
-
#
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
# Use the custom manager - hooks won't fire again due to the flag
|
|
185
|
-
model_cls.objects.filter(pk__in=pks).delete()
|
|
186
|
-
finally:
|
|
187
|
-
set_bulk_operation_flag(False)
|
|
171
|
+
# Use base manager for the actual deletion to prevent recursion
|
|
172
|
+
# The hooks have already been fired above, so we don't need them again
|
|
173
|
+
model_cls._base_manager.filter(pk__in=pks).delete()
|
|
188
174
|
|
|
189
175
|
if not bypass_hooks:
|
|
190
176
|
engine.run(model_cls, AFTER_DELETE, objs, ctx=ctx)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from django.db import models, transaction
|
|
2
|
-
from django_bulk_hooks.context import is_in_bulk_operation
|
|
3
2
|
|
|
4
3
|
|
|
5
4
|
class HookQuerySet(models.QuerySet):
|
|
@@ -8,15 +7,7 @@ class HookQuerySet(models.QuerySet):
|
|
|
8
7
|
objs = list(self)
|
|
9
8
|
if not objs:
|
|
10
9
|
return 0
|
|
11
|
-
|
|
12
|
-
# If we're already in a bulk operation, use base manager to prevent recursion
|
|
13
|
-
if is_in_bulk_operation():
|
|
14
|
-
# Use standard Django delete method on base manager
|
|
15
|
-
pks = [obj.pk for obj in objs if obj.pk is not None]
|
|
16
|
-
return self.model._base_manager.filter(pk__in=pks).delete()[0]
|
|
17
|
-
else:
|
|
18
|
-
# Normal case - use custom manager to ensure hooks fire
|
|
19
|
-
return self.model.objects.bulk_delete(objs)
|
|
10
|
+
return self.model.objects.bulk_delete(objs)
|
|
20
11
|
|
|
21
12
|
@transaction.atomic
|
|
22
13
|
def update(self, **kwargs):
|
|
@@ -29,7 +20,6 @@ class HookQuerySet(models.QuerySet):
|
|
|
29
20
|
|
|
30
21
|
# Load originals for hook comparison
|
|
31
22
|
originals = list(model_cls.objects.filter(pk__in=pks))
|
|
32
|
-
originals_by_pk = {obj.pk: obj for obj in originals}
|
|
33
23
|
|
|
34
24
|
# Apply field updates to instances
|
|
35
25
|
for obj in instances:
|
|
@@ -44,14 +34,8 @@ class HookQuerySet(models.QuerySet):
|
|
|
44
34
|
engine.run(model_cls, "before_update", instances, originals, ctx=ctx)
|
|
45
35
|
|
|
46
36
|
# Use Django's built-in update logic directly
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
set_bulk_operation_flag(True)
|
|
50
|
-
try:
|
|
51
|
-
queryset = self.model.objects.filter(pk__in=pks)
|
|
52
|
-
update_count = queryset.update(**kwargs)
|
|
53
|
-
finally:
|
|
54
|
-
set_bulk_operation_flag(False)
|
|
37
|
+
queryset = self.model.objects.filter(pk__in=pks)
|
|
38
|
+
update_count = queryset.update(**kwargs)
|
|
55
39
|
|
|
56
40
|
# Run AFTER_UPDATE hooks
|
|
57
41
|
engine.run(model_cls, "after_update", instances, originals, ctx=ctx)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|