django-bulk-hooks 0.1.151__tar.gz → 0.1.153__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.
Files changed (17) hide show
  1. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/queryset.py +21 -15
  3. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/README.md +0 -0
  6. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/manager.py +0 -0
  15. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/models.py +0 -0
  16. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/django_bulk_hooks/priority.py +0 -0
  17. {django_bulk_hooks-0.1.151 → django_bulk_hooks-0.1.153}/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.151
3
+ Version: 0.1.153
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
@@ -120,26 +120,28 @@ class HookQuerySet(models.QuerySet):
120
120
  # For MTI models, we need to handle them specially
121
121
  if is_mti:
122
122
  # Use our MTI-specific logic
123
+ # Filter out custom parameters that Django's bulk_create doesn't accept
124
+ mti_kwargs = {
125
+ 'batch_size': batch_size,
126
+ 'ignore_conflicts': ignore_conflicts,
127
+ 'update_conflicts': update_conflicts,
128
+ 'update_fields': update_fields,
129
+ 'unique_fields': unique_fields,
130
+ }
131
+ # Remove custom hook kwargs if present in self.bulk_create signature
123
132
  result = self._mti_bulk_create(
124
133
  objs,
125
- batch_size=batch_size,
126
- ignore_conflicts=ignore_conflicts,
127
- update_conflicts=update_conflicts,
128
- update_fields=update_fields,
129
- unique_fields=unique_fields,
134
+ **{k: v for k, v in mti_kwargs.items() if k not in ['bypass_hooks', 'bypass_validation']}
130
135
  )
131
136
  else:
132
137
  # For single-table models, use Django's built-in bulk_create
133
138
  # but we need to call it on the base manager to avoid recursion
134
139
  # Filter out custom parameters that Django's bulk_create doesn't accept
135
140
 
136
- # Use Django's original manager to avoid recursive calls
137
- # Get the original manager class (not our BulkHookManager)
138
- from django.db.models import Manager
139
- original_manager = Manager()
140
- original_manager.model = model_cls
141
- original_manager._db = self.db
142
- result = original_manager.bulk_create(
141
+ # Use Django's original QuerySet to avoid recursive calls
142
+ from django.db.models import QuerySet
143
+ original_qs = QuerySet(model_cls, using=self.db)
144
+ result = original_qs.bulk_create(
143
145
  objs,
144
146
  batch_size=batch_size,
145
147
  ignore_conflicts=ignore_conflicts,
@@ -196,7 +198,9 @@ class HookQuerySet(models.QuerySet):
196
198
  chunk = objs[i : i + self.CHUNK_SIZE]
197
199
 
198
200
  # Call the base implementation to avoid re-triggering this method
199
- super().bulk_update(chunk, fields, **kwargs)
201
+ # Filter out custom parameters that Django's bulk_update doesn't accept
202
+ django_kwargs = {k: v for k, v in kwargs.items() if k not in ['bypass_hooks', 'bypass_validation']}
203
+ super().bulk_update(chunk, fields, **django_kwargs)
200
204
 
201
205
  if not bypass_hooks:
202
206
  engine.run(model_cls, AFTER_UPDATE, objs, originals, ctx=ctx)
@@ -301,6 +305,8 @@ class HookQuerySet(models.QuerySet):
301
305
  then single bulk insert into childmost table.
302
306
  Sets auto_now_add/auto_now fields for each model in the chain.
303
307
  """
308
+ # Remove custom hook kwargs before passing to Django internals
309
+ django_kwargs = {k: v for k, v in kwargs.items() if k not in ['bypass_hooks', 'bypass_validation']}
304
310
  if inheritance_chain is None:
305
311
  inheritance_chain = self._get_inheritance_chain()
306
312
 
@@ -310,13 +316,13 @@ class HookQuerySet(models.QuerySet):
310
316
  "Inheritance chain too deep - possible infinite recursion detected"
311
317
  )
312
318
 
313
- batch_size = kwargs.get("batch_size") or len(objs)
319
+ batch_size = django_kwargs.get("batch_size") or len(objs)
314
320
  created_objects = []
315
321
  with transaction.atomic(using=self.db, savepoint=False):
316
322
  for i in range(0, len(objs), batch_size):
317
323
  batch = objs[i : i + batch_size]
318
324
  batch_result = self._process_mti_batch(
319
- batch, inheritance_chain, **kwargs
325
+ batch, inheritance_chain, **django_kwargs
320
326
  )
321
327
  created_objects.extend(batch_result)
322
328
  return created_objects
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.151"
3
+ version = "0.1.153"
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"