示例#1
0
文件: orm.py 项目: dhumbert/literable
    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)
示例#2
0
文件: orm.py 项目: dhumbert/literable
 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
示例#3
0
文件: orm.py 项目: dhumbert/literable
    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))
示例#4
0
文件: orm.py 项目: dhumbert/literable
 def _update_pdf_word_count(self):
     pdf_file = book_upload_set.path(self.filename)
     p = pdf.PDF(pdf_file)
     return p.count_words()
示例#5
0
文件: orm.py 项目: dhumbert/literable
 def _update_epub_word_count(self):
     epub_file = book_upload_set.path(self.filename)
     e = epub.Epub(epub_file)
     return e.count_words()
示例#6
0
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