Пример #1
0
    def reset_default_tags(self) -> None:
        audio_file = \
            self.path_to_test_files + self.file_delimit + "audio_file_1.mp3"
        ba_audio = base_audio.BaseAudio()
        ba_audio.load_track(audio_file)
        ba_audio.set_tag("artist", "Dee Yan-Key")
        ba_audio.set_tag("album", "little night thoughts")
        ba_audio.set_tag("genre", "electroswing")
        ba_audio.set_tag("year", 2019)
        ba_audio.set_tag("tracknumber", 1)
        ba_audio.set_tag("title", "gloomy sky")
        ba_audio.write_tags()

        audio_file = \
            self.path_to_test_files + self.file_delimit + "audio_file_2.mp3"
        ba_audio = base_audio.BaseAudio()
        ba_audio.load_track(audio_file)
        ba_audio.set_tag("artist", "Siddhartha Corsus")
        ba_audio.set_tag("album", "Fragments of Light")
        ba_audio.set_tag("tracknumber", 1)
        ba_audio.set_tag("title",
                         "Let Go of Time (and Time Will Let Go of You)")

        audio_file = \
            self.path_to_test_files + self.file_delimit + self.audio_file_3
        ba_audio = base_audio.BaseAudio()
        ba_audio.load_track(audio_file)
        ba_audio.set_tag("artist", "Unknown")
        ba_audio.set_tag("album", "Unknown")
        ba_audio.set_tag("tracknumber", 1)
        ba_audio.set_tag("title",
                         "Unknown")
        ba_audio.write_tags()
Пример #2
0
    def test_regex_from_file_clean_and_capitalize(self) -> None:
        '''
        When passing a regex expression to extract as is the
        track title from the actual audio file, using from-file option
        1. Pass a valid text file with option parse-title-capitalize.
        2. Pass a valid regex expression.
        3. The tracktitle tag should be names accordingly.
        '''
        pattern = "(?<=\\d\\d).+(?=.mp3)"
        audio_file = self.path_to_test_files + self.file_delimit +\
            self.audio_file_3
        tags_and_values = {
            "parse-title-clean": pattern,
            "file": audio_file,
        }

        options = self.to_options(**tags_and_values)

        test_file_txt = self.write_to_test_text_file(*options)
        runner = CliRunner()

        result = runner.invoke(cli, ["--from-file", test_file_txt])

        expected = "Audio Test File 3"

        self.assertEqual(result.exit_code, 0)
        audio = base_audio.BaseAudio()
        audio.load_track(audio_file)
        self.assertEqual(audio.get_tag("tracktitle"), expected)
Пример #3
0
    def test_regex_number_from_file(self) -> None:
        '''
        When passing a regex to extract track number from a valid file.
        1. Given a valid audio file.
        2. and a valid regex pattern.
        3. Extract the track number as a number type.
        '''
        pattern = "\\d+(?=.+\\.mp3)"
        audio_file =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_3
        expected = 1
        tags_and_values = {
            "parse-track_number": pattern,
            "file": audio_file,
        }

        options = self.to_options(**tags_and_values)

        test_file_txt = self.write_to_test_text_file(*options)
        runner = CliRunner()
        result = runner.invoke(cli, ["--from-file", test_file_txt])
        self.assertEqual(result.exit_code, 0)
        audio = base_audio.BaseAudio()
        audio.load_track(audio_file)
        self.assertEqual(audio.get_tag("tracknumber"), expected)
Пример #4
0
    def test_extract_title_cleanup_and_capitalize(self) -> None:
        '''
        When passing a regex expression to extract, cleanup and Capitalize
        track title from the actual audio file,
        1. Pass a valid audio file.
        2. Pass a valid regex expression.
        3. The tracktitle tag should be named without "-", "_" and multiples
        white spaces.
        '''
        runner = CliRunner()
        audio_file = self.path_to_test_files + self.file_delimit +\
            self.audio_file_3

        pattern = "(?<=\\d\\d).+(?=.mp3)"

        result = runner.invoke(cli, ["--file", audio_file,
                                     "--parse-title-clean", pattern]
                               )

        expected = "Audio Test File 3"

        self.assertEqual(result.exit_code, 0)
        audio = base_audio.BaseAudio()
        audio.load_track(audio_file)
        self.assertEqual(audio.get_tag("tracktitle"), expected)
