Blob Blame History Raw
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)