From bd2bab65d246bde867438b958243991c569e21b6 Mon Sep 17 00:00:00 2001
From: Kovid Goyal <kovid@kovidgoyal.net>
Date: Sat, 10 Aug 2019 13:25:22 +0530
Subject: [PATCH 51/71] py3: more future imports
---
src/calibre/gui2/convert/single.py | 42 ++++++++++++++----------------
src/calibre/gui2/main.py | 20 +++++++-------
2 files changed, 30 insertions(+), 32 deletions(-)
diff --git a/src/calibre/gui2/convert/single.py b/src/calibre/gui2/convert/single.py
index eff4cf2ca0..c3db4fff35 100644
--- a/src/calibre/gui2/convert/single.py
+++ b/src/calibre/gui2/convert/single.py
@@ -1,37 +1,35 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
-from __future__ import with_statement
+# License: GPLv3 Copyright: 2009, Kovid Goyal <kovid at kovidgoyal.net>
-__license__ = 'GPL v3'
-__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
-__docformat__ = 'restructuredtext en'
+from __future__ import absolute_import, division, print_function, unicode_literals
import shutil
from PyQt5.Qt import (
- QAbstractListModel, Qt, QFont, QModelIndex, QDialog, QCoreApplication,
- QSize, QDialogButtonBox, QGridLayout, QHBoxLayout, QCheckBox, QLabel,
- QIcon, QComboBox, QListView, QSizePolicy, QSpacerItem, QStackedWidget,
- QVBoxLayout, QFrame, QWidget, QTextEdit, QScrollArea, QRect)
+ QAbstractListModel, QCheckBox, QComboBox, QCoreApplication, QDialog,
+ QDialogButtonBox, QFont, QFrame, QGridLayout, QHBoxLayout, QIcon, QLabel,
+ QListView, QModelIndex, QRect, QScrollArea, QSize, QSizePolicy, QSpacerItem,
+ QStackedWidget, Qt, QTextEdit, QVBoxLayout, QWidget
+)
-from calibre.gui2 import gprefs
+from calibre.customize.conversion import OptionRecommendation
from calibre.ebooks.conversion.config import (
- GuiRecommendations, save_specifics, sort_formats_by_preference, get_input_format_for_book, get_output_formats)
-from calibre.gui2.convert.metadata import MetadataWidget
-from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
+ GuiRecommendations, delete_specifics, get_input_format_for_book,
+ get_output_formats, save_specifics, sort_formats_by_preference
+)
+from calibre.ebooks.conversion.plumber import create_dummy_plumber
+from calibre.gui2 import gprefs
+from calibre.gui2.convert.debug import DebugWidget
from calibre.gui2.convert.heuristics import HeuristicsWidget
-from calibre.gui2.convert.search_and_replace import SearchAndReplaceWidget
+from calibre.gui2.convert.look_and_feel import LookAndFeelWidget
+from calibre.gui2.convert.metadata import MetadataWidget
from calibre.gui2.convert.page_setup import PageSetupWidget
+from calibre.gui2.convert.search_and_replace import SearchAndReplaceWidget
from calibre.gui2.convert.structure_detection import StructureDetectionWidget
from calibre.gui2.convert.toc import TOCWidget
-from calibre.gui2.convert.debug import DebugWidget
-
-
-from calibre.ebooks.conversion.plumber import create_dummy_plumber
-from calibre.ebooks.conversion.config import delete_specifics
-from calibre.customize.conversion import OptionRecommendation
from calibre.utils.config import prefs
-from polyglot.builtins import unicode_type, range
+from polyglot.builtins import native_string_type, range, unicode_type
class GroupModel(QAbstractListModel):
@@ -83,8 +81,8 @@ class Config(QDialog):
preferred_output_format)
self.setup_pipeline()
- self.input_formats.currentIndexChanged[str].connect(self.setup_pipeline)
- self.output_formats.currentIndexChanged[str].connect(self.setup_pipeline)
+ self.input_formats.currentIndexChanged[native_string_type].connect(self.setup_pipeline)
+ self.output_formats.currentIndexChanged[native_string_type].connect(self.setup_pipeline)
self.groups.setSpacing(5)
self.groups.activated[(QModelIndex)].connect(self.show_pane)
self.groups.clicked[(QModelIndex)].connect(self.show_pane)
diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py
index bf82c6b8ab..9ee5b2d9bc 100644
--- a/src/calibre/gui2/main.py
+++ b/src/calibre/gui2/main.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python2
# vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
-from __future__ import print_function
+from __future__ import absolute_import, division, print_function, unicode_literals
import os
import re
@@ -28,7 +28,7 @@ from calibre.utils.config import dynamic, prefs
from calibre.utils.ipc import RC, gui_socket_address
from calibre.utils.lock import singleinstance
from calibre.utils.monotonic import monotonic
-from polyglot.builtins import unicode_type, range, environ_item
+from polyglot.builtins import as_bytes, environ_item, range, unicode_type
if iswindows:
winutil = plugins['winutil'][0]
@@ -71,9 +71,9 @@ def find_portable_library():
return
import glob
candidates = [os.path.basename(os.path.dirname(x)) for x in glob.glob(
- os.path.join(base, u'*%smetadata.db'%os.sep))]
+ os.path.join(base, '*%smetadata.db'%os.sep))]
if not candidates:
- candidates = [u'Calibre Library']
+ candidates = ['Calibre Library']
lp = prefs['library_path']
if not lp:
lib = os.path.join(base, candidates[0])
@@ -134,13 +134,13 @@ def get_default_library_path():
if isinstance(fname, unicode_type):
try:
fname.encode(filesystem_encoding)
- except:
+ except Exception:
fname = 'Calibre Library'
x = os.path.expanduser('~'+os.sep+fname)
if not os.path.exists(x):
try:
os.makedirs(x)
- except:
+ except Exception:
x = os.path.expanduser('~')
return x
@@ -360,8 +360,8 @@ def run_in_debug_mode():
os.close(fd)
os.environ['CALIBRE_RESTARTING_FROM_GUI'] = environ_item('1')
run_calibre_debug(
- '--gui-debug', logpath, stdout=lopen(logpath, 'w'),
- stderr=subprocess.STDOUT, stdin=lopen(os.devnull, 'r'))
+ '--gui-debug', logpath, stdout=lopen(logpath, 'wb'),
+ stderr=subprocess.STDOUT, stdin=lopen(os.devnull, 'rb'))
def shellquote(s):
@@ -478,7 +478,7 @@ def shutdown_other(rc=None):
if rc.conn is None:
prints(_('No running calibre found'))
return # No running instance found
- rc.conn.send('shutdown:')
+ rc.conn.send(b'shutdown:')
prints(_('Shutdown command sent, waiting for shutdown...'))
for i in range(50):
if singleinstance(singleinstance_name):
@@ -496,7 +496,7 @@ def communicate(opts, args):
if len(args) > 1:
args[1:] = [os.path.abspath(x) if os.path.exists(x) else x for x in args[1:]]
import json
- t.conn.send('launched:'+json.dumps(args))
+ t.conn.send(b'launched:'+as_bytes(json.dumps(args)))
t.conn.close()
raise SystemExit(0)