From 2b55fef0316003280a2de098ab076153fc6330b9 Mon Sep 17 00:00:00 2001 From: Steven K Date: Mon, 25 Aug 2025 15:51:02 -0700 Subject: [PATCH 1/4] Update import handling for cron_descriptor > 2.0.x compatibility --- django_celery_beat/models.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py index ad53a288..2276a840 100644 --- a/django_celery_beat/models.py +++ b/django_celery_beat/models.py @@ -8,8 +8,15 @@ import timezone_field from celery import current_app, schedules -from cron_descriptor import (FormatException, MissingFieldException, - WrongArgumentException, get_description) + +try: + from cron_descriptor import (FormatError, MissingFieldError, + WrongArgumentError, get_description) +except ImportError: + from cron_descriptor import FormatException as FormatError + from cron_descriptor import MissingFieldException as MissingFieldError + from cron_descriptor import WrongArgumentException as WrongArgumentError + from django.conf import settings from django.core.exceptions import MultipleObjectsReturned, ValidationError from django.core.validators import MaxValueValidator, MinValueValidator @@ -340,9 +347,9 @@ def human_readable(self): try: human_readable = get_description(cron_expression) except ( - MissingFieldException, - FormatException, - WrongArgumentException + MissingFieldError, + FormatError, + WrongArgumentError ): return f'{cron_expression} {str(self.timezone)}' return f'{human_readable} {str(self.timezone)}' From 5403b09a65c04ef8df8c108c709894f4fbcfb1dd Mon Sep 17 00:00:00 2001 From: Steven Date: Sun, 31 Aug 2025 12:30:43 -0700 Subject: [PATCH 2/4] Update django_celery_beat/models.py Add comment per request Co-authored-by: Christian Clauss --- django_celery_beat/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py index 2276a840..ca70f846 100644 --- a/django_celery_beat/models.py +++ b/django_celery_beat/models.py @@ -12,7 +12,7 @@ try: from cron_descriptor import (FormatError, MissingFieldError, WrongArgumentError, get_description) -except ImportError: +except ImportError: # Python < 3.11 must use cron_descriptor < 2.0 which uses *Exception exceptions. from cron_descriptor import FormatException as FormatError from cron_descriptor import MissingFieldException as MissingFieldError from cron_descriptor import WrongArgumentException as WrongArgumentError From 73a998923430abf529c6be1d62862f233565543e Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 29 Sep 2025 10:24:09 -0700 Subject: [PATCH 3/4] Apply suggestion from @cclauss Co-authored-by: Christian Clauss --- django_celery_beat/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py index ca70f846..5b616511 100644 --- a/django_celery_beat/models.py +++ b/django_celery_beat/models.py @@ -9,7 +9,7 @@ import timezone_field from celery import current_app, schedules -try: +try: # Python >= 3.11 can use cron_descriptor >= 2.0 which uses *Error exceptions. from cron_descriptor import (FormatError, MissingFieldError, WrongArgumentError, get_description) except ImportError: # Python < 3.11 must use cron_descriptor < 2.0 which uses *Exception exceptions. From 83fbd8b8fd5225c60445800af07aec1f884878da Mon Sep 17 00:00:00 2001 From: Steven K Date: Mon, 29 Sep 2025 10:26:14 -0700 Subject: [PATCH 4/4] Ruff cleanup --- django_celery_beat/models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py index 5b616511..32dee622 100644 --- a/django_celery_beat/models.py +++ b/django_celery_beat/models.py @@ -9,10 +9,11 @@ import timezone_field from celery import current_app, schedules -try: # Python >= 3.11 can use cron_descriptor >= 2.0 which uses *Error exceptions. +# Python >= 3.11 can use cron_descriptor >= 2.0 which uses *Error exceptions. +try: from cron_descriptor import (FormatError, MissingFieldError, WrongArgumentError, get_description) -except ImportError: # Python < 3.11 must use cron_descriptor < 2.0 which uses *Exception exceptions. +except ImportError: from cron_descriptor import FormatException as FormatError from cron_descriptor import MissingFieldException as MissingFieldError from cron_descriptor import WrongArgumentException as WrongArgumentError