Commit f1fac282 authored by OzzieIsaacs's avatar OzzieIsaacs

Improved error handling for renaming authors and titles (changes related to...

Improved error handling for renaming authors and titles (changes related to filesystem and not only to database)
parent b4aede78
......@@ -49,8 +49,8 @@ def process(tmp_file_path, original_file_name, original_file_extension):
meta = epub.get_epub_info(tmp_file_path, original_file_name, original_file_extension)
if ".FB2" == original_file_extension.upper() and use_fb2_meta is True:
meta = fb2.get_fb2_info(tmp_file_path, original_file_extension)
except Exception as e:
logger.warning('cannot parse metadata, using default: %s', e)
except Exception as ex:
logger.warning('cannot parse metadata, using default: %s', ex)
if meta and meta.title.strip() and meta.author.strip():
return meta
......@@ -111,6 +111,7 @@ def pdf_preview(tmp_file_path, tmp_dir):
img.save(filename=os.path.join(tmp_dir, cover_file_name))
return cover_file_name
def get_versions():
if not use_generic_pdf_cover:
IVersion=ImageVersion.MAGICK_VERSION
......@@ -120,4 +121,4 @@ def get_versions():
PVersion=PyPdfVersion
else:
PVersion=_(u'not installed')
return {'ImageVersion':IVersion,'PyPdfVersion':PVersion}
return {'ImageVersion': IVersion, 'PyPdfVersion': PVersion}
......@@ -26,12 +26,15 @@ def title_sort(title):
title = title.replace(prep, '') + ', ' + prep
return title.strip()
def lcase(s):
return s.lower()
def ucase(s):
return s.upper()
Base = declarative_base()
books_authors_link = Table('books_authors_link', Base.metadata,
......@@ -64,6 +67,7 @@ books_publishers_link = Table('books_publishers_link', Base.metadata,
Column('publisher', Integer, ForeignKey('publishers.id'), primary_key=True)
)
class Identifiers(Base):
__tablename__ = 'identifiers'
......@@ -197,6 +201,7 @@ class Languages(Base):
def __repr__(self):
return u"<Languages('{0}')>".format(self.lang_code)
class Publishers(Base):
__tablename__ = 'publishers'
......@@ -204,7 +209,7 @@ class Publishers(Base):
name = Column(String)
sort = Column(String)
def __init__(self, name,sort):
def __init__(self, name, sort):
self.name = name
self.sort = sort
......@@ -212,7 +217,6 @@ class Publishers(Base):
return u"<Publishers('{0},{1}')>".format(self.name, self.sort)
class Data(Base):
__tablename__ = 'data'
......@@ -260,7 +264,7 @@ class Books(Base):
identifiers = relationship('Identifiers', backref='books')
def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover,
authors, tags, languages = None):
authors, tags, languages=None):
self.title = title
self.sort = sort
self.author_sort = author_sort
......@@ -309,7 +313,7 @@ def setup_db():
return False
dbpath = os.path.join(config.config_calibre_dir, "metadata.db")
engine = create_engine('sqlite:///'+ dbpath, echo=False, isolation_level="SERIALIZABLE")
engine = create_engine('sqlite:///' + dbpath, echo=False, isolation_level="SERIALIZABLE")
try:
conn = engine.connect()
except Exception:
......
......@@ -12,7 +12,7 @@ def extractCover(zipFile, coverFile, coverpath, tmp_file_name):
if coverFile is None:
return None
else:
zipCoverPath = os.path.join(coverpath , coverFile).replace('\\','/')
zipCoverPath = os.path.join(coverpath, coverFile).replace('\\', '/')
cf = zipFile.read(zipCoverPath)
prefix = os.path.splitext(tmp_file_name)[0]
tmp_cover_name = prefix + '.' + os.path.basename(zipCoverPath)
......@@ -93,7 +93,7 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='"+meta_cover[0]+"']/@href", namespaces=ns)
if len(coversection) > 0:
filetype = coversection[0].rsplit('.', 1)[-1]
if filetype == "xhtml" or filetype == "html": #if cover is (x)html format
if filetype == "xhtml" or filetype == "html": # if cover is (x)html format
markup = epubZip.read(os.path.join(coverpath, coversection[0]))
markupTree = etree.fromstring(markup)
# no matter xhtml or html with no namespace
......
......@@ -3,10 +3,7 @@
from lxml import etree
import uploader
#try:
# from io import StringIO
#except ImportError:
# import StringIO
def get_fb2_info(tmp_file_path, original_file_extension):
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -47,12 +47,9 @@ DEFAULT_PASS = "admin123"
DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083))
DEVELOPMENT = False
class UserBase:
@property
def is_authenticated(self):
......@@ -203,6 +200,7 @@ class Anonymous(AnonymousUserMixin, UserBase):
def is_authenticated(self):
return False
# Baseclass representing Shelfs in calibre-web inapp.db
class Shelf(Base):
__tablename__ = 'shelf'
......@@ -290,7 +288,7 @@ class Settings(Base):
config_google_drive_folder = Column(String)
config_google_drive_calibre_url_base = Column(String)
config_google_drive_watch_changes_response = Column(String)
config_columns_to_ignore = Column(String)
#config_columns_to_ignore = Column(String)
config_remote_login = Column(Boolean)
config_use_goodreads = Column(Boolean)
config_goodreads_api_key = Column(String)
......@@ -403,22 +401,22 @@ class Config:
(self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS))
def mature_content_tags(self):
if (sys.version_info > (3, 0)): #Python3 str, Python2 unicode
if sys.version_info > (3, 0): # Python3 str, Python2 unicode
lstrip = str.lstrip
else:
lstrip = unicode.lstrip
return list(map(lstrip, self.config_mature_content_tags.split(",")))
def get_Log_Level(self):
ret_value=""
ret_value = ""
if self.config_log_level == logging.INFO:
ret_value='INFO'
ret_value = 'INFO'
elif self.config_log_level == logging.DEBUG:
ret_value='DEBUG'
ret_value = 'DEBUG'
elif self.config_log_level == logging.WARNING:
ret_value='WARNING'
ret_value = 'WARNING'
elif self.config_log_level == logging.ERROR:
ret_value='ERROR'
ret_value = 'ERROR'
return ret_value
......@@ -495,7 +493,7 @@ def migrate_Database():
conn = engine.connect()
conn.execute("ALTER TABLE user ADD column `sidebar_view` Integer DEFAULT 1")
session.commit()
create=True
create = True
try:
if create:
conn = engine.connect()
......@@ -535,11 +533,13 @@ def migrate_Database():
conn = engine.connect()
conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''")
def clean_database():
# Remove expired remote login tokens
now = datetime.datetime.now()
session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).delete()
def create_default_config():
settings = Settings()
settings.mail_server = "mail.example.com"
......
......@@ -14,17 +14,17 @@ BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, d
"""
def upload(file):
def upload(uploadfile):
tmp_dir = os.path.join(gettempdir(), 'calibre_web')
if not os.path.isdir(tmp_dir):
os.mkdir(tmp_dir)
filename = file.filename
filename = uploadfile.filename
filename_root, file_extension = os.path.splitext(filename)
md5 = hashlib.md5()
md5.update(filename.encode('utf-8'))
tmp_file_path = os.path.join(tmp_dir, md5.hexdigest())
file.save(tmp_file_path)
uploadfile.save(tmp_file_path)
meta = book_formats.process(tmp_file_path, filename_root, file_extension)
return meta
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment