forked from rc/aircox

- Add configuration files for packaging - Precommit now uses ruff Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: rc/aircox#127
77 lines
2.4 KiB
Python
Executable File
77 lines
2.4 KiB
Python
Executable File
"""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()
|