summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apscheduler/triggers/date.py5
-rw-r--r--docs/versionhistory.rst2
-rw-r--r--tests/test_triggers.py14
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)