Charles, I am getting a KeyError: '#extra#' error when I try to call set_metadata when I use that set_all_user_metadata call above. I take it there is another special trick required to set that 'extra' data?
Code:
from calibre.ebooks.metadata.book.base import Metadata
from calibre.library.database2 import LibraryDatabase2
from calibre.utils.config import prefs
src = prefs['library_path']
db = LibraryDatabase2(src)
mi = Metadata('Test Title', ['Test Author'])
mi.set_all_user_metadata(db.custom_field_metadata())
db.import_book(mi, [])
print 'imported book:', mi.id