Skip to content

Commit da5a52d

Browse files
author
Matt George
committed
added some tests and logging
1 parent 09aaef9 commit da5a52d

File tree

4 files changed

+36
-10
lines changed

4 files changed

+36
-10
lines changed

pyres/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,8 @@ def enqueue(self, klass, *args):
148148
def enqueue_from_string(self, klass_as_string, queue, *args):
149149
self.push(queue, {'class':klass_as_string,'args':args})
150150
logging.info("enqueued '%s' job" % klass_as_string)
151-
logging.debug("job arguments: %s" % args)
151+
if args:
152+
logging.debug("job arguments: %s" % args)
152153

153154
def queues(self):
154155
return self.redis.smembers("resque:queues") or []
@@ -203,6 +204,9 @@ def close(self):
203204

204205
def enqueue_at(self, datetime, klass, *args):
205206
class_name = '%s.%s' % (klass.__module__, klass.__name__)
207+
logging.info("enqueued '%s' job for execution at %s" % (class_name, datetime))
208+
if args:
209+
logging.debug("job arguments are: %s" % args)
206210
self.delayed_push(datetime, {'class':class_name,'queue': klass.queue, 'args':args})
207211

208212
def delayed_push(self, datetime, item):

pyres/scheduler.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import signal
22
import time
3+
import logging
34

45
from pyres import ResQ
56

67
class Scheduler(object):
78

89
def __init__(self, server="localhost:6379", password=None):
10+
"""
11+
>>> from pyres.scheduler import Scheduler
12+
>>> scheduler = Scheduler('localhost:6379')
13+
"""
914
self._shutdown = False
1015
if isinstance(server,basestring):
1116
self.resq = ResQ(server=server, password=password)
@@ -15,27 +20,27 @@ def __init__(self, server="localhost:6379", password=None):
1520
raise Exception("Bad server argument")
1621

1722
def register_signal_handlers(self):
18-
print 'registering signals'
23+
logging.info('registering signals')
1924
signal.signal(signal.SIGTERM, self.schedule_shutdown)
2025
signal.signal(signal.SIGINT, self.schedule_shutdown)
2126
signal.signal(signal.SIGQUIT, self.schedule_shutdown)
2227

2328
def schedule_shutdown(self, signal, frame):
24-
print 'shutting down started'
29+
logging.info('shutting down started')
2530
self._shutdown = True
2631

2732
def __call__(self):
28-
print 'starting up'
33+
logging.info('starting up')
2934
self.register_signal_handlers()
3035
#self.load_schedule()
31-
print 'looking for delayed items'
36+
logging.info('looking for delayed items')
3237
while True:
3338
if self._shutdown is True:
3439
break
3540
self.handle_delayed_items()
36-
print 'sleeping'
41+
logging.info('sleeping')
3742
time.sleep(5)
38-
print 'shutting down complete'
43+
logging.info('shutting down complete')
3944

4045
def next_timestamp(self):
4146
while True:
@@ -56,9 +61,9 @@ def next_item(self, timestamp):
5661

5762
def handle_delayed_items(self):
5863
for timestamp in self.next_timestamp():
59-
print 'handling timestamp: %s' % timestamp
64+
logging.info('handling timestamp: %s' % timestamp)
6065
for item in self.next_item(timestamp):
61-
print 'queueing item %s' % item
66+
logging.debug('queueing item %s' % item)
6267
klass = item['class']
6368
queue = item['queue']
6469
args = item['args']

scripts/pyres_scheduler

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
#!/usr/bin/env python
22
from pyres.scheduler import Scheduler
3+
import logging
4+
35
def main():
46
from optparse import OptionParser
57
usage = "usage: %prog [options] arg1"
68
parser = OptionParser(usage=usage)
79
#parser.add_option("-q", dest="queue_list")
810
parser.add_option("--host", dest="host", default="localhost")
911
parser.add_option("--port",dest="port",type="int", default=6379)
12+
parser.add_option('-l', '--log-level', dest='log_level', default='info', help='log level. Valid values are "debug", "info", "warning", "error", "critical", in decreasing order of verbosity. Defaults to "info" if parameter not specified.')
1013
(options,args) = parser.parse_args()
11-
server = '%s:%s' % (options.host,options.port)
14+
log_level = getattr(logging, options.log_level.upper(),'INFO')
15+
logging.basicConfig(level=log_level, format="%(module)s: %(asctime)s: %(levelname)s: %(message)s")
16+
server = '%s:%s' % (options.host, options.port)
1217
Scheduler.run(server)
1318

1419
if __name__ == "__main__":

tests/test_schedule.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,16 @@ def test_next_item_for_timestamp(self):
5959
item = self.resq.next_item_for_timestamp(timestamp)
6060
assert isinstance(item, dict)
6161
assert self.redis.zcard('resque:delayed_queue_schedule') == 1
62+
63+
def test_scheduler_init(self):
64+
scheduler = Scheduler(self.resq)
65+
assert not scheduler._shutdown
66+
scheduler = Scheduler('localhost:6379')
67+
assert not scheduler._shutdown
68+
self.assertRaises(Exception, Scheduler, Basic)
69+
70+
def test_schedule_shutdown(self):
71+
scheduler = Scheduler(self.resq)
72+
scheduler.schedule_shutdown(19,'')
73+
assert scheduler._shutdown
6274

0 commit comments

Comments
 (0)