aircox-radiocampus/aircox/management/commands/diffusions.py
Thomas Kairos f7a61fe6c0 Feat: packaging (#127)
- Add configuration files for packaging
- Precommit now uses ruff

Co-authored-by: bkfox <thomas bkfox net>
Reviewed-on: rc/aircox#127
2023-10-11 10:58:34 +02:00

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()