django-bulk-hooks 0.1.271__tar.gz → 0.1.273__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.271 → django_bulk_hooks-0.1.273}/PKG-INFO +1 -1
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/queryset.py +23 -8
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/pyproject.toml +1 -1
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/LICENSE +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/README.md +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/engine.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/manager.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/priority.py +0 -0
- {django_bulk_hooks-0.1.271 → django_bulk_hooks-0.1.273}/django_bulk_hooks/registry.py +0 -0
|
@@ -534,13 +534,14 @@ class HookQuerySetMixin:
|
|
|
534
534
|
unique_value = {}
|
|
535
535
|
query_fields = {} # Track which database field to use for each unique field
|
|
536
536
|
for field_name in unique_fields:
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
query_fields[field_name] = field_name
|
|
540
|
-
elif hasattr(obj, field_name + '_id'):
|
|
537
|
+
# First check for _id field (more reliable for ForeignKeys)
|
|
538
|
+
if hasattr(obj, field_name + '_id'):
|
|
541
539
|
# Handle ForeignKey fields where _id suffix is used
|
|
542
540
|
unique_value[field_name] = getattr(obj, field_name + '_id')
|
|
543
541
|
query_fields[field_name] = field_name + '_id' # Use _id field for query
|
|
542
|
+
elif hasattr(obj, field_name):
|
|
543
|
+
unique_value[field_name] = getattr(obj, field_name)
|
|
544
|
+
query_fields[field_name] = field_name
|
|
544
545
|
if unique_value:
|
|
545
546
|
unique_values.append((unique_value, query_fields))
|
|
546
547
|
|
|
@@ -566,19 +567,29 @@ class HookQuerySetMixin:
|
|
|
566
567
|
existing_query = model_cls.objects.filter(existing_filters)
|
|
567
568
|
logger.debug(f"DEBUG: Existence check SQL: {existing_query.query}")
|
|
568
569
|
|
|
569
|
-
|
|
570
|
+
# Also get the raw database values for debugging
|
|
571
|
+
raw_existing = list(existing_query.values_list(*unique_fields))
|
|
572
|
+
logger.debug(f"DEBUG: Raw existing records from DB: {raw_existing}")
|
|
573
|
+
|
|
574
|
+
existing_records_found = []
|
|
575
|
+
for existing_record in raw_existing:
|
|
570
576
|
# Convert tuple to a hashable key for lookup
|
|
571
577
|
existing_records_lookup.add(existing_record)
|
|
578
|
+
existing_records_found.append(existing_record)
|
|
579
|
+
|
|
580
|
+
logger.debug(f"DEBUG: Found {len(existing_records_found)} existing records: {existing_records_found}")
|
|
581
|
+
logger.debug(f"DEBUG: Existing records lookup set: {existing_records_lookup}")
|
|
572
582
|
|
|
573
583
|
# Separate records based on whether they already exist
|
|
574
584
|
for obj in objs:
|
|
575
585
|
obj_unique_value = {}
|
|
576
586
|
for field_name in unique_fields:
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
elif hasattr(obj, field_name + '_id'):
|
|
587
|
+
# First check for _id field (more reliable for ForeignKeys)
|
|
588
|
+
if hasattr(obj, field_name + '_id'):
|
|
580
589
|
# Handle ForeignKey fields where _id suffix is used
|
|
581
590
|
obj_unique_value[field_name] = getattr(obj, field_name + '_id')
|
|
591
|
+
elif hasattr(obj, field_name):
|
|
592
|
+
obj_unique_value[field_name] = getattr(obj, field_name)
|
|
582
593
|
|
|
583
594
|
# Check if this record already exists using our bulk lookup
|
|
584
595
|
if obj_unique_value:
|
|
@@ -587,10 +598,14 @@ class HookQuerySetMixin:
|
|
|
587
598
|
obj_unique_value[field_name]
|
|
588
599
|
for field_name in unique_fields
|
|
589
600
|
)
|
|
601
|
+
logger.debug(f"DEBUG: Object unique tuple: {obj_unique_tuple}")
|
|
602
|
+
logger.debug(f"DEBUG: Object unique value: {obj_unique_value}")
|
|
590
603
|
if obj_unique_tuple in existing_records_lookup:
|
|
591
604
|
existing_records.append(obj)
|
|
605
|
+
logger.debug(f"DEBUG: Found existing record for tuple: {obj_unique_tuple}")
|
|
592
606
|
else:
|
|
593
607
|
new_records.append(obj)
|
|
608
|
+
logger.debug(f"DEBUG: No existing record found for tuple: {obj_unique_tuple}")
|
|
594
609
|
else:
|
|
595
610
|
# If we can't determine uniqueness, treat as new
|
|
596
611
|
new_records.append(obj)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "django-bulk-hooks"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.273"
|
|
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"
|
|
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
|
|
File without changes
|