Пример #1
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)
Пример #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)
Пример #3
0
	def __find_folder(self, path):
		path = os.path.dirname(path)
		folders = self.__store.find(Folder, Folder.path == path)
		count = folders.count()
		if count > 1:
			raise Exception("Found multiple folders for '{}'.".format(path))
		elif count == 1:
			return folders.one()

		folder = self.__store.find(Folder, Like(path, SQL("folder.path||'%'"))).order_by(Folder.path).last()

		full_path = folder.path
		path = path[len(folder.path) + 1:]

		for name in path.split(os.sep):
			full_path = os.path.join(full_path, name)

			fold = Folder()
			fold.root = False
			fold.name = name
			fold.path = full_path
			fold.parent = folder

			self.__store.add(fold)

			folder = fold

		return folder
Пример #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()
Пример #5
0
    def add(store, name, path):
        if not store.find(Folder, Folder.name == name, Folder.root
                          == True).is_empty():
            return FolderManager.NAME_EXISTS

        path = unicode(os.path.abspath(path))
        if not os.path.isdir(path):
            return FolderManager.INVALID_PATH
        if not store.find(Folder, Folder.path == path).is_empty():
            return FolderManager.PATH_EXISTS
        if any(
                path.startswith(p)
                for p in store.find(Folder).values(Folder.path)):
            return FolderManager.PATH_EXISTS
        if not store.find(Folder, Folder.path.startswith(path)).is_empty():
            return FolderManager.SUBPATH_EXISTS

        folder = Folder()
        folder.root = True
        folder.name = name
        folder.path = path

        store.add(folder)
        store.commit()

        return FolderManager.SUCCESS
Пример #6
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()
Пример #7
0
    def test_delete(self):
        folder = Folder()
        folder.name = 'folder'
        folder.path = 'tests/assets'
        folder.root = True
        self.store.add(folder)
        self.store.commit()

        self._login('bob', 'B0b')
        rv = self.client.get('/folder/del/' + str(folder.id),
                             follow_redirects=True)
        self.assertIn('There\'s nothing much to see', rv.data)
        self.assertEqual(self.store.find(Folder).count(), 1)
        self._logout()

        self._login('alice', 'Alic3')
        rv = self.client.get('/folder/del/string', follow_redirects=True)
        self.assertIn('Invalid', rv.data)
        rv = self.client.get('/folder/del/' + str(uuid.uuid4()),
                             follow_redirects=True)
        self.assertIn('No such folder', rv.data)
        rv = self.client.get('/folder/del/' + str(folder.id),
                             follow_redirects=True)
        self.assertIn('Music folders', rv.data)
        self.assertEqual(self.store.find(Folder).count(), 0)
Пример #8
0
    def __find_folder(self, path):
        path = os.path.dirname(path)
        folders = self.__store.find(Folder, Folder.path == path)
        count = folders.count()
        if count > 1:
            raise Exception("Found multiple folders for '{}'.".format(path))
        elif count == 1:
            return folders.one()

        db = self.__store.get_database().__module__[len('storm.databases.'):]
        folder = self.__store.find(
            Folder, Like(path, Concat(Folder.path, os.sep + u'%',
                                      db))).order_by(Folder.path).last()

        full_path = folder.path
        path = path[len(folder.path) + 1:]

        for name in path.split(os.sep):
            full_path = os.path.join(full_path, name)

            fold = Folder()
            fold.root = False
            fold.name = name
            fold.path = full_path
            fold.parent = folder

            self.__store.add(fold)

            folder = fold

        return folder
Пример #9
0
	def __find_folder(self, path):
		path = os.path.dirname(path)
		folders = self.__store.find(Folder, Folder.path == path)
		count = folders.count()
		if count > 1:
			raise Exception("Found multiple folders for '{}'.".format(path))
		elif count == 1:
			return folders.one()

		db = self.__store.get_database().__module__[len('storm.databases.'):]
		folder = self.__store.find(Folder, Like(path, Concat(Folder.path, os.sep + u'%', db))).order_by(Folder.path).last()

		full_path = folder.path
		path = path[len(folder.path) + 1:]

		for name in path.split(os.sep):
			full_path = os.path.join(full_path, name)

			fold = Folder()
			fold.root = False
			fold.name = name
			fold.path = full_path
			fold.parent = folder

			self.__store.add(fold)

			folder = fold

		return folder
Пример #10
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()
Пример #11
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()
Пример #12
0
	def add(store, name, path):
		if not store.find(Folder, Folder.name == name, Folder.root == True).is_empty():
			return FolderManager.NAME_EXISTS

		path = os.path.abspath(path)
		if not os.path.isdir(path):
			return FolderManager.INVALID_PATH
		if not store.find(Folder, Folder.path == path).is_empty():
			return FolderManager.PATH_EXISTS

		folder = Folder()
		folder.root = True
		folder.name = name
		folder.path = path

		store.add(folder)
		store.commit()

		return FolderManager.SUCCESS
