41 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			41 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())
 |