From bcb809eec0de72dd0af42bca8100e12d61c567ba Mon Sep 17 00:00:00 2001 From: phil borman Date: Tue, 6 Dec 2022 15:44:18 +0100 Subject: [PATCH] Moved more libraries to top level for unbundling, updated pyproject.toml --- {lib/PyPDF3 => PyPDF3}/__init__.py | 0 {lib/PyPDF3 => PyPDF3}/_version.py | 0 {lib/PyPDF3 => PyPDF3}/filters.py | 0 {lib/PyPDF3 => PyPDF3}/generic.py | 0 {lib/PyPDF3 => PyPDF3}/merger.py | 0 {lib/PyPDF3 => PyPDF3}/pagerange.py | 0 {lib/PyPDF3 => PyPDF3}/pdf.py | 0 {lib/PyPDF3 => PyPDF3}/utils.py | 0 {lib/PyPDF3 => PyPDF3}/xmp.py | 0 .../__init__.py | 0 .../rencode.py | 0 lazylibrarian/bookwork.py | 2 +- lazylibrarian/calibre.py | 2 +- lazylibrarian/comicsearch.py | 2 +- lazylibrarian/common.py | 39 +-- lazylibrarian/downloadmethods.py | 17 +- lazylibrarian/gb.py | 4 +- lazylibrarian/gr.py | 2 +- lazylibrarian/images.py | 24 +- lazylibrarian/importer.py | 2 +- lazylibrarian/librarysync.py | 2 +- lazylibrarian/manualbook.py | 4 +- lazylibrarian/notifiers/pushbullet2.py | 19 +- lazylibrarian/ol.py | 2 +- lazylibrarian/postprocess.py | 9 +- lazylibrarian/preprocessor.py | 11 +- lazylibrarian/resultlist.py | 2 +- lazylibrarian/torrentparser.py | 2 +- lazylibrarian/webServe.py | 9 +- lib/deluge_client/client.py | 289 ------------------ {lib/magic => magic}/__init__.py | 0 {lib/magic => magic}/compat.py | 0 pyproject.toml | 35 ++- {lib/thefuzz => thefuzz}/StringMatcher.py | 0 {lib/thefuzz => thefuzz}/__init__.py | 0 {lib/thefuzz => thefuzz}/fuzz.py | 0 {lib/thefuzz => thefuzz}/process.py | 0 {lib/thefuzz => thefuzz}/string_processing.py | 0 {lib/thefuzz => thefuzz}/utils.py | 2 +- 39 files changed, 71 insertions(+), 409 deletions(-) rename {lib/PyPDF3 => PyPDF3}/__init__.py (100%) rename {lib/PyPDF3 => PyPDF3}/_version.py (100%) rename {lib/PyPDF3 => PyPDF3}/filters.py (100%) rename {lib/PyPDF3 => PyPDF3}/generic.py (100%) rename {lib/PyPDF3 => PyPDF3}/merger.py (100%) rename {lib/PyPDF3 => PyPDF3}/pagerange.py (100%) rename {lib/PyPDF3 => PyPDF3}/pdf.py (100%) rename {lib/PyPDF3 => PyPDF3}/utils.py (100%) rename {lib/PyPDF3 => PyPDF3}/xmp.py (100%) rename {lib/deluge_client => deluge_client}/__init__.py (100%) rename {lib/deluge_client => deluge_client}/rencode.py (100%) delete mode 100644 lib/deluge_client/client.py rename {lib/magic => magic}/__init__.py (100%) rename {lib/magic => magic}/compat.py (100%) rename {lib/thefuzz => thefuzz}/StringMatcher.py (100%) rename {lib/thefuzz => thefuzz}/__init__.py (100%) rename {lib/thefuzz => thefuzz}/fuzz.py (100%) rename {lib/thefuzz => thefuzz}/process.py (100%) rename {lib/thefuzz => thefuzz}/string_processing.py (100%) rename {lib/thefuzz => thefuzz}/utils.py (97%) diff --git a/lib/PyPDF3/__init__.py b/PyPDF3/__init__.py similarity index 100% rename from lib/PyPDF3/__init__.py rename to PyPDF3/__init__.py diff --git a/lib/PyPDF3/_version.py b/PyPDF3/_version.py similarity index 100% rename from lib/PyPDF3/_version.py rename to PyPDF3/_version.py diff --git a/lib/PyPDF3/filters.py b/PyPDF3/filters.py similarity index 100% rename from lib/PyPDF3/filters.py rename to PyPDF3/filters.py diff --git a/lib/PyPDF3/generic.py b/PyPDF3/generic.py similarity index 100% rename from lib/PyPDF3/generic.py rename to PyPDF3/generic.py diff --git a/lib/PyPDF3/merger.py b/PyPDF3/merger.py similarity index 100% rename from lib/PyPDF3/merger.py rename to PyPDF3/merger.py diff --git a/lib/PyPDF3/pagerange.py b/PyPDF3/pagerange.py similarity index 100% rename from lib/PyPDF3/pagerange.py rename to PyPDF3/pagerange.py diff --git a/lib/PyPDF3/pdf.py b/PyPDF3/pdf.py similarity index 100% rename from lib/PyPDF3/pdf.py rename to PyPDF3/pdf.py diff --git a/lib/PyPDF3/utils.py b/PyPDF3/utils.py similarity index 100% rename from lib/PyPDF3/utils.py rename to PyPDF3/utils.py diff --git a/lib/PyPDF3/xmp.py b/PyPDF3/xmp.py similarity index 100% rename from lib/PyPDF3/xmp.py rename to PyPDF3/xmp.py diff --git a/lib/deluge_client/__init__.py b/deluge_client/__init__.py similarity index 100% rename from lib/deluge_client/__init__.py rename to deluge_client/__init__.py diff --git a/lib/deluge_client/rencode.py b/deluge_client/rencode.py similarity index 100% rename from lib/deluge_client/rencode.py rename to deluge_client/rencode.py diff --git a/lazylibrarian/bookwork.py b/lazylibrarian/bookwork.py index 8a70d49c..7a2170a7 100644 --- a/lazylibrarian/bookwork.py +++ b/lazylibrarian/bookwork.py @@ -25,7 +25,7 @@ from lazylibrarian.common import proxy_list, quotes, path_isfile, syspath, remov from lazylibrarian.formatter import safe_unicode, plural, clean_name, format_author_name, \ check_int, replace_all, check_year, get_list, make_utf8bytes, unaccented, thread_name -from lib.thefuzz import fuzz +from thefuzz import fuzz import urllib3 import requests diff --git a/lazylibrarian/calibre.py b/lazylibrarian/calibre.py index f78e493b..8a00754e 100644 --- a/lazylibrarian/calibre.py +++ b/lazylibrarian/calibre.py @@ -20,7 +20,7 @@ from lazylibrarian import logger, database from lazylibrarian.formatter import unaccented, get_list from lazylibrarian.importer import add_author_name_to_db, search_for, import_book from lazylibrarian.librarysync import find_book_in_db -from lib.thefuzz import fuzz +from thefuzz import fuzz from lazylibrarian.common import run_script # calibredb custom_columns diff --git a/lazylibrarian/comicsearch.py b/lazylibrarian/comicsearch.py index 6f7a8276..d6c73fd0 100644 --- a/lazylibrarian/comicsearch.py +++ b/lazylibrarian/comicsearch.py @@ -25,7 +25,7 @@ from lazylibrarian.comicid import cv_identify, cx_identify from lazylibrarian.notifiers import notify_snatch, custom_notify_snatch from lazylibrarian.downloadmethods import nzb_dl_method, tor_dl_method, direct_dl_method -from lib.thefuzz import fuzz +from thefuzz import fuzz # '0': '', '1': '', '2': '', '3': '', '4': '', '5': '', '6': '', '7': '', '8': '', '9': '', diff --git a/lazylibrarian/common.py b/lazylibrarian/common.py index 065b6b12..6f8f42b0 100644 --- a/lazylibrarian/common.py +++ b/lazylibrarian/common.py @@ -1523,12 +1523,8 @@ def log_header(online=True): except ImportError: header += "cryptography Extensions: not found\n" - # noinspection PyBroadException - try: - import lib.thefuzz as fuzz - vers = getattr(fuzz, '__version__', None) - except Exception: - vers = None + import thefuzz as fuzz + vers = getattr(fuzz, '__version__', None) header += "fuzz: %s\n" % vers if vers else 'not found' if vers: # noinspection PyBroadException @@ -1541,30 +1537,17 @@ def log_header(online=True): vers = "not found" header += "Levenshtein: %s\n" % vers - # noinspection PyBroadException + import magic + vers = 'not found' try: - import magic - bundled = False - except Exception: - # noinspection PyBroadException - try: - import lib.magic as magic - bundled = True - except Exception: - magic = None - bundled = False - if magic is None: + if hasattr(magic, "magic_version"): + vers = magic.magic_version() + else: + # noinspection PyProtectedMember + vers = magic.libmagic._name + except AttributeError: vers = 'not found' - else: - try: - if hasattr(magic, "magic_version"): - vers = magic.magic_version() - else: - # noinspection PyProtectedMember - vers = magic.libmagic._name - except AttributeError: - vers = 'not found' - header += "%smagic: %s\n" % ('bundled ' if bundled else '', vers) + header += "magic: %s\n" % vers return header diff --git a/lazylibrarian/downloadmethods.py b/lazylibrarian/downloadmethods.py index 10c804ff..09a16926 100644 --- a/lazylibrarian/downloadmethods.py +++ b/lazylibrarian/downloadmethods.py @@ -17,17 +17,7 @@ import time import unicodedata from base64 import b16encode, b32decode, b64encode from hashlib import sha1 - -# noinspection PyBroadException -try: - # noinspection PyUnresolvedReferences - import magic -except Exception: # magic might fail for multiple reasons - # noinspection PyBroadException - try: - import lib.magic as magic - except Exception: - magic = None +import magic import lazylibrarian from lazylibrarian import logger, database, nzbget, sabnzbd, classes, utorrent, transmission, qbittorrent, \ @@ -41,10 +31,7 @@ from lazylibrarian.postprocess import delete_task, check_contents from lazylibrarian.providers import block_provider from lazylibrarian.ircbot import irc_connect, irc_search -try: - from deluge_client import DelugeRPCClient -except ImportError: - from lib.deluge_client import DelugeRPCClient +from deluge_client import DelugeRPCClient from .magnet2torrent import magnet2torrent from lib.bencode import bencode, bdecode diff --git a/lazylibrarian/gb.py b/lazylibrarian/gb.py index 1537f735..f9863883 100644 --- a/lazylibrarian/gb.py +++ b/lazylibrarian/gb.py @@ -24,11 +24,11 @@ from lazylibrarian.bookwork import get_work_series, get_work_page, delete_empty_ set_series, get_status, thinglang, google_book_dict from lazylibrarian.images import get_book_cover from lazylibrarian.cache import json_request, cache_img -from lazylibrarian.formatter import plural, today, replace_all, unaccented, unaccented_bytes, is_valid_isbn, \ +from lazylibrarian.formatter import plural, today, replace_all, unaccented, is_valid_isbn, \ get_list, clean_name, make_unicode, make_utf8bytes, replace_quotes_with, check_year, thread_name from lazylibrarian.ol import OpenLibrary -from lib.thefuzz import fuzz +from thefuzz import fuzz from urllib.parse import quote, quote_plus, urlencode diff --git a/lazylibrarian/gr.py b/lazylibrarian/gr.py index 6574494a..30dd60c9 100644 --- a/lazylibrarian/gr.py +++ b/lazylibrarian/gr.py @@ -26,7 +26,7 @@ from lazylibrarian.formatter import plural, today, replace_all, book_series, una clean_name, is_valid_isbn, format_author_name, check_int, make_unicode, check_year, check_float, \ make_utf8bytes, thread_name -from lib.thefuzz import fuzz +from thefuzz import fuzz from urllib.parse import quote, quote_plus, urlencode diff --git a/lazylibrarian/images.py b/lazylibrarian/images.py index ed7f9730..3e926c41 100644 --- a/lazylibrarian/images.py +++ b/lazylibrarian/images.py @@ -41,28 +41,8 @@ except ImportError: BaiduImageCrawler = None FlickrImageCrawler = None -try: - # noinspection PyProtectedMember - from PyPDF3 import PdfFileWriter, PdfFileReader -except ImportError: - try: - # noinspection PyProtectedMember - from lib.PyPDF3 import PdfFileWriter, PdfFileReader - except ImportError: - PdfFileWriter = None - PdfFileReader = None - -# noinspection PyBroadException -try: - # noinspection PyUnresolvedReferences - import magic -except Exception: # magic might fail for multiple reasons - # noinspection PyBroadException - try: - import lib.magic as magic - except Exception: - magic = None - +from PyPDF3 import PdfFileWriter, PdfFileReader +import magic GS = '' GS_VER = '' diff --git a/lazylibrarian/importer.py b/lazylibrarian/importer.py index 429fceca..84773cb3 100644 --- a/lazylibrarian/importer.py +++ b/lazylibrarian/importer.py @@ -28,7 +28,7 @@ from lazylibrarian.grsync import grfollow from lazylibrarian.images import get_author_image from lazylibrarian.ol import OpenLibrary -from lib.thefuzz import fuzz +from thefuzz import fuzz from queue import Queue diff --git a/lazylibrarian/librarysync.py b/lazylibrarian/librarysync.py index a13801e8..0eef1422 100644 --- a/lazylibrarian/librarysync.py +++ b/lazylibrarian/librarysync.py @@ -35,7 +35,7 @@ from lazylibrarian.ol import OpenLibrary from lazylibrarian.importer import update_totals, add_author_name_to_db, search_for from lazylibrarian.preprocessor import preprocess_audio -from lib.thefuzz import fuzz +from thefuzz import fuzz from lib.mobi import Mobi from urllib.parse import quote_plus, urlencode diff --git a/lazylibrarian/manualbook.py b/lazylibrarian/manualbook.py index 0ca03307..ed649c60 100644 --- a/lazylibrarian/manualbook.py +++ b/lazylibrarian/manualbook.py @@ -13,10 +13,10 @@ import lazylibrarian from lazylibrarian import logger, database -from lazylibrarian.formatter import get_list, unaccented_bytes, unaccented, plural, date_format +from lazylibrarian.formatter import get_list, unaccented, plural, date_format from lazylibrarian.providers import iterate_over_rss_sites, iterate_over_torrent_sites, iterate_over_newznab_sites, \ iterate_over_direct_sites, iterate_over_irc_sites -from lib.thefuzz import fuzz +from thefuzz import fuzz from urllib.parse import quote_plus, quote diff --git a/lazylibrarian/notifiers/pushbullet2.py b/lazylibrarian/notifiers/pushbullet2.py index 3568dba9..dca3e650 100644 --- a/lazylibrarian/notifiers/pushbullet2.py +++ b/lazylibrarian/notifiers/pushbullet2.py @@ -142,22 +142,9 @@ class PushBullet: """ if not file_type: - # noinspection PyBroadException - try: - # noinspection PyUnresolvedReferences - import magic - except Exception: # magic might fail for multiple reasons - # noinspection PyBroadException - try: - import lib.magic as magic - except Exception: - magic = None - - if magic: - file_type = magic.from_buffer(fobj.read(1024)) - fobj.seek(0) - else: - file_type = "" + import magic + file_type = magic.from_buffer(fobj.read(1024)) + fobj.seek(0) data = {"file_name": file_name, "file_type": file_type} diff --git a/lazylibrarian/ol.py b/lazylibrarian/ol.py index 5decb720..a332c228 100644 --- a/lazylibrarian/ol.py +++ b/lazylibrarian/ol.py @@ -25,7 +25,7 @@ import html5lib from bs4 import BeautifulSoup from urllib.parse import quote_plus from lazylibrarian.images import get_book_cover -from lib.thefuzz import fuzz +from thefuzz import fuzz class OpenLibrary: diff --git a/lazylibrarian/postprocess.py b/lazylibrarian/postprocess.py index 9879d296..ed3a5dbc 100644 --- a/lazylibrarian/postprocess.py +++ b/lazylibrarian/postprocess.py @@ -51,13 +51,8 @@ from lazylibrarian.mailinglist import mailing_list from lazylibrarian.images import create_mag_cover from lazylibrarian.preprocessor import preprocess_ebook, preprocess_audio, preprocess_magazine from lazylibrarian.notifiers import notify_download, custom_notify_download, notify_snatch, custom_notify_snatch - -try: - from deluge_client import DelugeRPCClient -except ImportError: - from lib.deluge_client import DelugeRPCClient - -from lib.thefuzz import fuzz +from deluge_client import DelugeRPCClient +from thefuzz import fuzz def update_downloads(provider): diff --git a/lazylibrarian/preprocessor.py b/lazylibrarian/preprocessor.py index 8527f5ce..4a1b3876 100644 --- a/lazylibrarian/preprocessor.py +++ b/lazylibrarian/preprocessor.py @@ -23,16 +23,7 @@ from lazylibrarian.common import listdir, path_exists, safe_copy, safe_move, rem from lazylibrarian.formatter import get_list, make_unicode, check_int, human_size, now, check_float from lazylibrarian.images import shrink_mag -try: - # noinspection PyProtectedMember - from PyPDF3 import PdfFileWriter, PdfFileReader -except ImportError: - try: - # noinspection PyProtectedMember - from lib.PyPDF3 import PdfFileWriter, PdfFileReader - except ImportError: - PdfFileWriter = None - PdfFileReader = None +from PyPDF3 import PdfFileWriter, PdfFileReader def preprocess_ebook(bookfolder): diff --git a/lazylibrarian/resultlist.py b/lazylibrarian/resultlist.py index ba4212dd..ac9828d3 100644 --- a/lazylibrarian/resultlist.py +++ b/lazylibrarian/resultlist.py @@ -24,7 +24,7 @@ from lazylibrarian.formatter import unaccented, replace_all, get_list, now, chec from lazylibrarian.notifiers import notify_snatch, custom_notify_snatch from lazylibrarian.providers import get_searchterm -from lib.thefuzz import fuzz +from thefuzz import fuzz def process_result_list(resultlist, book, searchtype, source): diff --git a/lazylibrarian/torrentparser.py b/lazylibrarian/torrentparser.py index b25ce891..40942425 100644 --- a/lazylibrarian/torrentparser.py +++ b/lazylibrarian/torrentparser.py @@ -19,7 +19,7 @@ from lazylibrarian.cache import fetch_url from lazylibrarian.formatter import plural, unaccented, make_unicode, size_in_bytes, url_fix, \ replace_all, get_list, month2num, check_year, make_utf8bytes from urllib.parse import quote, urlencode, quote_plus -from lib.thefuzz import fuzz +from thefuzz import fuzz import html5lib from bs4 import BeautifulSoup import lib.feedparser as feedparser diff --git a/lazylibrarian/webServe.py b/lazylibrarian/webServe.py index 7f95f579..34881998 100644 --- a/lazylibrarian/webServe.py +++ b/lazylibrarian/webServe.py @@ -69,16 +69,11 @@ from lazylibrarian.rssfeed import gen_feed from lazylibrarian.searchbook import search_book from lazylibrarian.searchmag import search_magazines, download_maglist from lazylibrarian.searchrss import search_wishlist - -try: - from deluge_client import DelugeRPCClient -except ImportError: - from lib.deluge_client import DelugeRPCClient - +from deluge_client import DelugeRPCClient from mako import exceptions from mako.lookup import TemplateLookup -from lib.thefuzz import fuzz +from thefuzz import fuzz lastauthor = '' lastmagazine = '' diff --git a/lib/deluge_client/client.py b/lib/deluge_client/client.py deleted file mode 100644 index 7eeccbbc..00000000 --- a/lib/deluge_client/client.py +++ /dev/null @@ -1,289 +0,0 @@ -import socket -import ssl -import struct -import warnings -import zlib -import lazylibrarian -from lazylibrarian import logger - -from .rencode import dumps, loads - -RPC_RESPONSE = 1 -RPC_ERROR = 2 -RPC_EVENT = 3 - -MESSAGE_HEADER_SIZE = 5 -READ_SIZE = 10 - -# logger = logging.getLogger(__name__) - - -class DelugeClientException(Exception): - """Base exception for all deluge client exceptions""" - - -class ConnectionLostException(DelugeClientException): - pass - - -class CallTimeoutException(DelugeClientException): - pass - - -class InvalidHeaderException(DelugeClientException): - pass - - -class FailedToReconnectException(DelugeClientException): - pass - - -class RemoteException(DelugeClientException): - pass - - -class DelugeRPCClient(object): - timeout = 20 - - def __init__(self, host, port, username, password, decode_utf8=False, automatic_reconnect=True): - self.host = host - self.port = port - self.username = username - self.password = password - self.deluge_version = None - # This is only applicable if deluge_version is 2 - self.deluge_protocol_version = None - self.daemon_version = None - - self.decode_utf8 = decode_utf8 - if not self.decode_utf8: - warnings.warn('Using `decode_utf8=False` is deprecated, please set it to True.' - 'The argument will be removed in a future release where it will be always True', - DeprecationWarning) - - self.automatic_reconnect = automatic_reconnect - - self.request_id = 1 - self.connected = False - self._socket = None - self._create_socket() - - def _create_socket(self, ssl_version=None): - if ssl_version is not None: - self._socket = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), ssl_version=ssl_version) - else: - self._socket = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) - self._socket.settimeout(self.timeout) - - def connect(self): - """ - Connects to the Deluge instance - """ - self._connect() - if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: - logger.debug('Connected to Deluge, detecting daemon version') - self._detect_deluge_version() - if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: - logger.debug('Daemon version {} detected, logging in'.format(self.deluge_version)) - if self.deluge_version == 2: - result = self.call('daemon.login', self.username, self.password, client_version='deluge-client') - else: - result = self.call('daemon.login', self.username, self.password) - logger.debug('Logged into Deluge with value %r' % result) - self.connected = True - - def _connect(self): - logger.info('Connecting to %s:%s' % (self.host, self.port)) - try: - self._socket.connect((self.host, self.port)) - except ssl.SSLError as e: - # Note: have not verified that we actually get errno 258 for this error - if (hasattr(ssl, 'PROTOCOL_SSLv3') and - (getattr(e, 'reason', None) == 'UNSUPPORTED_PROTOCOL' or e.errno == 258)): - logger.warn('Was unable to ssl handshake, trying to force SSLv3 (insecure)') - self._create_socket(ssl_version=ssl.PROTOCOL_SSLv3) - self._socket.connect((self.host, self.port)) - else: - raise - - def disconnect(self): - """ - Disconnect from deluge - """ - if self.connected: - self._socket.close() - self._socket = None - self.connected = False - - def _detect_deluge_version(self): - if self.deluge_version is not None: - return - - self._send_call(1, None, 'daemon.info') - self._send_call(2, None, 'daemon.info') - self._send_call(2, 1, 'daemon.info') - result = self._socket.recv(1) - if result[:1] == b'D': - # This is a protocol deluge 2.0 was using before release - self.deluge_version = 2 - self.deluge_protocol_version = None - # If we need the specific version of deluge 2, this is it. - self.daemon_version = self._receive_response(2, None, partial_data=result) - elif ord(result[:1]) == 1: - self.deluge_version = 2 - self.deluge_protocol_version = 1 - # If we need the specific version of deluge 2, this is it. - self.daemon_version = self._receive_response(2, 1, partial_data=result) - else: - self.deluge_version = 1 - # Deluge 1 doesn't recover well from the bad request. Re-connect the socket. - self._socket.close() - self._create_socket() - self._connect() - - def _send_call(self, deluge_version, protocol_version, method, *args, **kwargs): - self.request_id += 1 - if method == 'daemon.login': - debug_args = list(args) - if len(debug_args) >= 2: - debug_args[1] = '