django-bulk-hooks 0.2.51__tar.gz → 0.2.52__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 (27) hide show
  1. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/mti_handler.py +10 -7
  3. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/LICENSE +0 -0
  5. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/README.md +0 -0
  6. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/changeset.py +0 -0
  8. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/conditions.py +0 -0
  9. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/constants.py +0 -0
  10. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/context.py +0 -0
  11. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/decorators.py +0 -0
  12. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/dispatcher.py +0 -0
  13. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/enums.py +0 -0
  14. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/factory.py +0 -0
  15. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/handler.py +0 -0
  16. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/helpers.py +0 -0
  17. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/manager.py +0 -0
  18. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/models.py +0 -0
  19. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/__init__.py +0 -0
  20. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/analyzer.py +0 -0
  21. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/bulk_executor.py +0 -0
  22. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/coordinator.py +0 -0
  23. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/field_utils.py +0 -0
  24. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/mti_plans.py +0 -0
  25. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/operations/record_classifier.py +0 -0
  26. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/django_bulk_hooks/queryset.py +0 -0
  27. {django_bulk_hooks-0.2.51 → django_bulk_hooks-0.2.52}/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.51
3
+ Version: 0.2.52
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
@@ -121,26 +121,29 @@ class MTIHandler:
121
121
  - If parent exists but child doesn't: creating child for existing parent → AFTER_UPDATE
122
122
  - If neither exists: creating both parent and child → AFTER_CREATE
123
123
 
124
- Therefore, we return the root parent model to check if the parent record exists,
125
- regardless of where the unique fields are defined.
124
+ Therefore, we find the model that contains all the unique fields, regardless
125
+ of whether it's the parent or child model.
126
126
 
127
127
  Args:
128
128
  unique_fields: List of field names forming the unique constraint
129
129
 
130
130
  Returns:
131
- Model class to query for existing records (root parent for MTI)
131
+ Model class to query for existing records (model containing unique fields)
132
132
  """
133
133
  if not unique_fields:
134
134
  return self.model_cls
135
135
 
136
136
  inheritance_chain = self.get_inheritance_chain()
137
137
 
138
- # For MTI models with multiple levels, return the root parent model
139
- # This ensures we check if the parent exists, which determines create vs update hooks
138
+ # For MTI models, find the model in the chain that contains ALL unique fields
140
139
  if len(inheritance_chain) > 1:
141
- return inheritance_chain[0] # Root parent model
140
+ # Walk through inheritance chain from child to parent
141
+ for model in reversed(inheritance_chain): # Start with child, end with root parent
142
+ model_field_names = {f.name for f in model._meta.local_fields}
143
+ if all(field in model_field_names for field in unique_fields):
144
+ return model
142
145
 
143
- # For non-MTI models (shouldn't happen, but safe fallback)
146
+ # For non-MTI models or as fallback
144
147
  return self.model_cls
145
148
 
146
149
  # ==================== MTI BULK CREATE PLANNING ====================
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.2.51"
3
+ version = "0.2.52"
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"