diff options
-rw-r--r-- | apscheduler/triggers/date.py | 5 | ||||
-rw-r--r-- | docs/versionhistory.rst | 2 | ||||
-rw-r--r-- | tests/test_triggers.py | 14 |
3 files changed, 15 insertions, 6 deletions
diff --git a/apscheduler/triggers/date.py b/apscheduler/triggers/date.py index c8a26dd..0768100 100644 --- a/apscheduler/triggers/date.py +++ b/apscheduler/triggers/date.py @@ -18,7 +18,10 @@ class DateTrigger(BaseTrigger): def __init__(self, run_date=None, timezone=None): timezone = astimezone(timezone) or get_localzone() - self.run_date = convert_to_datetime(run_date or datetime.now(), timezone, 'run_date') + if run_date is not None: + self.run_date = convert_to_datetime(run_date, timezone, 'run_date') + else: + self.run_date = datetime.now(timezone) def get_next_fire_time(self, previous_fire_time, now): return self.run_date if previous_fire_time is None else None diff --git a/docs/versionhistory.rst b/docs/versionhistory.rst index e85a9a5..a99615c 100644 --- a/docs/versionhistory.rst +++ b/docs/versionhistory.rst @@ -16,6 +16,8 @@ APScheduler, see the :doc:`migration section <migration>`. * Fixed some events missing from ``apscheduler.events.__all__`` and ``apscheduler.events.EVENTS_ALL`` +* Fixed wrong run time being set for date trigger when the timezone isn't the same as the local one + 3.1.0 ----- diff --git a/tests/test_triggers.py b/tests/test_triggers.py index 8e81116..728148c 100644 --- a/tests/test_triggers.py +++ b/tests/test_triggers.py @@ -234,9 +234,13 @@ class TestDateTrigger(object): ('2009-7-6', None, None, datetime(2009, 9, 2), datetime(2009, 7, 6)), (datetime(2009, 7, 6), None, datetime(2009, 7, 6), datetime(2009, 9, 2), None), (datetime(2009, 7, 5, 22), pytz.FixedOffset(-60), datetime(2009, 7, 6), - datetime(2009, 7, 6), None) - ], ids=['earlier', 'exact', 'later', 'as text', 'previously fired', 'alternate timezone']) - def test_get_next_fire_time(self, run_date, alter_tz, previous, now, expected, timezone): + datetime(2009, 7, 6), None), + (None, pytz.FixedOffset(-120), None, datetime(2011, 4, 3, 18, 40), + datetime(2011, 4, 3, 18, 40)) + ], ids=['earlier', 'exact', 'later', 'as text', 'previously fired', 'alternate timezone', + 'current_time']) + def test_get_next_fire_time(self, run_date, alter_tz, previous, now, expected, timezone, + freeze_time): trigger = DateTrigger(run_date, alter_tz or timezone) previous = timezone.localize(previous) if previous else None now = timezone.localize(now) @@ -246,7 +250,8 @@ class TestDateTrigger(object): @pytest.mark.parametrize('is_dst', [True, False], ids=['daylight saving', 'standard time']) def test_dst_change(self, is_dst): """ - Making sure that DateTrigger works during the ambiguous "fall-back" DST period. + Test that DateTrigger works during the ambiguous "fall-back" DST period. + Note that you should explicitly compare datetimes as strings to avoid the internal datetime comparison which would test for equality in the UTC timezone. @@ -268,7 +273,6 @@ class TestDateTrigger(object): def test_pickle(self, timezone): """Test that the trigger is pickleable.""" - trigger = DateTrigger(date(2016, 4, 3), timezone=timezone) data = pickle.dumps(trigger, 2) trigger2 = pickle.loads(data) |