Пример #13
0
    def test_scan(self):
        folder = Folder()
        folder.name = 'folder'
        folder.path = 'tests/assets'
        folder.root = True
        self.store.add(folder)
        self.store.commit()
        self._login('alice', 'Alic3')

        rv = self.client.get('/folder/scan/string', follow_redirects = True)
        self.assertIn('Invalid', rv.data)
        rv = self.client.get('/folder/scan/' + str(uuid.uuid4()), follow_redirects = True)
        self.assertIn('No such folder', rv.data)
        rv = self.client.get('/folder/scan/' + str(folder.id), follow_redirects = True)
        self.assertIn('Added', rv.data)
        self.assertIn('Deleted', rv.data)
        rv = self.client.get('/folder/scan', follow_redirects = True)
        self.assertIn('Added', rv.data)
        self.assertIn('Deleted', rv.data)
Пример #14
0
    def add(store, name, path):
        if not store.find(Folder, Folder.name == name, Folder.root
                          == True).is_empty():
            return FolderManager.NAME_EXISTS

        path = os.path.abspath(path)
        if not os.path.isdir(path):
            return FolderManager.INVALID_PATH
        if not store.find(Folder, Folder.path == path).is_empty():
            return FolderManager.PATH_EXISTS

        folder = Folder()
        folder.root = True
        folder.name = name
        folder.path = path

        store.add(folder)
        store.commit()

        return FolderManager.SUCCESS
Пример #15
0
    def test_scan(self):
        folder = Folder()
        folder.name = 'folder'
        folder.path = 'tests/assets'
        folder.root = True
        self.store.add(folder)
        self.store.commit()
        self._login('alice', 'Alic3')

        rv = self.client.get('/folder/scan/string', follow_redirects=True)
        self.assertIn('Invalid', rv.data)
        rv = self.client.get('/folder/scan/' + str(uuid.uuid4()),
                             follow_redirects=True)
        self.assertIn('No such folder', rv.data)
        rv = self.client.get('/folder/scan/' + str(folder.id),
                             follow_redirects=True)
        self.assertIn('Added', rv.data)
        self.assertIn('Deleted', rv.data)
        rv = self.client.get('/folder/scan', follow_redirects=True)
        self.assertIn('Added', rv.data)
        self.assertIn('Deleted', rv.data)
Пример #16
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
Пример #17
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
Пример #18
0
    def test_delete(self):
        folder = Folder()
        folder.name = 'folder'
        folder.path = 'tests/assets'
        folder.root = True
        self.store.add(folder)
        self.store.commit()

        self._login('bob', 'B0b')
        rv = self.client.get('/folder/del/' + str(folder.id), follow_redirects = True)
        self.assertIn('There\'s nothing much to see', rv.data)
        self.assertEqual(self.store.find(Folder).count(), 1)
        self._logout()

        self._login('alice', 'Alic3')
        rv = self.client.get('/folder/del/string', follow_redirects = True)
        self.assertIn('Invalid', rv.data)
        rv = self.client.get('/folder/del/' + str(uuid.uuid4()), follow_redirects = True)
        self.assertIn('No such folder', rv.data)
        rv = self.client.get('/folder/del/' + str(folder.id), follow_redirects = True)
        self.assertIn('Music folders', rv.data)
        self.assertEqual(self.store.find(Folder).count(), 0)
Пример #19
0
    def add(store, name, path):
        if not store.find(Folder, Folder.name == name, Folder.root == True).is_empty():
            return FolderManager.NAME_EXISTS

        path = unicode(os.path.abspath(path))
        if not os.path.isdir(path):
            return FolderManager.INVALID_PATH
        if not store.find(Folder, Folder.path == path).is_empty():
            return FolderManager.PATH_EXISTS
        if any(path.startswith(p) for p in store.find(Folder).values(Folder.path)):
            return FolderManager.PATH_EXISTS
        if not store.find(Folder, Folder.path.startswith(path)).is_empty():
            return FolderManager.SUBPATH_EXISTS

        folder = Folder()
        folder.root = True
        folder.name = name
        folder.path = path

        store.add(folder)
        store.commit()

        return FolderManager.SUCCESS
Пример #20
0
	def __find_folder(self, path, folder):
		path = os.path.dirname(path)
		fold = self.__store.find(Folder, Folder.path == path).one()
		if fold:
			return fold

		full_path = folder.path
		path = path[len(folder.path) + 1:]

		for name in path.split(os.sep):
			full_path = os.path.join(full_path, name)
			fold = self.__store.find(Folder, Folder.path == full_path).one()
			if not fold:
				fold = Folder()
				fold.root = False
				fold.name = name
				fold.path = full_path
				fold.parent = folder

				self.__store.add(fold)

			folder = fold

		return folder