diff --git a/aircox/controllers/sound_monitor.py b/aircox/controllers/sound_monitor.py index 80a00cf..82e7306 100644 --- a/aircox/controllers/sound_monitor.py +++ b/aircox/controllers/sound_monitor.py @@ -103,10 +103,8 @@ class MoveTask(Task): log_msg = "Sound file moved: {event.src_path} -> {event.dest_path}" def __call__(self, event, **kw): - print("event", event.src_path, event.dest_path, Sound.objects.all()) sound = Sound.objects.filter(file=event.src_path).first() if sound: - print("got sound", event.src_path) kw["sound"] = sound kw["path"] = event.src_path else: diff --git a/aircox/controllers/sound_stats.py b/aircox/controllers/sound_stats.py index a4e5d50..2317348 100644 --- a/aircox/controllers/sound_stats.py +++ b/aircox/controllers/sound_stats.py @@ -73,19 +73,18 @@ class SoundStats: def __init__(self, path, sample_length=None): self.path = path - self.sample_length = ( - sample_length if sample_length is not None else self.sample_length - ) + if sample_length is not None: + self.sample_length = sample_length def get_file_stats(self): - return self.stats and self.stats[0] + return self.stats and self.stats[0] or None def analyse(self): logger.debug("complete file analysis") self.stats = [SoxStats(self.path)] position = 0 length = self.stats[0].get("length") - + print(self.stats, "-----") if not self.sample_length: return @@ -109,23 +108,23 @@ class SoundStats: self.resume() def resume(self): - def view(array): - return [ - "file" - if index == 0 - else "sample {} (at {} seconds)".format( - index, (index - 1) * self.sample_length - ) - for index in array - ] - if self.good: logger.debug( self.path + " -> good: \033[92m%s\033[0m", - ", ".join(view(self.good)), + ", ".join(self._view(self.good)), ) if self.bad: logger.debug( self.path + " -> bad: \033[91m%s\033[0m", - ", ".join(view(self.bad)), + ", ".join(self._view(self.bad)), ) + + def _view(self, array): + return [ + "file" + if index == 0 + else "sample {} (at {} seconds)".format( + index, (index - 1) * self.sample_length + ) + for index in array + ] diff --git a/aircox/test.py b/aircox/test.py index 070220c..58635d9 100644 --- a/aircox/test.py +++ b/aircox/test.py @@ -245,7 +245,6 @@ class Interface: def __call__(self, *args, **kwargs): target = self._imeta.target - print("is it class?", self, target, inspect.isclass(target)) if inspect.isclass(target): target = target(*args, **kwargs) return type(self)( diff --git a/aircox/tests/controllers/test_sound_stats.py b/aircox/tests/controllers/test_sound_stats.py index 9f75487..d739ec0 100644 --- a/aircox/tests/controllers/test_sound_stats.py +++ b/aircox/tests/controllers/test_sound_stats.py @@ -55,7 +55,20 @@ def sox_stats(sox_interfaces): @pytest.fixture def stats(): - return sound_stats.SoundStats() + return sound_stats.SoundStats("/tmp/audio.wav", sample_length=10) + + +@pytest.fixture +def stats_interfaces(stats): + def iw(path, **kw): + kw["path"] = path + kw.setdefault("length", stats.sample_length * 2) + return kw + + SxS = sound_stats.SoxStats + sound_stats.SoxStats = iw + yield iw + sound_stats.SoxStats = SxS class TestSoxStats: @@ -73,20 +86,38 @@ class TestSoxStats: class TestSoundStats: - def test___init__(self): - pass + def test_get_file_stats(self, stats): + file_stats = {"a": 134} + stats.stats = [file_stats] + assert stats.get_file_stats() is file_stats - def test_get_file_stats(self): - pass + def test_get_file_stats_none(self, stats): + stats.stats = [] + assert stats.get_file_stats() is None - def test_analyze(self): - pass + def test_analyse(self, stats, stats_interfaces): + stats.analyse() + assert stats.stats == [ + {"path": stats.path, "length": stats.sample_length * 2}, + {"path": stats.path, "at": 0, "length": stats.sample_length}, + {"path": stats.path, "at": 10, "length": stats.sample_length}, + ] - def test_analyze_no_sample_length(self): - pass + def test_analyse_no_sample_length(self, stats, stats_interfaces): + stats.sample_length = 0 + stats.analyse() + assert stats.stats == [{"length": 0, "path": stats.path}] - def test_check(self): - pass + def test_check(self, stats): + good = [{"val": i} for i in range(0, 11)] + bad = [{"val": i} for i in range(-10, 0)] + [ + {"val": i} for i in range(11, 20) + ] + stats.stats = good + bad + calls = {} + stats.resume = lambda *_: calls.setdefault("resume", True) + stats.check("val", 0, 10) - def test_resume(self): - pass + assert calls == {"resume": True} + assert all(i < len(good) for i in stats.good) + assert all(i >= len(good) for i in stats.bad) diff --git a/notes.md b/notes.md index 31c72ec..a021f21 100755 --- a/notes.md +++ b/notes.md @@ -73,18 +73,9 @@ cms: - player support diffusions with multiple archive files - comments -> remove/edit by the author -# Timezone shit: -# Instance's TODO -- menu_top .sections: - - display inline block - - search on the right -- lists > items style -- logo: url -- comments / more info (perhaps using the thing like the player) -- footer url to aircox's repo + admin -- styling cal (a.today colored) - -- init of post related models - -> date is not formatted - -> missing image? +# For the next version: +## Refactorisation +Move: +- into `aircox_streamer`: `Log`, `Port` +- into `aircox_cms`: `Page`, `NavItem`, `Category`, `StaticPage`, etc.