summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2016-11-05 22:55:19 +0200
committerAlex Grönholm <alex.gronholm@nextday.fi>2016-11-05 22:59:08 +0200
commit87c77c1d077bd107f6a1199d27246127b423d778 (patch)
tree9ee2b611ab2d44b1308f61a703721a4ec98b166f
parent02b05e070a8a2c40f7482f2b69c6811df481ddc5 (diff)
downloadapscheduler-87c77c1d077bd107f6a1199d27246127b423d778.tar.gz
Fixed passing start_time and/or end_time to CronTrigger and IntervalTrigger as strings (fixes #164)
This previously raised an AttributeError because the __init__() did not check if they were datetimes before trying to access the tzinfo attribute.
-rw-r--r--apscheduler/triggers/cron/__init__.py4
-rw-r--r--apscheduler/triggers/interval.py4
-rw-r--r--tests/test_triggers.py18
3 files changed, 22 insertions, 4 deletions
diff --git a/apscheduler/triggers/cron/__init__.py b/apscheduler/triggers/cron/__init__.py
index e6cdc68..eccee0c 100644
--- a/apscheduler/triggers/cron/__init__.py
+++ b/apscheduler/triggers/cron/__init__.py
@@ -48,9 +48,9 @@ class CronTrigger(BaseTrigger):
minute=None, second=None, start_date=None, end_date=None, timezone=None):
if timezone:
self.timezone = astimezone(timezone)
- elif start_date and start_date.tzinfo:
+ elif isinstance(start_date, datetime) and start_date.tzinfo:
self.timezone = start_date.tzinfo
- elif end_date and end_date.tzinfo:
+ elif isinstance(end_date, datetime) and end_date.tzinfo:
self.timezone = end_date.tzinfo
else:
self.timezone = get_localzone()
diff --git a/apscheduler/triggers/interval.py b/apscheduler/triggers/interval.py
index a8bed03..fec912a 100644
--- a/apscheduler/triggers/interval.py
+++ b/apscheduler/triggers/interval.py
@@ -35,9 +35,9 @@ class IntervalTrigger(BaseTrigger):
if timezone:
self.timezone = astimezone(timezone)
- elif start_date and start_date.tzinfo:
+ elif isinstance(start_date, datetime) and start_date.tzinfo:
self.timezone = start_date.tzinfo
- elif end_date and end_date.tzinfo:
+ elif isinstance(end_date, datetime) and end_date.tzinfo:
self.timezone = end_date.tzinfo
else:
self.timezone = get_localzone()
diff --git a/tests/test_triggers.py b/tests/test_triggers.py
index 4c15cf9..c22136e 100644
--- a/tests/test_triggers.py
+++ b/tests/test_triggers.py
@@ -8,6 +8,11 @@ from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.date import DateTrigger
from apscheduler.triggers.interval import IntervalTrigger
+try:
+ from unittest.mock import Mock
+except ImportError:
+ from mock import Mock
+
class TestCronTrigger(object):
def test_cron_trigger_1(self, timezone):
@@ -41,6 +46,12 @@ class TestCronTrigger(object):
correct_next_date = timezone.localize(datetime(2012, 2, 29))
assert trigger.get_next_fire_time(None, start_date) == correct_next_date
+ def test_start_end_times_string(self, timezone, monkeypatch):
+ monkeypatch.setattr('apscheduler.triggers.cron.get_localzone', Mock(return_value=timezone))
+ trigger = CronTrigger(start_date='2016-11-05 05:06:53', end_date='2017-11-05 05:11:32')
+ assert trigger.start_date == timezone.localize(datetime(2016, 11, 5, 5, 6, 53))
+ assert trigger.end_date == timezone.localize(datetime(2017, 11, 5, 5, 11, 32))
+
def test_cron_zero_value(self, timezone):
trigger = CronTrigger(year=2009, month=2, hour=0, timezone=timezone)
assert repr(trigger) == ("<CronTrigger (year='2009', month='2', hour='0', "
@@ -301,6 +312,13 @@ class TestIntervalTrigger(object):
def test_invalid_interval(self, timezone):
pytest.raises(TypeError, IntervalTrigger, '1-6', timezone=timezone)
+ def test_start_end_times_string(self, timezone, monkeypatch):
+ monkeypatch.setattr('apscheduler.triggers.interval.get_localzone',
+ Mock(return_value=timezone))
+ trigger = IntervalTrigger(start_date='2016-11-05 05:06:53', end_date='2017-11-05 05:11:32')
+ assert trigger.start_date == timezone.localize(datetime(2016, 11, 5, 5, 6, 53))
+ assert trigger.end_date == timezone.localize(datetime(2017, 11, 5, 5, 11, 32))
+
def test_before(self, trigger, timezone):
"""Tests that if "start_date" is later than "now", it will return start_date."""
now = trigger.start_date - timedelta(seconds=2)