diff --git a/src/calibre/ebooks/metadata/sources/identify.py b/src/calibre/ebooks/metadata/sources/identify.py index 303bb2db6e..81f3e8247f 100644 --- a/src/calibre/ebooks/metadata/sources/identify.py +++ b/src/calibre/ebooks/metadata/sources/identify.py @@ -85,7 +85,11 @@ class ISBNMerge(object): isbns, min_year = xisbn.get_isbn_pool(isbn) if not isbns: isbns = frozenset([isbn]) - self.pools[isbns] = pool = (min_year, []) + if isbns in self.pools: + # xISBN had a brain fart + pool = self.pools[isbn] + else: + self.pools[isbns] = pool = (min_year, []) if not self.pool_has_result_from_same_source(pool, result): pool[1].append(result) diff --git a/src/calibre/ebooks/metadata/xisbn.py b/src/calibre/ebooks/metadata/xisbn.py index 56156c034e..ff21dfd89d 100644 --- a/src/calibre/ebooks/metadata/xisbn.py +++ b/src/calibre/ebooks/metadata/xisbn.py @@ -45,6 +45,11 @@ class xISBN(object): ans.append(rec) return ans + def isbns_in_data(self, data): + for rec in data: + for i in rec.get('isbn', []): + yield i + def get_data(self, isbn): isbn = self.purify(isbn) with self.lock: @@ -57,9 +62,8 @@ class xISBN(object): data = [] id_ = len(self._data) self._data.append(data) - for rec in data: - for i in rec.get('isbn', []): - self._map[i] = id_ + for i in self.isbns_in_data(data): + self._map[i] = id_ self._map[isbn] = id_ return self._data[self._map[isbn]]