def test_get_album_list2(self): self._make_request('getAlbumList2', error=10) self._make_request('getAlbumList2', {'type': 'void'}, error=0) self._make_request('getAlbumList2', { 'type': 'random', 'size': 'size_t' }, error=0) self._make_request('getAlbumList2', { 'type': 'newest', 'offset': '&v + 2' }, error=0) types = [ 'random', 'newest', 'frequent', 'recent', 'starred', 'alphabeticalByName', 'alphabeticalByArtist' ] for t in types: self._make_request('getAlbumList2', {'type': t}, tag='albumList2', skip_post=True) rv, child = self._make_request('getAlbumList2', {'type': 'random'}, tag='albumList2', skip_post=True) with db_session: Track.get().delete() Album.get().delete() rv, child = self._make_request('getAlbumList2', {'type': 'random'}, tag='albumList2') self.assertEqual(len(child), 0)
def test_get_album_list2(self): self._make_request("getAlbumList2", error=10) self._make_request("getAlbumList2", {"type": "void"}, error=0) self._make_request( "getAlbumList2", {"type": "random", "size": "size_t"}, error=0 ) self._make_request( "getAlbumList2", {"type": "newest", "offset": "&v + 2"}, error=0 ) types = [ "random", "newest", "frequent", "recent", "starred", "alphabeticalByName", "alphabeticalByArtist", ] for t in types: self._make_request( "getAlbumList2", {"type": t}, tag="albumList2", skip_post=True ) rv, child = self._make_request( "getAlbumList2", {"type": "random"}, tag="albumList2", skip_post=True ) with db_session: Track.get().delete() Album.get().delete() rv, child = self._make_request( "getAlbumList2", {"type": "random"}, tag="albumList2" ) self.assertEqual(len(child), 0)
def setUp(self): super().setUp() with db_session: folder = Folder( name="Root", path=os.path.abspath("tests/assets"), root=True, cover_art="cover.jpg", ) folder = Folder.get(name="Root") self.folderid = folder.id artist = Artist(name="Artist") album = Album(artist=artist, name="Album") track = Track( title="23bytes", number=1, disc=1, artist=artist, album=album, path=os.path.abspath("tests/assets/23bytes"), root_folder=folder, folder=folder, duration=2, bitrate=320, last_modification=0, ) self.trackid = track.id self.formats = ["mp3", "flac", "ogg", "m4a"] for i in range(len(self.formats)): track_embeded_art = Track( title="[silence]", number=1, disc=1, artist=artist, album=album, path=os.path.abspath( "tests/assets/formats/silence.{}".format( self.formats[i])), root_folder=folder, folder=folder, duration=2, bitrate=320, last_modification=0, ) self.formats[i] = track_embeded_art.id
def setUp(self): super().setUp() with db_session: Folder(root=True, name="Empty root", path="/tmp") root = Folder(root=True, name="Root folder", path="tests/assets") for letter in "ABC": folder = Folder( name=letter + "rtist", path="tests/assets/{}rtist".format(letter), parent=root, ) artist = Artist(name=letter + "rtist") for lether in "AB": afolder = Folder( name=letter + lether + "lbum", path="tests/assets/{0}rtist/{0}{1}lbum".format( letter, lether), parent=folder, ) album = Album(name=letter + lether + "lbum", artist=artist) for num, song in enumerate(["One", "Two", "Three"]): Track( disc=1, number=num, title=song, duration=2, album=album, artist=artist, genre="Music!", bitrate=320, path="tests/assets/{0}rtist/{0}{1}lbum/{2}".format( letter, lether, song), last_modification=0, root_folder=root, folder=afolder, ) self.assertEqual(Folder.select().count(), 11) self.assertEqual(Folder.select(lambda f: f.root).count(), 2) self.assertEqual(Artist.select().count(), 3) self.assertEqual(Album.select().count(), 6) self.assertEqual(Track.select().count(), 18)
def setUp(self): super(PlaylistTestCase, self).setUp() with db_session: folder = Folder(name="Root", path="tests/assets", root=True) artist = Artist(name="Artist!") album = Album(name="Album!", artist=artist) track = Track( path="tests/assets/23bytes", title="23bytes", artist=artist, album=album, folder=folder, root_folder=folder, duration=2, disc=1, number=1, bitrate=320, last_modification=0, ) playlist = Playlist(name="Playlist!", user=User.get(name="alice")) for _ in range(4): playlist.add(track) self.playlistid = playlist.id
def setUp(self): super(MediaTestCase, self).setUp() self.folder = Folder() self.folder.name = 'Root' self.folder.path = os.path.abspath('tests/assets') self.folder.root = True self.folder.has_cover_art = True # 420x420 PNG artist = Artist() artist.name = 'Artist' album = Album() album.artist = artist album.name = 'Album' self.track = Track() self.track.title = '23bytes' self.track.number = 1 self.track.disc = 1 self.track.artist = artist self.track.album = album self.track.path = os.path.abspath('tests/assets/23bytes') self.track.root_folder = self.folder self.track.folder = self.folder self.track.duration = 2 self.track.bitrate = 320 self.track.content_type = 'audio/mpeg' self.track.last_modification = 0 self.store.add(self.track) self.store.commit()
def test_issue133(self): scanner = Scanner() scanner.queue_folder("folder") scanner.run() track = Track.select().first() self.assertNotIn("\x00", track.title)
def setUp(self): super(AnnotationTestCase, self).setUp() with db_session: root = Folder(name='Root', root=True, path='tests') folder = Folder(name='Folder', path='tests/assets', parent=root) artist = Artist(name='Artist') album = Album(name='Album', artist=artist) track = Track(title='Track', album=album, artist=artist, disc=1, number=1, path='tests/assets/empty', folder=folder, root_folder=root, duration=2, bitrate=320, content_type='audio/mpeg', last_modification=0) self.folderid = folder.id self.artistid = artist.id self.albumid = album.id self.trackid = track.id self.user = User.get(name='alice')
def setUp(self): super().setUp() with db_session: folder = Folder( name="Root", path=os.path.abspath("tests/assets"), root=True, cover_art="cover.jpg", ) self.folderid = folder.id artist = Artist(name="Artist") album = Album(artist=artist, name="Album") Track( title="23bytes", number=1, disc=1, artist=artist, album=album, path=os.path.abspath("tests/assets/23bytes"), root_folder=folder, folder=folder, duration=2, bitrate=320, last_modification=0, )
def setUp(self): super(MediaTestCase, self).setUp() with db_session: folder = Folder(name='Root', path=os.path.abspath('tests/assets'), root=True, cover_art='cover.jpg') self.folderid = folder.id artist = Artist(name='Artist') album = Album(artist=artist, name='Album') track = Track(title='23bytes', number=1, disc=1, artist=artist, album=album, path=os.path.abspath('tests/assets/23bytes'), root_folder=folder, folder=folder, duration=2, bitrate=320, content_type='audio/mpeg', last_modification=0) self.trackid = track.id
def setUp(self): super().setUp() with db_session: root = Folder(name="Root", root=True, path="tests") folder = Folder(name="Folder", path="tests/assets", parent=root) artist = Artist(name="Artist") album = Album(name="Album", artist=artist) # Populate folder ids root = Folder.get(name="Root") folder = Folder.get(name="Folder") track = Track( title="Track", album=album, artist=artist, disc=1, number=1, path="tests/assets/empty", folder=folder, root_folder=root, duration=2, bitrate=320, last_modification=0, ) self.folderid = folder.id self.artistid = artist.id self.albumid = album.id self.trackid = track.id self.user = User.get(name="alice")
def test_get_album_list2(self): self._make_request('getAlbumList2', error = 10) self._make_request('getAlbumList2', { 'type': 'void' }, error = 0) self._make_request('getAlbumList2', { 'type': 'random', 'size': 'size_t' }, error = 0) self._make_request('getAlbumList2', { 'type': 'newest', 'offset': '&v + 2' }, error = 0) types = [ 'random', 'newest', 'frequent', 'recent', 'starred', 'alphabeticalByName', 'alphabeticalByArtist' ] for t in types: self._make_request('getAlbumList2', { 'type': t }, tag = 'albumList2', skip_post = True) rv, child = self._make_request('getAlbumList2', { 'type': 'random' }, tag = 'albumList2', skip_post = True) with db_session: Track.get().delete() Album.get().delete() rv, child = self._make_request('getAlbumList2', { 'type': 'random' }, tag = 'albumList2') self.assertEqual(len(child), 0)
def test_get_song(self): self._make_request('getSong', error = 10) self._make_request('getSong', { 'id': 'nastynasty' }, error = 0) self._make_request('getSong', { 'id': str(uuid.uuid4()) }, error = 70) with db_session: s = Track.select().first() self._make_request('getSong', { 'id': str(s.id) }, tag = 'song')
def test_get_song(self): self._make_request("getSong", error=10) self._make_request("getSong", {"id": "nastynasty"}, error=0) self._make_request("getSong", {"id": str(uuid.uuid4())}, error=70) with db_session: s = Track.select().first() self._make_request("getSong", {"id": str(s.id)}, tag="song")
def test_get_song(self): self._make_request('getSong', error=10) self._make_request('getSong', {'id': 'nastynasty'}, error=0) self._make_request('getSong', {'id': str(uuid.uuid4())}, error=70) with db_session: s = Track.select().first() self._make_request('getSong', {'id': str(s.id)}, tag='song')
def setUp(self): super(MediaTestCase, self).setUp() with db_session: folder = Folder(name='Root', path=os.path.abspath('tests/assets'), root=True, cover_art='cover.jpg') self.folderid = folder.id artist = Artist(name='Artist') album = Album(artist=artist, name='Album') track = Track(title='23bytes', number=1, disc=1, artist=artist, album=album, path=os.path.abspath('tests/assets/23bytes'), root_folder=folder, folder=folder, duration=2, bitrate=320, content_type='audio/mpeg', last_modification=0) self.trackid = track.id self.formats = [('mp3', 'mpeg'), ('flac', 'flac'), ('ogg', 'ogg')] for i in range(len(self.formats)): track_embeded_art = Track( title='[silence]', number=1, disc=1, artist=artist, album=album, path=os.path.abspath( 'tests/assets/formats/silence.{0}'.format( self.formats[i][0])), root_folder=folder, folder=folder, duration=2, bitrate=320, content_type='audio/{0}'.format(self.formats[i][1]), last_modification=0) self.formats[i] = track_embeded_art.id
def setUp(self): super(BrowseTestCase, self).setUp() with db_session: Folder(root = True, name = 'Empty root', path = '/tmp') root = Folder(root = True, name = 'Root folder', path = 'tests/assets') for letter in 'ABC': folder = Folder( name = letter + 'rtist', path = 'tests/assets/{}rtist'.format(letter), parent = root ) artist = Artist(name = letter + 'rtist') for lether in 'AB': afolder = Folder( name = letter + lether + 'lbum', path = 'tests/assets/{0}rtist/{0}{1}lbum'.format(letter, lether), parent = folder ) album = Album(name = letter + lether + 'lbum', artist = artist) for num, song in enumerate([ 'One', 'Two', 'Three' ]): track = Track( disc = 1, number = num, title = song, duration = 2, album = album, artist = artist, bitrate = 320, path = 'tests/assets/{0}rtist/{0}{1}lbum/{2}'.format(letter, lether, song), last_modification = 0, root_folder = root, folder = afolder ) self.assertEqual(Folder.select().count(), 11) self.assertEqual(Folder.select(lambda f: f.root).count(), 2) self.assertEqual(Artist.select().count(), 3) self.assertEqual(Album.select().count(), 6) self.assertEqual(Track.select().count(), 18)
def test_add_multiple(self): self._addfile() self._addfile() self._addfile() self.assertTrackCountEqual(0) self._sleep() with db_session: self.assertEqual(Track.select().count(), 3) self.assertEqual(Artist.select().count(), 1)
def setUp(self): super().setUp() with db_session: FolderManager.add("Folder", "tests/assets/folder") scanner = Scanner() scanner.queue_folder("Folder") scanner.run() self.trackid = Track.get().id
def setUp(self): super().setUp() with db_session: FolderManager.add("folder", os.path.abspath("tests/assets/folder")) scanner = Scanner() scanner.queue_folder("folder") scanner.run() self.trackid = Track.select().first().id self.userid = User.get(name="alice").id
def setUp(self): super(TranscodingTestCase, self).setUp() self._patch_client() with db_session: folder = FolderManager.add('Folder', 'tests/assets/folder') scanner = Scanner() scanner.scan(folder) scanner.finish() self.trackid = Track.get().id
def setUp(self): super(TranscodingTestCase, self).setUp() self._patch_client() with db_session: folder = FolderManager.add("Folder", "tests/assets/folder") scanner = Scanner() scanner.queue_folder("Folder") scanner.run() self.trackid = Track.get().id
def test_rename(self): path = self._addfile() self._sleep() trackid = None with db_session: self.assertEqual(Track.select().count(), 1) trackid = Track.select().first().id newpath = self._temppath(".mp3") shutil.move(path, newpath) self._sleep() with db_session: track = Track.select().first() self.assertIsNotNone(track) self.assertNotEqual(track.path, path) self.assertEqual(track.path, newpath) self.assertEqual( track._path_hash, memoryview(sha1(newpath.encode("utf-8")).digest())) self.assertEqual(track.id, trackid)
def setUp(self): super().setUp() with db_session: folder = Folder( name="Root", path=os.path.abspath("tests/assets/lyrics"), root=True, ) artist = Artist(name="Artist") album = Album(artist=artist, name="Album") Track( title="Nope", number=1, disc=1, artist=artist, album=album, path=os.path.abspath("tests/assets/lyrics/empty.mp3"), root_folder=folder, folder=folder, duration=2, bitrate=320, last_modification=0, ) Track( title="Yay", number=1, disc=1, artist=artist, album=album, path=os.path.abspath("tests/assets/lyrics/withlyrics.mp3"), root_folder=folder, folder=folder, duration=2, bitrate=320, last_modification=0, )
def test_update_playlist(self): self._make_request('updatePlaylist', error = 10) self._make_request('updatePlaylist', { 'playlistId': 1234 }, error = 0) self._make_request('updatePlaylist', { 'playlistId': str(uuid.uuid4()) }, error = 70) with db_session: playlist = Playlist.select(lambda p: p.user.name == 'alice').order_by(Playlist.created).first() pid = str(playlist.id) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': 'string' }, error = 0) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': 'string' }, error = 0) name = str(playlist.name) self._make_request('updatePlaylist', { 'u': 'bob', 'p': 'B0b', 'playlistId': pid, 'name': 'new name' }, error = 50) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(child.get('name'), name) self.assertEqual(self._xpath(child, 'count(./entry)'), 2) self._make_request('updatePlaylist', { 'playlistId': pid, 'name': 'new name' }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(child.get('name'), 'new name') self.assertEqual(self._xpath(child, 'count(./entry)'), 2) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ -1, 2 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(self._xpath(child, 'count(./entry)'), 2) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ 0, 2 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(self._xpath(child, 'count(./entry)'), 1) self.assertEqual(self._find(child, './entry').get('title'), 'Three') with db_session: songs = { s.title: str(s.id) for s in Track.select() } self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': [ songs['One'], songs['Two'], songs['Two'] ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertSequenceEqual(self._xpath(child, './entry/@title'), [ 'Three', 'One', 'Two', 'Two' ]) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ 2, 1 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertSequenceEqual(self._xpath(child, './entry/@title'), [ 'Three', 'Two' ]) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': songs['One'] }, skip_post = True) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIndexToRemove': [ 1, 1 ] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertSequenceEqual(self._xpath(child, './entry/@title'), [ 'Three', 'One' ]) self._make_request('updatePlaylist', { 'playlistId': pid, 'songIdToAdd': str(uuid.uuid4()) }, error = 70) rv, child = self._make_request('getPlaylist', { 'id': pid }, tag = 'playlist') self.assertEqual(self._xpath(child, 'count(./entry)'), 2)
def test_create_playlist(self): self._make_request('createPlaylist', error = 10) self._make_request('createPlaylist', { 'name': 'wrongId', 'songId': 'abc' }, error = 0) self._make_request('createPlaylist', { 'name': 'unknownId', 'songId': str(uuid.uuid4()) }, error = 70) self._make_request('createPlaylist', { 'playlistId': 'abc' }, error = 0) self._make_request('createPlaylist', { 'playlistId': str(uuid.uuid4()) }, error = 70) # create self._make_request('createPlaylist', { 'name': 'new playlist' }, skip_post = True) rv, child = self._make_request('getPlaylists', tag = 'playlists') self.assertEqual(len(child), 3) playlist = self._find(child, "./playlist[@name='new playlist']") self.assertEqual(len(playlist), 0) # "update" newly created self._make_request('createPlaylist', { 'playlistId': playlist.get('id') }) rv, child = self._make_request('getPlaylists', tag = 'playlists') self.assertEqual(len(child), 3) # renaming self._make_request('createPlaylist', { 'playlistId': playlist.get('id'), 'name': 'renamed' }) rv, child = self._make_request('getPlaylists', tag = 'playlists') self.assertEqual(len(child), 3) self.assertIsNone(self._find(child, "./playlist[@name='new playlist']")) playlist = self._find(child, "./playlist[@name='renamed']") self.assertIsNotNone(playlist) # update from other user self._make_request('createPlaylist', { 'u': 'bob', 'p': 'B0b', 'playlistId': playlist.get('id') }, error = 50) # create more useful playlist with db_session: songs = { s.title: str(s.id) for s in Track.select() } self._make_request('createPlaylist', { 'name': 'songs', 'songId': list(map(lambda s: songs[s], [ 'Three', 'One', 'Two' ])) }, skip_post = True) with db_session: playlist = Playlist.get(name = 'songs') self.assertIsNotNone(playlist) rv, child = self._make_request('getPlaylist', { 'id': str(playlist.id) }, tag = 'playlist') self.assertEqual(child.get('songCount'), '3') self.assertEqual(self._xpath(child, 'count(./entry)'), 3) self.assertEqual(child[0].get('title'), 'Three') self.assertEqual(child[1].get('title'), 'One') self.assertEqual(child[2].get('title'), 'Two') # update self._make_request('createPlaylist', { 'playlistId': str(playlist.id), 'songId': songs['Two'] }, skip_post = True) rv, child = self._make_request('getPlaylist', { 'id': str(playlist.id) }, tag = 'playlist') self.assertEqual(child.get('songCount'), '1') self.assertEqual(self._xpath(child, 'count(./entry)'), 1) self.assertEqual(child[0].get('title'), 'Two')
def test_change(self): path = self._addfile() self._sleep() trackid = None with db_session: self.assertEqual(Track.select().count(), 1) self.assertEqual( Artist.select(lambda a: a.name == "Some artist").count(), 1) trackid = Track.select().first().id tags = mutagen.File(path, easy=True) tags["artist"] = "Renamed" tags.save() self._sleep() with db_session: self.assertEqual(Track.select().count(), 1) self.assertEqual( Artist.select(lambda a: a.name == "Some artist").count(), 0) self.assertEqual( Artist.select(lambda a: a.name == "Renamed").count(), 1) self.assertEqual(Track.select().first().id, trackid)
def setUp(self): super().setUp() with db_session: folder = Folder(name="Root", root=True, path="tests/assets") artist = Artist(name="Artist") album = Album(name="Album", artist=artist) Track( title="Track 1", album=album, artist=artist, disc=1, number=1, year=123, path="tests/assets/folder/1", folder=folder, root_folder=folder, duration=2, bitrate=320, last_modification=0, ) Track( title="Track 2", album=album, artist=artist, disc=1, number=1, year=124, genre="Lampshade", path="tests/assets/folder/2", folder=folder, root_folder=folder, duration=2, bitrate=320, last_modification=0, )
def setUp(self): super(BrowseTestCase, self).setUp() with db_session: Folder(root = True, name = 'Empty root', path = '/tmp') root = Folder(root = True, name = 'Root folder', path = 'tests/assets') for letter in 'ABC': folder = Folder( name = letter + 'rtist', path = 'tests/assets/{}rtist'.format(letter), parent = root ) artist = Artist(name = letter + 'rtist') for lether in 'AB': afolder = Folder( name = letter + lether + 'lbum', path = 'tests/assets/{0}rtist/{0}{1}lbum'.format(letter, lether), parent = folder ) album = Album(name = letter + lether + 'lbum', artist = artist) for num, song in enumerate([ 'One', 'Two', 'Three' ]): track = Track( disc = 1, number = num, title = song, duration = 2, album = album, artist = artist, bitrate = 320, path = 'tests/assets/{0}rtist/{0}{1}lbum/{2}'.format(letter, lether, song), content_type = 'audio/mpeg', last_modification = 0, root_folder = root, folder = afolder ) self.assertEqual(Folder.select().count(), 11) self.assertEqual(Folder.select(lambda f: f.root).count(), 2) self.assertEqual(Artist.select().count(), 3) self.assertEqual(Album.select().count(), 6) self.assertEqual(Track.select().count(), 18)
def setUp(self): super(AlbumSongsTestCase, self).setUp() with db_session: folder = Folder(name='Root', root=True, path='tests/assets') artist = Artist(name='Artist') album = Album(name='Album', artist=artist) track = Track(title='Track', album=album, artist=artist, disc=1, number=1, path='tests/assets/empty', folder=folder, root_folder=folder, duration=2, bitrate=320, last_modification=0)
def setUp(self): super(AlbumSongsTestCase, self).setUp() with db_session: folder = Folder(name="Root", root=True, path="tests/assets") artist = Artist(name="Artist") album = Album(name="Album", artist=artist) track = Track( title="Track", album=album, artist=artist, disc=1, number=1, path="tests/assets/empty", folder=folder, root_folder=folder, duration=2, bitrate=320, last_modification=0, )
def setUp(self): super(PlaylistTestCase, self).setUp() with db_session: root = Folder(root=True, name="Root folder", path="tests/assets") artist = Artist(name="Artist") album = Album(name="Album", artist=artist) songs = {} for num, song in enumerate(["One", "Two", "Three", "Four"]): track = Track( disc=1, number=num, title=song, duration=2, album=album, artist=artist, bitrate=320, path="tests/assets/" + song, last_modification=0, root_folder=root, folder=root, ) songs[song] = track users = {u.name: u for u in User.select()} playlist = Playlist(user=users["alice"], name="Alice's") playlist.add(songs["One"]) playlist.add(songs["Three"]) playlist = Playlist(user=users["alice"], public=True, name="Alice's public") playlist.add(songs["One"]) playlist.add(songs["Two"]) playlist = Playlist(user=users["bob"], name="Bob's") playlist.add(songs["Two"]) playlist.add(songs["Four"])
def setUp(self): super(PlaylistTestCase, self).setUp() with db_session: root = Folder(root = True, name = 'Root folder', path = 'tests/assets') artist = Artist(name = 'Artist') album = Album(name = 'Album', artist = artist) songs = {} for num, song in enumerate([ 'One', 'Two', 'Three', 'Four' ]): track = Track( disc = 1, number = num, title = song, duration = 2, album = album, artist = artist, bitrate = 320, path = 'tests/assets/' + song, content_type = 'audio/mpeg', last_modification = 0, root_folder = root, folder = root ) songs[song] = track users = { u.name: u for u in User.select() } playlist = Playlist(user = users['alice'], name = "Alice's") playlist.add(songs['One']) playlist.add(songs['Three']) playlist = Playlist(user = users['alice'], public = True, name = "Alice's public") playlist.add(songs['One']) playlist.add(songs['Two']) playlist = Playlist(user = users['bob'], name = "Bob's") playlist.add(songs['Two']) playlist.add(songs['Four'])
def setUp(self): super(PlaylistTestCase, self).setUp() root = Folder() root.root = True root.name = 'Root folder' root.path = 'tests/assets' self.store.add(root) artist = Artist() artist.name = 'Artist' album = Album() album.name = 'Album' album.artist = artist songs = {} for num, song in enumerate([ 'One', 'Two', 'Three', 'Four' ]): track = Track() track.disc = 1 track.number = num track.title = song track.duration = 2 track.album = album track.artist = artist track.bitrate = 320 track.path = 'tests/assets/empty' track.content_type = 'audio/mpeg' track.last_modification = 0 track.root_folder = root track.folder = root self.store.add(track) songs[song] = track users = { u.name: u for u in self.store.find(User) } playlist = Playlist() playlist.user = users['alice'] playlist.name = "Alice's" playlist.add(songs['One']) playlist.add(songs['Three']) self.store.add(playlist) playlist = Playlist() playlist.user = users['alice'] playlist.public = True playlist.name = "Alice's public" playlist.add(songs['One']) playlist.add(songs['Two']) self.store.add(playlist) playlist = Playlist() playlist.user = users['bob'] playlist.name = "Bob's" playlist.add(songs['Two']) playlist.add(songs['Four']) self.store.add(playlist) self.store.commit()
def setUp(self): super(PlaylistTestCase, self).setUp() folder = Folder() folder.name = 'Root' folder.path = 'tests/assets' folder.root = True artist = Artist() artist.name = 'Artist!' album = Album() album.name = 'Album!' album.artist = artist track = Track() track.path = 'tests/assets/23bytes' track.title = '23bytes' track.artist = artist track.album = album track.folder = folder track.root_folder = folder track.duration = 2 track.disc = 1 track.number = 1 track.content_type = 'audio/mpeg' track.bitrate = 320 track.last_modification = 0 playlist = Playlist() playlist.name = 'Playlist!' playlist.user = self.store.find(User, User.name == 'alice').one() for _ in range(4): playlist.add(track) self.store.add(track) self.store.add(playlist) self.store.commit() self.playlist = playlist
def setUp(self): super(BrowseTestCase, self).setUp() empty = Folder() empty.root = True empty.name = 'Empty root' empty.path = '/tmp' self.store.add(empty) root = Folder() root.root = True root.name = 'Root folder' root.path = 'tests/assets' self.store.add(root) for letter in 'ABC': folder = Folder() folder.name = letter + 'rtist' folder.path = 'tests/assets/{}rtist'.format(letter) folder.parent = root artist = Artist() artist.name = letter + 'rtist' for lether in 'AB': afolder = Folder() afolder.name = letter + lether + 'lbum' afolder.path = 'tests/assets/{0}rtist/{0}{1}lbum'.format(letter, lether) afolder.parent = folder album = Album() album.name = letter + lether + 'lbum' album.artist = artist for num, song in enumerate([ 'One', 'Two', 'Three' ]): track = Track() track.disc = 1 track.number = num track.title = song track.duration = 2 track.album = album track.artist = artist track.bitrate = 320 track.path = 'tests/assets/{0}rtist/{0}{1}lbum/{2}'.format(letter, lether, song) track.content_type = 'audio/mpeg' track.last_modification = 0 track.root_folder = root track.folder = afolder self.store.add(track) self.store.commit() self.assertEqual(self.store.find(Folder).count(), 11) self.assertEqual(self.store.find(Folder, Folder.root == True).count(), 2) self.assertEqual(self.store.find(Artist).count(), 3) self.assertEqual(self.store.find(Album).count(), 6) self.assertEqual(self.store.find(Track).count(), 18)
def scan_file(self, path): tr = self.__store.find(Track, Track.path == path).one() add = False if tr: if not self.__force and not int(os.path.getmtime(path)) > tr.last_modification: return tag = self.__try_load_tag(path) if not tag: self.remove_file(path) return else: tag = self.__try_load_tag(path) if not tag: return tr = Track() tr.path = path add = True artist = self.__try_read_tag(tag, 'artist', '') album = self.__try_read_tag(tag, 'album', '') albumartist = self.__try_read_tag(tag, 'albumartist', artist) tr.disc = self.__try_read_tag(tag, 'discnumber', 1, lambda x: int(x[0].split('/')[0])) tr.number = self.__try_read_tag(tag, 'tracknumber', 1, lambda x: int(x[0].split('/')[0])) tr.title = self.__try_read_tag(tag, 'title', '') tr.year = self.__try_read_tag(tag, 'date', None, lambda x: int(x[0].split('-')[0])) tr.genre = self.__try_read_tag(tag, 'genre') tr.duration = int(tag.info.length) tr.bitrate = (tag.info.bitrate if hasattr(tag.info, 'bitrate') else int(os.path.getsize(path) * 8 / tag.info.length)) / 1000 tr.content_type = get_mime(os.path.splitext(path)[1][1:]) tr.last_modification = os.path.getmtime(path) tralbum = self.__find_album(albumartist, album) trartist = self.__find_artist(artist) if add: trroot = self.__find_root_folder(path) trfolder = self.__find_folder(path) # Set the references at the very last as searching for them will cause the added track to be flushed, even if # it is incomplete, causing not null constraints errors. tr.album = tralbum tr.artist = trartist tr.folder = trfolder tr.root_folder = trroot self.__store.add(tr) self.__added_tracks += 1 else: if tr.album.id != tralbum.id: self.__albums_to_check.add(tr.album) tr.album = tralbum if tr.artist.id != trartist.id: self.__artists_to_check.add(tr.artist) tr.artist = trartist