diff --git a/src/calibre/db/cache.py b/src/calibre/db/cache.py index a6647d5027..e6044ce6de 100644 --- a/src/calibre/db/cache.py +++ b/src/calibre/db/cache.py @@ -1117,10 +1117,17 @@ class Cache(object): return book_id @write_api - def add_books(self, books, add_duplicates=True): + def add_books(self, books, add_duplicates=True, apply_import_tags=True, preserve_uuid=False, dbapi=None): duplicates, ids = [], [] for mi, format_map in books: - pass + book_id = self._create_book_entry(mi, add_duplicates=add_duplicates, apply_import_tags=apply_import_tags, preserve_uuid=preserve_uuid) + if book_id is None: + duplicates.append((mi, format_map)) + else: + ids.append(book_id) + for fmt, stream_or_path in format_map.iteritems(): + self._add_format(book_id, fmt, stream_or_path, dbapi=dbapi) + return ids, duplicates # }}} diff --git a/src/calibre/db/tests/add_remove.py b/src/calibre/db/tests/add_remove.py index c5845f01da..5744d63635 100644 --- a/src/calibre/db/tests/add_remove.py +++ b/src/calibre/db/tests/add_remove.py @@ -188,3 +188,19 @@ class AddRemoveTest(BaseTest): self.assertEqual(mi.uuid, cache.field_for('uuid', book_id)) # }}} + def test_add_books(self): # {{{ + 'Test the adding of new books' + from calibre.ebooks.metadata.book.base import Metadata + cache = self.init_cache() + mi = Metadata('Created One', authors=('Creator One', 'Creator Two')) + FMT1, FMT2 = b'format1', b'format2' + format_map = {'FMT1':BytesIO(FMT1), 'FMT2':BytesIO(FMT2)} + ids, duplicates = cache.add_books([(mi, format_map)]) + self.assertTrue(len(ids) == 1) + self.assertFalse(duplicates) + book_id = ids[0] + self.assertEqual(set(cache.formats(book_id)), {'FMT1', 'FMT2'}) + self.assertEqual(cache.format(book_id, 'FMT1'), FMT1) + self.assertEqual(cache.format(book_id, 'FMT2'), FMT2) + # }}} +