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 1
1
"""Beat Scheduler Implementation."""
2
+ from __future__ import annotations
3
+
2
4
import datetime
3
5
import logging
4
6
import math
@@ -340,7 +342,7 @@ def _get_crontab_exclude_query(self):
340
342
+ 24
341
343
) % 24
342
344
)
343
- for timezone_name in self ._get_unique_timezone_names ()
345
+ for timezone_name in self ._get_unique_timezones ()
344
346
],
345
347
# Default case - use hour as is
346
348
default = F ('hour_int' )
@@ -359,11 +361,17 @@ def _get_crontab_exclude_query(self):
359
361
360
362
return exclude_query
361
363
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
+ )
367
375
368
376
def _get_timezone_offset (self , timezone_name ):
369
377
"""
Original file line number Diff line number Diff line change @@ -1059,6 +1059,21 @@ def test_crontab_special_hour_four(self):
1059
1059
# The hour=4 task should never be excluded
1060
1060
assert task_hour_four .id not in excluded_tasks
1061
1061
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
+
1062
1077
@pytest .mark .django_db
1063
1078
@patch ('django_celery_beat.schedulers.aware_now' )
1064
1079
@patch ('django.utils.timezone.get_current_timezone' )
You can’t perform that action at this time.
0 commit comments