django-bulk-hooks 0.1.108__tar.gz → 0.1.110__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.110}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/manager.py +30 -10
  3. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/README.md +0 -0
  6. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/models.py +0 -0
  15. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/priority.py +0 -0
  16. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/queryset.py +0 -0
  17. {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/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.110
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,12 +166,13 @@ 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
+ # Use _base_manager to avoid recursion with custom managers
170
+ try:
168
171
  obj_class._base_manager.bulk_create(child_objects, **kwargs)
172
+ except RecursionError:
173
+ # If recursion error, use individual saves
174
+ for obj in child_objects:
175
+ obj.save()
169
176
 
170
177
  result.extend(class_objects)
171
178
 
@@ -177,6 +184,19 @@ class BulkHookManager(models.Manager):
177
184
  logger.error(f"Model fields: {[f.name for f in obj_class._meta.fields]}")
178
185
  logger.error(f"Base model: {self._get_base_model(obj_class)}")
179
186
  logger.error(f"Base model manager: {self._get_base_model(obj_class).objects}")
187
+
188
+ # If it's a recursion error, try a simpler approach
189
+ if isinstance(e, RecursionError):
190
+ logger.error("Recursion error detected, trying fallback approach")
191
+ try:
192
+ # Fallback: use individual saves
193
+ for obj in class_objects:
194
+ obj.save()
195
+ result.extend(class_objects)
196
+ continue
197
+ except Exception as fallback_error:
198
+ logger.error(f"Fallback approach also failed: {fallback_error}")
199
+
180
200
  raise
181
201
 
182
202
  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.110"
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"