diff options
author | Elena ``of Valhalla'' Grandi <valhalla@trueelena.org> | 2017-01-14 10:41:14 +0100 |
---|---|---|
committer | Elena ``of Valhalla'' Grandi <valhalla@trueelena.org> | 2017-01-14 10:41:14 +0100 |
commit | e5d30f21c99bec9a8eccd881e5e83088b9378454 (patch) | |
tree | e1e247dc07ac5de1e89111387d4009d2b64cced1 | |
parent | 1ab41af4cdce777c3f5b0e0f985e5846999b9010 (diff) |
Saner management of wrong uids
-rw-r--r-- | lesana/collection.py | 12 | ||||
-rw-r--r-- | lesana/command.py | 2 | ||||
-rw-r--r-- | tests/test_collection.py | 5 |
3 files changed, 16 insertions, 3 deletions
diff --git a/lesana/collection.py b/lesana/collection.py index 3bc7503..2a80072 100644 --- a/lesana/collection.py +++ b/lesana/collection.py @@ -263,7 +263,10 @@ class Collection(object): enquire = xapian.Enquire(cache) enquire.set_query(query) # FIXME: if more items are returned, something is wrong? - return self._match_to_entry(enquire.get_mset(0, 1)[0]) + try: + return self._match_to_entry(enquire.get_mset(0, 1)[0]) + except IndexError: + return None def remove_entries(self, uids): cache = xapian.WritableDatabase( @@ -272,8 +275,11 @@ class Collection(object): ) for uid in uids: entry = self.entry_from_uid(uid) - cache.delete_document(entry.idterm) - os.remove(os.path.join(self.itemdir, entry.fname)) + if not entry is None: + cache.delete_document(entry.idterm) + os.remove(os.path.join(self.itemdir, entry.fname)) + else: + logging.warning("No such entry: {}, ignoring".format(uid)) cache.commit() cache.close() diff --git a/lesana/command.py b/lesana/command.py index 2553915..6d31b34 100644 --- a/lesana/command.py +++ b/lesana/command.py @@ -98,6 +98,8 @@ class Edit(guacamole.Command): def invoked(self, ctx): collection = Collection(ctx.args.collection) entry = collection.entry_from_uid(ctx.args.uid) + if entry is None: + return "No such entry: {}".format(ctx.args.uid) filepath = os.path.join( collection.itemdir, entry.fname diff --git a/tests/test_collection.py b/tests/test_collection.py index a37a696..a197237 100644 --- a/tests/test_collection.py +++ b/tests/test_collection.py @@ -105,6 +105,11 @@ class testCollection(unittest.TestCase): self.assertEqual(len(cm.output), 1) self.assertIn("non_existing_file", cm.output[0]) + def test_get_entry_missing_uid(self): + self.collection = lesana.Collection('tests/data/simple') + entry = self.collection.entry_from_uid('this is not an uid') + self.assertIsNone(entry) + class testEntries(unittest.TestCase): def setUp(self): |