django-bulk-hooks 0.2.26__tar.gz → 0.2.28__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.2.26 → django_bulk_hooks-0.2.28}/PKG-INFO +1 -1
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/bulk_executor.py +4 -50
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/pyproject.toml +1 -1
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/LICENSE +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/README.md +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/changeset.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/dispatcher.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/factory.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/helpers.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/manager.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/__init__.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/analyzer.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/coordinator.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/mti_handler.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/mti_plans.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/record_classifier.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/queryset.py +0 -0
- {django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/registry.py +0 -0
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/bulk_executor.py
RENAMED
|
@@ -455,69 +455,23 @@ class BulkExecutor:
|
|
|
455
455
|
case_statements = {}
|
|
456
456
|
for field_name in field_group.fields:
|
|
457
457
|
field = field_group.model_class._meta.get_field(field_name)
|
|
458
|
-
|
|
459
|
-
# Use column name for FK fields
|
|
460
|
-
if getattr(field, "is_relation", False) and hasattr(field, "attname"):
|
|
461
|
-
db_field_name = field.attname
|
|
462
|
-
# Get the field object for the database column, not the target field
|
|
463
|
-
target_field = field_group.model_class._meta.get_field(field.attname)
|
|
464
|
-
logger.error(f"DEBUG FK FIELD RESOLUTION: field_name={field_name}, db_field_name={db_field_name}")
|
|
465
|
-
logger.error(f"DEBUG FK ORIGINAL FIELD: {field}")
|
|
466
|
-
logger.error(f"DEBUG FK TARGET FIELD: {target_field}")
|
|
467
|
-
logger.error(f"DEBUG FK TARGET FIELD TYPE: {type(target_field)}")
|
|
468
|
-
logger.error(f"DEBUG FK TARGET FIELD CLASS: {target_field.__class__}")
|
|
469
|
-
else:
|
|
470
|
-
db_field_name = field_name
|
|
471
|
-
target_field = field
|
|
472
|
-
|
|
473
458
|
when_statements = []
|
|
459
|
+
|
|
474
460
|
for pk, obj in zip(root_pks, plan.objects):
|
|
475
461
|
obj_pk = getattr(obj, "pk", None) or getattr(obj, "id", None)
|
|
476
462
|
if obj_pk is None:
|
|
477
463
|
continue
|
|
478
464
|
|
|
479
|
-
value = getattr(obj,
|
|
480
|
-
|
|
481
|
-
# For FK fields, ensure we get the actual ID value, not the related object
|
|
482
|
-
if getattr(field, "is_relation", False) and hasattr(field, "attname"):
|
|
483
|
-
# ADD DEBUG LOGGING
|
|
484
|
-
logger.error(f"DEBUG FK CONVERSION: field={field_name}, db_field={db_field_name}")
|
|
485
|
-
logger.error(f"DEBUG FK VALUE BEFORE: value={value!r}, type={type(value)}")
|
|
486
|
-
logger.error(f"DEBUG FK field.attname={field.attname}, field.target_field={getattr(field, 'target_field', 'N/A')}")
|
|
487
|
-
|
|
488
|
-
# If value is a model instance, get its pk
|
|
489
|
-
if value is not None and hasattr(value, "pk"):
|
|
490
|
-
value = value.pk
|
|
491
|
-
logger.error(f"DEBUG FK: Extracted pk from model instance: {value!r}")
|
|
492
|
-
# If value is a string representation of an ID, convert to int
|
|
493
|
-
elif value is not None and isinstance(value, str):
|
|
494
|
-
logger.error(f"DEBUG FK: Value is string, isdigit()={value.isdigit()}")
|
|
495
|
-
if value.isdigit():
|
|
496
|
-
value = int(value)
|
|
497
|
-
logger.error(f"DEBUG FK: Converted string to int: {value!r}")
|
|
498
|
-
elif value == "":
|
|
499
|
-
value = None
|
|
500
|
-
logger.error(f"DEBUG FK: Converted empty string to None")
|
|
501
|
-
else:
|
|
502
|
-
logger.error(f"DEBUG FK: String value doesn't pass isdigit() check! ASCII codes: {[ord(c) for c in value]}")
|
|
503
|
-
|
|
504
|
-
logger.error(f"DEBUG FK VALUE AFTER: value={value!r}, type={type(value)}")
|
|
505
|
-
|
|
506
|
-
# Create the Value expression - always use output_field to ensure correct type casting
|
|
507
|
-
value_expr = Value(value, output_field=target_field)
|
|
508
|
-
logger.error(f"DEBUG VALUE EXPRESSION: value={value!r}, output_field={target_field}, value_expr={value_expr}")
|
|
509
|
-
|
|
465
|
+
value = getattr(obj, field_name)
|
|
510
466
|
when_statements.append(
|
|
511
467
|
When(
|
|
512
468
|
**{field_group.filter_field: pk},
|
|
513
|
-
then=
|
|
469
|
+
then=Value(value, output_field=field),
|
|
514
470
|
),
|
|
515
471
|
)
|
|
516
472
|
|
|
517
473
|
if when_statements:
|
|
518
|
-
case_statements[
|
|
519
|
-
*when_statements, output_field=target_field,
|
|
520
|
-
)
|
|
474
|
+
case_statements[field_name] = Case(*when_statements, output_field=field)
|
|
521
475
|
|
|
522
476
|
# Execute bulk update
|
|
523
477
|
if case_statements:
|
|
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
|
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/__init__.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/analyzer.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/coordinator.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/mti_handler.py
RENAMED
|
File without changes
|
{django_bulk_hooks-0.2.26 → django_bulk_hooks-0.2.28}/django_bulk_hooks/operations/mti_plans.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|