File tree Expand file tree Collapse file tree 2 files changed +29
-6
lines changed Expand file tree Collapse file tree 2 files changed +29
-6
lines changed Original file line number Diff line number Diff line change 11"""Beat Scheduler Implementation."""
2+ from __future__ import annotations
3+
24import datetime
35import logging
46import math
@@ -340,7 +342,7 @@ def _get_crontab_exclude_query(self):
340342 + 24
341343 ) % 24
342344 )
343- for timezone_name in self ._get_unique_timezone_names ()
345+ for timezone_name in self ._get_unique_timezones ()
344346 ],
345347 # Default case - use hour as is
346348 default = F ('hour_int' )
@@ -359,11 +361,17 @@ def _get_crontab_exclude_query(self):
359361
360362 return exclude_query
361363
362- def _get_unique_timezone_names (self ):
363- """Get a list of all unique timezone names used in CrontabSchedule"""
364- return CrontabSchedule .objects .values_list (
365- 'timezone' , flat = True
366- ).distinct ()
364+ def _get_unique_timezones (self ) -> list [ZoneInfo ]:
365+ """Get a list of all unique timezones used in CrontabSchedule"""
366+ return list (
367+ CrontabSchedule .objects .order_by (
368+ 'timezone'
369+ ).distinct (
370+ 'timezone'
371+ ).values_list (
372+ 'timezone' , flat = True
373+ )
374+ )
367375
368376 def _get_timezone_offset (self , timezone_name ):
369377 """
Original file line number Diff line number Diff line change @@ -1059,6 +1059,21 @@ def test_crontab_special_hour_four(self):
10591059 # The hour=4 task should never be excluded
10601060 assert task_hour_four .id not in excluded_tasks
10611061
1062+ @pytest .mark .django_db
1063+ def test_get_unique_timezones (self ):
1064+ """
1065+ Test that get unique timezones returns a list of unique timezones
1066+ """
1067+ # Create 2 crontabs with same timezone, and 1 with different timezone
1068+ CrontabSchedule .objects .create (hour = '4' , timezone = 'UTC' )
1069+ CrontabSchedule .objects .create (hour = '4' , timezone = 'UTC' )
1070+ CrontabSchedule .objects .create (hour = '4' , timezone = 'America/New_York' )
1071+
1072+ timezones = self .s ._get_unique_timezones ()
1073+
1074+ assert len (timezones ) == 2
1075+ assert set (timezones ) == {ZoneInfo ('UTC' ), ZoneInfo ('America/New_York' )}
1076+
10621077 @pytest .mark .django_db
10631078 @patch ('django_celery_beat.schedulers.aware_now' )
10641079 @patch ('django.utils.timezone.get_current_timezone' )
You can’t perform that action at this time.
0 commit comments