scanner: Add a RemoveLibraryScheduler task

For breaking the tracklist into chunks, and then following up their
removal with a library table removal

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-08-26 10:53:32 -04:00
parent 88ebde085b
commit da78887783
2 changed files with 46 additions and 0 deletions

View File

@ -113,3 +113,20 @@ class RemoveLibraryTask(Task):
def run_task(self):
db.library.Table.delete(self.library)
db.commit()
class RemoveLibrarySchedulerTask(Task):
def __init__(self, library):
Task.__init__(self)
self.library = library
def track_chunks(self):
tracks = self.library.tracks()
while len(tracks) > 0:
res = tracks[:50]
tracks = tracks[50:]
yield res
def run_task(self):
return [ RemoveTask(tracks) for tracks in self.track_chunks() ] + \
[ RemoveLibraryTask(self.library) ]

View File

@ -194,3 +194,32 @@ class TestScannerRemoveLibraryTask(unittest.TestCase):
self.assertIsNone(rlt.run_task())
self.assertIsNone(db.library.Table.lookup(test_tracks))
class TestScannerRemoveLibrarySchedulerTask(unittest.TestCase):
def setUp(self):
db.reset()
def test_scanner_check_scheduler_task(self):
lib = db.library.Table.find(test_tracks)
for i in range(75):
db.make_fake_track(i, i, f"Test Track {i}",f"/a/b/c/{i}.ogg", lib.path)
rlst = task.RemoveLibrarySchedulerTask(lib)
self.assertIsInstance(rlst, task.Task)
self.assertEqual(rlst.library, lib)
tasks = rlst.run_task()
self.assertEqual(len(tasks), 3)
self.assertIsInstance(tasks[0], task.RemoveTask)
self.assertIsInstance(tasks[1], task.RemoveTask)
self.assertIsInstance(tasks[2], task.RemoveLibraryTask)
self.assertEqual(len(tasks[0].tracks), 50)
self.assertEqual(len(tasks[1].tracks), 25)
self.assertEqual(tasks[2].library, lib)
for t in tasks: t.run_task()
for i in range(1, 76):
self.assertIsNone(db.track.Table.get(i))
self.assertIsNone(db.library.Table.lookup(test_tracks))