aircox-radiocampus/aircox/controllers/diffusion_monitor.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

59 lines
1.6 KiB
Python

from datetime import datetime, time
import logging
from django.db import transaction
from django.utils import timezone as tz
from aircox.models import Diffusion, Schedule
logger = logging.getLogger("aircox.commands")
__all__ = ("DiffusionMonitor",)
class DiffusionMonitor:
"""Handle generation and update of Diffusion instances."""
date = None
def __init__(self, date):
self.date = date or date.today()
def update(self):
episodes, diffusions = [], []
for schedule in Schedule.objects.filter(program__active=True, initial__isnull=True):
eps, diffs = schedule.diffusions_of_month(self.date)
if eps:
episodes += eps
if diffs:
diffusions += diffs
logger.info(
"[update] %s: %d episodes, %d diffusions and reruns",
str(schedule),
len(eps),
len(diffs),
)
with transaction.atomic():
logger.info(
"[update] save %d episodes and %d diffusions",
len(episodes),
len(diffusions),
)
for episode in episodes:
episode.save()
for diffusion in diffusions:
# force episode id's update
diffusion.episode = diffusion.episode
diffusion.save()
def clean(self):
qs = Diffusion.objects.filter(
type=Diffusion.TYPE_UNCONFIRMED,
start__lt=tz.make_aware(datetime.combine(self.date, time.min)),
)
logger.info("[clean] %d diffusions will be removed", qs.count())
qs.delete()