""" Custom Celery Beat scheduler to fix Python 3.12 zoneinfo compatibility issue. This patches the _default_now method to work with zoneinfo.ZoneInfo instead of pytz. """ from django_celery_beat.schedulers import DatabaseScheduler, ModelEntry class PatchedModelEntry(ModelEntry): """ Custom model entry that fixes the zoneinfo.ZoneInfo compatibility issue. """ def _default_now(self): """ Return the current time in the configured timezone. This fixes the AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' """ from django.utils import timezone return timezone.now() class PatchedDatabaseScheduler(DatabaseScheduler): """ Custom scheduler that fixes the zoneinfo.ZoneInfo compatibility issue in django-celery-beat 2.1.0 with Python 3.12. """ Entry = PatchedModelEntry def _default_now(self): """ Return the current time in the configured timezone. This fixes the AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' """ from django.utils import timezone return timezone.now()