aircox-radiocampus/aircox/management/commands/sounds_monitor.py
Thomas Kairos f9ad81ddac !111: tests: aircox.management (#114)
!111

Co-authored-by: bkfox <thomas bkfox net>
Reviewed-on: rc/aircox#114
2023-06-30 16:39:55 +02:00

72 lines
2.1 KiB
Python
Executable File

#! /usr/bin/env python3
# TODO: SoundMonitor class
"""Monitor sound files; For each program, check for:
- new files;
- deleted files;
- differences between files and sound;
- quality of the files;
It tries to parse the file name to get the date of the diffusion of an
episode and associate the file with it; We use the following format:
yyyymmdd[_n][_][name]
Where:
'yyyy' the year of the episode's diffusion;
'mm' the month of the episode's diffusion;
'dd' the day of the episode's diffusion;
'n' the number of the episode (if multiple episodes);
'name' the title of the sound;
To check quality of files, call the command sound_quality_check using the
parameters given by the setting SOUND_QUALITY. This script requires
Sox (and soxi).
"""
import logging
from argparse import RawTextHelpFormatter
from django.core.management.base import BaseCommand
from aircox.controllers.sound_monitor import SoundMonitor
logger = logging.getLogger("aircox.commands")
class Command(BaseCommand):
help = __doc__
def add_arguments(self, parser):
parser.formatter_class = RawTextHelpFormatter
parser.add_argument(
"-q",
"--quality_check",
action="store_true",
help="Enable quality check using sound_quality_check on all "
"sounds marqued as not good",
)
parser.add_argument(
"-s",
"--scan",
action="store_true",
help="Scan programs directories for changes, plus check for a "
" matching diffusion on sounds that have not been yet assigned",
)
parser.add_argument(
"-m",
"--monitor",
action="store_true",
help="Run in monitor mode, watch for modification in the "
"filesystem and react in consequence",
)
def handle(self, *args, **options):
SoundMonitor()
if options.get("scan"):
self.scan()
# if options.get('quality_check'):
# self.check_quality(check=(not options.get('scan')))
if options.get("monitor"):
self.monitor()