From 867f3443e340f8abe7c579c0b5afaa6314f2dfcb Mon Sep 17 00:00:00 2001 From: Troy Sankey Date: Mon, 3 Feb 2025 15:49:19 -0800 Subject: [PATCH] fix: cast datetime.datetime to DateTimeField as required by Coalesce() ENT-9941 --- CHANGELOG.rst | 4 ++++ enterprise/__init__.py | 2 +- .../commands/validate_default_enrollment_intentions.py | 9 +++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d868a6b55..987bf30b9 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,6 +17,10 @@ Unreleased ---------- * nothing unreleased +[5.6.10] +-------- +* fix: cast datetime.datetime to DateTimeField as required by Coalesce() + [5.6.9] -------- * fix: Do NOT skip validating intentions which have NO related catalog queries diff --git a/enterprise/__init__.py b/enterprise/__init__.py index dd9a5619e..3858e02d2 100644 --- a/enterprise/__init__.py +++ b/enterprise/__init__.py @@ -2,4 +2,4 @@ Your project description goes here. """ -__version__ = "5.6.9" +__version__ = "5.6.10" diff --git a/enterprise/management/commands/validate_default_enrollment_intentions.py b/enterprise/management/commands/validate_default_enrollment_intentions.py index 819ee7834..e1c524f1e 100644 --- a/enterprise/management/commands/validate_default_enrollment_intentions.py +++ b/enterprise/management/commands/validate_default_enrollment_intentions.py @@ -6,8 +6,8 @@ from datetime import timedelta from django.core.management import BaseCommand, CommandError -from django.db.models import Max -from django.db.models.functions import Coalesce, Greatest +from django.db.models import DateTimeField, Max +from django.db.models.functions import Cast, Coalesce, Greatest from django.utils import timezone from enterprise.content_metadata.api import get_and_cache_customer_content_metadata @@ -100,8 +100,9 @@ def handle(self, *args, **options): Max("enterprise_customer__enterprise_customer_catalogs__modified"), Coalesce( Max("enterprise_customer__enterprise_customer_catalogs__enterprise_catalog_query__modified"), - # Arbitrarily default to 1 year ago. Greatest() in MySQL relies on all inputs being non-null. - timezone.now() - timedelta(days=360), + # Note 1: Arbitrarily fallback to 1 year ago because Greatest() in MySQL relies on non-null inputs. + # Note 2: Cast python datetime to django field type, or else experience weird errors in prod. + Cast(timezone.now() - timedelta(days=360), DateTimeField()) ) ) )