Skip to content

Commit aabaa46

Browse files
committed
Merge pull request #2 from dabapps/fix-worker
Fix worker
2 parents 01f3d64 + 2add11d commit aabaa46

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed

django_dbq/management/commands/worker.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from django.db import transaction
2-
from django.core.management.base import NoArgsCommand
2+
from django.core.management.base import BaseCommand, CommandError
33
from django.utils.module_loading import import_by_path
44
from django_dbq.models import Job
5+
from optparse import make_option
56
from simplesignals.process import WorkerProcessBase
67
from time import sleep
78
import logging
@@ -10,6 +11,9 @@
1011
logger = logging.getLogger(__name__)
1112

1213

14+
DEFAULT_QUEUE_NAME = 'default'
15+
16+
1317
def process_job(queue_name):
1418
"""This function grabs the next available job for a given queue, and runs its next task."""
1519

@@ -64,17 +68,32 @@ def do_work(self):
6468
process_job(self.queue_name)
6569

6670

67-
class Command(NoArgsCommand):
71+
class Command(BaseCommand):
6872

6973
help = "Run a queue worker process"
7074

71-
def handle_noargs(self, **options):
72-
self.handle('default')
75+
option_list = BaseCommand.option_list + (
76+
make_option('--dry-run',
77+
action='store_true',
78+
dest='dry_run',
79+
default=False,
80+
help="Don't actually start the worker. Used for testing."),
81+
)
7382

7483
def handle(self, *args, **options):
84+
if not args:
85+
args = (DEFAULT_QUEUE_NAME,)
86+
7587
if len(args) != 1:
7688
raise CommandError("Please supply a single queue job name")
7789

78-
logger.info("Starting job worker")
79-
worker = Worker()
90+
queue_name = args[0]
91+
92+
self.stdout.write("Starting job worker for queue \"%s\"" % queue_name)
93+
94+
worker = Worker(queue_name)
95+
96+
if options['dry_run']:
97+
return
98+
8099
worker.run()

django_dbq/tests.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,23 @@ def test_errors_raised_correctly(self):
5858
call_command('create_job', 'some_other_job', stdout=StringIO())
5959

6060

61+
@override_settings(JOBS={'testjob': {'tasks': ['a']}})
62+
class WorkerManagementCommandTestCase(TestCase):
63+
64+
def test_worker_no_args(self):
65+
stdout = StringIO()
66+
call_command('worker', dry_run=True, stdout=stdout)
67+
output = stdout.getvalue()
68+
self.assertTrue('Starting job worker' in output)
69+
self.assertTrue('default' in output)
70+
71+
def test_worker_with_queue_name(self):
72+
stdout = StringIO()
73+
call_command('worker', 'test_queue', dry_run=True, stdout=stdout)
74+
output = stdout.getvalue()
75+
self.assertTrue('test_queue' in output)
76+
77+
6178
@override_settings(JOBS={'testjob': {'tasks': ['a']}})
6279
class JobTestCase(TestCase):
6380

0 commit comments

Comments
 (0)