summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoragronholm <devnull@localhost>2010-05-19 07:32:28 +0300
committeragronholm <devnull@localhost>2010-05-19 07:32:28 +0300
commitab50a8448388f077c689c7063211fd31d16ca715 (patch)
treeeb64d6ad3c6f06eac3fea5eedd70ad19ebfac362
parent6e9f98d2b8ec02706c24f17fb2b46e961c61038c (diff)
downloadapscheduler-ab50a8448388f077c689c7063211fd31d16ca715.tar.gz
Improvements/changes to __repr__(), __str__()
-rw-r--r--apscheduler/expressions.py23
-rw-r--r--apscheduler/fields.py3
-rw-r--r--apscheduler/scheduler.py6
-rw-r--r--apscheduler/triggers.py13
-rw-r--r--tests/apschedulertests/testexpressions.py28
-rw-r--r--tests/apschedulertests/testscheduler.py10
-rw-r--r--tests/apschedulertests/testtriggers.py18
7 files changed, 81 insertions, 20 deletions
diff --git a/apscheduler/expressions.py b/apscheduler/expressions.py
index 5415006..d19754d 100644
--- a/apscheduler/expressions.py
+++ b/apscheduler/expressions.py
@@ -41,7 +41,7 @@ class AllExpression(object):
return '*'
def __repr__(self):
- return '%s(%s)' % (self.__class__.__name__, str(self))
+ return "%s(%s)" % (self.__class__.__name__, self.step)
class RangeExpression(AllExpression):
@@ -90,6 +90,14 @@ class RangeExpression(AllExpression):
return '%s/%d' % (range, self.step)
return range
+ def __repr__(self):
+ args = [str(self.first)]
+ if self.last != self.first and self.last is not None or self.step:
+ args.append(str(self.last))
+ if self.step:
+ args.append(str(self.step))
+ return "%s(%s)" % (self.__class__.__name__, ', '.join(args))
+
class WeekdayRangeExpression(RangeExpression):
value_re = re.compile(r'(?P<first>[a-z]+)(?:-(?P<last>[a-z]+))?',
@@ -112,10 +120,16 @@ class WeekdayRangeExpression(RangeExpression):
RangeExpression.__init__(self, first_num, last_num)
def __str__(self):
- if self.last != self.first:
+ if self.last != self.first and self.last is not None:
return '%s-%s' % (WEEKDAYS[self.first], WEEKDAYS[self.last])
return WEEKDAYS[self.first]
+ def __repr__(self):
+ args = ["'%s'" % WEEKDAYS[self.first]]
+ if self.last != self.first and self.last is not None:
+ args.append("'%s'" % WEEKDAYS[self.last])
+ return "%s(%s)" % (self.__class__.__name__, ', '.join(args))
+
class WeekdayPositionExpression(AllExpression):
options = ['1st', '2nd', '3rd', '4th', '5th', 'last']
@@ -155,3 +169,8 @@ class WeekdayPositionExpression(AllExpression):
def __str__(self):
return '%s %s' % (self.options[self.option_num],
WEEKDAYS[self.weekday])
+
+ def __repr__(self):
+ return "%s('%s', '%s')" % (self.__class__.__name__,
+ self.options[self.option_num],
+ WEEKDAYS[self.weekday])
diff --git a/apscheduler/fields.py b/apscheduler/fields.py
index e70a95e..4e2cde3 100644
--- a/apscheduler/fields.py
+++ b/apscheduler/fields.py
@@ -66,7 +66,8 @@ class BaseField(object):
return ','.join(expr_strings)
def __repr__(self):
- return '%s(%s, %s)' % (self.__class__.__name__, self.name, str(self))
+ return "%s('%s', '%s')" % (self.__class__.__name__, self.name,
+ str(self))
class WeekField(BaseField):
diff --git a/apscheduler/scheduler.py b/apscheduler/scheduler.py
index 6bcd9a7..2dced5f 100644
--- a/apscheduler/scheduler.py
+++ b/apscheduler/scheduler.py
@@ -54,7 +54,11 @@ class Job(object):
raise
def __str__(self):
- return self.name
+ return '%s: %s' % (self.name, repr(self.trigger))
+
+ def __repr__(self):
+ return '%s(%s, %s)' % (self.__class__.__name__, self.name,
+ repr(self.trigger))
class SchedulerShutdownError(Exception):
diff --git a/apscheduler/triggers.py b/apscheduler/triggers.py
index 3ac0af6..9886b2b 100644
--- a/apscheduler/triggers.py
+++ b/apscheduler/triggers.py
@@ -113,6 +113,11 @@ class CronTrigger(object):
if fieldnum >= 0:
return next_date
+ def __repr__(self):
+ field_reprs = ("%s='%s'" % (f.name, str(f)) for f in self.fields
+ if str(f) != '*')
+ return '%s(%s)' % (self.__class__.__name__, ', '.join(field_reprs))
+
class DateTrigger(object):
def __init__(self, run_date):
@@ -122,6 +127,9 @@ class DateTrigger(object):
if self.run_date >= start_date:
return self.run_date
+ def __repr__(self):
+ return '%s(%s)' % (self.__class__.__name__, repr(self.run_date))
+
class IntervalTrigger(object):
def __init__(self, interval, repeat, start_date=None):
@@ -156,3 +164,8 @@ class IntervalTrigger(object):
timediff_seconds = timedelta_seconds(start_date - self.first_fire_date)
next_interval_num = int(ceil(timediff_seconds / self.interval_length))
return self.first_fire_date + self.interval * next_interval_num
+
+ def __repr__(self):
+ return "%s(interval=%s, repeat=%d, start_date=%s)" % (
+ self.__class__.__name__, repr(self.interval), self.repeat,
+ repr(self.first_fire_date))
diff --git a/tests/apschedulertests/testexpressions.py b/tests/apschedulertests/testexpressions.py
index 8679557..2ffc968 100644
--- a/tests/apschedulertests/testexpressions.py
+++ b/tests/apschedulertests/testexpressions.py
@@ -8,7 +8,7 @@ from apscheduler.fields import DayOfMonthField, BaseField, DayOfWeekField
def test_all_expression():
field = DayOfMonthField('day', '*')
- eq_(repr(field), 'DayOfMonthField(day, *)')
+ eq_(repr(field), "DayOfMonthField('day', '*')")
date = datetime(2009, 7, 1)
eq_(field.get_next_value(date), 1)
date = datetime(2009, 7, 10)
@@ -19,7 +19,7 @@ def test_all_expression():
def test_all_expression_step():
field = BaseField('hour', '*/3')
- eq_(repr(field), 'BaseField(hour, */3)')
+ eq_(repr(field), "BaseField('hour', '*/3')")
date = datetime(2009, 7, 1, 0)
eq_(field.get_next_value(date), 0)
date = datetime(2009, 7, 1, 2)
@@ -35,17 +35,17 @@ def test_all_expression_invalid():
def test_all_expression_repr():
expr = AllExpression()
- eq_(repr(expr), 'AllExpression(*)')
+ eq_(repr(expr), 'AllExpression(None)')
def test_all_expression_step_repr():
expr = AllExpression(2)
- eq_(repr(expr), 'AllExpression(*/2)')
+ eq_(repr(expr), "AllExpression(2)")
def test_range_expression():
field = DayOfMonthField('day', '2-9')
- eq_(repr(field), 'DayOfMonthField(day, 2-9)')
+ eq_(repr(field), "DayOfMonthField('day', '2-9')")
date = datetime(2009, 7, 1)
eq_(field.get_next_value(date), 2)
date = datetime(2009, 7, 10)
@@ -56,7 +56,7 @@ def test_range_expression():
def test_range_expression_step():
field = DayOfMonthField('day', '2-9/3')
- eq_(repr(field), 'DayOfMonthField(day, 2-9/3)')
+ eq_(repr(field), "DayOfMonthField('day', '2-9/3')")
date = datetime(2009, 7, 1)
eq_(field.get_next_value(date), 2)
date = datetime(2009, 7, 3)
@@ -67,7 +67,7 @@ def test_range_expression_step():
def test_range_expression_single():
field = DayOfMonthField('day', 9)
- eq_(repr(field), 'DayOfMonthField(day, 9)')
+ eq_(repr(field), "DayOfMonthField('day', '9')")
date = datetime(2009, 7, 1)
eq_(field.get_next_value(date), 9)
date = datetime(2009, 7, 9)
@@ -83,7 +83,7 @@ def test_range_expression_invalid():
def test_range_expression_repr():
expr = RangeExpression(3, 7)
- eq_(repr(expr), 'RangeExpression(3-7)')
+ eq_(repr(expr), 'RangeExpression(3, 7)')
def test_range_expression_single_repr():
@@ -93,19 +93,19 @@ def test_range_expression_single_repr():
def test_range_expression_step_repr():
expr = RangeExpression(3, 7, 2)
- eq_(repr(expr), 'RangeExpression(3-7/2)')
+ eq_(repr(expr), 'RangeExpression(3, 7, 2)')
def test_weekday_single():
field = DayOfWeekField('day_of_week', 'WED')
- eq_(repr(field), 'DayOfWeekField(day_of_week, wed)')
+ eq_(repr(field), "DayOfWeekField('day_of_week', 'wed')")
date = datetime(2008, 2, 4)
eq_(field.get_next_value(date), 2)
def test_weekday_range():
field = DayOfWeekField('day_of_week', 'TUE-SAT')
- eq_(repr(field), 'DayOfWeekField(day_of_week, tue-sat)')
+ eq_(repr(field), "DayOfWeekField('day_of_week', 'tue-sat')")
date = datetime(2008, 2, 7)
eq_(field.get_next_value(date), 3)
@@ -143,7 +143,7 @@ def test_day_of_week_invalid_name():
def test_weekday_position_expression_repr():
expr = WeekdayPositionExpression('2nd', 'FRI')
- eq_(repr(expr), 'WeekdayPositionExpression(2nd fri)')
+ eq_(repr(expr), "WeekdayPositionExpression('2nd', 'fri')")
@raises(ValueError)
@@ -158,9 +158,9 @@ def test_day_of_week_invalid_last():
def test_weekday_range_expression_repr():
expr = WeekdayRangeExpression('tue', 'SUN')
- eq_(repr(expr), 'WeekdayRangeExpression(tue-sun)')
+ eq_(repr(expr), "WeekdayRangeExpression('tue', 'sun')")
def test_weekday_range_expression_single_repr():
expr = WeekdayRangeExpression('thu')
- eq_(repr(expr), 'WeekdayRangeExpression(thu)')
+ eq_(repr(expr), "WeekdayRangeExpression('thu')")
diff --git a/tests/apschedulertests/testscheduler.py b/tests/apschedulertests/testscheduler.py
index 92bc1aa..80244a8 100644
--- a/tests/apschedulertests/testscheduler.py
+++ b/tests/apschedulertests/testscheduler.py
@@ -42,8 +42,14 @@ class TestScheduler(object):
def test_job_name(self):
def my_job():
pass
- job = self.scheduler.add_interval_job(my_job)
- eq_(str(job), 'my_job')
+ job = self.scheduler.add_interval_job(my_job,
+ start_date=datetime(2010, 5, 19))
+ eq_(str(job),
+ 'my_job: IntervalTrigger(interval=datetime.timedelta(0, 1), '
+ 'repeat=0, start_date=datetime.datetime(2010, 5, 19, 0, 0))')
+ eq_(repr(job),
+ 'Job(my_job, IntervalTrigger(interval=datetime.timedelta(0, 1), '
+ 'repeat=0, start_date=datetime.datetime(2010, 5, 19, 0, 0)))')
def test_interval(self):
def increment(vals, amount):
diff --git a/tests/apschedulertests/testtriggers.py b/tests/apschedulertests/testtriggers.py
index 20fa8ee..c6f4101 100644
--- a/tests/apschedulertests/testtriggers.py
+++ b/tests/apschedulertests/testtriggers.py
@@ -7,6 +7,7 @@ from apscheduler.triggers import CronTrigger, DateTrigger, IntervalTrigger
def test_cron_trigger_1():
trigger = CronTrigger(year='2009/2', month='1/3', day='5-13')
+ eq_(repr(trigger), "CronTrigger(year='2009/2', month='1/3', day='5-13')")
start_date = datetime(2008, 12, 1)
correct_next_date = datetime(2009, 1, 5)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -21,6 +22,7 @@ def test_cron_trigger_2():
def test_cron_trigger_3():
trigger = CronTrigger(year='2009', month='2', hour='8-10')
+ eq_(repr(trigger), "CronTrigger(year='2009', month='2', hour='8-10')")
start_date = datetime(2009, 1, 1)
correct_next_date = datetime(2009, 2, 1, 8)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -28,6 +30,7 @@ def test_cron_trigger_3():
def test_cron_year_list():
trigger = CronTrigger(year='2009,2008')
+ eq_(repr(trigger), "CronTrigger(year='2009,2008')")
start_date = datetime(2009, 1, 1)
correct_next_date = datetime(2009, 1, 1)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -36,6 +39,8 @@ def test_cron_year_list():
def test_cron_weekday_overlap():
trigger = CronTrigger(year=2009, month=1, day='6-10',
day_of_week='2-4')
+ eq_(repr(trigger),
+ "CronTrigger(year='2009', month='1', day='6-10', day_of_week='2-4')")
start_date = datetime(2009, 1, 1)
correct_next_date = datetime(2009, 1, 7)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -44,6 +49,8 @@ def test_cron_weekday_overlap():
def test_cron_weekday_nomatch():
trigger = CronTrigger(year=2009, month=1, day='6-10',
day_of_week='0,6')
+ eq_(repr(trigger),
+ "CronTrigger(year='2009', month='1', day='6-10', day_of_week='0,6')")
start_date = datetime(2009, 1, 1)
correct_next_date = None
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -51,6 +58,7 @@ def test_cron_weekday_nomatch():
def test_cron_weekday_positional():
trigger = CronTrigger(year=2009, month=1, day='4th wed')
+ eq_(repr(trigger), "CronTrigger(year='2009', month='1', day='4th wed')")
start_date = datetime(2009, 1, 1)
correct_next_date = datetime(2009, 1, 28)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -58,6 +66,7 @@ def test_cron_weekday_positional():
def test_week_1():
trigger = CronTrigger(year=2009, month=2, week=8)
+ eq_(repr(trigger), "CronTrigger(year='2009', month='2', week='8')")
start_date = datetime(2009, 1, 1)
correct_next_date = datetime(2009, 2, 16)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -65,6 +74,7 @@ def test_week_1():
def test_week_2():
trigger = CronTrigger(year=2009, week=15, day_of_week=2)
+ eq_(repr(trigger), "CronTrigger(year='2009', week='15', day_of_week='2')")
start_date = datetime(2009, 1, 1)
correct_next_date = datetime(2009, 4, 8)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -73,6 +83,7 @@ def test_week_2():
def test_cron_extra_coverage():
# This test has no value other than patching holes in test coverage
trigger = CronTrigger(day='6,8')
+ eq_(repr(trigger), "CronTrigger(day='6,8')")
start_date = datetime(2009, 12, 31)
correct_next_date = datetime(2010, 1, 6)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -87,6 +98,7 @@ def test_cron_increment_weekday():
# Makes sure that incrementing the weekday field in the process of
# calculating the next matching date won't cause problems
trigger = CronTrigger(hour='5-6')
+ eq_(repr(trigger), "CronTrigger(hour='5-6')")
start_date = datetime(2009, 9, 25, 7)
correct_next_date = datetime(2009, 9, 26, 5)
eq_(trigger.get_next_fire_time(start_date), correct_next_date)
@@ -95,6 +107,7 @@ def test_cron_increment_weekday():
def test_date_trigger_earlier():
fire_date = datetime(2009, 7, 6)
trigger = DateTrigger(fire_date)
+ eq_(repr(trigger), "DateTrigger(datetime.datetime(2009, 7, 6, 0, 0))")
start_date = datetime(2008, 12, 1)
eq_(trigger.get_next_fire_time(start_date), fire_date)
@@ -136,6 +149,11 @@ class TestInterval(object):
trigger_start_date = datetime(2009, 8, 4, second=2)
self.trigger = IntervalTrigger(interval, 3, trigger_start_date)
+ def test_interval_repr(self):
+ eq_(repr(self.trigger),
+ "IntervalTrigger(interval=datetime.timedelta(0, 1), repeat=3, "
+ "start_date=datetime.datetime(2009, 8, 4, 0, 0, 2))")
+
def test_interval_before(self):
start_date = datetime(2009, 8, 4)
correct_next_date = datetime(2009, 8, 4, second=2)