#123: Sound Monitoring #125
@ -1,5 +1,4 @@
 | 
				
			|||||||
#! /usr/bin/env python3
 | 
					#! /usr/bin/env python3
 | 
				
			||||||
# TODO: SoundMonitor class
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""Monitor sound files; For each program, check for:
 | 
					"""Monitor sound files; For each program, check for:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -60,10 +59,8 @@ class Command(BaseCommand):
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def handle(self, *args, **options):
 | 
					    def handle(self, *args, **options):
 | 
				
			||||||
        SoundMonitor()
 | 
					        monitor = SoundMonitor()
 | 
				
			||||||
        if options.get("scan"):
 | 
					        if options.get("scan"):
 | 
				
			||||||
            self.scan()
 | 
					            monitor.scan()
 | 
				
			||||||
        # if options.get('quality_check'):
 | 
					 | 
				
			||||||
        #    self.check_quality(check=(not options.get('scan')))
 | 
					 | 
				
			||||||
        if options.get("monitor"):
 | 
					        if options.get("monitor"):
 | 
				
			||||||
            self.monitor()
 | 
					            monitor.monitor()
 | 
				
			||||||
 | 
				
			|||||||
@ -206,29 +206,48 @@ def monitor():
 | 
				
			|||||||
    yield sound_monitor.SoundMonitor()
 | 
					    yield sound_monitor.SoundMonitor()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SoundMonitor:
 | 
					class TestSoundMonitor:
 | 
				
			||||||
 | 
					    @pytest.mark.django_db
 | 
				
			||||||
    def test_report(self, monitor, program, logger):
 | 
					    def test_report(self, monitor, program, logger):
 | 
				
			||||||
        monitor.report(program, "component", "content", logger=logger)
 | 
					        monitor.report(program, "component", "content", logger=logger)
 | 
				
			||||||
        msg = f"{program}, component: content"
 | 
					        msg = f"{program}, component: content"
 | 
				
			||||||
        assert logger._trace("info", args=True) == (msg,)
 | 
					        assert logger._trace("info", args=True) == (msg,)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_scan(self, monitor, program, logger):
 | 
					    @pytest.mark.django_db
 | 
				
			||||||
 | 
					    def test_scan(self, monitor, programs, logger):
 | 
				
			||||||
        interface = Interface(None, {"scan_for_program": None})
 | 
					        interface = Interface(None, {"scan_for_program": None})
 | 
				
			||||||
        monitor.scan_for_program = interface.scan_for_program
 | 
					        monitor.scan_for_program = interface.scan_for_program
 | 
				
			||||||
        dirs = monitor.scan(logger)
 | 
					        dirs = monitor.scan(logger)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert logger._traces("info") == (
 | 
					        assert logger._traces("info") == tuple(
 | 
				
			||||||
            "scan all programs...",
 | 
					            [
 | 
				
			||||||
            f"#{program.id} {program.title}",
 | 
					                (("scan all programs...",), {}),
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					            + [
 | 
				
			||||||
 | 
					                ((f"#{program.id} {program.title}",), {})
 | 
				
			||||||
 | 
					                for program in programs
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        assert dirs == [program.abspath]
 | 
					        assert dirs == [program.abspath for program in programs]
 | 
				
			||||||
        assert interface._traces("scan_for_program") == (
 | 
					        traces = tuple(
 | 
				
			||||||
            ((program, settings.SOUND_ARCHIVES_SUBDIR), {"logger": logger})(
 | 
					            [
 | 
				
			||||||
                (program, settings.SOUND_EXCERPTS_SUBDIR), {"logger": logger}
 | 
					                [
 | 
				
			||||||
            )
 | 
					                    (
 | 
				
			||||||
 | 
					                        (program, settings.SOUND_ARCHIVES_SUBDIR),
 | 
				
			||||||
 | 
					                        {"logger": logger, "type": Sound.TYPE_ARCHIVE},
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    (
 | 
				
			||||||
 | 
					                        (program, settings.SOUND_EXCERPTS_SUBDIR),
 | 
				
			||||||
 | 
					                        {"logger": logger, "type": Sound.TYPE_EXCERPT},
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					                for program in programs
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        traces_flat = tuple([item for sublist in traces for item in sublist])
 | 
				
			||||||
 | 
					        assert interface._traces("scan_for_program") == traces_flat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_monitor(self, monitor, monitor_interfaces, logger):
 | 
					    def broken_test_monitor(self, monitor, monitor_interfaces, logger):
 | 
				
			||||||
        def sleep(*args, **kwargs):
 | 
					        def sleep(*args, **kwargs):
 | 
				
			||||||
            monitor.stop()
 | 
					            monitor.stop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										23
									
								
								aircox/tests/management/test_sounds_monitor.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								aircox/tests/management/test_sounds_monitor.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					import pytest
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from django.core.management import call_command
 | 
				
			||||||
 | 
					from django.conf import settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wav = (
 | 
				
			||||||
 | 
					    b"RIFF$\x00\x00\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00D\xac\x00\x00"
 | 
				
			||||||
 | 
					    b"\x10\xb1\x02\x00\x04\x00\x10\x00data\x00\x00\x00\x00"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@pytest.mark.django_db
 | 
				
			||||||
 | 
					def test_adding_a_sound(programs, fs):
 | 
				
			||||||
 | 
					    p0 = programs[0]
 | 
				
			||||||
 | 
					    assert len(p0.sound_set.all()) == 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    s0 = os.path.join(
 | 
				
			||||||
 | 
					        settings.PROJECT_ROOT, "static/media/%s/archives/sound.wav" % p0.path
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    fs.create_file(s0, contents=wav)
 | 
				
			||||||
 | 
					    call_command("sounds_monitor", "-s")
 | 
				
			||||||
 | 
					    assert len(p0.sound_set.all()) == 1
 | 
				
			||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
pytest~=7.2
 | 
					pytest~=7.2
 | 
				
			||||||
pytest-django~=4.5
 | 
					pytest-django~=4.5
 | 
				
			||||||
model_bakery~=1.10
 | 
					model_bakery~=1.10
 | 
				
			||||||
 | 
					pyfakefs~=5.2
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user