Browse Source

_tag_interface.OggOpus: implement get_free_int

Fabian Peter Hammerle 4 years ago
parent
commit
d5cd5ba77a

+ 3 - 2
symuid/_tag_interface.py

@@ -248,8 +248,9 @@ class OggOpus(_MutagenTagInterface):
     def set_track_uuid(self, uuid: bytes) -> None:
         self._mutagen_file[self._UUID_TAG_KEY] = uuid_bytes_to_str(uuid)
 
-    def get_free_int(self, tag_label):
-        raise NotImplementedError()
+    def get_free_int(self, tag_label: str) -> typing.Optional[int]:
+        dec = self._get_single_text(tag_label)
+        return int(dec) if dec else None
 
     def set_free_int(self, tag_label, data):
         raise NotImplementedError()

+ 11 - 0
tests/tag_interface/test_ogg_vorbis.py

@@ -77,3 +77,14 @@ def test_set_track_uuid(empty_ogg_opus_path):
     assert len(tags) == 1
     assert tags.items()[0] == (
         'symuid:uuid', ['5fa0d7c0-f315-4614-bee4-69644d3d80b3'])
+
+
+@pytest.mark.parametrize(('track_name', 'tag_label', 'expected_int'), [
+    ('ogg-opus-empty.opus', 'tracknumber', None),
+    ('ogg-opus-typical.opus', 'tracknumber', 21),
+    ('ogg-opus-typical.opus', 'tracknumberr', None),
+    ('ogg-opus-typical.opus', 'symuid:pcnt:player:library:1572098177', 43),
+])
+def test_get_free_int(tracks_dir_path, track_name, tag_label, expected_int):
+    iface = OggOpus(mutagen.File(os.path.join(tracks_dir_path, track_name)))
+    assert expected_int == iface.get_free_int(tag_label)

BIN
tests/tracks/ogg-opus-typical.opus