def _write_epub_meta(self): epub_file = book_upload_set.path(self.filename) title = self._build_meta_title() if self.cover: cover = cover_upload_set.path(self.cover) else: cover = None if self.tags: tags = [tag.name for tag in self.tags] else: tags = [] if self.authors: author = self.authors[0].name else: author = None subjects = tags epub.write_epub_meta(epub_file, title, author, description=self.description, cover=cover, subjects=subjects)
def remove_file(self): if self.filename: try: os.remove(book_upload_set.path(self.filename)) self.filename = None except Exception as e: app.logger.error("Unable to delete file: {}".format(e.message)) pass # oh, well
def move_file_from_staging(self, filename): if self.filename: self.remove_file() if filename: self.filename = filename src = book_staging_upload_set.path(self.filename) dest_path = app.config['LIBRARY_PATH'] if os.path.exists(os.path.join(dest_path, self.filename)): self.filename = book_upload_set.resolve_conflict(dest_path, self.filename) shutil.move(src, book_upload_set.path(self.filename))
def _update_pdf_word_count(self): pdf_file = book_upload_set.path(self.filename) p = pdf.PDF(pdf_file) return p.count_words()
def _update_epub_word_count(self): epub_file = book_upload_set.path(self.filename) e = epub.Epub(epub_file) return e.count_words()
def add_book_bulk(batch, root, book_file, cover_file, metadata): if 'title' not in metadata or not metadata['title'].strip(): raise ValueError("Title must not be blank: " + book_file) ids = {'isbn': metadata.get('id_isbn'), 'calibre': metadata.get('id_calibre'), 'amazon': metadata.get('id_amazon'), 'google': metadata.get('id_google')} for id_type, identifer in ids.iteritems(): if identifer: if get_book_by_identifier(id_type, identifer): raise RuntimeError("There is already a book with identifier [" + id_type + ": " + identifer + "]!") book = Book() book.batch = batch book.title = metadata['title'] book.title_sort = metadata['title_sort'] if 'title_sort' in metadata else metadata['title'] book.description = metadata['description'] if 'description' in metadata else None book.series_seq = int(metadata['series_index']) if 'series_index' in metadata else None book.public = True book.user = get_user('devin') book.created_at = datetime.now() book.id_isbn = ids['isbn'] book.id_amazon = ids['amazon'] book.id_google = ids['google'] book.id_calibre = ids['calibre'] taxonomies = {} if 'publisher' in metadata: taxonomies['publisher'] = [metadata['publisher']] if 'series' in metadata: taxonomies['series'] = [metadata['series']] if 'creator' in metadata and 'creator_sort' in metadata: if isinstance(metadata['creator'], list): taxonomies['author'] = [] for i, c in enumerate(metadata['creator']): taxonomies['author'].append((c, metadata['creator_sort'][i])) else: taxonomies['author'] = [ (metadata['creator'], metadata['creator_sort'])] elif 'creator' in metadata: if isinstance(metadata['creator'], list): taxonomies['author'] = [] for i, c in enumerate(metadata['creator']): taxonomies['author'].append((c, c)) else: taxonomies['author'] = [ (metadata['creator'], metadata['creator'])] if 'subject' in metadata: tags = [] if not isinstance(metadata['subject'], list): metadata['subject'] = [metadata['subject']] for subject in metadata['subject']: tags.append(subject.lower()) if len(tags) > 0: taxonomies['tag'] = tags book.update_taxonomies(taxonomies) cover_dest_path = cover_upload_set.config.destination new_cover_file = re.sub('[^0-9a-zA-Z\._\-]+', '', cover_file.replace(" ", "_")) if os.path.exists(os.path.join(cover_dest_path, new_cover_file)): new_cover_file = cover_upload_set.resolve_conflict(cover_dest_path, new_cover_file) shutil.copy(os.path.join(root, cover_file), cover_upload_set.path(new_cover_file)) book_dest_path = book_upload_set.config.destination new_book_file = re.sub('[^0-9a-zA-Z\._\-]+', '', book_file.replace(" ", "_")) if os.path.exists(os.path.join(book_dest_path, new_book_file)): new_book_file = book_upload_set.resolve_conflict(book_dest_path, new_book_file) shutil.copy(os.path.join(root, book_file), book_upload_set.path(new_book_file)) book.cover = new_cover_file book.filename = new_book_file db.session.add(book) if 'rating' in metadata and metadata['rating'] > 0: book.user.get_book_meta(book.id).rating = metadata['rating'] db.session.commit() if app.config['WRITE_META_ON_SAVE']: book.write_meta() book.update_word_count() return True