Exemple #1
0
 def assertTagError(self, prefix):
     errors = checker.find_tags_errors(self.au_file)
     for err_msg in errors:
         if err_msg.startswith(prefix):
             return
     print errors
     self.fail()
Exemple #2
0
    def test_ufid_tag_checks(self):
        ufid_tag = mutagen.id3.UFID(owner="bad", data="bad")
        self.au_file.mutagen_id3.add(ufid_tag)
        self.assertTagError(checker.ERROR_TAG_MISSING_REQUIRED + "UFID")

        ufid_tag.owner = constants.UFID_OWNER_IDENTIFIER
        # Need to re-add since changing the owner also changes the
        # hash key.  A very annoying corner case, more proof that
        # mutagen's "just make it look like a dict" strategy is
        # ultimately misguided.
        self.au_file.mutagen_id3.add(ufid_tag)
        self.assertTagError(checker.ERROR_UFID_BAD_MALFORMED)

        bad_ufid_data = ufid.ufid(TEST_VOL + 1, TEST_TS, TEST_FP)
        ufid_tag.data = bad_ufid_data
        self.assertTagError(checker.ERROR_UFID_BAD_VOLUME)

        bad_ufid_data = ufid.ufid(TEST_VOL, TEST_TS + 1, TEST_FP)
        ufid_tag.data = bad_ufid_data
        self.assertTagError(checker.ERROR_UFID_BAD_TIMESTAMP)

        bad_ufid_data = ufid.ufid(TEST_VOL, TEST_TS, "2" * 40)
        ufid_tag.data = bad_ufid_data
        self.assertTagError(checker.ERROR_UFID_BAD_FINGERPRINT)

        ufid_tag.data = self.au_file.ufid()
        errors = checker.find_tags_errors(self.au_file)
        self.assertNoTagError(checker.ERROR_TAG_MISSING_REQUIRED + "UFID")
        self.assertNoTagError(checker.ERROR_UFID_BAD_OWNER)
        self.assertNoTagError(checker.ERROR_UFID_BAD_MALFORMED)
        self.assertNoTagError(checker.ERROR_UFID_BAD_VOLUME)
        self.assertNoTagError(checker.ERROR_UFID_BAD_TIMESTAMP)
        self.assertNoTagError(checker.ERROR_UFID_BAD_FINGERPRINT)
Exemple #3
0
def standardize_file(au_file):
    """Correct and check a file's tags.

    Args:
      au_file: An AudioFile object.  This object's tags are corrected
        in-place.

    Raises:
      ImportFileError: if the tags are broken or cannot be fixed.
    """
    original_id3 = au_file.mutagen_id3
    au_file.mutagen_id3 = _fix_file_tags(au_file)
    # Make sure our checker finds no errors.
    pre_write_tagging_errors = checker.find_tags_errors(au_file)
    if pre_write_tagging_errors:
        au_file.mutagen_id3 = original_id3  # Put back the original tags
        raise ImportFileError(["Found pre-write errors"] +
                              pre_write_tagging_errors)
Exemple #4
0
    def test_tag_checks_no_errors(self):
        self.au_file.mutagen_id3.add(
            mutagen.id3.TOWN(text=["MPG/3"],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TLEN(text=[str(TEST_DURATION)],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TOWN(text=[constants.TOWN_FILE_OWNER],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TPE1(text=["Bob Dylan"],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TIT2(text=["Just Like Tom Thumb's Blues"],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TRCK(text=["3/4"],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(self.au_file.ufid_tag())
        self.au_file.mutagen_id3.add(
            mutagen.id3.TFLT(text=["MPG/3"],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TXXX(desc=constants.TXXX_FRAME_SIZE_DESCRIPTION,
                             text=[unicode(TEST_FRAME_SIZE)],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TXXX(desc=constants.TXXX_FRAME_COUNT_DESCRIPTION,
                             text=[unicode(TEST_FRAME_COUNT)],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))
        self.au_file.mutagen_id3.add(
            mutagen.id3.TXXX(desc=constants.TXXX_ALBUM_ID_DESCRIPTION,
                             text=[unicode(TEST_ALBUM_ID)],
                             encoding=constants.DEFAULT_ID3_TEXT_ENCODING))

        self.assertEqual([], checker.find_tags_errors(self.au_file))
Exemple #5
0
 def assertNoTagError(self, prefix):
     errors = checker.find_tags_errors(self.au_file)
     for err_msg in errors:
         if err_msg.startswith(prefix):
             self.fail(errors)
Exemple #6
0
    """
    # Make sure the canonical directory exists.
    try:
        os.makedirs(au_file.canonical_directory(prefix))
    except OSError, ex:
        if ex.errno != errno.EEXIST:
            raise

    path = au_file.canonical_path(prefix)
    if os.path.exists(path):
        raise ImportFileError(["File exists: " + path])
    au_file.mutagen_id3.save(path)
    assert au_file.payload is not None
    out_fh = open(path, "a")
    out_fh.write(au_file.payload)
    out_fh.close()

    # Now make sure that the file we just wrote passes our checks.
    new_au_file = audio_file.scan(path)
    if new_au_file is None:
        raise ImportFileError(["New file damaged!"])
    new_au_file.volume = au_file.volume
    new_au_file.import_timestamp = au_file.import_timestamp
    post_write_tagging_errors = checker.find_tags_errors(new_au_file)
    if post_write_tagging_errors:
        os.unlink(path)
        raise ImportFileError(["Found post-write errors!"] +
                              post_write_tagging_errors)

    return path