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
59 lines
1.6 KiB
Python
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()
|