From a91889f3901c5599267d125afd6c49414aeeb085 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 22 Apr 2023 11:07:52 +0530 Subject: [PATCH] Move constants used by db backend into a separate module so we dont need to import the full backend everywhere else --- src/calibre/db/backend.py | 22 ++++------------------ src/calibre/db/constants.py | 22 ++++++++++++++++++++++ src/calibre/db/restore.py | 3 ++- src/calibre/db/tests/add_remove.py | 2 +- src/calibre/ebooks/metadata/book/render.py | 2 +- src/calibre/gui2/actions/view.py | 2 +- src/calibre/gui2/book_details.py | 2 +- src/calibre/gui2/comments_editor.py | 2 +- src/calibre/gui2/trash.py | 2 +- src/calibre/library/check_library.py | 2 +- 10 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 src/calibre/db/constants.py diff --git a/src/calibre/db/backend.py b/src/calibre/db/backend.py index 75e381f89d..111d80c647 100644 --- a/src/calibre/db/backend.py +++ b/src/calibre/db/backend.py @@ -16,9 +16,7 @@ import sys import time import uuid from contextlib import closing, suppress -from dataclasses import dataclass from functools import partial -from typing import Sequence from calibre import as_unicode, force_unicode, isbytestring, prints from calibre.constants import ( @@ -26,6 +24,10 @@ from calibre.constants import ( ) from calibre.db import SPOOL_SIZE, FTSQueryError from calibre.db.annotations import annot_db_data, unicode_normalize +from calibre.db.constants import ( + BOOK_ID_PATH_TEMPLATE, COVER_FILE_NAME, DEFAULT_TRASH_EXPIRY_TIME_SECONDS, + METADATA_FILE_NAME, TRASH_DIR_NAME, TrashEntry, +) from calibre.db.errors import NoSuchFormat from calibre.db.schema_upgrades import SchemaUpgrade from calibre.db.tables import ( @@ -56,27 +58,11 @@ from polyglot.builtins import ( # }}} -COVER_FILE_NAME = 'cover.jpg' -METADATA_FILE_NAME = 'metadata.opf' -DEFAULT_TRASH_EXPIRY_TIME_SECONDS = 14 * 86400 -TRASH_DIR_NAME = '.caltrash' -DATA_DIR_NAME = 'data' -BOOK_ID_PATH_TEMPLATE = ' ({})' CUSTOM_DATA_TYPES = frozenset(('rating', 'text', 'comments', 'datetime', 'int', 'float', 'bool', 'series', 'composite', 'enumeration')) WINDOWS_RESERVED_NAMES = frozenset('CON PRN AUX NUL COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9'.split()) -@dataclass -class TrashEntry: - book_id: int - title: str - author: str - cover_path: str - mtime: float - formats: Sequence[str] = () - - class DynamicFilter: # {{{ 'No longer used, present for legacy compatibility' diff --git a/src/calibre/db/constants.py b/src/calibre/db/constants.py new file mode 100644 index 0000000000..821027b61b --- /dev/null +++ b/src/calibre/db/constants.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# License: GPLv3 Copyright: 2023, Kovid Goyal + +from dataclasses import dataclass +from typing import Sequence + +COVER_FILE_NAME = 'cover.jpg' +METADATA_FILE_NAME = 'metadata.opf' +DEFAULT_TRASH_EXPIRY_TIME_SECONDS = 14 * 86400 +TRASH_DIR_NAME = '.caltrash' +DATA_DIR_NAME = 'data' +BOOK_ID_PATH_TEMPLATE = ' ({})' + + +@dataclass +class TrashEntry: + book_id: int + title: str + author: str + cover_path: str + mtime: float + formats: Sequence[str] = () diff --git a/src/calibre/db/restore.py b/src/calibre/db/restore.py index 24c0f1db37..ebe284036c 100644 --- a/src/calibre/db/restore.py +++ b/src/calibre/db/restore.py @@ -17,7 +17,8 @@ from threading import Thread from calibre import force_unicode, isbytestring from calibre.constants import filesystem_encoding -from calibre.db.backend import DB, METADATA_FILE_NAME, TRASH_DIR_NAME, DBPrefs +from calibre.db.backend import DB, DBPrefs +from calibre.db.constants import METADATA_FILE_NAME, TRASH_DIR_NAME from calibre.db.cache import Cache from calibre.ebooks.metadata.opf2 import OPF from calibre.ptempfile import TemporaryDirectory diff --git a/src/calibre/db/tests/add_remove.py b/src/calibre/db/tests/add_remove.py index 5a7c514be6..6e2d84e09f 100644 --- a/src/calibre/db/tests/add_remove.py +++ b/src/calibre/db/tests/add_remove.py @@ -12,7 +12,7 @@ from datetime import timedelta from io import BytesIO from tempfile import NamedTemporaryFile -from calibre.db.backend import METADATA_FILE_NAME +from calibre.db.constants import METADATA_FILE_NAME from calibre.db.tests.base import IMG, BaseTest from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.date import UNDEFINED_DATE, now, utcnow diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py index f5400ce73f..b4a8fde5b0 100644 --- a/src/calibre/ebooks/metadata/book/render.py +++ b/src/calibre/ebooks/metadata/book/render.py @@ -10,7 +10,7 @@ from functools import partial from calibre import force_unicode, prepare_string_for_xml from calibre.constants import filesystem_encoding -from calibre.db.backend import DATA_DIR_NAME +from calibre.db.constants import DATA_DIR_NAME from calibre.ebooks.metadata import fmt_sidx, rating_to_stars from calibre.ebooks.metadata.search_internet import ( DEFAULT_AUTHOR_SOURCE, name_for, qquote, url_for_author_search, url_for_book_search, diff --git a/src/calibre/gui2/actions/view.py b/src/calibre/gui2/actions/view.py index 738e6770e5..2c74390189 100644 --- a/src/calibre/gui2/actions/view.py +++ b/src/calibre/gui2/actions/view.py @@ -12,7 +12,7 @@ from functools import partial from qt.core import QAction, QDialog, QIcon, pyqtSignal from calibre.constants import ismacos, iswindows -from calibre.db.backend import DATA_DIR_NAME +from calibre.db.constants import DATA_DIR_NAME from calibre.gui2 import ( Dispatcher, config, elided_text, error_dialog, info_dialog, open_local_file, question_dialog, diff --git a/src/calibre/gui2/book_details.py b/src/calibre/gui2/book_details.py index 0eade46865..225db98b5d 100644 --- a/src/calibre/gui2/book_details.py +++ b/src/calibre/gui2/book_details.py @@ -15,7 +15,7 @@ from qt.core import ( from calibre import fit_image, sanitize_file_name from calibre.constants import config_dir, iswindows -from calibre.db.backend import DATA_DIR_NAME +from calibre.db.constants import DATA_DIR_NAME from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks.metadata.book.base import Metadata, field_metadata from calibre.ebooks.metadata.book.render import mi_to_html diff --git a/src/calibre/gui2/comments_editor.py b/src/calibre/gui2/comments_editor.py index 2761e89f30..0aae628075 100644 --- a/src/calibre/gui2/comments_editor.py +++ b/src/calibre/gui2/comments_editor.py @@ -19,7 +19,7 @@ from qt.core import ( ) from calibre import xml_replace_entities -from calibre.db.backend import DATA_DIR_NAME +from calibre.db.constants import DATA_DIR_NAME from calibre.ebooks.chardet import xml_to_unicode from calibre.gui2 import ( NO_URL_FORMATTING, choose_dir, choose_files, error_dialog, gprefs, is_dark_theme, diff --git a/src/calibre/gui2/trash.py b/src/calibre/gui2/trash.py index 60ed7d80b3..1633c0ddcc 100644 --- a/src/calibre/gui2/trash.py +++ b/src/calibre/gui2/trash.py @@ -12,7 +12,7 @@ from qt.core import ( from typing import Iterator, List from calibre import fit_image -from calibre.db.backend import DEFAULT_TRASH_EXPIRY_TIME_SECONDS, TrashEntry +from calibre.db.constants import DEFAULT_TRASH_EXPIRY_TIME_SECONDS, TrashEntry from calibre.gui2 import error_dialog from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.widgets import BusyCursor diff --git a/src/calibre/library/check_library.py b/src/calibre/library/check_library.py index 655e5599e8..a7262d3ae6 100644 --- a/src/calibre/library/check_library.py +++ b/src/calibre/library/check_library.py @@ -12,7 +12,7 @@ import traceback from calibre import isbytestring from calibre.constants import filesystem_encoding -from calibre.db.backend import ( +from calibre.db.constants import ( COVER_FILE_NAME, DATA_DIR_NAME, METADATA_FILE_NAME, TRASH_DIR_NAME, ) from calibre.ebooks import BOOK_EXTENSIONS