py3: more work toward universal __future__s

This commit is contained in:
Eli Schwartz 2019-08-05 16:14:38 -04:00
parent 1cd54361c0
commit 80beb72b65
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
47 changed files with 257 additions and 223 deletions

View File

@ -1,6 +1,10 @@
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
""" The GUI """
import glob
import os
import signal
@ -354,7 +358,7 @@ def is_widescreen():
global _is_widescreen
if _is_widescreen is None:
try:
_is_widescreen = float(available_width())/available_height() > 1.4
_is_widescreen = available_width()/available_height() > 1.4
except:
_is_widescreen = False
return _is_widescreen
@ -736,7 +740,7 @@ class Translator(QTranslator):
try:
src = unicode_type(args[1])
except:
return u''
return ''
t = _
return t(src)
@ -766,8 +770,8 @@ def load_builtin_fonts():
if fid > -1:
fam = QFontDatabase.applicationFontFamilies(fid)
fam = set(map(unicode_type, fam))
if u'calibre Symbols' in fam:
_rating_font = u'calibre Symbols'
if 'calibre Symbols' in fam:
_rating_font = 'calibre Symbols'
def setup_gui_option_parser(parser):
@ -881,7 +885,7 @@ class Application(QApplication):
self.line_height = max(12, QFontMetrics(self.font()).lineSpacing())
dl = QLocale(get_lang())
if unicode_type(dl.bcp47Name()) != u'C':
if unicode_type(dl.bcp47Name()) != 'C':
QLocale.setDefault(dl)
global gui_thread, qt_app
gui_thread = QThread.currentThread()
@ -978,22 +982,22 @@ class Application(QApplication):
icon_map = self.__icon_map_memory_ = {}
pcache = {}
for k, v in iteritems({
'DialogYesButton': u'ok.png',
'DialogNoButton': u'window-close.png',
'DialogCloseButton': u'window-close.png',
'DialogOkButton': u'ok.png',
'DialogCancelButton': u'window-close.png',
'DialogHelpButton': u'help.png',
'DialogOpenButton': u'document_open.png',
'DialogSaveButton': u'save.png',
'DialogApplyButton': u'ok.png',
'DialogDiscardButton': u'trash.png',
'MessageBoxInformation': u'dialog_information.png',
'MessageBoxWarning': u'dialog_warning.png',
'MessageBoxCritical': u'dialog_error.png',
'MessageBoxQuestion': u'dialog_question.png',
'BrowserReload': u'view-refresh.png',
'LineEditClearButton': u'clear_left.png',
'DialogYesButton': 'ok.png',
'DialogNoButton': 'window-close.png',
'DialogCloseButton': 'window-close.png',
'DialogOkButton': 'ok.png',
'DialogCancelButton': 'window-close.png',
'DialogHelpButton': 'help.png',
'DialogOpenButton': 'document_open.png',
'DialogSaveButton': 'save.png',
'DialogApplyButton': 'ok.png',
'DialogDiscardButton': 'trash.png',
'MessageBoxInformation': 'dialog_information.png',
'MessageBoxWarning': 'dialog_warning.png',
'MessageBoxCritical': 'dialog_error.png',
'MessageBoxQuestion': 'dialog_question.png',
'BrowserReload': 'view-refresh.png',
'LineEditClearButton': 'clear_left.png',
}):
if v not in pcache:
p = I(v)
@ -1242,7 +1246,7 @@ def elided_text(text, font=None, width=300, pos='middle'):
from PyQt5.Qt import QFontMetrics, QApplication
fm = QApplication.fontMetrics() if font is None else (font if isinstance(font, QFontMetrics) else QFontMetrics(font))
delta = 4
ellipsis = u'\u2026'
ellipsis = '\u2026'
def remove_middle(x):
mid = len(x) // 2
@ -1361,7 +1365,7 @@ def set_app_uid(val):
try:
AppUserModelID(unicode_type(val))
except Exception as err:
prints(u'Failed to set app uid with error:', as_unicode(err))
prints('Failed to set app uid with error:', as_unicode(err))
return False
return True

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -19,7 +20,7 @@ from polyglot.builtins import unicode_type, string_or_bytes
def menu_action_unique_name(plugin, unique_name):
return u'%s : menu action : %s'%(plugin.unique_name, unique_name)
return '%s : menu action : %s'%(plugin.unique_name, unique_name)
class InterfaceAction(QObject):
@ -151,7 +152,7 @@ class InterfaceAction(QObject):
bn = self.__class__.__name__
if getattr(self.interface_action_base_plugin, 'name'):
bn = self.interface_action_base_plugin.name
return u'Interface Action: %s (%s)'%(bn, self.name)
return 'Interface Action: %s (%s)'%(bn, self.name)
def create_action(self, spec=None, attr='qaction', shortcut_name=None):
if spec is None:

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
from __future__ import print_function
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
@ -252,7 +252,7 @@ class ChooseLibraryAction(InterfaceAction):
for i in range(5):
ac = self.create_action(spec=('', None, None, None),
attr='switch_action%d'%i)
ac.setObjectName(str(i))
ac.setObjectName(unicode_type(i))
self.switch_actions.append(ac)
ac.setVisible(False)
connect_lambda(ac.triggered, self, lambda self:
@ -329,7 +329,7 @@ class ChooseLibraryAction(InterfaceAction):
self.prev_lname = self.last_lname
self.last_lname = lname
if len(lname) > 16:
lname = lname[:16] + u''
lname = lname[:16] + ''
a = self.qaction
a.setText(lname.replace('&', '&&&')) # I have no idea why this requires a triple ampersand
self.update_tooltip(db.count())

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -648,7 +649,7 @@ class EditMetadataAction(InterfaceAction):
if not dest_mi.comments:
dest_mi.comments = src_mi.comments
else:
dest_mi.comments = unicode_type(dest_mi.comments) + u'\n\n' + unicode_type(src_mi.comments)
dest_mi.comments = unicode_type(dest_mi.comments) + '\n\n' + unicode_type(src_mi.comments)
if src_mi.title and (not dest_mi.title or dest_mi.title == _('Unknown')):
dest_mi.title = src_mi.title
if (src_mi.authors and src_mi.authors[0] != _('Unknown')) and (not dest_mi.authors or dest_mi.authors[0] == _('Unknown')):
@ -701,7 +702,7 @@ class EditMetadataAction(InterfaceAction):
if not dest_value:
db.set_custom(dest_id, src_value, num=colnum)
else:
dest_value = unicode_type(dest_value) + u'\n\n' + unicode_type(src_value)
dest_value = unicode_type(dest_value) + '\n\n' + unicode_type(src_value)
db.set_custom(dest_id, dest_value, num=colnum)
if (dt in {'bool', 'int', 'float', 'rating', 'datetime'} and dest_value is None):
db.set_custom(dest_id, src_value, num=colnum)

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -22,6 +23,3 @@ class HelpAction(InterfaceAction):
def show_help(self, *args):
open_url(QUrl(localize_user_manual_link('https://manual.calibre-ebook.com')))

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -24,5 +25,3 @@ class OpenFolderAction(InterfaceAction):
enabled = loc == 'library'
self.qaction.setEnabled(enabled)
self.menuless_qaction.setEnabled(enabled)

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -19,5 +20,3 @@ class RestartAction(InterfaceAction):
def restart(self, *args):
self.gui.quit(restart=True)

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -7,12 +8,11 @@ __docformat__ = 'restructuredtext en'
import os, numbers
from functools import partial
from polyglot.builtins import itervalues, map
from calibre.utils.config import prefs
from calibre.gui2 import error_dialog, Dispatcher, choose_dir
from calibre.gui2.actions import InterfaceAction
from polyglot.builtins import itervalues, map
class SaveToDiskAction(InterfaceAction):

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,16 +1,17 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
from PyQt5.Qt import QWidget, QListWidgetItem
from calibre.gui2 import gprefs
from calibre.gui2.catalog.catalog_bibtex_ui import Ui_Form
from polyglot.builtins import unicode_type, range
from PyQt5.Qt import QWidget, QListWidgetItem
class PluginWidget(QWidget, Ui_Form):

View File

@ -1,15 +1,16 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
from PyQt5.Qt import QWidget, QListWidgetItem, Qt, QVBoxLayout, QLabel, QListWidget
from calibre.gui2 import gprefs
from calibre.gui2.ui import get_gui
from polyglot.builtins import unicode_type, range
from PyQt5.Qt import QWidget, QListWidgetItem, Qt, QVBoxLayout, QLabel, QListWidget
def get_saved_field_data(name, all_fields):

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import print_function
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
@ -15,7 +15,7 @@ from calibre.gui2 import gprefs, open_url, question_dialog, error_dialog
from calibre.utils.config import JSONConfig
from calibre.utils.icu import sort_key
from calibre.utils.localization import localize_user_manual_link
from polyglot.builtins import unicode_type, zip, range
from polyglot.builtins import native_string_type, unicode_type, zip, range
from .catalog_epub_mobi_ui import Ui_Form
from PyQt5.Qt import (Qt, QAbstractItemView, QCheckBox, QComboBox,
@ -115,7 +115,7 @@ class PluginWidget(QWidget,Ui_Form):
'name':_('Wishlist item'),
'field':_('Tags'),
'pattern':'Wishlist',
'prefix':u'\u00d7'},],
'prefix':'\u00d7'},],
['table_widget','table_widget']))
self.OPTION_FIELDS = option_fields
@ -423,7 +423,7 @@ class PluginWidget(QWidget,Ui_Form):
# Hook Preset signals
self.preset_delete_pb.clicked.connect(self.preset_remove)
self.preset_save_pb.clicked.connect(self.preset_save)
self.preset_field.currentIndexChanged[str].connect(self.preset_change)
self.preset_field.currentIndexChanged[native_string_type].connect(self.preset_change)
self.blocking_all_signals = False
@ -1338,127 +1338,127 @@ class PrefixRules(GenericRulesTable):
# Create a list of prefixes for user selection
raw_prefix_list = [
('Ampersand',u'&'),
('Angle left double',u'\u00ab'),
('Angle left',u'\u2039'),
('Angle right double',u'\u00bb'),
('Angle right',u'\u203a'),
('Arrow carriage return',u'\u21b5'),
('Arrow double',u'\u2194'),
('Arrow down',u'\u2193'),
('Arrow left',u'\u2190'),
('Arrow right',u'\u2192'),
('Arrow up',u'\u2191'),
('Asterisk',u'*'),
('At sign',u'@'),
('Bullet smallest',u'\u22c5'),
('Bullet small',u'\u00b7'),
('Bullet',u'\u2022'),
('Cards clubs',u'\u2663'),
('Cards diamonds',u'\u2666'),
('Cards hearts',u'\u2665'),
('Cards spades',u'\u2660'),
('Caret',u'^'),
('Checkmark',u'\u2713'),
('Copyright circle c',u'\u00a9'),
('Copyright circle r',u'\u00ae'),
('Copyright trademark',u'\u2122'),
('Currency cent',u'\u00a2'),
('Currency dollar',u'$'),
('Currency euro',u'\u20ac'),
('Currency pound',u'\u00a3'),
('Currency yen',u'\u00a5'),
('Dagger double',u'\u2021'),
('Dagger',u'\u2020'),
('Degree',u'\u00b0'),
('Dots3',u'\u2234'),
('Hash',u'#'),
('Infinity',u'\u221e'),
('Lozenge',u'\u25ca'),
('Math divide',u'\u00f7'),
('Math empty',u'\u2205'),
('Math equals',u'='),
('Math minus',u'\u2212'),
('Math plus circled',u'\u2295'),
('Math times circled',u'\u2297'),
('Math times',u'\u00d7'),
('Paragraph',u'\u00b6'),
('Percent',u'%'),
('Plus-or-minus',u'\u00b1'),
('Plus',u'+'),
('Punctuation colon',u':'),
('Punctuation colon-semi',u';'),
('Punctuation exclamation',u'!'),
('Punctuation question',u'?'),
('Punctuation period',u'.'),
('Punctuation slash back',u'\\'),
('Punctuation slash forward',u'/'),
('Section',u'\u00a7'),
('Tilde',u'~'),
('Vertical bar',u'|'),
('Vertical bar broken',u'\u00a6'),
('_0',u'0'),
('_1',u'1'),
('_2',u'2'),
('_3',u'3'),
('_4',u'4'),
('_5',u'5'),
('_6',u'6'),
('_7',u'7'),
('_8',u'8'),
('_9',u'9'),
('_A',u'A'),
('_B',u'B'),
('_C',u'C'),
('_D',u'D'),
('_E',u'E'),
('_F',u'F'),
('_G',u'G'),
('_H',u'H'),
('_I',u'I'),
('_J',u'J'),
('_K',u'K'),
('_L',u'L'),
('_M',u'M'),
('_N',u'N'),
('_O',u'O'),
('_P',u'P'),
('_Q',u'Q'),
('_R',u'R'),
('_S',u'S'),
('_T',u'T'),
('_U',u'U'),
('_V',u'V'),
('_W',u'W'),
('_X',u'X'),
('_Y',u'Y'),
('_Z',u'Z'),
('_a',u'a'),
('_b',u'b'),
('_c',u'c'),
('_d',u'd'),
('_e',u'e'),
('_f',u'f'),
('_g',u'g'),
('_h',u'h'),
('_i',u'i'),
('_j',u'j'),
('_k',u'k'),
('_l',u'l'),
('_m',u'm'),
('_n',u'n'),
('_o',u'o'),
('_p',u'p'),
('_q',u'q'),
('_r',u'r'),
('_s',u's'),
('_t',u't'),
('_u',u'u'),
('_v',u'v'),
('_w',u'w'),
('_x',u'x'),
('_y',u'y'),
('_z',u'z'),
('Ampersand', '&'),
('Angle left double', '\u00ab'),
('Angle left', '\u2039'),
('Angle right double', '\u00bb'),
('Angle right', '\u203a'),
('Arrow carriage return', '\u21b5'),
('Arrow double', '\u2194'),
('Arrow down', '\u2193'),
('Arrow left', '\u2190'),
('Arrow right', '\u2192'),
('Arrow up', '\u2191'),
('Asterisk', '*'),
('At sign', '@'),
('Bullet smallest', '\u22c5'),
('Bullet small', '\u00b7'),
('Bullet', '\u2022'),
('Cards clubs', '\u2663'),
('Cards diamonds', '\u2666'),
('Cards hearts', '\u2665'),
('Cards spades', '\u2660'),
('Caret', '^'),
('Checkmark', '\u2713'),
('Copyright circle c', '\u00a9'),
('Copyright circle r', '\u00ae'),
('Copyright trademark', '\u2122'),
('Currency cent', '\u00a2'),
('Currency dollar', '$'),
('Currency euro', '\u20ac'),
('Currency pound', '\u00a3'),
('Currency yen', '\u00a5'),
('Dagger double', '\u2021'),
('Dagger', '\u2020'),
('Degree', '\u00b0'),
('Dots3', '\u2234'),
('Hash', '#'),
('Infinity', '\u221e'),
('Lozenge', '\u25ca'),
('Math divide', '\u00f7'),
('Math empty', '\u2205'),
('Math equals', '='),
('Math minus', '\u2212'),
('Math plus circled', '\u2295'),
('Math times circled', '\u2297'),
('Math times', '\u00d7'),
('Paragraph', '\u00b6'),
('Percent', '%'),
('Plus-or-minus', '\u00b1'),
('Plus', '+'),
('Punctuation colon', ':'),
('Punctuation colon-semi', ';'),
('Punctuation exclamation', '!'),
('Punctuation question', '?'),
('Punctuation period', '.'),
('Punctuation slash back', '\\'),
('Punctuation slash forward', '/'),
('Section', '\u00a7'),
('Tilde', '~'),
('Vertical bar', '|'),
('Vertical bar broken', '\u00a6'),
('_0', '0'),
('_1', '1'),
('_2', '2'),
('_3', '3'),
('_4', '4'),
('_5', '5'),
('_6', '6'),
('_7', '7'),
('_8', '8'),
('_9', '9'),
('_A', 'A'),
('_B', 'B'),
('_C', 'C'),
('_D', 'D'),
('_E', 'E'),
('_F', 'F'),
('_G', 'G'),
('_H', 'H'),
('_I', 'I'),
('_J', 'J'),
('_K', 'K'),
('_L', 'L'),
('_M', 'M'),
('_N', 'N'),
('_O', 'O'),
('_P', 'P'),
('_Q', 'Q'),
('_R', 'R'),
('_S', 'S'),
('_T', 'T'),
('_U', 'U'),
('_V', 'V'),
('_W', 'W'),
('_X', 'X'),
('_Y', 'Y'),
('_Z', 'Z'),
('_a', 'a'),
('_b', 'b'),
('_c', 'c'),
('_d', 'd'),
('_e', 'e'),
('_f', 'f'),
('_g', 'g'),
('_h', 'h'),
('_i', 'i'),
('_j', 'j'),
('_k', 'k'),
('_l', 'l'),
('_m', 'm'),
('_n', 'n'),
('_o', 'o'),
('_p', 'p'),
('_q', 'q'),
('_r', 'r'),
('_s', 's'),
('_t', 't'),
('_u', 'u'),
('_v', 'v'),
('_w', 'w'),
('_x', 'x'),
('_y', 'y'),
('_z', 'z'),
]
raw_prefix_list = sorted(raw_prefix_list, key=prefix_sorter)
self.prefix_list = [x[1] for x in raw_prefix_list]

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
@ -338,7 +339,7 @@ class EditorWidget(QWebView, LineEditECM): # {{{
@property
def html(self):
ans = u''
ans = ''
try:
if not self.page().mainFrame().documentElement().findFirst('meta[name="calibre-dont-sanitize"]').isNull():
# Bypass cleanup if special meta tag exists
@ -364,9 +365,9 @@ class EditorWidget(QWebView, LineEditECM): # {{{
x.tag not in ('script', 'style')]
if len(elems) > 1:
ans = u'<div>%s</div>'%(u''.join(elems))
ans = '<div>%s</div>'%(''.join(elems))
else:
ans = u''.join(elems)
ans = ''.join(elems)
if not ans.startswith('<'):
ans = '<p>%s</p>'%ans
ans = xml_replace_entities(ans)
@ -482,7 +483,7 @@ class Highlighter(QSyntaxHighlighter):
if state == State_Comment:
start = pos
while pos < len_:
if text[pos:pos+3] == u"-->":
if text[pos:pos+3] == "-->":
pos += 3
state = State_Text
break
@ -495,7 +496,7 @@ class Highlighter(QSyntaxHighlighter):
while pos < len_:
ch = text[pos]
pos += 1
if ch == u'>':
if ch == '>':
state = State_Text
break
self.setFormat(start, pos - start, self.colors['doctype'])
@ -506,7 +507,7 @@ class Highlighter(QSyntaxHighlighter):
while pos < len_:
ch = text[pos]
pos += 1
if ch == u'>':
if ch == '>':
state = State_Text
break
if not ch.isspace():
@ -524,7 +525,7 @@ class Highlighter(QSyntaxHighlighter):
pos -= 1
state = State_InsideTag
break
if ch == u'>':
if ch == '>':
state = State_Text
break
self.setFormat(start, pos - start, self.colors['tag'])
@ -537,10 +538,10 @@ class Highlighter(QSyntaxHighlighter):
ch = text[pos]
pos += 1
if ch == u'/':
if ch == '/':
continue
if ch == u'>':
if ch == '>':
state = State_Text
break
@ -557,11 +558,11 @@ class Highlighter(QSyntaxHighlighter):
ch = text[pos]
pos += 1
if ch == u'=':
if ch == '=':
state = State_AttributeValue
break
if ch in (u'>', u'/'):
if ch in ('>', '/'):
state = State_InsideTag
break
@ -577,12 +578,12 @@ class Highlighter(QSyntaxHighlighter):
pos += 1
# handle opening single quote
if ch == u"'":
if ch == "'":
state = State_SingleQuote
break
# handle opening double quote
if ch == u'"':
if ch == '"':
state = State_DoubleQuote
break
@ -597,7 +598,7 @@ class Highlighter(QSyntaxHighlighter):
ch = text[pos]
if ch.isspace():
break
if ch in (u'>', u'/'):
if ch in ('>', '/'):
break
pos += 1
state = State_InsideTag
@ -610,7 +611,7 @@ class Highlighter(QSyntaxHighlighter):
while pos < len_:
ch = text[pos]
pos += 1
if ch == u"'":
if ch == "'":
break
state = State_InsideTag
@ -624,7 +625,7 @@ class Highlighter(QSyntaxHighlighter):
while pos < len_:
ch = text[pos]
pos += 1
if ch == u'"':
if ch == '"':
break
state = State_InsideTag
@ -635,18 +636,18 @@ class Highlighter(QSyntaxHighlighter):
# State_Text and default
while pos < len_:
ch = text[pos]
if ch == u'<':
if text[pos:pos+4] == u"<!--":
if ch == '<':
if text[pos:pos+4] == "<!--":
state = State_Comment
else:
if text[pos:pos+9].upper() == u"<!DOCTYPE":
if text[pos:pos+9].upper() == "<!DOCTYPE":
state = State_DocType
else:
state = State_TagStart
break
elif ch == u'&':
elif ch == '&':
start = pos
while pos < len_ and text[pos] != u';':
while pos < len_ and text[pos] != ';':
self.setFormat(start, pos - start,
self.colors['entity'])
pos += 1

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL 3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>'

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL 3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>'

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL 3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>'

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL 3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>'

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL 3'
__copyright__ = '2009, John Schember <john@nachtimwald.com>'

