def test_delete_folder(self):
        with db_session:
            self.create_folders()

        with db_session:
            # Delete invalid Folder ID
            self.assertRaises(ValueError, FolderManager.delete, "invalid-uuid")
            self.assertEqual(db.Folder.select().count(), 3)

            # Delete non-existent folder
            self.assertRaises(ObjectNotFound, FolderManager.delete, 1234567890)
            self.assertEqual(db.Folder.select().count(), 3)

            # Delete non-root folder
            folder = db.Folder.get(name="non-root")
            self.assertRaises(ObjectNotFound, FolderManager.delete, folder.id)
            self.assertEqual(db.Folder.select().count(), 3)

        with db_session:
            # Delete existing folders
            for name in ["media", "music"]:
                folder = db.Folder.get(name=name, root=True)
                FolderManager.delete(folder.id)
                self.assertRaises(ObjectNotFound, db.Folder.__getitem__,
                                  folder.id)

            # Even if we have only 2 root folders, non-root should never exist and be cleaned anyway
            self.assertEqual(db.Folder.select().count(), 0)
    def test_add_folder(self):
        # Added in setUp()
        self.assertEqual(self.store.find(db.Folder).count(), 3)

        # Create duplicate
        self.assertEqual(FolderManager.add(self.store,'media', self.media_dir), FolderManager.NAME_EXISTS)
        self.assertEqual(self.store.find(db.Folder, db.Folder.name == 'media').count(), 1)

        # Duplicate path
        self.assertEqual(FolderManager.add(self.store,'new-folder', self.media_dir), FolderManager.PATH_EXISTS)
        self.assertEqual(self.store.find(db.Folder, db.Folder.path == self.media_dir).count(), 1)

        # Invalid path
        path = os.path.abspath('/this/not/is/valid')
        self.assertEqual(FolderManager.add(self.store,'invalid-path', path), FolderManager.INVALID_PATH)
        self.assertEqual(self.store.find(db.Folder, db.Folder.path == path).count(), 0)

        # Subfolder of already added path
        path = os.path.join(self.media_dir, 'subfolder')
        os.mkdir(path)
        self.assertEqual(FolderManager.add(self.store,'subfolder', path), FolderManager.PATH_EXISTS)
        self.assertEqual(self.store.find(db.Folder).count(), 3)

        # Parent folder of an already added path
        path = os.path.join(self.media_dir, '..')
        self.assertEqual(FolderManager.add(self.store, 'parent', path), FolderManager.SUBPATH_EXISTS)
        self.assertEqual(self.store.find(db.Folder).count(), 3)
    def create_folders(self):
        # Add test folders
        self.assertIsNotNone(FolderManager.add("media", self.media_dir))
        self.assertIsNotNone(FolderManager.add("music", self.music_dir))

        db.Folder(root=False,
                  name="non-root",
                  path=os.path.join(self.music_dir, "subfolder"))

        artist = db.Artist(name="Artist")
        album = db.Album(name="Album", artist=artist)

        root = db.Folder.get(name="media")
        db.Track(
            title="Track",
            artist=artist,
            album=album,
            disc=1,
            number=1,
            path=os.path.join(self.media_dir, "somefile"),
            folder=root,
            root_folder=root,
            duration=2,
            bitrate=320,
            last_modification=0,
        )
Example #4
0
    def test_delete_folder(self):
        # Delete existing folders
        for name in ['media', 'music']:
            folder = self.store.find(db.Folder, db.Folder.name == name,
                                     db.Folder.root == True).one()
            self.assertEqual(FolderManager.delete(self.store, folder.id),
                             FolderManager.SUCCESS)
            self.assertIsNone(self.store.get(db.Folder, folder.id))

        # Delete invalid UUID
        self.assertEqual(FolderManager.delete(self.store, 'invalid-uuid'),
                         FolderManager.INVALID_ID)
        self.assertEqual(self.store.find(db.Folder).count(),
                         1)  # 'non-root' remaining

        # Delete non-existent folder
        self.assertEqual(FolderManager.delete(self.store, uuid.uuid4()),
                         FolderManager.NO_SUCH_FOLDER)
        self.assertEqual(self.store.find(db.Folder).count(),
                         1)  # 'non-root' remaining

        # Delete non-root folder
        folder = self.store.find(db.Folder, db.Folder.name == 'non-root').one()
        self.assertEqual(FolderManager.delete(self.store, folder.id),
                         FolderManager.NO_SUCH_FOLDER)
        self.assertEqual(self.store.find(db.Folder).count(),
                         1)  # 'non-root' remaining
    def test_delete_by_name(self):
        # Delete existing folders
        for name in ['media', 'music']:
            self.assertEqual(FolderManager.delete_by_name(self.store, name), FolderManager.SUCCESS)
            self.assertEqual(self.store.find(db.Folder, db.Folder.name == name).count(), 0)

        # Delete non-existent folder
        self.assertEqual(FolderManager.delete_by_name(self.store, 'null'), FolderManager.NO_SUCH_FOLDER)
        self.assertEqual(self.store.find(db.Folder).count(), 1) # 'non-root' remaining
