Compare commits

...

6 Commits

Author SHA1 Message Date
quarz12 b37554fdc1 Merge branch 'master' of https://github.com/quarz12/calibre-web 2024-04-13 16:41:06 +02:00
quarz12 cca178fb6c Merge branch 'master' of https://github.com/quarz12/calibre-web 2024-04-13 16:40:25 +02:00
quarz12 a2956518e3 Merge branch 'master' of https://github.com/quarz12/calibre-web 2024-04-13 16:35:29 +02:00
quarz12 518c56e569 removed some more unwanted refactoring 2024-04-13 16:35:15 +02:00
quarz12 2ac1566df9
Merge pull request #3 from quarz12/sorting
removed unwanted refactoring
2024-04-13 16:31:54 +02:00
quarz12 4b36261b4f removed unwanted refactoring 2024-04-13 16:28:26 +02:00
1 changed files with 17 additions and 22 deletions

View File

@ -20,7 +20,6 @@
import os import os
import re import re
import json import json
import traceback
from datetime import datetime from datetime import datetime
from urllib.parse import quote from urllib.parse import quote
import unidecode import unidecode
@ -33,7 +32,6 @@ from sqlalchemy.orm import relationship, sessionmaker, scoped_session
from sqlalchemy.orm.collections import InstrumentedList from sqlalchemy.orm.collections import InstrumentedList
from sqlalchemy.ext.declarative import DeclarativeMeta from sqlalchemy.ext.declarative import DeclarativeMeta
from sqlalchemy.exc import OperationalError from sqlalchemy.exc import OperationalError
try: try:
# Compatibility with sqlalchemy 2.0 # Compatibility with sqlalchemy 2.0
from sqlalchemy.orm import declarative_base from sqlalchemy.orm import declarative_base
@ -42,7 +40,6 @@ except ImportError:
from sqlalchemy.pool import StaticPool from sqlalchemy.pool import StaticPool
from sqlalchemy.sql.expression import and_, true, false, text, func, or_ from sqlalchemy.sql.expression import and_, true, false, text, func, or_
from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy import desc
from flask_login import current_user from flask_login import current_user
from flask_babel import gettext as _ from flask_babel import gettext as _
from flask_babel import get_locale from flask_babel import get_locale
@ -52,7 +49,7 @@ from . import logger, ub, isoLanguages
from .pagination import Pagination from .pagination import Pagination
from weakref import WeakSet from weakref import WeakSet
from thefuzz.fuzz import partial_ratio, partial_token_set_ratio, partial_token_sort_ratio, ratio from thefuzz.fuzz import partial_token_sort_ratio, ratio
# %-level, 100 means exact match, 75 allows exactly 1 wrong character in a 4 letter word # %-level, 100 means exact match, 75 allows exactly 1 wrong character in a 4 letter word
FUZZY_SEARCH_ACCURACY = 75 FUZZY_SEARCH_ACCURACY = 75
@ -384,8 +381,8 @@ class Books(Base):
def __repr__(self): def __repr__(self):
return "<Books('{0},{1}{2}{3}{4}{5}{6}{7}{8}')>".format(self.title, self.sort, self.author_sort, return "<Books('{0},{1}{2}{3}{4}{5}{6}{7}{8}')>".format(self.title, self.sort, self.author_sort,
self.timestamp, self.pubdate, self.series_index, self.timestamp, self.pubdate, self.series_index,
self.last_modified, self.path, self.has_cover) self.last_modified, self.path, self.has_cover)
def __str__(self): def __str__(self):
return "{0} {1} {2} {3} {4}".format(self.title, " ".join([tag.name for tag in self.tags]), return "{0} {1} {2} {3} {4}".format(self.title, " ".join([tag.name for tag in self.tags]),
@ -439,15 +436,13 @@ class CustomColumns(Base):
content['category_sort'] = "value" content['category_sort'] = "value"
content['is_csp'] = False content['is_csp'] = False
content['is_editable'] = self.editable content['is_editable'] = self.editable
content['rec_index'] = sequence + 22 # toDo why ?? content['rec_index'] = sequence + 22 # toDo why ??
if isinstance(value, datetime): if isinstance(value, datetime):
content['#value#'] = {"__class__": "datetime.datetime", content['#value#'] = {"__class__": "datetime.datetime", "__value__": value.strftime("%Y-%m-%dT%H:%M:%S+00:00")}
"__value__": value.strftime("%Y-%m-%dT%H:%M:%S+00:00")}
else: else:
content['#value#'] = value content['#value#'] = value
content['#extra#'] = extra content['#extra#'] = extra
content['is_multiple2'] = {} if not self.is_multiple else {"cache_to_list": "|", "ui_to_list": ",", content['is_multiple2'] = {} if not self.is_multiple else {"cache_to_list": "|", "ui_to_list": ",", "list_to_ui": ", "}
"list_to_ui": ", "}
return json.dumps(content, ensure_ascii=False) return json.dumps(content, ensure_ascii=False)
@ -468,7 +463,7 @@ class AlchemyEncoder(json.JSONEncoder):
el = list() el = list()
# ele = None # ele = None
for ele in data: for ele in data:
if hasattr(ele, 'value'): # converter for custom_column values if hasattr(ele, 'value'): # converter for custom_column values
el.append(str(ele.value)) el.append(str(ele.value))
elif ele.get: elif ele.get:
el.append(ele.get()) el.append(ele.get())
@ -507,6 +502,7 @@ class CalibreDB:
if init: if init:
self.init_db(expire_on_commit) self.init_db(expire_on_commit)
def init_db(self, expire_on_commit=True): def init_db(self, expire_on_commit=True):
if self._init: if self._init:
self.init_session(expire_on_commit) self.init_session(expire_on_commit)
@ -678,13 +674,13 @@ class CalibreDB:
if not read_column: if not read_column:
bd = (self.session.query(Books, ub.ReadBook.read_status, ub.ArchivedBook.is_archived).select_from(Books) bd = (self.session.query(Books, ub.ReadBook.read_status, ub.ArchivedBook.is_archived).select_from(Books)
.join(ub.ReadBook, and_(ub.ReadBook.user_id == int(current_user.id), ub.ReadBook.book_id == book_id), .join(ub.ReadBook, and_(ub.ReadBook.user_id == int(current_user.id), ub.ReadBook.book_id == book_id),
isouter=True)) isouter=True))
else: else:
try: try:
read_column = cc_classes[read_column] read_column = cc_classes[read_column]
bd = (self.session.query(Books, read_column.value, ub.ArchivedBook.is_archived).select_from(Books) bd = (self.session.query(Books, read_column.value, ub.ArchivedBook.is_archived).select_from(Books)
.join(read_column, read_column.book == book_id, .join(read_column, read_column.book == book_id,
isouter=True)) isouter=True))
except (KeyError, AttributeError, IndexError): except (KeyError, AttributeError, IndexError):
log.error("Custom Column No.{} does not exist in calibre database".format(read_column)) log.error("Custom Column No.{} does not exist in calibre database".format(read_column))
# Skip linking read column and return None instead of read status # Skip linking read column and return None instead of read status
@ -737,11 +733,11 @@ class CalibreDB:
pos_cc_list = current_user.allowed_column_value.split(',') pos_cc_list = current_user.allowed_column_value.split(',')
pos_content_cc_filter = true() if pos_cc_list == [''] else \ pos_content_cc_filter = true() if pos_cc_list == [''] else \
getattr(Books, 'custom_column_' + str(self.config.config_restricted_column)). \ getattr(Books, 'custom_column_' + str(self.config.config_restricted_column)). \
any(cc_classes[self.config.config_restricted_column].value.in_(pos_cc_list)) any(cc_classes[self.config.config_restricted_column].value.in_(pos_cc_list))
neg_cc_list = current_user.denied_column_value.split(',') neg_cc_list = current_user.denied_column_value.split(',')
neg_content_cc_filter = false() if neg_cc_list == [''] else \ neg_content_cc_filter = false() if neg_cc_list == [''] else \
getattr(Books, 'custom_column_' + str(self.config.config_restricted_column)). \ getattr(Books, 'custom_column_' + str(self.config.config_restricted_column)). \
any(cc_classes[self.config.config_restricted_column].value.in_(neg_cc_list)) any(cc_classes[self.config.config_restricted_column].value.in_(neg_cc_list))
except (KeyError, AttributeError, IndexError): except (KeyError, AttributeError, IndexError):
pos_content_cc_filter = false() pos_content_cc_filter = false()
neg_content_cc_filter = true() neg_content_cc_filter = true()
@ -821,18 +817,18 @@ class CalibreDB:
element = 0 element = 0
while indx: while indx:
if indx >= 3: if indx >= 3:
query = query.outerjoin(join[element], join[element + 1]).outerjoin(join[element + 2]) query = query.outerjoin(join[element], join[element+1]).outerjoin(join[element+2])
indx -= 3 indx -= 3
element += 3 element += 3
elif indx == 2: elif indx == 2:
query = query.outerjoin(join[element], join[element + 1]) query = query.outerjoin(join[element], join[element+1])
indx -= 2 indx -= 2
element += 2 element += 2
elif indx == 1: elif indx == 1:
query = query.outerjoin(join[element]) query = query.outerjoin(join[element])
indx -= 1 indx -= 1
element += 1 element += 1
query = query.filter(db_filter) \ query = query.filter(db_filter)\
.filter(self.common_filters(allow_show_archived)) .filter(self.common_filters(allow_show_archived))
entries = list() entries = list()
pagination = list() pagination = list()
@ -988,8 +984,8 @@ class CalibreDB:
if with_count: if with_count:
if not languages: if not languages:
languages = self.session.query(Languages, func.count('books_languages_link.book')) \ languages = self.session.query(Languages, func.count('books_languages_link.book'))\
.join(books_languages_link).join(Books) \ .join(books_languages_link).join(Books)\
.filter(self.common_filters(return_all_languages=return_all_languages)) \ .filter(self.common_filters(return_all_languages=return_all_languages)) \
.group_by(text('books_languages_link.lang_code')).all() .group_by(text('books_languages_link.lang_code')).all()
tags = list() tags = list()
@ -1104,7 +1100,6 @@ class Category:
self.rating = rating self.rating = rating
self.count = 1 self.count = 1
'''class Count: '''class Count:
count = None count = None