View File

@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'

View File

@ -1,4 +1,5 @@
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
@ -34,7 +35,7 @@ from calibre.utils.config import tweaks, device_prefs
from calibre.utils.img import scale_image
from calibre.library.save_to_disk import find_plugboard
from calibre.ptempfile import PersistentTemporaryFile, force_unicode as filename_to_unicode
from polyglot.builtins import unicode_type, string_or_bytes
from polyglot.builtins import unicode_type, string_or_unicode
from polyglot import queue
# }}}
@ -209,7 +210,7 @@ class DeviceManager(Thread): # {{{
tb = traceback.format_exc()
if DEBUG or tb not in self.reported_errors:
self.reported_errors.add(tb)
prints('Unable to open device', str(dev))
prints('Unable to open device', unicode_type(dev))
prints(tb)
continue
self.after_device_connect(dev, device_kind)
@ -472,7 +473,7 @@ class DeviceManager(Thread): # {{{
info = self.device.get_device_information(end_session=False)
if len(info) < 5:
info = tuple(list(info) + [{}])
info = [i.replace('\x00', '').replace('\x01', '') if isinstance(i, string_or_bytes) else i
info = [i.replace('\x00', '').replace('\x01', '') if isinstance(i, string_or_unicode) else i
for i in info]
cp = self.device.card_prefix(end_session=False)
fs = self.device.free_space()
@ -604,7 +605,7 @@ class DeviceManager(Thread): # {{{
metadata=None, plugboards=None, add_as_step_to_job=None):
desc = ngettext('Upload one book to the device', 'Upload {} books to the device', len(names)).format(len(names))
if titles:
desc += u': ' + u', '.join(titles)
desc += ': ' + ', '.join(titles)
return self.create_job_step(self._upload_books, done, to_job=add_as_step_to_job,
args=[files, names],
kwargs={'on_card':on_card,'metadata':metadata,'plugboards':plugboards}, description=desc)
@ -930,7 +931,7 @@ class DeviceMixin(object): # {{{
d.show()
def auto_convert_question(self, msg, autos):
autos = u'\n'.join(map(unicode_type, map(force_unicode, autos)))
autos = '\n'.join(map(unicode_type, map(force_unicode, autos)))
return self.ask_a_yes_no_question(
_('No suitable formats'), msg,
ans_when_user_unavailable=True,
@ -1627,7 +1628,7 @@ class DeviceMixin(object): # {{{
if job.exception is not None:
if isinstance(job.exception, FreeSpaceError):
where = 'in main memory.' if 'memory' in str(job.exception) \
where = 'in main memory.' if 'memory' in unicode_type(job.exception) \
else 'on the storage card.'
titles = '\n'.join(['<li>'+mi.title+'</li>'
for mi in metadata])

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
@ -44,7 +44,7 @@ class DBUSNotifier(Notifier):
self._notify = dbus.Interface(session_bus.get_object(server, path), interface)
except Exception as err:
self.ok = False
self.err = str(err)
self.err = unicode_type(err)
if DEBUG:
prints(server, 'found' if self.ok else 'not found', 'in', '%.1f' % (time.time() - start), 'seconds')

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python2
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
@ -20,7 +20,7 @@ from calibre.gui2.dialogs.confirm_delete import confirm
from calibre.gui2.dialogs.saved_search_editor import SavedSearchEditor
from calibre.gui2.dialogs.search import SearchDialog
from calibre.utils.icu import primary_sort_key
from polyglot.builtins import unicode_type, string_or_bytes, map, range
from polyglot.builtins import native_string_type, unicode_type, string_or_bytes, map, range
QT_HIDDEN_CLEAR_ACTION = '_q_qlineeditclearaction'
@ -119,11 +119,11 @@ class SearchBox2(QComboBox): # {{{
c = self.line_edit.completer()
c.setCompletionMode(c.PopupCompletion)
c.highlighted[str].connect(self.completer_used)
c.highlighted[native_string_type].connect(self.completer_used)
self.line_edit.key_pressed.connect(self.key_pressed, type=Qt.DirectConnection)
# QueuedConnection as workaround for https://bugreports.qt-project.org/browse/QTBUG-40807
self.activated[str].connect(self.history_selected, type=Qt.QueuedConnection)
self.activated[native_string_type].connect(self.history_selected, type=Qt.QueuedConnection)
self.setEditable(True)
self.as_you_type = True
self.timer = QTimer()
@ -272,7 +272,7 @@ class SearchBox2(QComboBox): # {{{
def set_search_string(self, txt, store_in_history=False, emit_changed=True):
if not store_in_history:
self.activated[str].disconnect()
self.activated[native_string_type].disconnect()
try:
self.setFocus(Qt.OtherFocusReason)
if not txt:

View File

@ -1,4 +1,6 @@
#!/usr/bin/env python2
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'

View File

@ -1,4 +1,5 @@
from __future__ import print_function
from __future__ import absolute_import, division, print_function, unicode_literals
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
'''
@ -23,7 +24,7 @@ from calibre.gui2.progress_indicator import ProgressIndicator as _ProgressIndica
from calibre.gui2.dnd import (dnd_has_image, dnd_get_image, dnd_get_files,
image_extensions, dnd_has_extension, DownloadDialog)
from calibre.utils.localization import localize_user_manual_link
from polyglot.builtins import unicode_type, range
from polyglot.builtins import native_string_type, unicode_type, range
history = XMLConfig('history')
@ -45,11 +46,11 @@ class ProgressIndicator(QWidget): # {{{
pwidth, pheight = view.size().width(), view.size().height()
self.resize(pwidth, min(pheight, 250))
if self.pos is None:
self.move(0, (pheight-self.size().height())/2.)
self.move(0, (pheight-self.size().height())/2)
else:
self.move(self.pos[0], self.pos[1])
self.pi.resize(self.pi.sizeHint())
self.pi.move(int((self.size().width()-self.pi.size().width())/2.), 0)
self.pi.move(int((self.size().width()-self.pi.size().width())//2), 0)
self.status.resize(self.size().width(), self.size().height()-self.pi.size().height()-10)
self.status.move(0, self.pi.size().height()+10)
self.status.setText('<h1>'+msg+'</h1>')
@ -137,7 +138,7 @@ class FilenamePattern(QWidget, Ui_Form): # {{{
self.series.setText(_('No match'))
if mi.series_index is not None:
self.series_index.setText(str(mi.series_index))
self.series_index.setText(unicode_type(mi.series_index))
else:
self.series_index.setText(_('No match'))
@ -151,7 +152,7 @@ class FilenamePattern(QWidget, Ui_Form): # {{{
else:
self.pubdate.setText(_('No match'))
self.isbn.setText(_('No match') if mi.isbn is None else str(mi.isbn))
self.isbn.setText(_('No match') if mi.isbn is None else unicode_type(mi.isbn))
self.comments.setText(mi.comments if mi.comments else _('No match'))
def pattern(self):
@ -304,7 +305,7 @@ def draw_size(p, rect, w, h):
f = p.font()
f.setBold(True)
p.setFont(f)
sz = u'\u00a0%d x %d\u00a0'%(w, h)
sz = '\u00a0%d x %d\u00a0'%(w, h)
flags = Qt.AlignBottom|Qt.AlignRight|Qt.TextSingleLine
szrect = p.boundingRect(rect, flags, sz)
p.fillRect(szrect.adjusted(0, 0, 0, 4), QColor(0, 0, 0, 200))
@ -369,8 +370,8 @@ class ImageView(QWidget, ImageDropMixin):
pmap = pmap.scaled(int(nw*pmap.devicePixelRatio()), int(nh*pmap.devicePixelRatio()), Qt.IgnoreAspectRatio,
Qt.SmoothTransformation)
w, h = int(pmap.width()/pmap.devicePixelRatio()), int(pmap.height()/pmap.devicePixelRatio())
x = int(abs(cw - w)/2.)
y = int(abs(ch - h)/2.)
x = int(abs(cw - w)//2)
y = int(abs(ch - h)//2)
target = QRect(x, y, w, h)
p = QPainter(self)
p.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform)
@ -570,7 +571,7 @@ class CompleteLineEdit(EnLineEdit): # {{{
self.completer = ItemsCompleter(self, complete_items)
self.completer.setCaseSensitivity(Qt.CaseInsensitive)
self.completer.activated[str].connect(self.complete_text)
self.completer.activated[native_string_type].connect(self.complete_text)
self.completer.setWidget(self)
@ -888,13 +889,13 @@ class PythonHighlighter(QSyntaxHighlighter): # {{{
self.setFormat(0, textLength,
PythonHighlighter.Formats["normal"])
if text.startswith(u"Traceback") or text.startswith(u"Error: "):
if text.startswith("Traceback") or text.startswith("Error: "):
self.setCurrentBlockState(ERROR)
self.setFormat(0, textLength,
PythonHighlighter.Formats["error"])
return
if prevState == ERROR and \
not (text.startswith(u'>>>') or text.startswith(u"#")):
not (text.startswith('>>>') or text.startswith("#")):
self.setCurrentBlockState(ERROR)
self.setFormat(0, textLength,
PythonHighlighter.Formats["error"])
@ -913,18 +914,18 @@ class PythonHighlighter(QSyntaxHighlighter): # {{{
# PythonHighlighter.Rules.append((QRegExp(r"#.*"), "comment"))
if not text:
pass
elif text[0] == u"#":
elif text[0] == "#":
self.setFormat(0, len(text),
PythonHighlighter.Formats["comment"])
else:
stack = []
for i, c in enumerate(text):
if c in (u'"', u"'"):
if c in ('"', "'"):
if stack and stack[-1] == c:
stack.pop()
else:
stack.append(c)
elif c == u"#" and len(stack) == 0:
elif c == "#" and len(stack) == 0:
self.setFormat(i, len(text),
PythonHighlighter.Formats["comment"])
break