Example #6
0
    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
Example #7
0
    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
Example #8
0
    def setUp(self):
        self.store = db.get_store('sqlite:')
        with io.open('schema/sqlite.sql', 'r') as f:
            for statement in f.read().split(';'):
                self.store.execute(statement)

        FolderManager.add(self.store, 'folder', os.path.abspath('tests/assets'))
        self.folder = self.store.find(db.Folder).one()
        self.assertIsNotNone(self.folder)

        self.scanner = Scanner(self.store)
        self.scanner.scan(self.folder)
    def test_get_folder(self):
        # Get existing folders
        for name in ['media', 'music']:
            folder = self.store.find(db.Folder, db.Folder.name == name, db.Folder.root == True).one()
            self.assertEqual(FolderManager.get(self.store, folder.id), (FolderManager.SUCCESS, folder))

        # Get with invalid UUID
        self.assertEqual(FolderManager.get(self.store, 'invalid-uuid'), (FolderManager.INVALID_ID, None))
        self.assertEqual(FolderManager.get(self.store, 0xdeadbeef), (FolderManager.INVALID_ID, None))

        # Non-existent folder
        self.assertEqual(FolderManager.get(self.store, uuid.uuid4()), (FolderManager.NO_SUCH_FOLDER, None))
Example #10
0
    def test_delete_by_name(self):
        # Delete existing folders
        for name in ['media', 'music']:
            self.assertEqual(FolderManager.delete_by_name(self.store, name),
                             FolderManager.SUCCESS)
            self.assertEqual(
                self.store.find(db.Folder, db.Folder.name == name).count(), 0)

        # Delete non-existent folder
        self.assertEqual(FolderManager.delete_by_name(self.store, 'null'),
                         FolderManager.NO_SUCH_FOLDER)
        self.assertEqual(self.store.find(db.Folder).count(),
                         1)  # 'non-root' remaining
Example #11
0
    def setUp(self):
        self.store = db.get_store('sqlite:')
        with io.open('schema/sqlite.sql', 'r') as f:
            for statement in f.read().split(';'):
                self.store.execute(statement)

        FolderManager.add(self.store, 'folder',
                          os.path.abspath('tests/assets'))
        self.folder = self.store.find(db.Folder).one()
        self.assertIsNotNone(self.folder)

        self.scanner = Scanner(self.store)
        self.scanner.scan(self.folder)
Example #12
0
    def setUp(self):
        # Create an empty sqlite database in memory
        self.store = db.get_store("sqlite:")
        # Read schema from file
        with io.open('schema/sqlite.sql', 'r') as sql:
            schema = sql.read()
            # Create tables on memory database
            for command in schema.split(';'):
                self.store.execute(command)

        # Create some temporary directories
        self.media_dir = tempfile.mkdtemp()
        self.music_dir = tempfile.mkdtemp()
        # Add test folders
        self.assertEqual(
            FolderManager.add(self.store, 'media', self.media_dir),
            FolderManager.SUCCESS)
        self.assertEqual(
            FolderManager.add(self.store, 'music', self.music_dir),
            FolderManager.SUCCESS)

        folder = db.Folder()
        folder.root = False
        folder.name = 'non-root'
        folder.path = os.path.join(self.music_dir, 'subfolder')
        self.store.add(folder)

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

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

        root = self.store.find(db.Folder, db.Folder.name == 'media').one()
        track = db.Track()
        track.title = 'Track'
        track.artist = artist
        track.album = album
        track.disc = 1
        track.number = 1
        track.path = os.path.join(self.media_dir, 'somefile')
        track.folder = root
        track.root_folder = root
        track.duration = 2
        track.content_type = 'audio/mpeg'
        track.bitrate = 320
        track.last_modification = 0
        self.store.add(track)

        self.store.commit()
