"""Manage diffusions using schedules, to update, clean up or check diffusions. A generated diffusion can be unconfirmed, that means that the user must confirm it by changing its type to "normal". The behaviour is controlled using --approval. """ import datetime import logging from argparse import RawTextHelpFormatter from django.core.management.base import BaseCommand from django.utils import timezone as tz from aircox.controllers.diffusion_monitor import DiffusionMonitor logger = logging.getLogger("aircox.commands") class Command(BaseCommand): help = __doc__ def add_arguments(self, parser): parser.formatter_class = RawTextHelpFormatter today = datetime.date.today() group = parser.add_argument_group("action") group.add_argument( "-u", "--update", action="store_true", help="generate (unconfirmed) diffusions for the given month. " "These diffusions must be confirmed manually by changing " 'their type to "normal"', ) group.add_argument( "-l", "--clean", action="store_true", help="remove unconfirmed diffusions older than the given month", ) group = parser.add_argument_group("date") group.add_argument( "--year", type=int, default=today.year, help="used by update, default is today's year", ) group.add_argument( "--month", type=int, default=today.month, help="used by update, default is today's month", ) group.add_argument( "--next-month", action="store_true", help="set the date to the next month of given date" " (if next month from today", ) def handle(self, *args, **options): date = datetime.date( year=options["year"], month=options["month"], day=1 ) if options.get("next_month"): month = options.get("month") date += tz.timedelta(days=28) if date.month == month: date += tz.timedelta(days=28) date = date.replace(day=1) actions = DiffusionMonitor(date) if options.get("update"): actions.update() if options.get("clean"): actions.clean() if options.get("check"): actions.check()