diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py index ad53a288..32dee622 100644 --- a/django_celery_beat/models.py +++ b/django_celery_beat/models.py @@ -8,8 +8,16 @@ import timezone_field from celery import current_app, schedules -from cron_descriptor import (FormatException, MissingFieldException, - WrongArgumentException, get_description) + +# 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: + 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 +348,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)}'