Example #13
0
def del_folder(id):
    try:
        idid = uuid.UUID(id)
    except ValueError:
        flash('Invalid folder id')
        return redirect(url_for('folder_index'))

    ret = FolderManager.delete(store, idid)
    if ret != FolderManager.SUCCESS:
        flash(FolderManager.error_str(ret))
    else:
        flash('Deleted folder')

    return redirect(url_for('folder_index'))
Example #14
0
def del_folder(id):
    try:
        idid = uuid.UUID(id)
    except ValueError:
        flash("Invalid folder id")
        return redirect(url_for("folder_index"))

    ret = FolderManager.delete(store, idid)
    if ret != FolderManager.SUCCESS:
        flash(FolderManager.error_str(ret))
    else:
        flash("Deleted folder")

    return redirect(url_for("folder_index"))
    def test_delete_by_name(self):
        with db_session:
            self.create_folders()

        with db_session:
            # Delete non-existent folder
            self.assertRaises(ObjectNotFound, FolderManager.delete_by_name,
                              "null")
            self.assertEqual(db.Folder.select().count(), 3)

        with db_session:
            # Delete existing folders
            for name in ["media", "music"]:
                FolderManager.delete_by_name(name)
                self.assertFalse(db.Folder.exists(name=name))
Example #16
0
    def setUp(self):
        # Create an empty sqlite database in memory
        self.store = db.get_store("sqlite:")
        # Read schema from file
        with io.open('schema/sqlite.sql', 'r') as sql:
            schema = sql.read()
            # Create tables on memory database
            for command in schema.split(';'):
                self.store.execute(command)

        # Create some temporary directories
        self.media_dir = tempfile.mkdtemp()
        self.music_dir = tempfile.mkdtemp()
        # Add test folders
        self.assertEqual(FolderManager.add(self.store, 'media', self.media_dir), FolderManager.SUCCESS)
        self.assertEqual(FolderManager.add(self.store, 'music', self.music_dir), FolderManager.SUCCESS)

        folder = db.Folder()
        folder.root = False
        folder.name = 'non-root'
        folder.path = os.path.join(self.music_dir, 'subfolder')
        self.store.add(folder)

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

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

        root = self.store.find(db.Folder, db.Folder.name == 'media').one()
        track = db.Track()
        track.title = 'Track'
        track.artist = artist
        track.album = album
        track.disc = 1
        track.number = 1
        track.path = os.path.join(self.media_dir, 'somefile')
        track.folder = root
        track.root_folder = root
        track.duration = 2
        track.content_type = 'audio/mpeg'
        track.bitrate = 320
        track.last_modification = 0
        self.store.add(track)

        self.store.commit()
Example #17
0
def scan_folder(id = None):
	s = Scanner(store)
	if id is None:
		for folder in store.find(Folder, Folder.root == True):
			FolderManager.scan(store, folder.id, s)
	else:
		status = FolderManager.scan(store, id, s)
		if status != FolderManager.SUCCESS:
			flash(FolderManager.error_str(status))
			return redirect(url_for('folder_index'))

	added, deleted = s.stats()
	store.commit()

	flash('Added: %i artists, %i albums, %i tracks' % (added[0], added[1], added[2]))
	flash('Deleted: %i artists, %i albums, %i tracks' % (deleted[0], deleted[1], deleted[2]))
	return redirect(url_for('folder_index'))
Example #18
0
    def test_get_folder(self):
        # Get existing folders
        for name in ['media', 'music']:
            folder = self.store.find(db.Folder, db.Folder.name == name,
                                     db.Folder.root == True).one()
            self.assertEqual(FolderManager.get(self.store, folder.id),
                             (FolderManager.SUCCESS, folder))

        # Get with invalid UUID
        self.assertEqual(FolderManager.get(self.store, 'invalid-uuid'),
                         (FolderManager.INVALID_ID, None))
        self.assertEqual(FolderManager.get(self.store, 0xdeadbeef),
                         (FolderManager.INVALID_ID, None))

        # Non-existent folder
        self.assertEqual(FolderManager.get(self.store, uuid.uuid4()),
                         (FolderManager.NO_SUCH_FOLDER, None))
Example #19
0
def scan_folder(id=None):
    scanner = Scanner(store)
    if id is None:
        for folder in store.find(Folder, Folder.root == True):
            scanner.scan(folder)
    else:
        status, folder = FolderManager.get(store, id)
        if status != FolderManager.SUCCESS:
            flash(FolderManager.error_str(status))
            return redirect(url_for("folder_index"))
        scanner.scan(folder)

    scanner.finish()
    added, deleted = scanner.stats()
    store.commit()

    flash("Added: %i artists, %i albums, %i tracks" % (added[0], added[1], added[2]))
    flash("Deleted: %i artists, %i albums, %i tracks" % (deleted[0], deleted[1], deleted[2]))
    return redirect(url_for("folder_index"))
