diff options
author | Alex Grönholm <alex.gronholm@nextday.fi> | 2015-03-09 01:06:57 +0200 |
---|---|---|
committer | Alex Grönholm <alex.gronholm@nextday.fi> | 2015-03-09 01:25:56 +0200 |
commit | 9364bd36b40a4d6de54cf161208bb240e3fdb445 (patch) | |
tree | 50b7a94c09bad31b0266bc9e5527b7ae579701ce | |
parent | c9886da1edd8d7694aad3e6ae6a785890ccff6eb (diff) | |
download | apscheduler-9364bd36b40a4d6de54cf161208bb240e3fdb445.tar.gz |
Fixed str(job) or unicode(job) raising an exception for pending jobs (fixes #67)
-rw-r--r-- | apscheduler/job.py | 10 | ||||
-rw-r--r-- | docs/versionhistory.rst | 2 | ||||
-rw-r--r-- | tests/test_job.py | 31 |
3 files changed, 28 insertions, 15 deletions
diff --git a/apscheduler/job.py b/apscheduler/job.py index f5639da..9ab19d0 100644 --- a/apscheduler/job.py +++ b/apscheduler/job.py @@ -245,8 +245,12 @@ class Job(object): return '<Job (id=%s name=%s)>' % (repr_escape(self.id), repr_escape(self.name)) def __str__(self): - return '%s (trigger: %s, next run at: %s)' % (repr_escape(self.name), repr_escape(str(self.trigger)), - datetime_repr(self.next_run_time)) + return repr_escape(self.__unicode__()) def __unicode__(self): - return six.u('%s (trigger: %s, next run at: %s)') % (self.name, self.trigger, datetime_repr(self.next_run_time)) + if hasattr(self, 'next_run_time'): + status = 'next run at: ' + datetime_repr(self.next_run_time) if self.next_run_time else 'paused' + else: + status = 'pending' + + return six.u('%s (trigger: %s, %s)') % (self.name, self.trigger, status) diff --git a/docs/versionhistory.rst b/docs/versionhistory.rst index b83dce9..5663e19 100644 --- a/docs/versionhistory.rst +++ b/docs/versionhistory.rst @@ -14,6 +14,8 @@ APScheduler, see the :doc:`migration section <migration>`. * Fixed exception when loading all jobs from the redis job store when there are paused jobs in it +* Fixed AttributeError when printing a job list when there were pending jobs + 3.0.1 ----- diff --git a/tests/test_job.py b/tests/test_job.py index 8518352..405d92e 100644 --- a/tests/test_job.py +++ b/tests/test_job.py @@ -253,17 +253,24 @@ def test_repr(job): assert repr(job) == b'<Job (id=t\xc3\xa9st\xc3\xafd name=n\xc3\xa4m\xc3\xa9)>'.decode('utf-8') -def test_str(job): - if six.PY2: - expected = 'n\\xe4m\\xe9 (trigger: date[2011-04-03 18:40:00 CEST], next run at: None)' +@pytest.mark.parametrize('status, expected_status', [ + ('scheduled', 'next run at: 2011-04-03 18:40:00 CEST'), + ('paused', 'paused'), + ('pending', 'pending') +], ids=['scheduled', 'paused', 'pending']) +@pytest.mark.parametrize('unicode', [False, True], ids=['nativestr', 'unicode']) +def test_str(create_job, status, unicode, expected_status): + job = create_job(func=dummyfunc) + if status == 'scheduled': + job.next_run_time = job.trigger.run_date + elif status == 'pending': + del job.next_run_time + + if six.PY2 and not unicode: + expected = 'n\\xe4m\\xe9 (trigger: date[2011-04-03 18:40:00 CEST], %s)' % expected_status else: - expected = b'n\xc3\xa4m\xc3\xa9 (trigger: date[2011-04-03 18:40:00 CEST], next run at: None)'.\ - decode('utf-8') - - assert str(job) == expected - + expected = b'n\xc3\xa4m\xc3\xa9 (trigger: date[2011-04-03 18:40:00 CEST], %s)'.\ + decode('utf-8') % expected_status -@maxpython(3, 0) -def test_unicode(job): - assert job.__unicode__() == \ - b'n\xc3\xa4m\xc3\xa9 (trigger: date[2011-04-03 18:40:00 CEST], next run at: None)'.decode('utf-8') + result = job.__unicode__() if unicode else job.__str__() + assert result == expected |