bgneal@859: """ bgneal@859: ssl_images is a custom manage.py command to convert forum post and comment bgneal@859: images to https. It does this by rewriting the markup: bgneal@859: - Images with src = http://surfguitar101.com/something are rewritten to be bgneal@859: /something. bgneal@859: - Non SG101 images that use http: are downloaded, resized, and uploaded to bgneal@859: an S3 bucket. The src attribute is replaced with the new S3 URL. bgneal@859: """ bgneal@859: import logging bgneal@859: from optparse import make_option bgneal@859: import os.path bgneal@859: bgneal@859: from django.core.management.base import NoArgsCommand, CommandError bgneal@859: from django.conf import settings bgneal@859: bgneal@859: LOGFILE = os.path.join(settings.PROJECT_PATH, 'logs', 'ssl_images.log') bgneal@859: logger = logging.getLogger(__name__) bgneal@859: bgneal@859: bgneal@859: def _setup_logging(): bgneal@859: logger.setLevel(logging.DEBUG) bgneal@859: logger.propagate = False bgneal@859: handler = logging.FileHandler(filename=LOGFILE, encoding='utf-8') bgneal@859: formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') bgneal@859: handler.setFormatter(formatter) bgneal@859: logger.addHandler(handler) bgneal@859: bgneal@859: bgneal@859: class Command(NoArgsCommand): bgneal@859: help = "Rewrite forum posts and comments to not use http for images" bgneal@859: option_list = NoArgsCommand.option_list + ( bgneal@859: make_option('--forums', bgneal@859: action='store_true', bgneal@859: default=False, bgneal@859: help="process forum posts (default)"), bgneal@859: make_option('--comments', bgneal@859: action='store_true', bgneal@859: default=False, bgneal@859: help="process comments"), bgneal@859: make_option('--start', bgneal@859: type='int', bgneal@859: help="object to start at"), bgneal@859: make_option('--end', bgneal@859: type='int', bgneal@859: help="one past the end object"), bgneal@859: ) bgneal@859: bgneal@859: def handle_noargs(self, **options): bgneal@859: _setup_logging() bgneal@859: bgneal@859: do_comments = options['comments'] bgneal@859: do_forums = options['forums'] bgneal@859: if do_comments and do_forums: bgneal@859: raise CommandError("Please specify --forums or --comments, not both") bgneal@859: elif not do_comments and not do_forums: bgneal@859: raise CommandError("Please specify --forums or --comments") bgneal@859: bgneal@859: logger.info("Arguments received: %s", options)