Example #20
0
    def setUp(self):
        db.init_database("sqlite:")

        with db_session:
            folder = FolderManager.add("folder",
                                       os.path.abspath("tests/assets/folder"))
            self.assertIsNotNone(folder)

        self.folderid = folder.id
        self.__scan()
Example #21
0
def scan_folder(id = None):
	scanner = Scanner(store)
	if id is None:
		for folder in store.find(Folder, Folder.root == True):
			scanner.scan(folder)
	else:
		status, folder = FolderManager.get(store, id)
		if status != FolderManager.SUCCESS:
			flash(FolderManager.error_str(status))
			return redirect(url_for('folder_index'))
		scanner.scan(folder)

	scanner.finish()
	added, deleted = scanner.stats()
	store.commit()

	flash('Added: %i artists, %i albums, %i tracks' % (added[0], added[1], added[2]))
	flash('Deleted: %i artists, %i albums, %i tracks' % (deleted[0], deleted[1], deleted[2]))
	return redirect(url_for('folder_index'))
Example #22
0
    def test_delete_folder(self):
        # Delete existing folders
        for name in ['media', 'music']:
            folder = self.store.find(db.Folder, db.Folder.name == name, db.Folder.root == True).one()
            self.assertEqual(FolderManager.delete(self.store, folder.id), FolderManager.SUCCESS)
            self.assertIsNone(self.store.get(db.Folder, folder.id))

        # Delete invalid UUID
        self.assertEqual(FolderManager.delete(self.store, 'invalid-uuid'), FolderManager.INVALID_ID)
        self.assertEqual(self.store.find(db.Folder).count(), 1) # 'non-root' remaining

        # Delete non-existent folder
        self.assertEqual(FolderManager.delete(self.store, uuid.uuid4()), FolderManager.NO_SUCH_FOLDER)
        self.assertEqual(self.store.find(db.Folder).count(), 1) # 'non-root' remaining

        # Delete non-root folder
        folder = self.store.find(db.Folder, db.Folder.name == 'non-root').one()
        self.assertEqual(FolderManager.delete(self.store, folder.id), FolderManager.NO_SUCH_FOLDER)
        self.assertEqual(self.store.find(db.Folder).count(), 1) # 'non-root' remaining
Example #23
0
 def test_human_readable_error(self):
     values = [
         FolderManager.SUCCESS, FolderManager.INVALID_ID,
         FolderManager.NAME_EXISTS, FolderManager.INVALID_PATH,
         FolderManager.PATH_EXISTS, FolderManager.NO_SUCH_FOLDER,
         FolderManager.SUBPATH_EXISTS, 1594826, 'string',
         uuid.uuid4()
     ]
     for value in values:
         self.assertIsInstance(FolderManager.error_str(value), basestring)
Example #24
0
    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
Example #25
0
    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
Example #26
0
    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
Example #27
0
def add_folder_post():
    error = False
    (name, path) = map(request.form.get, ['name', 'path'])
    if name in (None, ''):
        flash('The name is required.')
        error = True
    if path in (None, ''):
        flash('The path is required.')
        error = True
    if error:
        return render_template('addfolder.html')

    ret = FolderManager.add(store, name, path)
    if ret != FolderManager.SUCCESS:
        flash(FolderManager.error_str(ret))
        return render_template('addfolder.html')

    flash("Folder '%s' created. You should now run a scan" % name)

    return redirect(url_for('folder_index'))
Example #28
0
    def test_add_folder(self):
        # Added in setUp()
        self.assertEqual(self.store.find(db.Folder).count(), 3)

        # Create duplicate
        self.assertEqual(
            FolderManager.add(self.store, 'media', self.media_dir),
            FolderManager.NAME_EXISTS)
        self.assertEqual(
            self.store.find(db.Folder, db.Folder.name == 'media').count(), 1)

        # Duplicate path
        self.assertEqual(
            FolderManager.add(self.store, 'new-folder', self.media_dir),
            FolderManager.PATH_EXISTS)
        self.assertEqual(
            self.store.find(db.Folder,
                            db.Folder.path == self.media_dir).count(), 1)

        # Invalid path
        path = os.path.abspath('/this/not/is/valid')
        self.assertEqual(FolderManager.add(self.store, 'invalid-path', path),
                         FolderManager.INVALID_PATH)
        self.assertEqual(
            self.store.find(db.Folder, db.Folder.path == path).count(), 0)

        # Subfolder of already added path
        path = os.path.join(self.media_dir, 'subfolder')
        os.mkdir(path)
        self.assertEqual(FolderManager.add(self.store, 'subfolder', path),
                         FolderManager.PATH_EXISTS)
        self.assertEqual(self.store.find(db.Folder).count(), 3)

        # Parent folder of an already added path
        path = os.path.join(self.media_dir, '..')
        self.assertEqual(FolderManager.add(self.store, 'parent', path),
                         FolderManager.SUBPATH_EXISTS)
        self.assertEqual(self.store.find(db.Folder).count(), 3)
