45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
import logging
|
||
|
import socket
|
||
|
import sys
|
||
|
|
||
|
from django.core.management.base import BaseCommand
|
||
|
from django.conf import settings
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
DEFAULT_IMAP_TIMEOUT = 20
|
||
|
|
||
|
|
||
|
class Command(BaseCommand):
|
||
|
help = "Starts a mail worker"
|
||
|
|
||
|
def add_arguments(self, parser):
|
||
|
parser.add_argument("--imap_timeout", type=int, default=30)
|
||
|
parser.add_argument("worker_name")
|
||
|
|
||
|
def handle(self, *args, **options):
|
||
|
if not hasattr(settings, "TODO_MAIL_TRACKERS"):
|
||
|
logger.error("missing TODO_MAIL_TRACKERS setting")
|
||
|
sys.exit(1)
|
||
|
|
||
|
worker_name = options["worker_name"]
|
||
|
tracker = settings.TODO_MAIL_TRACKERS.get(worker_name, None)
|
||
|
if tracker is None:
|
||
|
logger.error(
|
||
|
"couldn't find configuration for %r in TODO_MAIL_TRACKERS",
|
||
|
worker_name
|
||
|
)
|
||
|
sys.exit(1)
|
||
|
|
||
|
# set the default socket timeout (imaplib doesn't enable configuring it)
|
||
|
timeout = options["imap_timeout"]
|
||
|
if timeout:
|
||
|
socket.setdefaulttimeout(timeout)
|
||
|
|
||
|
# run the mail polling loop
|
||
|
producer = tracker["producer"]
|
||
|
consumer = tracker["consumer"]
|
||
|
|
||
|
consumer(producer())
|