django-bulk-hooks 0.1.189__py3-none-any.whl → 0.1.190__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 +29 -11
- django_bulk_hooks/queryset.py +15 -4
- {django_bulk_hooks-0.1.189.dist-info → django_bulk_hooks-0.1.190.dist-info}/METADATA +1 -1
- {django_bulk_hooks-0.1.189.dist-info → django_bulk_hooks-0.1.190.dist-info}/RECORD +6 -6
- {django_bulk_hooks-0.1.189.dist-info → django_bulk_hooks-0.1.190.dist-info}/LICENSE +0 -0
- {django_bulk_hooks-0.1.189.dist-info → django_bulk_hooks-0.1.190.dist-info}/WHEEL +0 -0
django_bulk_hooks/manager.py
CHANGED
|
@@ -12,18 +12,36 @@ def inject_bulk_hook_behavior(queryset):
|
|
|
12
12
|
queryset: Any Django QuerySet instance
|
|
13
13
|
|
|
14
14
|
Returns:
|
|
15
|
-
|
|
15
|
+
A new queryset instance with bulk hook functionality added
|
|
16
16
|
"""
|
|
17
|
-
if
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
if isinstance(queryset, HookQuerySetMixin):
|
|
18
|
+
# Already has hook functionality, return as-is
|
|
19
|
+
return queryset
|
|
20
|
+
|
|
21
|
+
# Create a new class that inherits from both HookQuerySetMixin and the queryset's class
|
|
22
|
+
HookedQuerySetClass = type(
|
|
23
|
+
"HookedQuerySet",
|
|
24
|
+
(HookQuerySetMixin, queryset.__class__),
|
|
25
|
+
{
|
|
26
|
+
'__module__': 'django_bulk_hooks.queryset',
|
|
27
|
+
'__doc__': f'Dynamically created queryset with bulk hook functionality for {queryset.__class__.__name__}'
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Create a new instance with the same parameters
|
|
32
|
+
new_queryset = HookedQuerySetClass(
|
|
33
|
+
model=queryset.model,
|
|
34
|
+
query=queryset.query,
|
|
35
|
+
using=queryset._db,
|
|
36
|
+
hints=queryset._hints
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# Copy any additional attributes that might be important
|
|
40
|
+
for attr, value in queryset.__dict__.items():
|
|
41
|
+
if not hasattr(new_queryset, attr):
|
|
42
|
+
setattr(new_queryset, attr, value)
|
|
43
|
+
|
|
44
|
+
return new_queryset
|
|
27
45
|
|
|
28
46
|
|
|
29
47
|
class BulkHookManager(models.Manager):
|
django_bulk_hooks/queryset.py
CHANGED
|
@@ -642,10 +642,16 @@ class HookQuerySetMixin:
|
|
|
642
642
|
# If objects have pk set but are not loaded from DB, use those PKs
|
|
643
643
|
root_pks = []
|
|
644
644
|
for obj in batch:
|
|
645
|
-
|
|
646
|
-
|
|
645
|
+
# Check both pk and id attributes
|
|
646
|
+
pk_value = getattr(obj, 'pk', None)
|
|
647
|
+
if pk_value is None:
|
|
648
|
+
pk_value = getattr(obj, 'id', None)
|
|
649
|
+
|
|
650
|
+
if pk_value is not None:
|
|
651
|
+
root_pks.append(pk_value)
|
|
652
|
+
print(f"Found PK {pk_value} for object {obj}")
|
|
647
653
|
else:
|
|
648
|
-
print(f"WARNING: Object {obj} has no primary key")
|
|
654
|
+
print(f"WARNING: Object {obj} has no primary key (pk={getattr(obj, 'pk', None)}, id={getattr(obj, 'id', None)})")
|
|
649
655
|
continue
|
|
650
656
|
|
|
651
657
|
print(f"Root PKs to update: {root_pks}")
|
|
@@ -708,7 +714,12 @@ class HookQuerySetMixin:
|
|
|
708
714
|
|
|
709
715
|
print(f"Building CASE statement for field: {field_name}")
|
|
710
716
|
for pk, obj in zip(pks, batch):
|
|
711
|
-
|
|
717
|
+
# Check both pk and id attributes for the object
|
|
718
|
+
obj_pk = getattr(obj, 'pk', None)
|
|
719
|
+
if obj_pk is None:
|
|
720
|
+
obj_pk = getattr(obj, 'id', None)
|
|
721
|
+
|
|
722
|
+
if obj_pk is None:
|
|
712
723
|
continue
|
|
713
724
|
value = getattr(obj, field_name)
|
|
714
725
|
print(f" PK {pk}: {field_name} = {value}")
|
|
@@ -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=YvkwOix_740hxahCtDg1sK3eTHTAZnUSyF1T09VNBaY,4671
|
|
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=eaeSmYW3VrJjhom_wXKzndmEkrKm-xaG0qflYhKSgIA,31663
|
|
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.190.dist-info/LICENSE,sha256=dguKIcbDGeZD-vXWdLyErPUALYOvtX_fO4Zjhq481uk,1088
|
|
15
|
+
django_bulk_hooks-0.1.190.dist-info/METADATA,sha256=SskcUNxKkMSOb_OG2APxuDQf-pocG6dgPlXIBCg7PeY,7418
|
|
16
|
+
django_bulk_hooks-0.1.190.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
17
|
+
django_bulk_hooks-0.1.190.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|