Browse Source

Track.register_play_count: expect symuid.PlayCount as param

Fabian Peter Hammerle 5 years ago
parent
commit
c906b4d215
4 changed files with 29 additions and 72 deletions
  1. 6 4
      symuid-import-cmus
  2. 6 4
      symuid-import-itunes
  3. 7 9
      symuid/__init__.py
  4. 10 55
      tests/test_track.py

+ 6 - 4
symuid-import-cmus

@@ -28,10 +28,12 @@ def symuid_import_cmus(library_id, cache_path):
                 (symuid_track.path, last_count.count, cmus_track.play_count)
             if last_count is None or last_count.count != cmus_track.play_count:
                 symuid_track.register_play_count(
-                    player=PLAYER_NAME,
-                    library_id=library_id,
-                    register_dt=dt.datetime.now(),
-                    play_count=cmus_track.play_count,
+                    symuid.PlayCount(
+                        player=PLAYER_NAME,
+                        library_id=library_id,
+                        register_dt=dt.datetime.now(),
+                        count=cmus_track.play_count,
+                    ),
                     tag_set_cb=lambda tr, tag:
                         print('{!r}: set tag {!r}'.format(tr.path, tag)),
                 )

+ 6 - 4
symuid-import-itunes

@@ -23,10 +23,12 @@ def symuid_import_itunes(xml_library_path, path_regex_sub):
                 symuid_track = symuid.Track(path=track_path)
                 # TODO dt=dt.datetime.now()
                 symuid_track.register_play_count(
-                    player='itunes',
-                    library_id=lib.id,
-                    register_dt=itunes_track.last_play_dt,
-                    play_count=itunes_track.play_count,
+                    symuid.PlayCount(
+                        player='itunes',
+                        library_id=lib.id,
+                        register_dt=itunes_track.last_play_dt,
+                        count=itunes_track.play_count,
+                    ),
                     tag_set_cb=lambda tr, tag:
                         print('{!r}: set tag {!r}'.format(tr.path, tag)),
                 )

+ 7 - 9
symuid/__init__.py

@@ -32,7 +32,7 @@ class PlayCount:
         return type(self) == type(other) and vars(self) == vars(other)
 
     def __hash__(self):
-        attrs_sorted = sorted(vars(self).items(), key=lambda p: p[0]) 
+        attrs_sorted = sorted(vars(self).items(), key=lambda p: p[0])
         return hash(tuple(v for k, v in attrs_sorted))
 
     def __repr__(self):
@@ -115,21 +115,19 @@ class Track:
     def get_play_count_sum(self, player=None, library_id=None):
         return sum(c.count for c in self._get_latest_play_counts(player, library_id))
 
-    def register_play_count(self, player, library_id, register_dt, play_count, tag_set_cb=None):
-        # TODO accept PlayCount as param
-        assert isinstance(register_dt, dt.datetime), register_dt
-        assert isinstance(play_count, int), play_count
+    def register_play_count(self, pc, tag_set_cb=None):
+        assert isinstance(pc, PlayCount), pc
         tag_label = 'symuid:pcnt:{}:{}:{:.0f}'.format(
-            player, library_id, register_dt.timestamp(),
+            pc.player, pc.library_id, pc.register_dt.timestamp(),
         )
         current_count = self._iface.get_free_int(tag_label)
         if current_count is None:
-            new_tag = self._iface.set_free_int(tag_label, play_count)
+            new_tag = self._iface.set_free_int(tag_label, pc.count)
             self._iface.save()
             if tag_set_cb:
                 tag_set_cb(self, new_tag)
-        elif current_count != play_count:
-            raise Exception((current_count, play_count))
+        elif current_count != pc.count:
+            raise Exception((current_count, pc.count))
 
     @classmethod
     def walk(cls, root_path, path_ignore_regex, ignored_cb=None, unsupported_cb=None):

+ 10 - 55
tests/test_track.py

@@ -34,44 +34,19 @@ def test_init(path):
     symuid.Track(path)
 
 