Example #29
0
def add_folder():
	if request.method == 'GET':
		return render_template('addfolder.html')

	error = False
	(name, path) = map(request.form.get, [ 'name', 'path' ])
	if name in (None, ''):
		flash('The name is required.')
		error = True
	if path in (None, ''):
		flash('The path is required.')
		error = True
	if error:
		return render_template('addfolder.html')

	ret = FolderManager.add(store, name, path)
	if ret != FolderManager.SUCCESS:
		flash(FolderManager.error_str(ret))
		return render_template('addfolder.html')

	flash("Folder '%s' created. You should now run a scan" % name)

	return redirect(url_for('folder_index'))
    def test_get_folder(self):
        self.create_folders()

        # Get existing folders
        for name in ["media", "music"]:
            folder = db.Folder.get(name=name, root=True)
            self.assertEqual(FolderManager.get(folder.id), folder)

        # Get with invalid UUID
        self.assertRaises(ValueError, FolderManager.get, "invalid-uuid")
        self.assertRaises(ValueError, FolderManager.get, 0xDEADBEEF)

        # Non-existent folder
        self.assertRaises(ObjectNotFound, FolderManager.get, 1234567890)
Example #31
0
def add_folder():
    if request.method == "GET":
        return render_template("addfolder.html")

    error = False
    (name, path) = map(request.form.get, ["name", "path"])
    if name in (None, ""):
        flash("The name is required.")
        error = True
    if path in (None, ""):
        flash("The path is required.")
        error = True
    if error:
        return render_template("addfolder.html")

    ret = FolderManager.add(store, name, path)
    if ret != FolderManager.SUCCESS:
        flash(FolderManager.error_str(ret))
        return render_template("addfolder.html")

    flash("Folder '%s' created. You should now run a scan" % name)

    return redirect(url_for("folder_index"))
Example #32
0
 def setUp(self):
     super().setUp()
     self.__dir = tempfile.mkdtemp()
     with db_session:
         FolderManager.add("Folder", self.__dir)
     self._start()
Example #33
0
 def test_last_play(self):
     with db_session:
         User[self.userid].last_play = Track[self.trackid]
     with db_session:
         FolderManager.delete_by_name("folder")
Example #34
0
 def test_starred(self):
     with db_session:
         StarredTrack(user=self.userid, starred=self.trackid)
         FolderManager.delete_by_name("folder")
Example #35
0
 def setUp(self):
     self.__dir = tempfile.mkdtemp()
     init_database("sqlite:")
     with db_session:
         FolderManager.add("folder", self.__dir)
Example #36
0
 def test_rating(self):
     with db_session:
         RatingTrack(user=self.userid, rated=self.trackid, rating=5)
         FolderManager.delete_by_name("folder")
Example #37
0
 def setUp(self):
     super(WatcherTestCase, self).setUp()
     self.__dir = tempfile.mkdtemp()
     with self._get_store() as store:
         FolderManager.add(store, 'Folder', self.__dir)
     self._start()
Example #38
0
 def test_human_readable_error(self):
     values = [ FolderManager.SUCCESS, FolderManager.INVALID_ID, FolderManager.NAME_EXISTS,
         FolderManager.INVALID_PATH, FolderManager.PATH_EXISTS, FolderManager.NO_SUCH_FOLDER,
         FolderManager.SUBPATH_EXISTS, 1594826, 'string', uuid.uuid4() ]
     for value in values:
         self.assertIsInstance(FolderManager.error_str(value), basestring)
Example #39
0
 def setUp(self):
     self.__dir = tempfile.mkdtemp()
     shutil.copy("tests/assets/issue133.flac", self.__dir)
     init_database("sqlite:")
     with db_session:
         FolderManager.add("folder", self.__dir)