django-bulk-hooks 0.1.107__tar.gz → 0.1.109__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.107 → django_bulk_hooks-0.1.109}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/manager.py +41 -5
  3. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/README.md +0 -0
  6. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/models.py +0 -0
  15. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/priority.py +0 -0
  16. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/django_bulk_hooks/queryset.py +0 -0
  17. {django_bulk_hooks-0.1.107 → django_bulk_hooks-0.1.109}/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.107
3
+ Version: 0.1.109
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
@@ -140,20 +140,41 @@ class BulkHookManager(models.Manager):
140
140
  continue
141
141
 
142
142
  # Handle multi-table inheritance
143
- # Step 1: Bulk create base objects without hooks
143
+ # Step 1: Bulk create base objects with hooks
144
144
  base_objects = self._extract_base_objects(class_objects, obj_class)
145
- 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
+
149
+ # Try to avoid recursion by using raw SQL or _base_manager
150
+ try:
151
+ if hasattr(base_model.objects, 'bulk_create'):
152
+ # Use the base model's manager with hooks
153
+ created_base = base_model.objects.bulk_create(base_objects, **kwargs)
154
+ else:
155
+ # Fallback to _base_manager
156
+ created_base = base_model._base_manager.bulk_create(base_objects, **kwargs)
157
+ except RecursionError:
158
+ # If recursion error, use _base_manager directly
159
+ created_base = base_model._base_manager.bulk_create(base_objects, **kwargs)
146
160
 
147
161
  # Step 2: Update original objects with base IDs
148
162
  for obj, base_obj in zip(class_objects, created_base):
149
163
  obj.pk = base_obj.pk
150
164
  obj._state.adding = False
151
165
 
152
- # Step 3: Bulk create child objects without hooks
166
+ # Step 3: Bulk create child objects with hooks
153
167
  child_objects = self._extract_child_objects(class_objects, obj_class)
154
168
  if child_objects:
155
- # Use _base_manager to avoid recursion
156
- obj_class._base_manager.bulk_create(child_objects, **kwargs)
169
+ # Try to avoid recursion by using raw SQL or _base_manager
170
+ try:
171
+ if hasattr(obj_class.objects, 'bulk_create'):
172
+ obj_class.objects.bulk_create(child_objects, **kwargs)
173
+ else:
174
+ obj_class._base_manager.bulk_create(child_objects, **kwargs)
175
+ except RecursionError:
176
+ # If recursion error, use _base_manager directly
177
+ obj_class._base_manager.bulk_create(child_objects, **kwargs)
157
178
 
158
179
  result.extend(class_objects)
159
180
 
@@ -163,6 +184,21 @@ class BulkHookManager(models.Manager):
163
184
  logger = logging.getLogger(__name__)
164
185
  logger.error(f"Error in _bulk_create_inherited for {obj_class}: {e}")
165
186
  logger.error(f"Model fields: {[f.name for f in obj_class._meta.fields]}")
187
+ logger.error(f"Base model: {self._get_base_model(obj_class)}")
188
+ logger.error(f"Base model manager: {self._get_base_model(obj_class).objects}")
189
+
190
+ # If it's a recursion error, try a simpler approach
191
+ if isinstance(e, RecursionError):
192
+ logger.error("Recursion error detected, trying fallback approach")
193
+ try:
194
+ # Fallback: use individual saves
195
+ for obj in class_objects:
196
+ obj.save()
197
+ result.extend(class_objects)
198
+ continue
199
+ except Exception as fallback_error:
200
+ logger.error(f"Fallback approach also failed: {fallback_error}")
201
+
166
202
  raise
167
203
 
168
204
  return result
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.107"
3
+ version = "0.1.109"
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"