-@pytest.mark.parametrize(('player', 'library_id', 'register_dt', 'count'), [
-    ('pytest', 'lib', dt.datetime(2018, 9, 26, 21, 16, 20, tzinfo=dt.timezone.utc), 7),
+@pytest.mark.parametrize(('pc'), [
+    symuid.PlayCount('pytest', 'lib', utc_dt(), 7),
 ])
-def test_register_play_count(empty_id3_track, player, library_id, register_dt, count):
-    empty_id3_track.register_play_count(
-        player=player,
-        library_id=library_id,
-        register_dt=register_dt,
-        play_count=count,
-    )
-    tags = mutagen.File(empty_id3_track.path).tags
-    assert len(tags) == 1
-    expected_desc = 'symuid:pcnt:{}:{}:{}'.format(
-        player, library_id, int(register_dt.timestamp()),
-    )
-    tag = tags['TXXX:' + expected_desc]
-    assert tag.desc == expected_desc
-    assert tag.text == [str(count)]
-
-
-@pytest.mark.parametrize(('player', 'library_id', 'register_dt', 'count'), [
-    ('pytest', 'lib', utc_dt(), 7),
-])
-def test_register_play_count(empty_id3_track, player, library_id, register_dt, count):
-    empty_id3_track.register_play_count(
-        player=player,
-        library_id=library_id,
-        register_dt=register_dt,
-        play_count=count,
-    )
+def test_register_play_count(empty_id3_track, pc):
+    empty_id3_track.register_play_count(pc)
     tags = mutagen.File(empty_id3_track.path).tags
     assert len(tags) == 1
     expected_desc = 'symuid:pcnt:{}:{}:{}'.format(
-        player, library_id, int(register_dt.timestamp()),
+        pc.player, pc.library_id, int(pc.register_dt.timestamp()),
     )
     tag = tags['TXXX:' + expected_desc]
     assert tag.desc == expected_desc
-    assert tag.text == [str(count)]
+    assert tag.text == [str(pc.count)]
 
 
 @pytest.mark.parametrize(('expected_counts'), [
@@ -85,12 +60,7 @@ def test_register_play_count(empty_id3_track, player, library_id, register_dt, c
 ])
 def test__get_play_counts_all(empty_id3_track, expected_counts):
     for pc in expected_counts:
-        empty_id3_track.register_play_count(
-            player=pc.player,
-            library_id=pc.library_id,
-            register_dt=pc.register_dt,
-            play_count=pc.count,
-        )
+        empty_id3_track.register_play_count(pc)
     assert expected_counts == list(empty_id3_track._get_play_counts())
 
 
@@ -100,12 +70,7 @@ def test__get_play_counts_filtered(empty_id3_track):
               symuid.PlayCount('a', '1', utc_dt(0), 3),
               symuid.PlayCount('b', '2', utc_dt(1), 4)]
     for pc in counts:
-        empty_id3_track.register_play_count(
-            player=pc.player,
-            library_id=pc.library_id,
-            register_dt=pc.register_dt,
-            play_count=pc.count,
-        )
+        empty_id3_track.register_play_count(pc)
     assert set(empty_id3_track._get_play_counts(player='a')) \
         == set(filter(lambda pc: pc.player == 'a', counts))
     assert set(empty_id3_track._get_play_counts(player='b')) \
@@ -123,12 +88,7 @@ def test__get_latest_play_counts(empty_id3_track):
               symuid.PlayCount('a', '1', utc_dt(2), 4),
               symuid.PlayCount('b', '2', utc_dt(3), 5)]
     for pc in counts:
-        empty_id3_track.register_play_count(
-            player=pc.player,
-            library_id=pc.library_id,
-            register_dt=pc.register_dt,
-            play_count=pc.count,
-        )
+        empty_id3_track.register_play_count(pc)
     assert set(empty_id3_track._get_latest_play_counts()) \
         == set([counts[1], counts[3], counts[4]])
     assert set(empty_id3_track._get_latest_play_counts(player='a')) \
@@ -144,10 +104,5 @@ def test_get_play_count_sum(empty_id3_track):
               symuid.PlayCount('a', '1', utc_dt(2), 4),
               symuid.PlayCount('b', '2', utc_dt(3), 5)]
     for pc in counts:
-        empty_id3_track.register_play_count(
-            player=pc.player,
-            library_id=pc.library_id,
-            register_dt=pc.register_dt,
-            play_count=pc.count,
-        )
+        empty_id3_track.register_play_count(pc)
     assert 2 + 4 + 5 == empty_id3_track.get_play_count_sum()