summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2015-03-09 01:06:57 +0200
committerAlex Grönholm <alex.gronholm@nextday.fi>2015-03-09 01:25:56 +0200
commit9364bd36b40a4d6de54cf161208bb240e3fdb445 (patch)
tree50b7a94c09bad31b0266bc9e5527b7ae579701ce
parentc9886da1edd8d7694aad3e6ae6a785890ccff6eb (diff)
downloadapscheduler-9364bd36b40a4d6de54cf161208bb240e3fdb445.tar.gz
Fixed str(job) or unicode(job) raising an exception for pending jobs (fixes #67)
-rw-r--r--apscheduler/job.py10
-rw-r--r--docs/versionhistory.rst2
-rw-r--r--tests/test_job.py31
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