Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    def setUp(self):
        super(AlbumSongsTestCase, self).setUp()

        folder = Folder()
        folder.name = 'Root'
        folder.root = True
        folder.path = 'tests/assets'

        artist = Artist()
        artist.name = 'Artist'

        album = Album()
        album.name = 'Album'
        album.artist = artist

        track = Track()
        track.title = 'Track'
        track.album = album
        track.artist = artist
        track.disc = 1
        track.number = 1
        track.path = 'tests/assets/empty'
        track.folder = folder
        track.root_folder = folder
        track.duration = 2
        track.bitrate = 320
        track.content_type = 'audio/mpeg'
        track.last_modification = 0

        self.store.add(track)
        self.store.commit()
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
	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
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    def scan_file(self, path):
        tr = self.__store.find(Track, Track.path == path).one()
        add = False
        if tr:
            if 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

        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)
        if not add:
            tr.album = self.__find_album(
                self.__try_read_tag(tag, 'artist', ''),
                self.__try_read_tag(tag, 'album', ''))
        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)

        if add:
            tralbum = self.__find_album(self.__try_read_tag(tag, 'artist', ''),
                                        self.__try_read_tag(tag, 'album', ''))
            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.folder = trfolder
            tr.root_folder = trroot

            self.__store.add(tr)
            self.__added_tracks += 1
Ejemplo n.º 8
0
    def setUp(self):
        super(AnnotationTestCase, self).setUp()

        root = Folder()
        root.name = 'Root'
        root.root = True
        root.path = 'tests/assets'

        folder = Folder()
        folder.name = 'Folder'
        folder.path = 'tests/assets'
        folder.parent = root

        artist = Artist()
        artist.name = 'Artist'

        album = Album()
        album.name = 'Album'
        album.artist = artist

        track = Track()
        track.title = 'Track'
        track.album = album
        track.artist = artist
        track.disc = 1
        track.number = 1
        track.path = 'tests/assets/empty'
        track.folder = folder
        track.root_folder = root
        track.duration = 2
        track.bitrate = 320
        track.content_type = 'audio/mpeg'
        track.last_modification = 0

        self.store.add(track)
        self.store.commit()

        self.folder = folder
        self.artist = artist
        self.album = album
        self.track = track
        self.user = self.store.find(User, User.name == 'alice').one()
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
    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