django-bulk-hooks 0.2.47__tar.gz → 0.2.48__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.

Files changed (26) hide show
  1. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/bulk_executor.py +12 -7
  3. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/LICENSE +0 -0
  5. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/README.md +0 -0
  6. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/changeset.py +0 -0
  8. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/conditions.py +0 -0
  9. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/constants.py +0 -0
  10. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/context.py +0 -0
  11. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/decorators.py +0 -0
  12. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/dispatcher.py +0 -0
  13. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/enums.py +0 -0
  14. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/factory.py +0 -0
  15. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/handler.py +0 -0
  16. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/helpers.py +0 -0
  17. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/manager.py +0 -0
  18. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/models.py +0 -0
  19. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/__init__.py +0 -0
  20. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/analyzer.py +0 -0
  21. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/coordinator.py +0 -0
  22. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/mti_handler.py +0 -0
  23. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/mti_plans.py +0 -0
  24. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/operations/record_classifier.py +0 -0
  25. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/queryset.py +0 -0
  26. {django_bulk_hooks-0.2.47 → django_bulk_hooks-0.2.48}/django_bulk_hooks/registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: django-bulk-hooks
3
- Version: 0.2.47
3
+ Version: 0.2.48
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
@@ -107,7 +107,7 @@ class BulkExecutor:
107
107
 
108
108
  # Tag objects with upsert metadata for hook dispatching
109
109
  if update_conflicts and unique_fields:
110
- self._tag_upsert_metadata(result, existing_record_ids)
110
+ self._tag_upsert_metadata(result, existing_record_ids, existing_pks_map)
111
111
 
112
112
  return result
113
113
 
@@ -126,8 +126,8 @@ class BulkExecutor:
126
126
  if update_conflicts and unique_fields:
127
127
  # Use pre-classified results if available, otherwise classify now
128
128
  if existing_record_ids is None:
129
- existing_record_ids, _ = self.record_classifier.classify_for_upsert(objs, unique_fields)
130
- self._tag_upsert_metadata(result, existing_record_ids)
129
+ existing_record_ids, existing_pks_map = self.record_classifier.classify_for_upsert(objs, unique_fields)
130
+ self._tag_upsert_metadata(result, existing_record_ids, existing_pks_map)
131
131
 
132
132
  return result
133
133
 
@@ -507,7 +507,7 @@ class BulkExecutor:
507
507
 
508
508
  return QuerySet.delete(self.queryset)
509
509
 
510
- def _tag_upsert_metadata(self, result_objects, existing_record_ids):
510
+ def _tag_upsert_metadata(self, result_objects, existing_record_ids, existing_pks_map):
511
511
  """
512
512
  Tag objects with metadata indicating whether they were created or updated.
513
513
 
@@ -517,13 +517,18 @@ class BulkExecutor:
517
517
  Args:
518
518
  result_objects: List of objects returned from bulk operation
519
519
  existing_record_ids: Set of id() for objects that existed before the operation
520
+ existing_pks_map: Dict mapping id(obj) -> pk for existing records
520
521
  """
521
522
  created_count = 0
522
523
  updated_count = 0
523
524
 
525
+ # Create a set of PKs that existed before the operation
526
+ existing_pks = set(existing_pks_map.values())
527
+
524
528
  for obj in result_objects:
525
- # Tag with metadata for hook dispatching
526
- was_created = id(obj) not in existing_record_ids
529
+ # Use PK to determine if this record was created or updated
530
+ # If the PK was in the existing_pks_map, it was updated; otherwise created
531
+ was_created = obj.pk not in existing_pks
527
532
  obj._bulk_hooks_was_created = was_created
528
533
  obj._bulk_hooks_upsert_metadata = True
529
534
 
@@ -534,6 +539,6 @@ class BulkExecutor:
534
539
 
535
540
  logger.info(
536
541
  f"Tagged upsert metadata: {created_count} created, {updated_count} updated "
537
- f"(total={len(result_objects)}, existing_ids={len(existing_record_ids)})"
542
+ f"(total={len(result_objects)}, existing_pks={len(existing_pks)})"
538
543
  )
539
544
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.2.47"
3
+ version = "0.2.48"
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"