Пример #5
0
    def test_run_cli_all_files(self):
        '''
        When attempting to change the meta tags of all valid audio files in
        a directory:
        1. Pass a valid directory.
        2. Attempt to change the artist of all files.
        3. Check for changes.
        '''

        audio_files_path = self.path_to_test_files
        audio_file_1 = \
            self.path_to_test_files + self.file_delimit + "audio_file_1.mp3"
        audio_file_2 = \
            self.path_to_test_files + self.file_delimit + "audio_file_2.mp3"
        new_artist = "Lucifer"

        runner = CliRunner()
        result = runner.invoke(cli, ["--files-directory", audio_files_path,
                                     "--artist", new_artist
                                     ])

        self.assertEqual(result.exit_code, 0)
        audio = base_audio.BaseAudio()
        audio.load_track(audio_file_1)
        self.assertEqual(audio.get_tag("artist"), new_artist)
        audio.load_track(audio_file_2)
        self.assertEqual(audio.get_tag("artist"), new_artist)
Пример #6
0
    def test_run_cli_set_tracktitle_and_album_and_genre(self):
        '''
        When attempting to tun the CLI and set tracktitle tag:
        1. Pass a valid audio file.
        2. set the 'tracktitle', 'album', and 'genre' tags.
        3. check for changes.
        '''
        audio_file = \
            self.path_to_test_files + self.file_delimit + "audio_file_1.mp3"
        runner = CliRunner()
        new_title = "Perreando con Lucifer"
        new_album = "Satanas se Fue de Rumba"
        new_genre = "Techno-Cumbia Norteña Progresiva"
        result = runner.invoke(cli, ["--file", audio_file,
                                     "--tracktitle", new_title,
                                     "--album", new_album,
                                     "--genre", new_genre])
        self.assertEqual(result.exit_code, 0)

        ba_audio = base_audio.BaseAudio()
        ba_audio.load_track(audio_file)
        self.assertEqual(ba_audio.get_tag("tracktitle"), new_title)
        self.assertEqual(ba_audio.get_tag("album"), new_album)
        self.assertEqual(ba_audio.get_tag("genre"), new_genre)
        audio_file = \
            self.path_to_test_files + self.file_delimit + "audio_file_1.mp3"
        runner = CliRunner()
        new_title = "Perreando con Lucifer"
        result = runner.invoke(cli, ["--file", audio_file,
                                     "--tracktitle", new_title])
        self.assertEqual(result.exit_code, 0)
Пример #7
0
    def test_regex_number_from_file_directory(self) -> None:
        '''
        When passing a regex to extract track number from a valid file.
        1. Given a valid audio file.
        2. and a valid regex pattern.
        3. Extract the track number as a number type.
        '''
        pattern = "(?<=_)\\d+(?=\\.mp3)"

        # directory and individual files
        audio_directory = self.path_to_test_files
        first_f =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_3
        second_f =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_1
        third_f =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_2

        # expected track numbers
        expected1 = 3
        expected2 = 1
        expected3 = 2

        # options for runner
        tags_and_values = {
            "parse-track-number": pattern,
            "files-directory": audio_directory,
        }
        options = self.to_options(**tags_and_values)
        test_file_txt = self.write_to_test_text_file(*options)

        # runner
        runner = CliRunner()
        result = runner.invoke(cli, ["--from-file", test_file_txt])

        self.assertEqual(result.exit_code, 0)

        audio = base_audio.BaseAudio()

        # expected 1
        audio.load_track(first_f)
        self.assertEqual(audio.get_tag("tracknumber"), expected1)
        # expected 2
        audio.load_track(second_f)
        self.assertEqual(audio.get_tag("tracknumber"), expected2)
        # expected 3
        audio.load_track(third_f)
        self.assertEqual(audio.get_tag("tracknumber"), expected3)
Пример #8
0
    def test_run_cli_from_text_file_multiple_files(self):
        '''
        When attempting to set tags to multiple files in a directory from
        a text file
        1. Load a text file with the expected tags. Pointing to
        a directory with multiple audio files.
        2. The syntax should be as follows:
        option=value
        option=value
        3. All options remain the same, just without the first two hyphens at
        the beginning,
        so --file becomes file and --files-directory becomes files-directory.
        4. Only one option per line.
        '''
        tags_and_values = {
            "artist": "Los Luciferinos",
            "album": "Rumbeando en el Noveno Infierno",
            "files-directory": self.path_to_test_files,
            "year": 1984
        }

        options = self.to_options(**tags_and_values)

        test_file_txt = self.write_to_test_text_file(*options)

        runner = CliRunner()
        result = runner.invoke(cli, ["--from-file", test_file_txt])

        self.assertEqual(result.exit_code, 0)

        audio = base_audio.BaseAudio()
        audio.load_track(tags_and_values["files-directory"] +
                         self.file_delimit +
                         "audio_file_1.mp3")

        for key in tags_and_values:

            if key == "files-directory":
                continue

            self.assertEqual(audio.get_tag(key), tags_and_values[key])

        audio.load_track(tags_and_values["files-directory"] +
                         self.file_delimit +
                         "audio_file_2.mp3")

        for key in tags_and_values:

            if key == "files-directory":
                continue

            self.assertEqual(audio.get_tag(key), tags_and_values[key])
