django-bulk-hooks 0.1.60__tar.gz → 0.1.62__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.60 → django_bulk_hooks-0.1.62}/PKG-INFO +1 -1
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/decorators.py +18 -3
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/manager.py +4 -10
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/pyproject.toml +1 -1
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/LICENSE +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/README.md +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/engine.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/priority.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/queryset.py +0 -0
- {django_bulk_hooks-0.1.60 → django_bulk_hooks-0.1.62}/django_bulk_hooks/registry.py +0 -0
|
@@ -4,7 +4,7 @@ from functools import wraps
|
|
|
4
4
|
from django.core.exceptions import FieldDoesNotExist
|
|
5
5
|
from django_bulk_hooks.enums import DEFAULT_PRIORITY
|
|
6
6
|
from django_bulk_hooks.constants import BEFORE_UPDATE
|
|
7
|
-
from django_bulk_hooks.
|
|
7
|
+
from django_bulk_hooks.registry import register_hook
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def hook(event, *, model, condition=None, priority=DEFAULT_PRIORITY):
|
|
@@ -116,7 +116,22 @@ def bulk_hook(model_cls, event, when=None, priority=None):
|
|
|
116
116
|
priority: Optional priority for hook execution order
|
|
117
117
|
"""
|
|
118
118
|
def decorator(func):
|
|
119
|
-
#
|
|
120
|
-
|
|
119
|
+
# Create a simple handler class for the function
|
|
120
|
+
class FunctionHandler:
|
|
121
|
+
def __init__(self):
|
|
122
|
+
self.func = func
|
|
123
|
+
|
|
124
|
+
def handle(self, new_instances, original_instances):
|
|
125
|
+
return self.func(new_instances, original_instances)
|
|
126
|
+
|
|
127
|
+
# Register the hook using the registry
|
|
128
|
+
register_hook(
|
|
129
|
+
model=model_cls,
|
|
130
|
+
event=event,
|
|
131
|
+
handler_cls=FunctionHandler,
|
|
132
|
+
method_name='handle',
|
|
133
|
+
condition=when,
|
|
134
|
+
priority=priority or DEFAULT_PRIORITY,
|
|
135
|
+
)
|
|
121
136
|
return func
|
|
122
137
|
return decorator
|
|
@@ -22,7 +22,7 @@ class BulkLifecycleManager(models.Manager):
|
|
|
22
22
|
return LifecycleQuerySet(self.model, using=self._db)
|
|
23
23
|
|
|
24
24
|
@transaction.atomic
|
|
25
|
-
def bulk_update(self, objs, fields,
|
|
25
|
+
def bulk_update(self, objs, fields, bypass_hooks=False, **kwargs):
|
|
26
26
|
if not objs:
|
|
27
27
|
return []
|
|
28
28
|
|
|
@@ -53,9 +53,7 @@ class BulkLifecycleManager(models.Manager):
|
|
|
53
53
|
for i in range(0, len(objs), self.CHUNK_SIZE):
|
|
54
54
|
chunk = objs[i : i + self.CHUNK_SIZE]
|
|
55
55
|
# Call the base implementation to avoid re-triggering this method
|
|
56
|
-
super(models.Manager, self).bulk_update(
|
|
57
|
-
chunk, fields, batch_size=batch_size
|
|
58
|
-
)
|
|
56
|
+
super(models.Manager, self).bulk_update(chunk, fields, **kwargs)
|
|
59
57
|
|
|
60
58
|
if not bypass_hooks:
|
|
61
59
|
engine.run(model_cls, AFTER_UPDATE, objs, originals, ctx=ctx)
|
|
@@ -106,9 +104,7 @@ class BulkLifecycleManager(models.Manager):
|
|
|
106
104
|
return modified_fields
|
|
107
105
|
|
|
108
106
|
@transaction.atomic
|
|
109
|
-
def bulk_create(
|
|
110
|
-
self, objs, batch_size=None, ignore_conflicts=False, bypass_hooks=False
|
|
111
|
-
):
|
|
107
|
+
def bulk_create(self, objs, bypass_hooks=False, **kwargs):
|
|
112
108
|
model_cls = self.model
|
|
113
109
|
|
|
114
110
|
if any(not isinstance(obj, model_cls) for obj in objs):
|
|
@@ -125,9 +121,7 @@ class BulkLifecycleManager(models.Manager):
|
|
|
125
121
|
for i in range(0, len(objs), self.CHUNK_SIZE):
|
|
126
122
|
chunk = objs[i : i + self.CHUNK_SIZE]
|
|
127
123
|
result.extend(
|
|
128
|
-
super(models.Manager, self).bulk_create(
|
|
129
|
-
chunk, batch_size=batch_size, ignore_conflicts=ignore_conflicts
|
|
130
|
-
)
|
|
124
|
+
super(models.Manager, self).bulk_create(chunk, **kwargs)
|
|
131
125
|
)
|
|
132
126
|
|
|
133
127
|
if not bypass_hooks:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "django-bulk-hooks"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.62"
|
|
4
4
|
description = "Lifecycle-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"
|
|
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
|
|
File without changes
|