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.
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/PKG-INFO +1 -1
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/manager.py +30 -10
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/pyproject.toml +1 -1
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/LICENSE +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/README.md +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/__init__.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/conditions.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/constants.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/context.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/decorators.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/engine.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/enums.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/handler.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/models.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/priority.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/queryset.py +0 -0
- {django_bulk_hooks-0.1.108 → django_bulk_hooks-0.1.110}/django_bulk_hooks/registry.py +0 -0
|
@@ -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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
|
164
|
-
|
|
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.
|
|
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"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|