django-bulk-hooks 0.1.75__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.

Files changed (17) hide show
  1. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/context.py +0 -10
  3. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/manager.py +5 -15
  4. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/queryset.py +2 -10
  5. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/pyproject.toml +1 -1
  6. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/LICENSE +0 -0
  7. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/README.md +0 -0
  8. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/__init__.py +0 -0
  9. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/conditions.py +0 -0
  10. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/constants.py +0 -0
  11. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/decorators.py +0 -0
  12. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/engine.py +0 -0
  13. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/enums.py +0 -0
  14. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/handler.py +0 -0
  15. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/models.py +0 -0
  16. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/priority.py +0 -0
  17. {django_bulk_hooks-0.1.75 → django_bulk_hooks-0.1.76}/django_bulk_hooks/registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.1.75
3
+ Version: 0.1.76
4
4
  Summary: Hook-style hooks for Django bulk operations like bulk_create and bulk_update.
5
5
  License: MIT
6
6
  Keywords: django,bulk,hooks
@@ -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, is_in_bulk_operation, set_bulk_operation_flag
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
- # Check if we're already in a hook context (recursive call)
41
- # If so, refetch the current database state like Salesforce does
42
- import threading
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
 
@@ -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):
@@ -21,7 +20,6 @@ class HookQuerySet(models.QuerySet):
21
20
 
22
21
  # Load originals for hook comparison
23
22
  originals = list(model_cls.objects.filter(pk__in=pks))
24
- originals_by_pk = {obj.pk: obj for obj in originals}
25
23
 
26
24
  # Apply field updates to instances
27
25
  for obj in instances:
@@ -36,14 +34,8 @@ class HookQuerySet(models.QuerySet):
36
34
  engine.run(model_cls, "before_update", instances, originals, ctx=ctx)
37
35
 
38
36
  # Use Django's built-in update logic directly
39
- # Set flag to prevent recursion during the actual update
40
- from django_bulk_hooks.context import set_bulk_operation_flag
41
- set_bulk_operation_flag(True)
42
- try:
43
- queryset = self.model.objects.filter(pk__in=pks)
44
- update_count = queryset.update(**kwargs)
45
- finally:
46
- set_bulk_operation_flag(False)
37
+ queryset = self.model.objects.filter(pk__in=pks)
38
+ update_count = queryset.update(**kwargs)
47
39
 
48
40
  # Run AFTER_UPDATE hooks
49
41
  engine.run(model_cls, "after_update", instances, originals, ctx=ctx)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.75"
3
+ version = "0.1.76"
4
4
  description = "Hook-style hooks for Django bulk operations like bulk_create and bulk_update."
5
5
  authors = ["Konrad Beck <konrad.beck@merchantcapital.co.za>"]
6
6
  readme = "README.md"