From 3e522c4e1513bbf1530eb67d7ed22a3517efab1d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 22 Sep 2013 17:24:07 +0530 Subject: [PATCH] newdb: Handle databases with invalid ratings link tables Fixes #1228517 [crashes on change library](https://bugs.launchpad.net/calibre/+bug/1228517) --- src/calibre/db/fields.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/calibre/db/fields.py b/src/calibre/db/fields.py index fbed097143..1294fc198c 100644 --- a/src/calibre/db/fields.py +++ b/src/calibre/db/fields.py @@ -452,8 +452,11 @@ class ManyToOneField(Field): @property def book_value_map(self): - return {book_id:self.table.id_map[item_id] for book_id, item_id in + try: + return {book_id:self.table.id_map[item_id] for book_id, item_id in self.table.book_col_map.iteritems()} + except KeyError: + raise InvalidLinkTable(self.name) class ManyToManyField(Field): @@ -514,8 +517,11 @@ class ManyToManyField(Field): @property def book_value_map(self): - return {book_id:tuple(self.table.id_map[item_id] for item_id in item_ids) + try: + return {book_id:tuple(self.table.id_map[item_id] for item_id in item_ids) for book_id, item_ids in self.table.book_col_map.iteritems()} + except KeyError: + raise InvalidLinkTable(self.name) class IdentifiersField(ManyToManyField):