django-bulk-hooks 0.1.255__tar.gz → 0.1.257__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.255 → django_bulk_hooks-0.1.257}/PKG-INFO +1 -1
  2. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/queryset.py +32 -1
  3. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/pyproject.toml +1 -1
  4. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/LICENSE +0 -0
  5. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/README.md +0 -0
  6. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/__init__.py +0 -0
  7. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/conditions.py +0 -0
  8. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/constants.py +0 -0
  9. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/context.py +0 -0
  10. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/decorators.py +0 -0
  11. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/engine.py +0 -0
  12. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/enums.py +0 -0
  13. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/handler.py +0 -0
  14. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/manager.py +0 -0
  15. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/models.py +0 -0
  16. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/django_bulk_hooks/priority.py +0 -0
  17. {django_bulk_hooks-0.1.255 → django_bulk_hooks-0.1.257}/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.255
3
+ Version: 0.1.257
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
@@ -815,8 +815,9 @@ class HookQuerySetMixin:
815
815
  )
816
816
 
817
817
  logger.debug(
818
- f"bulk_update {model_cls.__name__} bypass_hooks={bypass_hooks} objs={len(objs)}"
818
+ f"bulk_update {model_cls.__name__} bypass_hooks={bypass_hooks} objs={len(objs)} fields={fields}"
819
819
  )
820
+ print(f"DEBUG: bulk_update {model_cls.__name__} bypass_hooks={bypass_hooks} objs={len(objs)} fields={fields}")
820
821
 
821
822
  # Check for MTI
822
823
  is_mti = False
@@ -839,15 +840,41 @@ class HookQuerySetMixin:
839
840
  # Handle auto_now fields like Django's update_or_create does
840
841
  fields_set = set(fields)
841
842
  pk_fields = model_cls._meta.pk_fields
843
+ auto_now_fields = []
844
+ logger.debug(f"Checking for auto_now fields in {model_cls.__name__}")
842
845
  for field in model_cls._meta.local_concrete_fields:
843
846
  # Only add auto_now fields (like updated_at) that aren't already in the fields list
844
847
  # Don't include auto_now_add fields (like created_at) as they should only be set on creation
845
848
  if hasattr(field, "auto_now") and field.auto_now:
849
+ logger.debug(f"Found auto_now field: {field.name}")
850
+ print(f"DEBUG: Found auto_now field: {field.name}")
846
851
  if field.name not in fields_set and field.name not in pk_fields:
847
852
  fields_set.add(field.name)
848
853
  if field.name != field.attname:
849
854
  fields_set.add(field.attname)
855
+ auto_now_fields.append(field.name)
856
+ logger.debug(f"Added auto_now field {field.name} to fields list")
857
+ print(f"DEBUG: Added auto_now field {field.name} to fields list")
858
+ else:
859
+ logger.debug(f"Auto_now field {field.name} already in fields list or is PK")
860
+ print(f"DEBUG: Auto_now field {field.name} already in fields list or is PK")
861
+ elif hasattr(field, "auto_now_add") and field.auto_now_add:
862
+ logger.debug(f"Found auto_now_add field: {field.name} (skipping)")
863
+
864
+ logger.debug(f"Auto_now fields detected: {auto_now_fields}")
865
+ print(f"DEBUG: Auto_now fields detected: {auto_now_fields}")
850
866
  fields = list(fields_set)
867
+
868
+ # Set auto_now field values to current timestamp
869
+ if auto_now_fields:
870
+ from django.utils import timezone
871
+ current_time = timezone.now()
872
+ print(f"DEBUG: Setting auto_now fields {auto_now_fields} to current time: {current_time}")
873
+ logger.debug(f"Setting auto_now fields {auto_now_fields} to current time: {current_time}")
874
+ for obj in objs:
875
+ for field_name in auto_now_fields:
876
+ setattr(obj, field_name, current_time)
877
+ print(f"DEBUG: Set {field_name} to {current_time} for object {obj.pk}")
851
878
 
852
879
  # Handle MTI models differently
853
880
  if is_mti:
@@ -860,8 +887,10 @@ class HookQuerySetMixin:
860
887
  if k not in ["bypass_hooks", "bypass_validation"]
861
888
  }
862
889
  logger.debug("Calling Django bulk_update")
890
+ print("DEBUG: Calling Django bulk_update")
863
891
  # Build a per-object concrete value map to avoid leaking expressions into hooks
864
892
  value_map = {}
893
+ logger.debug(f"Building value map for {len(objs)} objects with fields: {fields}")
865
894
  for obj in objs:
866
895
  if obj.pk is None:
867
896
  continue
@@ -869,6 +898,8 @@ class HookQuerySetMixin:
869
898
  for field_name in fields:
870
899
  # Capture raw values assigned on the object (not expressions)
871
900
  field_values[field_name] = getattr(obj, field_name)
901
+ if field_name in auto_now_fields:
902
+ logger.debug(f"Object {obj.pk} {field_name}: {field_values[field_name]}")
872
903
  if field_values:
873
904
  value_map[obj.pk] = field_values
874
905
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-bulk-hooks"
3
- version = "0.1.255"
3
+ version = "0.1.257"
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"