@@ -456,22 +456,67 @@ def setup_scheduler(self, app):
456
456
self .m4 .save ()
457
457
self .m4 .refresh_from_db ()
458
458
459
- dt_aware = make_aware (datetime (day = 26 ,
460
- month = 7 ,
461
- year = 3000 ,
462
- hour = 1 ,
463
- minute = 0 )) # future time
459
+ # disabled, should not be in schedule
460
+ self .m5 = self .create_model_interval (
461
+ schedule (timedelta (seconds = 1 )))
462
+ self .m5 .enabled = False
463
+ self .m5 .save ()
464
+
465
+ # near future time (should be in schedule)
466
+ now = datetime .now ()
467
+ two_minutes_later = now + timedelta (minutes = 2 )
468
+ dt_aware = make_aware (
469
+ datetime (
470
+ day = two_minutes_later .day ,
471
+ month = two_minutes_later .month ,
472
+ year = two_minutes_later .year ,
473
+ hour = two_minutes_later .hour ,
474
+ minute = two_minutes_later .minute
475
+ )
476
+ )
464
477
self .m6 = self .create_model_clocked (
465
478
clocked (dt_aware )
466
479
)
467
480
self .m6 .save ()
468
481
self .m6 .refresh_from_db ()
469
482
470
- # disabled, should not be in schedule
471
- m5 = self .create_model_interval (
472
- schedule (timedelta (seconds = 1 )))
473
- m5 .enabled = False
474
- m5 .save ()
483
+ # distant future time (should not be in schedule)
484
+ ten_minutes_later = now + timedelta (minutes = 10 )
485
+ distant_dt_aware = make_aware (
486
+ datetime (
487
+ day = ten_minutes_later .day ,
488
+ month = ten_minutes_later .month ,
489
+ year = ten_minutes_later .year ,
490
+ hour = ten_minutes_later .hour ,
491
+ minute = ten_minutes_later .minute
492
+ )
493
+ )
494
+ self .m7 = self .create_model_clocked (
495
+ clocked (distant_dt_aware )
496
+ )
497
+ self .m7 .save ()
498
+ self .m7 .refresh_from_db ()
499
+
500
+ now_hour = timezone .localtime (timezone .now ()).hour
501
+ # near future time (should be in schedule)
502
+ self .m8 = self .create_model_crontab (
503
+ crontab (hour = str (now_hour )))
504
+ self .m8 .save ()
505
+ self .m8 .refresh_from_db ()
506
+ self .m9 = self .create_model_crontab (
507
+ crontab (hour = str ((now_hour + 1 ) % 24 )))
508
+ self .m9 .save ()
509
+ self .m9 .refresh_from_db ()
510
+ self .m10 = self .create_model_crontab (
511
+ crontab (hour = str ((now_hour - 1 ) % 24 )))
512
+ self .m10 .save ()
513
+ self .m10 .refresh_from_db ()
514
+
515
+ # distant future time (should not be in schedule)
516
+ self .m11 = self .create_model_crontab (
517
+ crontab (hour = str ((now_hour + 2 ) % 24 )))
518
+ self .m11 .save ()
519
+ self .m11 .refresh_from_db ()
475
520
476
521
self .s = self .Scheduler (app = self .app )
477
522
@@ -483,11 +528,21 @@ def test_constructor(self):
483
528
def test_all_as_schedule (self ):
484
529
sched = self .s .schedule
485
530
assert sched
486
- assert len (sched ) == 6
531
+ assert len (sched ) == 9
487
532
assert 'celery.backend_cleanup' in sched
488
533
for n , e in sched .items ():
489
534
assert isinstance (e , self .s .Entry )
490
535
536
+ def test_get_excluded_hours_for_crontab_tasks (self ):
537
+ now_hour = timezone .localtime (timezone .now ()).hour
538
+ excluded_hours = self .s .get_excluded_hours_for_crontab_tasks ()
539
+
540
+ assert str (now_hour ) not in excluded_hours
541
+ assert str ((now_hour + 1 ) % 24 ) not in excluded_hours
542
+ assert str ((now_hour - 1 ) % 24 ) not in excluded_hours
543
+ assert str ((now_hour + 2 ) % 24 ) in excluded_hours
544
+ assert str ((now_hour - 2 ) % 24 ) in excluded_hours
545
+
491
546
def test_schedule_changed (self ):
492
547
self .m2 .args = '[16, 16]'
493
548
self .m2 .save ()
0 commit comments