diff --git a/rq/scripts/__init__.py b/rq/scripts/__init__.py deleted file mode 100644 index a797286..0000000 --- a/rq/scripts/__init__.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import (absolute_import, division, print_function, - unicode_literals) - -import importlib -import os -from functools import partial -from warnings import warn - -import redis -from rq import use_connection -from rq.utils import first - - -def add_standard_arguments(parser): - parser.add_argument('--config', '-c', default=None, - help='Module containing RQ settings.') - parser.add_argument('--url', '-u', default=None, - help='URL describing Redis connection details. ' - 'Overrides other connection arguments if supplied.') - parser.add_argument('--host', '-H', default=None, - help='The Redis hostname (default: localhost)') - parser.add_argument('--port', '-p', default=None, - help='The Redis portnumber (default: 6379)') - parser.add_argument('--db', '-d', type=int, default=None, - help='The Redis database (default: 0)') - parser.add_argument('--password', '-a', default=None, - help='The Redis password (default: None)') - parser.add_argument('--socket', '-s', default=None, - help='The Redis Unix socket') - - -def read_config_file(module): - """Reads all UPPERCASE variables defined in the given module file.""" - settings = importlib.import_module(module) - return dict([(k, v) - for k, v in settings.__dict__.items() - if k.upper() == k]) - - -def setup_default_arguments(args, settings): - """ Sets up args from settings or defaults """ - args.url = first([args.url, settings.get('REDIS_URL'), os.environ.get('RQ_REDIS_URL')]) - - if (args.host or args.port or args.socket or args.db or args.password): - warn('Host, port, db, password options for Redis will not be ' - 'supported in future versions of RQ. ' - 'Please use `REDIS_URL` or `--url` instead.', DeprecationWarning) - - strict_first = partial(first, key=lambda obj: obj is not None) - - args.host = strict_first([args.host, settings.get('REDIS_HOST'), os.environ.get('RQ_REDIS_HOST'), 'localhost']) - args.port = int(strict_first([args.port, settings.get('REDIS_PORT'), os.environ.get('RQ_REDIS_PORT'), 6379])) - args.socket = strict_first([args.socket, settings.get('REDIS_SOCKET'), os.environ.get('RQ_REDIS_SOCKET'), None]) - args.db = strict_first([args.db, settings.get('REDIS_DB'), os.environ.get('RQ_REDIS_DB'), 0]) - args.password = strict_first([args.password, settings.get('REDIS_PASSWORD'), os.environ.get('RQ_REDIS_PASSWORD')]) - - -def setup_redis(args): - if args.url is not None: - redis_conn = redis.StrictRedis.from_url(args.url) - else: - redis_conn = redis.StrictRedis(host=args.host, port=args.port, db=args.db, - password=args.password, unix_socket_path=args.socket) - use_connection(redis_conn) diff --git a/rq/scripts/rqworker.py b/rq/scripts/rqworker.py deleted file mode 100644 index c238c8a..0000000 --- a/rq/scripts/rqworker.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -from __future__ import (absolute_import, division, print_function, - unicode_literals) - -import argparse -import os -import sys - -from redis.exceptions import ConnectionError -from rq.contrib.legacy import cleanup_ghosts -from rq.logutils import setup_loghandlers -from rq.scripts import (add_standard_arguments, read_config_file, - setup_default_arguments, setup_redis) -from rq.utils import import_attribute - - -def parse_args(): - parser = argparse.ArgumentParser(description='Starts an RQ worker.') - add_standard_arguments(parser) - - parser.add_argument('--burst', '-b', action='store_true', default=False, help='Run in burst mode (quit after all work is done)') # noqa - parser.add_argument('--name', '-n', default=None, help='Specify a different name') - parser.add_argument('--worker-class', '-w', action='store', default='rq.Worker', help='RQ Worker class to use') - parser.add_argument('--job-class', '-j', action='store', default='rq.job.Job', help='RQ Job class to use') - parser.add_argument('--queue-class', action='store', default='rq.Queue', help='RQ Queue class to use') - parser.add_argument('--path', '-P', default='.', help='Specify the import path.') - parser.add_argument('--results-ttl', default=None, help='Default results timeout to be used') - parser.add_argument('--worker-ttl', type=int, default=None, help='Default worker timeout to be used') - parser.add_argument('--verbose', '-v', action='store_true', default=False, help='Show more output') - parser.add_argument('--quiet', '-q', action='store_true', default=False, help='Show less output') - parser.add_argument('--sentry-dsn', action='store', default=None, metavar='URL', help='Report exceptions to this Sentry DSN') # noqa - parser.add_argument('--pid', action='store', default=None, - help='Write the process ID number to a file at the specified path') - parser.add_argument('queues', nargs='*', help='The queues to listen on (default: \'default\')') - - return parser.parse_args() - - -def setup_loghandlers_from_args(args): - if args.verbose and args.quiet: - raise RuntimeError("Flags --verbose and --quiet are mutually exclusive.") - - if args.verbose: - level = 'DEBUG' - elif args.quiet: - level = 'WARNING' - else: - level = 'INFO' - setup_loghandlers(level) - - -def main(): - args = parse_args() - - if args.path: - sys.path = args.path.split(':') + sys.path - - settings = {} - if args.config: - settings = read_config_file(args.config) - - setup_default_arguments(args, settings) - - # Worker specific default arguments - if not args.queues: - args.queues = settings.get('QUEUES', ['default']) - - if args.sentry_dsn is None: - args.sentry_dsn = settings.get('SENTRY_DSN', - os.environ.get('SENTRY_DSN', None)) - - if args.pid: - with open(os.path.expanduser(args.pid), "w") as fp: - fp.write(str(os.getpid())) - - setup_loghandlers_from_args(args) - setup_redis(args) - - cleanup_ghosts() - worker_class = import_attribute(args.worker_class) - queue_class = import_attribute(args.queue_class) - - try: - queues = list(map(queue_class, args.queues)) - w = worker_class(queues, - name=args.name, - default_worker_ttl=args.worker_ttl, - default_result_ttl=args.results_ttl, - job_class=args.job_class) - - # Should we configure Sentry? - if args.sentry_dsn: - from raven import Client - from rq.contrib.sentry import register_sentry - client = Client(args.sentry_dsn) - register_sentry(client, w) - - w.work(burst=args.burst) - except ConnectionError as e: - print(e) - sys.exit(1)