def write_book(self, book_id, mi, components, fmts): base_path = os.path.join(self.root, *components) base_dir = os.path.dirname(base_path) if self.opts.formats and self.opts.formats != 'all': asked_formats = {x.lower().strip() for x in self.opts.formats.split(',')} fmts = asked_formats.intersection(fmts) if not fmts: self.errors[book_id].append(('critical', _('Requested formats not available'))) return if not fmts and not self.opts.write_opf and not self.opts.save_cover: return # On windows python incorrectly raises an access denied exception # when trying to create the root of a drive, like C:\ if os.path.dirname(base_dir) != base_dir: try: os.makedirs(base_dir) except EnvironmentError as err: if err.errno != errno.EEXIST: raise if self.opts.update_metadata: d = {} d['last_modified'] = mi.last_modified.isoformat() cdata = self.db.cover(book_id) mi.cover, mi.cover_data = None, (None, None) if cdata: fname = None if self.opts.save_cover: fname = base_path + os.extsep + 'jpg' mi.cover = os.path.basename(fname) elif self.opts.update_metadata: fname = os.path.join(self.tdir, '%d.jpg' % book_id) if fname: with lopen(fname, 'wb') as f: f.write(cdata) if self.opts.update_metadata: d['cover'] = fname fname = None if self.opts.write_opf: fname = base_path + os.extsep + 'opf' elif self.opts.update_metadata: fname = os.path.join(self.tdir, '%d.opf' % book_id) if fname: opf = metadata_to_opf(mi) with lopen(fname, 'wb') as f: f.write(opf) if self.opts.update_metadata: d['opf'] = fname mi.cover, mi.cover_data = None, (None, None) if self.opts.update_metadata: d['fmts'] = [] for fmt in fmts: try: fmtpath = self.write_fmt(book_id, fmt, base_path) if fmtpath and self.opts.update_metadata and can_set_metadata(fmt): d['fmts'].append(fmtpath) except Exception: self.errors[book_id].append(('fmt', (fmt, traceback.format_exc()))) if self.opts.update_metadata: if d['fmts']: try: self.pool(book_id, 'calibre.library.save_to_disk', 'update_serialized_metadata', d) except Failure as err: error_dialog(self.pd, _('Critical failure'), _( 'Could not save books to disk, click "Show details" for more information'), det_msg=unicode_type(err.failure_message) + '\n' + unicode_type(err.details), show=True) self.pd.canceled = True else: self.pd.value += 1 self.pd.msg = self.book_id_data(book_id).title
def write_book(self, book_id, mi, components, fmts): base_path = os.path.join(self.root, *components) base_dir = os.path.dirname(base_path) if self.opts.formats and self.opts.formats != 'all': asked_formats = { x.lower().strip() for x in self.opts.formats.split(',') } fmts = asked_formats.intersection(fmts) if not fmts: self.errors[book_id].append( ('critical', _('Requested formats not available'))) return if not fmts and not self.opts.write_opf and not self.opts.save_cover: return # On windows python incorrectly raises an access denied exception # when trying to create the root of a drive, like C:\ if os.path.dirname(base_dir) != base_dir: try: os.makedirs(base_dir) except EnvironmentError as err: if err.errno != errno.EEXIST: raise if self.opts.update_metadata: d = {} d['last_modified'] = mi.last_modified.isoformat() cdata = self.db.cover(book_id) mi.cover, mi.cover_data = None, (None, None) if cdata: fname = None if self.opts.save_cover: fname = base_path + os.extsep + 'jpg' mi.cover = os.path.basename(fname) elif self.opts.update_metadata: fname = os.path.join(self.tdir, '%d.jpg' % book_id) if fname: with lopen(fname, 'wb') as f: f.write(cdata) if self.opts.update_metadata: d['cover'] = fname fname = None if self.opts.write_opf: fname = base_path + os.extsep + 'opf' elif self.opts.update_metadata: fname = os.path.join(self.tdir, '%d.opf' % book_id) if fname: opf = metadata_to_opf(mi) with lopen(fname, 'wb') as f: f.write(opf) if self.opts.update_metadata: d['opf'] = fname mi.cover, mi.cover_data = None, (None, None) if self.opts.update_metadata: d['fmts'] = [] for fmt in fmts: try: fmtpath = self.write_fmt(book_id, fmt, base_path) if fmtpath and self.opts.update_metadata and can_set_metadata( fmt): d['fmts'].append(fmtpath) except Exception: self.errors[book_id].append( ('fmt', (fmt, traceback.format_exc()))) if self.opts.update_metadata: if d['fmts']: try: self.pool(book_id, 'calibre.library.save_to_disk', 'update_serialized_metadata', d) except Failure as err: error_dialog( self.pd, _('Critical failure'), _('Could not save books to disk, click "Show details" for more information' ), det_msg=unicode(err.failure_message) + '\n' + unicode(err.details), show=True) self.pd.canceled = True else: self.pd.value += 1 self.pd.msg = self.book_id_data(book_id).title
def write_book(self, book_id, mi, components): base_path = os.path.join(self.root, *components) base_dir = os.path.dirname(base_path) fmts = {f.lower() for f in self.db.formats(book_id)} if self.opts.formats != 'all': asked_formats = {x.lower().strip() for x in self.opts.formats.split(',')} fmts = asked_formats.intersection(fmts) if not fmts: self.errors[book_id] = ('critical', _('Requested formats not available')) return if not fmts and not self.opts.write_opf and not self.opts.save_cover: return try: os.makedirs(base_dir) except EnvironmentError as err: if err.errno != errno.EEXIST: raise if self.opts.update_metadata: self.metadata_data[book_id] = d = {} d['last_modified'] = mi.last_modified.isoformat() cdata = self.db.cover(book_id) mi.cover, mi.cover_data = None, (None, None) if cdata: fname = None if self.opts.save_cover: fname = base_path + os.extsep + 'jpg' mi.cover = os.path.basename(fname) elif self.opts.update_metadata: fname = os.path.join(self.tdir, '%d.jpg' % book_id) if fname: with lopen(fname, 'wb') as f: f.write(cdata) if self.opts.update_metadata: d['cover'] = fname fname = None if self.opts.write_opf: fname = base_path + os.extsep + 'opf' elif self.opts.update_metadata: fname = os.path.join(self.tdir, '%d.opf' % book_id) if fname: opf = metadata_to_opf(mi) with lopen(fname, 'wb') as f: f.write(opf) if self.opts.update_metadata: d['opf'] = fname mi.cover, mi.cover_data = None, (None, None) if self.opts.update_metadata: d['fmts'] = [] for fmt in fmts: try: fmtpath = self.write_fmt(book_id, fmt, base_path) if fmtpath and self.opts.update_metadata and can_set_metadata(fmt): d['fmts'].append(fmtpath) except Exception: self.errors[book_id].append(('fmt', (fmt, traceback.format_exc()))) if self.opts.update_metadata and not d['fmts']: self.metadata_data.pop(book_id, None)