From 14b576e4110e673ae244f8920c8e9cab12e0dc47 Mon Sep 17 00:00:00 2001 From: bendikro Date: Tue, 19 Apr 2016 19:42:49 +0200 Subject: [PATCH] [Core] Fix core.remove_torrents return value on error --- deluge/core/core.py | 11 ++++++++--- deluge/tests/test_core.py | 23 +++++------------------ 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/deluge/core/core.py b/deluge/core/core.py index c03fca0e9..c865972dc 100644 --- a/deluge/core/core.py +++ b/deluge/core/core.py @@ -346,10 +346,13 @@ class Core(component.Component): Args: torrent_ids (list): The torrent IDs to remove. - remove_data (bool, optional): If True, also remove the downloaded data. + remove_data (bool): If True, also remove the downloaded data. Returns: - list: a list containing all the errors, empty list if no errors occured + list of tuples: A list tuples containing all the errors, empty list if no errors occured + tuple format: + 0: str: torrent-id + 1: str: Error message """ log.info("Removing %d torrents from core.", len(torrent_ids)) @@ -360,9 +363,11 @@ class Core(component.Component): try: self.torrentmanager.remove(torrent_id, remove_data=remove_data, save_state=False) except InvalidTorrentError as ex: - errors.append((torrent_id, ex)) + errors.append((torrent_id, str(ex))) # Save the session state self.torrentmanager.save_state() + if errors: + log.warn("Failed to remove %d of %d torrents.", len(errors), len(torrent_ids)) return errors return task.deferLater(reactor, 0, do_remove_torrents) diff --git a/deluge/tests/test_core.py b/deluge/tests/test_core.py index 444d1a332..ac97de180 100644 --- a/deluge/tests/test_core.py +++ b/deluge/tests/test_core.py @@ -202,14 +202,7 @@ class CoreTestCase(BaseTestCase): self.assertEquals(len(self.core.get_session_state()), 0) def test_remove_torrent_invalid(self): - d = self.core.remove_torrents(["torrentidthatdoesntexist"], True) - - def test_true(val): - self.assertTrue(val[0][0] == "torrentidthatdoesntexist") - - self.assertTrue(isinstance(val[0][1], InvalidTorrentError)) - d.addCallback(test_true) - return d + self.assertRaises(InvalidTorrentError, self.core.remove_torrent, "torrentidthatdoesntexist", True) @defer.inlineCallbacks def test_remove_torrents(self): @@ -234,16 +227,10 @@ class CoreTestCase(BaseTestCase): options = {} filename = os.path.join(os.path.dirname(__file__), "test.torrent") torrent_id = yield self.core.add_torrent_file(filename, base64.encodestring(open(filename).read()), options) - d = self.core.remove_torrents(["invalidid1", "invalidid2", torrent_id], False) - - def test_ret(val): - self.assertTrue(len(val) == 2) - self.assertTrue(val[0][0] == "invalidid1") - self.assertTrue(isinstance(val[0][1], InvalidTorrentError)) - self.assertTrue(val[1][0] == "invalidid2") - self.assertTrue(isinstance(val[1][1], InvalidTorrentError)) - d.addCallback(test_ret) - yield d + val = yield self.core.remove_torrents(["invalidid1", "invalidid2", torrent_id], False) + self.assertEqual(len(val), 2) + self.assertEqual(val[0], ('invalidid1', "torrent_id 'invalidid1' not in session.")) + self.assertEqual(val[1], ('invalidid2', "torrent_id 'invalidid2' not in session.")) def test_get_session_status(self): status = self.core.get_session_status(["upload_rate", "download_rate"])