code quality

This commit is contained in:
bkfox
2023-03-13 17:47:00 +01:00
parent 934817da8a
commit 112770eddf
162 changed files with 4798 additions and 4069 deletions

View File

@ -1,7 +1,7 @@
#! /usr/bin/env python3
"""
Monitor sound files; For each program, check for:
"""Monitor sound files; For each program, check for:
- new files;
- deleted files;
- differences between files and sound;
@ -23,9 +23,9 @@ To check quality of files, call the command sound_quality_check using the
parameters given by the setting AIRCOX_SOUND_QUALITY. This script requires
Sox (and soxi).
"""
from datetime import datetime, timedelta
import logging
import time
from datetime import datetime, timedelta
from watchdog.events import PatternMatchingEventHandler
@ -34,12 +34,17 @@ from aircox.models import Sound
from .sound_file import SoundFile
logger = logging.getLogger('aircox.commands')
logger = logging.getLogger("aircox.commands")
__all__ = ('NotifyHandler', 'CreateHandler', 'DeleteHandler',
'MoveHandler', 'ModifiedHandler', 'MonitorHandler',)
__all__ = (
"NotifyHandler",
"CreateHandler",
"DeleteHandler",
"MoveHandler",
"ModifiedHandler",
"MonitorHandler",
)
class NotifyHandler:
@ -63,34 +68,34 @@ class NotifyHandler:
class CreateHandler(NotifyHandler):
log_msg = 'Sound file created: {sound_file.path}'
log_msg = "Sound file created: {sound_file.path}"
class DeleteHandler(NotifyHandler):
log_msg = 'Sound file deleted: {sound_file.path}'
log_msg = "Sound file deleted: {sound_file.path}"
def __call__(self, *args, **kwargs):
kwargs['deleted'] = True
kwargs["deleted"] = True
return super().__call__(*args, **kwargs)
class MoveHandler(NotifyHandler):
log_msg = 'Sound file moved: {event.src_path} -> {event.dest_path}'
log_msg = "Sound file moved: {event.src_path} -> {event.dest_path}"
def __call__(self, event, **kw):
sound = Sound.objects.filter(file=event.src_path)
# FIXME: this is wrong
if sound:
kw['sound'] = sound
kw['path'] = event.src_path
kw["sound"] = sound
kw["path"] = event.src_path
else:
kw['path'] = event.dest_path
kw["path"] = event.dest_path
return super().__call__(event, **kw)
class ModifiedHandler(NotifyHandler):
timeout_delta = timedelta(seconds=30)
log_msg = 'Sound file updated: {sound_file.path}'
log_msg = "Sound file updated: {sound_file.path}"
def wait(self):
# multiple call of this handler can be done consecutively, we block
@ -108,9 +113,8 @@ class ModifiedHandler(NotifyHandler):
class MonitorHandler(PatternMatchingEventHandler):
"""
Event handler for watchdog, in order to be used in monitoring.
"""
"""Event handler for watchdog, in order to be used in monitoring."""
pool = None
jobs = {}
@ -118,35 +122,39 @@ class MonitorHandler(PatternMatchingEventHandler):
"""
:param str subdir: sub-directory in program dirs to monitor \
(AIRCOX_SOUND_ARCHIVES_SUBDIR or AIRCOX_SOUND_EXCERPTS_SUBDIR);
:param concurrent.futures.Executor pool: pool executing jobs on file change;
:param concurrent.futures.Executor pool: pool executing jobs on file
change;
:param **sync_kw: kwargs passed to `SoundFile.sync`;
"""
self.subdir = subdir
self.pool = pool
self.sync_kw = sync_kw
patterns = ['*/{}/*{}'.format(self.subdir, ext)
for ext in settings.AIRCOX_SOUND_FILE_EXT]
patterns = [
"*/{}/*{}".format(self.subdir, ext)
for ext in settings.AIRCOX_SOUND_FILE_EXT
]
super().__init__(patterns=patterns, ignore_directories=True)
def on_created(self, event):
self._submit(CreateHandler(), event, 'new', **self.sync_kw)
self._submit(CreateHandler(), event, "new", **self.sync_kw)
def on_deleted(self, event):
self._submit(DeleteHandler(), event, 'del')
self._submit(DeleteHandler(), event, "del")
def on_moved(self, event):
self._submit(MoveHandler(), event, 'mv', **self.sync_kw)
self._submit(MoveHandler(), event, "mv", **self.sync_kw)
def on_modified(self, event):
self._submit(ModifiedHandler(), event, 'up', **self.sync_kw)
self._submit(ModifiedHandler(), event, "up", **self.sync_kw)
def _submit(self, handler, event, job_key_prefix, **kwargs):
"""Send handler job to pool if not already running.
Return tuple with running job and boolean indicating if its a
new one.
"""
Send handler job to pool if not already running.
Return tuple with running job and boolean indicating if its a new one.
"""
key = job_key_prefix + ':' + event.src_path
key = job_key_prefix + ":" + event.src_path
job = self.jobs.get(key)
if job and not job.future.done():
job.ping()
@ -158,5 +166,6 @@ class MonitorHandler(PatternMatchingEventHandler):
def done(r):
if self.jobs.get(key) is handler:
del self.jobs[key]
handler.future.add_done_callback(done)
return handler, True