django-bulk-hooks 0.1.106__tar.gz → 0.1.108__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 (17) hide show
  1. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/manager.py +25 -8
  3. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/README.md +0 -0
  6. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/models.py +0 -0
  15. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/priority.py +0 -0
  16. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/django_bulk_hooks/queryset.py +0 -0
  17. {django_bulk_hooks-0.1.106 → django_bulk_hooks-0.1.108}/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.1.106
3
+ Version: 0.1.108
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
@@ -42,10 +42,13 @@ class BulkHookManager(models.Manager):
42
42
  """
43
43
  base_model = model_cls
44
44
  while base_model._meta.parents:
45
- parent = next(iter(base_model._meta.parents.values()))
46
- if not parent._meta.abstract:
47
- base_model = parent
45
+ # Get the first non-abstract parent model
46
+ for parent_model in base_model._meta.parents.keys():
47
+ if not parent_model._meta.abstract:
48
+ base_model = parent_model
49
+ break
48
50
  else:
51
+ # No non-abstract parents found, break the loop
49
52
  break
50
53
  return base_model
51
54
 
@@ -137,20 +140,32 @@ class BulkHookManager(models.Manager):
137
140
  continue
138
141
 
139
142
  # Handle multi-table inheritance
140
- # Step 1: Bulk create base objects without hooks
143
+ # Step 1: Bulk create base objects with hooks
141
144
  base_objects = self._extract_base_objects(class_objects, obj_class)
142
- created_base = super(models.Manager, self).bulk_create(base_objects, **kwargs)
145
+
146
+ # Use the model's manager with hooks
147
+ base_model = self._get_base_model(obj_class)
148
+ if hasattr(base_model.objects, 'bulk_create'):
149
+ # Use the base model's manager with hooks
150
+ created_base = base_model.objects.bulk_create(base_objects, **kwargs)
151
+ else:
152
+ # Fallback to _base_manager
153
+ created_base = base_model._base_manager.bulk_create(base_objects, **kwargs)
143
154
 
144
155
  # Step 2: Update original objects with base IDs
145
156
  for obj, base_obj in zip(class_objects, created_base):
146
157
  obj.pk = base_obj.pk
147
158
  obj._state.adding = False
148
159
 
149
- # Step 3: Bulk create child objects without hooks
160
+ # Step 3: Bulk create child objects with hooks
150
161
  child_objects = self._extract_child_objects(class_objects, obj_class)
151
162
  if child_objects:
152
- # Use _base_manager to avoid recursion
153
- obj_class._base_manager.bulk_create(child_objects, **kwargs)
163
+ # Use the model's manager with hooks
164
+ if hasattr(obj_class.objects, 'bulk_create'):
165
+ obj_class.objects.bulk_create(child_objects, **kwargs)
166
+ else:
167
+ # Fallback to _base_manager
168
+ obj_class._base_manager.bulk_create(child_objects, **kwargs)
154
169
 
155
170
  result.extend(class_objects)
156
171
 
@@ -160,6 +175,8 @@ class BulkHookManager(models.Manager):
160
175
  logger = logging.getLogger(__name__)
161
176
  logger.error(f"Error in _bulk_create_inherited for {obj_class}: {e}")
162
177
  logger.error(f"Model fields: {[f.name for f in obj_class._meta.fields]}")
178
+ logger.error(f"Base model: {self._get_base_model(obj_class)}")
179
+ logger.error(f"Base model manager: {self._get_base_model(obj_class).objects}")
163
180
  raise
164
181
 
165
182
  return result
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.106"
3
+ version = "0.1.108"
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"