django-bulk-hooks 0.1.188__py3-none-any.whl → 0.1.189__py3-none-any.whl
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/manager.py +30 -3
- django_bulk_hooks/queryset.py +14 -1
- {django_bulk_hooks-0.1.188.dist-info → django_bulk_hooks-0.1.189.dist-info}/METADATA +8 -3
- {django_bulk_hooks-0.1.188.dist-info → django_bulk_hooks-0.1.189.dist-info}/RECORD +6 -6
- {django_bulk_hooks-0.1.188.dist-info → django_bulk_hooks-0.1.189.dist-info}/LICENSE +0 -0
- {django_bulk_hooks-0.1.188.dist-info → django_bulk_hooks-0.1.189.dist-info}/WHEEL +0 -0
django_bulk_hooks/manager.py
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
|
|
3
|
-
from django_bulk_hooks.queryset import HookQuerySet
|
|
3
|
+
from django_bulk_hooks.queryset import HookQuerySet, HookQuerySetMixin
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def inject_bulk_hook_behavior(queryset):
|
|
7
|
+
"""
|
|
8
|
+
Dynamically inject bulk hook behavior into any queryset.
|
|
9
|
+
This follows the industry-standard pattern for cooperative queryset extensions.
|
|
10
|
+
|
|
11
|
+
Args:
|
|
12
|
+
queryset: Any Django QuerySet instance
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
The same queryset instance with bulk hook functionality added
|
|
16
|
+
"""
|
|
17
|
+
if not isinstance(queryset, HookQuerySetMixin):
|
|
18
|
+
# Create a new class that inherits from both HookQuerySetMixin and the queryset's class
|
|
19
|
+
HookedQuerySetClass = type(
|
|
20
|
+
"HookedQuerySet",
|
|
21
|
+
(HookQuerySetMixin, queryset.__class__),
|
|
22
|
+
{}
|
|
23
|
+
)
|
|
24
|
+
# Change the instance's class to the new hybrid class
|
|
25
|
+
queryset.__class__ = HookedQuerySetClass
|
|
26
|
+
return queryset
|
|
4
27
|
|
|
5
28
|
|
|
6
29
|
class BulkHookManager(models.Manager):
|
|
7
30
|
def get_queryset(self):
|
|
8
|
-
|
|
9
|
-
|
|
31
|
+
# Use super().get_queryset() to let Django and MRO build the queryset
|
|
32
|
+
# This ensures cooperation with other managers
|
|
33
|
+
base_queryset = super().get_queryset()
|
|
34
|
+
|
|
35
|
+
# Inject our bulk hook behavior into the queryset
|
|
36
|
+
return inject_bulk_hook_behavior(base_queryset)
|
|
10
37
|
|
|
11
38
|
def bulk_create(
|
|
12
39
|
self,
|
django_bulk_hooks/queryset.py
CHANGED
|
@@ -17,7 +17,12 @@ from django_bulk_hooks.context import HookContext
|
|
|
17
17
|
from django.db.models import When, Value, Case
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
class
|
|
20
|
+
class HookQuerySetMixin:
|
|
21
|
+
"""
|
|
22
|
+
A mixin that provides bulk hook functionality to any QuerySet.
|
|
23
|
+
This can be dynamically injected into querysets from other managers.
|
|
24
|
+
"""
|
|
25
|
+
|
|
21
26
|
@transaction.atomic
|
|
22
27
|
def delete(self):
|
|
23
28
|
objs = list(self)
|
|
@@ -727,3 +732,11 @@ class HookQuerySet(models.QuerySet):
|
|
|
727
732
|
|
|
728
733
|
print(f"Batch total updated: {total_updated}")
|
|
729
734
|
return total_updated
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
class HookQuerySet(HookQuerySetMixin, models.QuerySet):
|
|
738
|
+
"""
|
|
739
|
+
A QuerySet that provides bulk hook functionality.
|
|
740
|
+
This is the traditional approach for backward compatibility.
|
|
741
|
+
"""
|
|
742
|
+
pass
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: django-bulk-hooks
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.189
|
|
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
|
|
@@ -202,15 +202,20 @@ reordered = [account3, account1, account2] # IDs: 3, 1, 2
|
|
|
202
202
|
LoanAccount.objects.bulk_update(reordered, ['balance'])
|
|
203
203
|
```
|
|
204
204
|
|
|
205
|
-
## 🧩 Integration with
|
|
205
|
+
## 🧩 Integration with Other Managers
|
|
206
206
|
|
|
207
|
-
You can extend from `BulkHookManager` to
|
|
207
|
+
You can extend from `BulkHookManager` to work with other manager classes. The manager uses a cooperative approach that dynamically injects bulk hook functionality into any queryset, ensuring compatibility with other managers.
|
|
208
208
|
|
|
209
209
|
```python
|
|
210
|
+
from django_bulk_hooks.manager import BulkHookManager
|
|
211
|
+
from queryable_properties.managers import QueryablePropertiesManager
|
|
212
|
+
|
|
210
213
|
class MyManager(BulkHookManager, QueryablePropertiesManager):
|
|
211
214
|
pass
|
|
212
215
|
```
|
|
213
216
|
|
|
217
|
+
This approach uses the industry-standard injection pattern, similar to how `QueryablePropertiesManager` works, ensuring both functionalities work seamlessly together without any framework-specific knowledge.
|
|
218
|
+
|
|
214
219
|
## 📝 License
|
|
215
220
|
|
|
216
221
|
MIT © 2024 Augend / Konrad Beck
|
|
@@ -6,12 +6,12 @@ django_bulk_hooks/decorators.py,sha256=WD7Jn7QAvY8F4wOsYlIpjoM9-FdHXSKB7hH9ot-lk
|
|
|
6
6
|
django_bulk_hooks/engine.py,sha256=nA5PU9msk_Ju5Gf_sTd7GqPscuTxEW5itCDAoSScYGI,1645
|
|
7
7
|
django_bulk_hooks/enums.py,sha256=Zo8_tJzuzZ2IKfVc7gZ-0tWPT8q1QhqZbAyoh9ZVJbs,381
|
|
8
8
|
django_bulk_hooks/handler.py,sha256=xZt8iNdYF-ACz-MnKMY0co6scWINU5V5wC1lyDn844k,4854
|
|
9
|
-
django_bulk_hooks/manager.py,sha256=
|
|
9
|
+
django_bulk_hooks/manager.py,sha256=kQtCYven1jy4Ix8By84Ppql_YmOCIrroMsx0sF8DMC0,4090
|
|
10
10
|
django_bulk_hooks/models.py,sha256=7fnx5xd4HWXfLVlFhhiRzR92JRWFEuxgk6aSWLEsyJg,3996
|
|
11
11
|
django_bulk_hooks/priority.py,sha256=HG_2D35nga68lBCZmSXTcplXrjFoRgZFRDOy4ROKonY,376
|
|
12
|
-
django_bulk_hooks/queryset.py,sha256=
|
|
12
|
+
django_bulk_hooks/queryset.py,sha256=EfjQsMxQZALvklgXxaocYSJcYi6Ci2cPqHZRA8yU7bg,31080
|
|
13
13
|
django_bulk_hooks/registry.py,sha256=-mQBizJ06nz_tajZBinViKx_uP2Tbc1tIpTEMv7lwKA,705
|
|
14
|
-
django_bulk_hooks-0.1.
|
|
15
|
-
django_bulk_hooks-0.1.
|
|
16
|
-
django_bulk_hooks-0.1.
|
|
17
|
-
django_bulk_hooks-0.1.
|
|
14
|
+
django_bulk_hooks-0.1.189.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
|
|
15
|
+
django_bulk_hooks-0.1.189.dist-info/METADATA,sha256=8216ShJl-ccuV5WsJfrGxDvC0BG8a7zm3I4iQh2HiLI,7418
|
|
16
|
+
django_bulk_hooks-0.1.189.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
17
|
+
django_bulk_hooks-0.1.189.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|