django-bulk-hooks 0.1.108__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.108 → django_bulk_hooks-0.1.109}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/manager.py +32 -10
  3. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/README.md +0 -0
  6. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/models.py +0 -0
  15. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/priority.py +0 -0
  16. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.109}/django_bulk_hooks/queryset.py +0 -0
  17. {django_bulk_hooks-0.1.108 → 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.108
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
@@ -145,11 +145,17 @@ class BulkHookManager(models.Manager):
145
145
 
146
146
  # Use the model's manager with hooks
147
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
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
153
159
  created_base = base_model._base_manager.bulk_create(base_objects, **kwargs)
154
160
 
155
161
  # Step 2: Update original objects with base IDs
@@ -160,11 +166,14 @@ class BulkHookManager(models.Manager):
160
166
  # Step 3: Bulk create child objects with hooks
161
167
  child_objects = self._extract_child_objects(class_objects, obj_class)
162
168
  if child_objects:
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
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
168
177
  obj_class._base_manager.bulk_create(child_objects, **kwargs)
169
178
 
170
179
  result.extend(class_objects)
@@ -177,6 +186,19 @@ class BulkHookManager(models.Manager):
177
186
  logger.error(f"Model fields: {[f.name for f in obj_class._meta.fields]}")
178
187
  logger.error(f"Base model: {self._get_base_model(obj_class)}")
179
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
+
180
202
  raise
181
203
 
182
204
  return result
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.108"
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"