Пример #9
0
    def test_regex_number_directory(self) -> None:
        '''
        When passing a regex to extract track number from a directory
        with valid audio files.
        1. Given a directory with valid audio files.
        2. and a valid regex pattern.
        3. Extract the track number as a number type.
        '''
        pattern = "(?<=_)\\d+(?=\\.mp3)"

        # directory and individual files
        audio_directory = self.path_to_test_files
        first_f =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_3
        second_f =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_1
        third_f =\
            self.path_to_test_files +\
            self.file_delimit +\
            self.audio_file_2

        # expected track numbers
        expected1 = 3
        expected2 = 1
        expected3 = 2

        runner = CliRunner()
        result = runner.invoke(cli, ["--files-directory", audio_directory,
                                     "--parse-track-number", pattern])

        self.assertEqual(result.exit_code, 0)

        audio = base_audio.BaseAudio()

        # expected 1
        audio.load_track(first_f)
        self.assertEqual(audio.get_tag("tracknumber"), expected1)
        # expected 2
        audio.load_track(second_f)
        self.assertEqual(audio.get_tag("tracknumber"), expected2)
        # expected 3
        audio.load_track(third_f)
        self.assertEqual(audio.get_tag("tracknumber"), expected3)
Пример #10
0
    def test_run_cli_set_tracktitle(self):
        '''
        When attempting to tun the CLI and set tracktitle tag:
        1. Pass a valid audio file.
        2. set the 'tracktitle' tag.
        3. check for changes.
        '''
        audio_file = \
            self.path_to_test_files + self.file_delimit + "audio_file_1.mp3"
        runner = CliRunner()
        new_title = "Perreando con Lucifer"
        result = runner.invoke(cli, ["--file", audio_file,
                                     "--tracktitle", new_title])
        self.assertEqual(result.exit_code, 0)

        ba_audio = base_audio.BaseAudio()
        ba_audio.load_track(audio_file)
        self.assertEqual(ba_audio.get_tag("tracktitle"), new_title)
Пример #11
0
def base_audio_wrapper(file, **tags_to_set):
    '''
    send and write tags to file
    '''
    try:
        audio_file = base_audio.BaseAudio()
        audio_file.load_track(file)
        audio_file.set_tags(**tags_to_set)
        audio_file.write_tags()
    except NotImplementedError as nie:
        print(nie)
        print(f"Error while loading file:{file}")
        exit(1)
    except TypeError as te:
        print(te)
        exit(1)
    except Exception as e:
        print(e)
        exit(1)
Пример #12
0
 def test_regex_number_file(self) -> None:
     '''
     When passing a regex to extract track number from a valid file.
     1. Given a valid audio file.
     2. and a valid regex pattern.
     3. Extract the track number as a number type.
     '''
     pattern = "\\d+(?=.+\\.mp3)"
     audio_file =\
         self.path_to_test_files +\
         self.file_delimit +\
         self.audio_file_3
     expected = 1
     runner = CliRunner()
     result = runner.invoke(cli, ["--file", audio_file,
                                  "--parse-track-number", pattern])
     self.assertEqual(result.exit_code, 0)
     audio = base_audio.BaseAudio()
     audio.load_track(audio_file)
     self.assertEqual(audio.get_tag("tracknumber"), expected)
Пример #13
0
    def test_extract_title_title_as_is(self) -> None:
        '''
        When passing a regex expression to extract as is the
        track title from the actual audio file,
        1. Pass a valid audio file.
        2. Pass a valid regex expression.
        3. The tracktitle tag should be named as it appears in title.
        '''
        runner = CliRunner()
        audio_file = self.path_to_test_files + self.file_delimit +\
            self.audio_file_3

        pattern = "(?<=\\d\\d).+(?=.mp3)"

        result = runner.invoke(cli, ["--file", audio_file,
                                     "--parse-title-as-is", pattern]
                               )

        expected = "_audio_test_file_3"

        self.assertEqual(result.exit_code, 0)
        audio = base_audio.BaseAudio()
        audio.load_track(audio_file)
        self.assertEqual(audio.get_tag("tracktitle"), expected)