aircox-radiocampus/aircox/management/commands/sounds_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

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