diff options
author | Alex Grönholm <alex.gronholm@nextday.fi> | 2016-11-05 22:55:19 +0200 |
---|---|---|
committer | Alex Grönholm <alex.gronholm@nextday.fi> | 2016-11-05 22:59:08 +0200 |
commit | 87c77c1d077bd107f6a1199d27246127b423d778 (patch) | |
tree | 9ee2b611ab2d44b1308f61a703721a4ec98b166f | |
parent | 02b05e070a8a2c40f7482f2b69c6811df481ddc5 (diff) | |
download | apscheduler-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__.py | 4 | ||||
-rw-r--r-- | apscheduler/triggers/interval.py | 4 | ||||
-rw-r--r-- | tests/test_triggers.py | 18 |
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) |