use unicode_type instead of introspecting type('')

This commit is contained in:
Eli Schwartz 2019-09-02 21:58:27 -04:00 committed by Kovid Goyal
parent 519cf86786
commit c05fdfa1c6
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
42 changed files with 109 additions and 108 deletions

View File

@ -120,16 +120,15 @@ def as_machine_data(book_ids, data, metadata):
def prepare_output_table(fields, book_ids, data, metadata): def prepare_output_table(fields, book_ids, data, metadata):
ans = [] ans = []
u = type('')
for book_id in book_ids: for book_id in book_ids:
row = [] row = []
ans.append(row) ans.append(row)
for field in fields: for field in fields:
if field == 'id': if field == 'id':
row.append(u(book_id)) row.append(unicode_type(book_id))
continue continue
val = data.get(field.replace('*', '#'), {}).get(book_id) val = data.get(field.replace('*', '#'), {}).get(book_id)
row.append(u(val).replace('\n', ' ')) row.append(unicode_type(val).replace('\n', ' '))
return ans return ans

View File

@ -12,7 +12,7 @@ from operator import itemgetter
from calibre.library.field_metadata import fm_as_dict from calibre.library.field_metadata import fm_as_dict
from calibre.db.tests.base import BaseTest from calibre.db.tests.base import BaseTest
from polyglot.builtins import iteritems, range, zip from polyglot.builtins import iteritems, range, unicode_type, zip
from polyglot import reprlib from polyglot import reprlib
# Utils {{{ # Utils {{{
@ -116,7 +116,7 @@ class LegacyTest(BaseTest):
for label, loc in iteritems(db.FIELD_MAP): for label, loc in iteritems(db.FIELD_MAP):
if isinstance(label, numbers.Integral): if isinstance(label, numbers.Integral):
label = '#'+db.custom_column_num_map[label]['label'] label = '#'+db.custom_column_num_map[label]['label']
label = type('')(label) label = unicode_type(label)
ans[label] = tuple(db.get_property(i, index_is_id=True, loc=loc) ans[label] = tuple(db.get_property(i, index_is_id=True, loc=loc)
for i in db.all_ids()) for i in db.all_ids())
if label in ('id', 'title', '#tags'): if label in ('id', 'title', '#tags'):
@ -282,7 +282,7 @@ class LegacyTest(BaseTest):
old = db.get_data_as_dict(prefix='test-prefix') old = db.get_data_as_dict(prefix='test-prefix')
new = ndb.get_data_as_dict(prefix='test-prefix') new = ndb.get_data_as_dict(prefix='test-prefix')
for o, n in zip(old, new): for o, n in zip(old, new):
o = {type('')(k) if isinstance(k, bytes) else k:set(v) if isinstance(v, list) else v for k, v in iteritems(o)} o = {unicode_type(k) if isinstance(k, bytes) else k:set(v) if isinstance(v, list) else v for k, v in iteritems(o)}
n = {k:set(v) if isinstance(v, list) else v for k, v in iteritems(n)} n = {k:set(v) if isinstance(v, list) else v for k, v in iteritems(n)}
self.assertEqual(o, n) self.assertEqual(o, n)

View File

@ -6,7 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
from collections import OrderedDict from collections import OrderedDict
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, unicode_type
class Note(object): class Note(object):
@ -52,8 +52,8 @@ class Footnotes(object):
if note is not None and note.type == 'normal': if note is not None and note.type == 'normal':
self.counter += 1 self.counter += 1
anchor = 'note_%d' % self.counter anchor = 'note_%d' % self.counter
self.notes[anchor] = (type('')(self.counter), note) self.notes[anchor] = (unicode_type(self.counter), note)
return anchor, type('')(self.counter) return anchor, unicode_type(self.counter)
return None, None return None, None
def __iter__(self): def __iter__(self):

View File

@ -9,7 +9,7 @@ from lxml.html.builder import TABLE, TR, TD
from calibre.ebooks.docx.block_styles import inherit, read_shd as rs, read_border, binary_property, border_props, ParagraphStyle, border_to_css from calibre.ebooks.docx.block_styles import inherit, read_shd as rs, read_border, binary_property, border_props, ParagraphStyle, border_to_css
from calibre.ebooks.docx.char_styles import RunStyle from calibre.ebooks.docx.char_styles import RunStyle
from polyglot.builtins import iteritems, itervalues, range, filter from polyglot.builtins import filter, iteritems, itervalues, range, unicode_type
# Read from XML {{{ # Read from XML {{{
read_shd = rs read_shd = rs
@ -646,9 +646,9 @@ class Table(object):
td = TD() td = TD()
style_map[td] = s = self.style_map[tc] style_map[td] = s = self.style_map[tc]
if s.col_span is not inherit: if s.col_span is not inherit:
td.set('colspan', type('')(s.col_span)) td.set('colspan', unicode_type(s.col_span))
if s.row_span is not inherit: if s.row_span is not inherit:
td.set('rowspan', type('')(s.row_span)) td.set('rowspan', unicode_type(s.row_span))
td.tail = '\n\t\t\t' td.tail = '\n\t\t\t'
tr.append(td) tr.append(td)
for x in self.namespace.XPath('./w:p|./w:tbl')(tc): for x in self.namespace.XPath('./w:p|./w:tbl')(tc):

View File

@ -128,7 +128,7 @@ class TextRun(object):
def style_weight(self): def style_weight(self):
ans = 0 ans = 0
for text, preserve_whitespace, bookmark in self.texts: for text, preserve_whitespace, bookmark in self.texts:
if isinstance(text, type('')): if isinstance(text, unicode_type):
ans += len(text) ans += len(text)
return ans return ans

View File

@ -1,14 +1,13 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import re import re
from collections import deque from collections import deque
from calibre.utils.icu import capitalize, lower, upper from calibre.utils.icu import capitalize, lower, upper
from polyglot.builtins import filter from polyglot.builtins import filter, unicode_type
def cap_author_token(token): def cap_author_token(token):
@ -162,9 +161,9 @@ def find_tests():
def run(rules, authors, expected): def run(rules, authors, expected):
if isinstance(rules, dict): if isinstance(rules, dict):
rules = [rules] rules = [rules]
if isinstance(authors, type('')): if isinstance(authors, unicode_type):
authors = [x.strip() for x in authors.split('&')] authors = [x.strip() for x in authors.split('&')]
if isinstance(expected, type('')): if isinstance(expected, unicode_type):
expected = [x.strip() for x in expected.split('&')] expected = [x.strip() for x in expected.split('&')]
ans = map_authors(authors, compile_rules(rules)) ans = map_authors(authors, compile_rules(rules))
self.assertEqual(ans, expected) self.assertEqual(ans, expected)

View File

@ -1,10 +1,11 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
from collections import deque from collections import deque
from polyglot.builtins import filter
from polyglot.builtins import filter, unicode_type
def compile_pat(pat): def compile_pat(pat):
@ -144,9 +145,9 @@ def find_tests():
def run(rules, tags, expected): def run(rules, tags, expected):
if isinstance(rules, dict): if isinstance(rules, dict):
rules = [rules] rules = [rules]
if isinstance(tags, type('')): if isinstance(tags, unicode_type):
tags = [x.strip() for x in tags.split(',')] tags = [x.strip() for x in tags.split(',')]
if isinstance(expected, type('')): if isinstance(expected, unicode_type):
expected = [x.strip() for x in expected.split(',')] expected = [x.strip() for x in expected.split(',')]
ans = map_tags(tags, rules) ans = map_tags(tags, rules)
self.assertEqual(ans, expected) self.assertEqual(ans, expected)

View File

@ -18,7 +18,7 @@ from calibre.ebooks.oeb.base import OEB_STYLES, XHTML, css_text
from calibre.ebooks.oeb.normalize_css import normalizers, DEFAULTS from calibre.ebooks.oeb.normalize_css import normalizers, DEFAULTS
from calibre.ebooks.oeb.stylizer import media_ok, INHERITED from calibre.ebooks.oeb.stylizer import media_ok, INHERITED
from tinycss.fonts3 import serialize_font_family, parse_font_family from tinycss.fonts3 import serialize_font_family, parse_font_family
from polyglot.builtins import iteritems, itervalues from polyglot.builtins import iteritems, itervalues, unicode_type
_html_css_stylesheet = None _html_css_stylesheet = None
@ -233,8 +233,7 @@ _defvals = None
def defvals(): def defvals():
global _defvals global _defvals
if _defvals is None: if _defvals is None:
u = type('') _defvals = {k:Values(Property(k, unicode_type(val)).propertyValue) for k, val in iteritems(DEFAULTS)}
_defvals = {k:Values(Property(k, u(val)).propertyValue) for k, val in iteritems(DEFAULTS)}
return _defvals return _defvals

View File

@ -203,7 +203,7 @@ class NonUTF8(BaseError):
def __call__(self, container): def __call__(self, container):
raw = container.raw_data(self.name) raw = container.raw_data(self.name)
if isinstance(raw, type('')): if isinstance(raw, unicode_type):
raw, changed = replace_encoding_declarations(raw) raw, changed = replace_encoding_declarations(raw)
if changed: if changed:
container.open(self.name, 'wb').write(raw.encode('utf-8')) container.open(self.name, 'wb').write(raw.encode('utf-8'))

View File

@ -14,7 +14,6 @@ import time
import unicodedata import unicodedata
import uuid import uuid
from collections import defaultdict from collections import defaultdict
from polyglot.builtins import iteritems, unicode_type, zip, map
from io import BytesIO from io import BytesIO
from itertools import count from itertools import count
@ -54,6 +53,7 @@ from calibre.utils.filenames import hardlink_file, nlinks_file
from calibre.utils.ipc.simple_worker import WorkerError, fork_job from calibre.utils.ipc.simple_worker import WorkerError, fork_job
from calibre.utils.logging import default_log from calibre.utils.logging import default_log
from calibre.utils.zipfile import ZipFile from calibre.utils.zipfile import ZipFile
from polyglot.builtins import iteritems, map, unicode_type, zip
from polyglot.urllib import urlparse from polyglot.urllib import urlparse
exists, join, relpath = os.path.exists, os.path.join, os.path.relpath exists, join, relpath = os.path.exists, os.path.join, os.path.relpath
@ -672,7 +672,7 @@ class Container(ContainerBase): # {{{
''' The names of all manifest items whose media-type matches predicate. ''' The names of all manifest items whose media-type matches predicate.
`predicate` can be a set, a list, a string or a function taking a single `predicate` can be a set, a list, a string or a function taking a single
argument, which will be called with the media-type. ''' argument, which will be called with the media-type. '''
if isinstance(predicate, type('')): if isinstance(predicate, unicode_type):
predicate = predicate.__eq__ predicate = predicate.__eq__
elif hasattr(predicate, '__contains__'): elif hasattr(predicate, '__contains__'):
predicate = predicate.__contains__ predicate = predicate.__contains__

View File

@ -184,7 +184,7 @@ def split(container, name, loc_or_xpath, before=True, totals=None):
''' '''
root = container.parsed(name) root = container.parsed(name)
if isinstance(loc_or_xpath, type('')): if isinstance(loc_or_xpath, unicode_type):
split_point = root.xpath(loc_or_xpath)[0] split_point = root.xpath(loc_or_xpath)[0]
else: else:
try: try:

View File

@ -15,9 +15,8 @@ import regex
from calibre.ebooks.oeb.base import XHTML, css_text from calibre.ebooks.oeb.base import XHTML, css_text
from calibre.ebooks.oeb.polish.cascade import iterrules, resolve_styles, iterdeclaration from calibre.ebooks.oeb.polish.cascade import iterrules, resolve_styles, iterdeclaration
from calibre.utils.icu import ord_string, safe_chr from calibre.utils.icu import ord_string, safe_chr
from polyglot.builtins import unicode_type from polyglot.builtins import iteritems, itervalues, range, unicode_type
from tinycss.fonts3 import parse_font_family from tinycss.fonts3 import parse_font_family
from polyglot.builtins import iteritems, itervalues, range
def normalize_font_properties(font): def normalize_font_properties(font):
@ -162,7 +161,7 @@ def get_font_dict(elem, resolve_property, pseudo=None):
for p in 'weight', 'style', 'stretch': for p in 'weight', 'style', 'stretch':
p = 'font-' + p p = 'font-' + p
rp = resolve_property(elem, p) if pseudo is None else resolve_property(elem, pseudo, p) rp = resolve_property(elem, p) if pseudo is None else resolve_property(elem, pseudo, p)
ans[p] = type('')(rp[0].value) ans[p] = unicode_type(rp[0].value)
normalize_font_properties(ans) normalize_font_properties(ans)
return ans return ans

View File

@ -12,7 +12,7 @@ from calibre.ptempfile import TemporaryDirectory
from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.utils.logging import DevNull from calibre.utils.logging import DevNull
import calibre.ebooks.oeb.polish.container as pc import calibre.ebooks.oeb.polish.container as pc
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, unicode_type
def get_cache(): def get_cache():
@ -24,7 +24,7 @@ def get_cache():
def needs_recompile(obj, srcs): def needs_recompile(obj, srcs):
if isinstance(srcs, type('')): if isinstance(srcs, unicode_type):
srcs = [srcs] srcs = [srcs]
try: try:
obj_mtime = os.stat(obj).st_mtime obj_mtime = os.stat(obj).st_mtime

View File

@ -18,7 +18,7 @@ from calibre.ebooks.oeb.polish.container import ContainerBase, href_to_name
from calibre.ebooks.oeb.polish.stats import StatsCollector, font_keys, normalize_font_properties, prepare_font_rule from calibre.ebooks.oeb.polish.stats import StatsCollector, font_keys, normalize_font_properties, prepare_font_rule
from calibre.ebooks.oeb.polish.tests.base import BaseTest from calibre.ebooks.oeb.polish.tests.base import BaseTest
from calibre.utils.logging import Log, Stream from calibre.utils.logging import Log, Stream
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, unicode_type
class VirtualContainer(ContainerBase): class VirtualContainer(ContainerBase):
@ -83,7 +83,7 @@ class CascadeTest(BaseTest):
elem = next(select(selector)) elem = next(select(selector))
ans = resolve_property(elem, name) ans = resolve_property(elem, name)
if val is None: if val is None:
val = type('')(DEFAULTS[name]) val = unicode_type(DEFAULTS[name])
self.assertEqual(val, ans.cssText) self.assertEqual(val, ans.cssText)
def test_pseudo_property(select, resolve_pseudo_property, selector, prop, name, val=None, abort_on_missing=False): def test_pseudo_property(select, resolve_pseudo_property, selector, prop, name, val=None, abort_on_missing=False):
@ -94,7 +94,7 @@ class CascadeTest(BaseTest):
self.assertTrue(ans is None) self.assertTrue(ans is None)
return return
if val is None: if val is None:
val = type('')(DEFAULTS[name]) val = unicode_type(DEFAULTS[name])
self.assertEqual(val, ans.cssText) self.assertEqual(val, ans.cssText)
def get_maps(html, styles=None, pseudo=False): def get_maps(html, styles=None, pseudo=False):

View File

@ -64,7 +64,7 @@ def create_epub(manifest, spine=(), guide=(), meta_cover=None, ver=3):
</container>''') </container>''')
zf.writestr('content.opf', opf.encode('utf-8')) zf.writestr('content.opf', opf.encode('utf-8'))
for name, data, properties in manifest: for name, data, properties in manifest:
if isinstance(data, type('')): if isinstance(data, unicode_type):
data = data.encode('utf-8') data = data.encode('utf-8')
zf.writestr(name, data) zf.writestr(name, data)
buf.seek(0) buf.seek(0)

View File

@ -9,7 +9,8 @@ import os
from lxml.html import tostring from lxml.html import tostring
from lxml.html.builder import (HTML, HEAD, BODY, TABLE, TR, TD, H2, STYLE) from lxml.html.builder import (HTML, HEAD, BODY, TABLE, TR, TD, H2, STYLE)
from polyglot.builtins import range
from polyglot.builtins import range, unicode_type
def calculate_page_number(num, map_expression, evaljs): def calculate_page_number(num, map_expression, evaljs):
@ -36,7 +37,7 @@ def convert_node(toc, table, level, pdf, pdf_page_number_map, evaljs):
a = anchors[path] a = anchors[path]
dest = a.get(frag, a[None]) dest = a.get(frag, a[None])
num = calculate_page_number(pdf.page_tree.obj.get_num(dest[0]), pdf_page_number_map, evaljs) num = calculate_page_number(pdf.page_tree.obj.get_num(dest[0]), pdf_page_number_map, evaljs)
tr[1].text = type('')(num) tr[1].text = unicode_type(num)
table.append(tr) table.append(tr)

View File

@ -613,7 +613,7 @@ class ChooseTheme(Dialog):
w.l = l = QGridLayout(w) w.l = l = QGridLayout(w)
def add_row(x, y=None): def add_row(x, y=None):
if isinstance(x, type('')): if isinstance(x, unicode_type):
x = QLabel(x) x = QLabel(x)
row = l.rowCount() row = l.rowCount()
if y is None: if y is None:

View File

@ -21,7 +21,7 @@ from calibre.gui2.widgets2 import Dialog
from calibre.gui2.progress_indicator import ProgressIndicator from calibre.gui2.progress_indicator import ProgressIndicator
from calibre.utils.config import JSONConfig from calibre.utils.config import JSONConfig
from calibre.utils.icu import numeric_sort_key as sort_key from calibre.utils.icu import numeric_sort_key as sort_key
from polyglot.builtins import iteritems, string_or_bytes, range from polyglot.builtins import iteritems, string_or_bytes, range, unicode_type
ENTRY_ROLE = Qt.UserRole ENTRY_ROLE = Qt.UserRole
@ -324,7 +324,7 @@ def choose_program(file_type='jpeg', parent=None, prefs=oprefs):
entry = choose_manually(file_type, parent) if d.select_manually else d.selected_entry entry = choose_manually(file_type, parent) if d.select_manually else d.selected_entry
if entry is not None: if entry is not None:
entry = finalize_entry(entry) entry = finalize_entry(entry)
entry['uuid'] = type('')(uuid.uuid4()) entry['uuid'] = unicode_type(uuid.uuid4())
entries = oprefs['entries'] entries = oprefs['entries']
if oft not in entries: if oft not in entries:
entries[oft] = [] entries[oft] = []

View File

@ -69,7 +69,7 @@ from calibre.utils.config import JSONConfig
from calibre.utils.icu import numeric_sort_key from calibre.utils.icu import numeric_sort_key
from calibre.utils.imghdr import identify from calibre.utils.imghdr import identify
from calibre.utils.tdir_in_cache import tdir_in_cache from calibre.utils.tdir_in_cache import tdir_in_cache
from polyglot.builtins import iteritems, itervalues, string_or_bytes, map from polyglot.builtins import iteritems, itervalues, string_or_bytes, map, unicode_type
from polyglot.urllib import urlparse from polyglot.urllib import urlparse
_diff_dialogs = [] _diff_dialogs = []
@ -376,7 +376,7 @@ class Boss(QObject):
import traceback import traceback
traceback.print_exc() traceback.print_exc()
if ef: if ef:
if isinstance(ef, type('')): if isinstance(ef, unicode_type):
ef = [ef] ef = [ef]
tuple(map(self.gui.file_list.request_edit, ef)) tuple(map(self.gui.file_list.request_edit, ef))
else: else:

View File

@ -112,7 +112,7 @@ def create_anchor_map(root):
def complete_anchor(name, data_conn): def complete_anchor(name, data_conn):
if name not in file_cache: if name not in file_cache:
data = raw = get_data(data_conn, 'file_data', name) data = raw = get_data(data_conn, 'file_data', name)
if isinstance(raw, type('')): if isinstance(raw, unicode_type):
try: try:
root = parse(raw, decoder=lambda x:x.decode('utf-8')) root = parse(raw, decoder=lambda x:x.decode('utf-8'))
except Exception: except Exception:

View File

@ -528,7 +528,7 @@ class DiffSplit(QSplitter): # {{{
def add_diff(self, left_name, right_name, left_text, right_text, context=None, syntax=None, beautify=False): def add_diff(self, left_name, right_name, left_text, right_text, context=None, syntax=None, beautify=False):
left_text, right_text = left_text or '', right_text or '' left_text, right_text = left_text or '', right_text or ''
is_identical = len(left_text) == len(right_text) and left_text == right_text and left_name == right_name is_identical = len(left_text) == len(right_text) and left_text == right_text and left_name == right_name
is_text = isinstance(left_text, type('')) and isinstance(right_text, type('')) is_text = isinstance(left_text, unicode_type) and isinstance(right_text, unicode_type)
left_name = left_name or '[%s]'%_('This file was added') left_name = left_name or '[%s]'%_('This file was added')
right_name = right_name or '[%s]'%_('This file was removed') right_name = right_name or '[%s]'%_('This file was removed')
self.left.headers.append((self.left.blockCount() - 1, left_name)) self.left.headers.append((self.left.blockCount() - 1, left_name))

View File

@ -173,7 +173,7 @@ def snippets(refresh=False):
if _snippets is None or refresh: if _snippets is None or refresh:
_snippets = copy.deepcopy(builtin_snippets) _snippets = copy.deepcopy(builtin_snippets)
for snip in user_snippets.get('snippets', []): for snip in user_snippets.get('snippets', []):
if snip['trigger'] and isinstance(snip['trigger'], type('')): if snip['trigger'] and isinstance(snip['trigger'], unicode_type):
key = snip_key(snip['trigger'], *snip['syntaxes']) key = snip_key(snip['trigger'], *snip['syntaxes'])
_snippets[key] = {'template':snip['template'], 'description':snip['description']} _snippets[key] = {'template':snip['template'], 'description':snip['description']}
_snippets = sorted(iteritems(_snippets), key=(lambda key_snip:string_length(key_snip[0].trigger)), reverse=True) _snippets = sorted(iteritems(_snippets), key=(lambda key_snip:string_length(key_snip[0].trigger)), reverse=True)

View File

@ -66,11 +66,11 @@ class EmbeddingData(Dialog):
text.append('<li style="margin-bottom:2em">' + '<b>' + face['path'] + '</b>') text.append('<li style="margin-bottom:2em">' + '<b>' + face['path'] + '</b>')
name = face.get('full_name') or face.get('family_name') or face.get('subfamily_name') name = face.get('full_name') or face.get('family_name') or face.get('subfamily_name')
if name: if name:
text.append('<br>' + _('Name:') + '\xa0<b>' + type('')(name) + '</b>') text.append('<br>' + _('Name:') + '\xa0<b>' + unicode_type(name) + '</b>')
if 'font-weight' in face: if 'font-weight' in face:
text.append('<br>' + 'font-weight:\xa0' + type('')(face['font-weight'])) text.append('<br>' + 'font-weight:\xa0' + unicode_type(face['font-weight']))
if 'font-style' in face: if 'font-style' in face:
text.append('<br>' + 'font-style:\xa0' + type('')(face['font-style'])) text.append('<br>' + 'font-style:\xa0' + unicode_type(face['font-style']))
self.text.setHtml('\n'.join(text)) self.text.setHtml('\n'.join(text))

View File

@ -166,7 +166,7 @@ class NetworkReply(QNetworkReply):
QTimer.singleShot(0, self.check_for_parse) QTimer.singleShot(0, self.check_for_parse)
else: else:
data = get_data(name) data = get_data(name)
if isinstance(data, type('')): if isinstance(data, unicode_type):
data = data.encode('utf-8') data = data.encode('utf-8')
mime_type += '; charset=utf-8' mime_type += '; charset=utf-8'
self.__data = data self.__data = data

View File

@ -265,7 +265,7 @@ class FilesModel(FileCollection):
return entry.basename return entry.basename
if col == 2: if col == 2:
sz = entry.size / 1024. sz = entry.size / 1024.
return ('%.2f' % sz if int(sz) != sz else type('')(sz)) return ('%.2f' % sz if int(sz) != sz else unicode_type(sz))
if col == 3: if col == 3:
return self.CATEGORY_NAMES.get(entry.category) return self.CATEGORY_NAMES.get(entry.category)
@ -447,9 +447,9 @@ class ImagesModel(FileCollection):
return entry.basename return entry.basename
if col == 1: if col == 1:
sz = entry.size / 1024. sz = entry.size / 1024.
return ('%.2f' % sz if int(sz) != sz else type('')(sz)) return ('%.2f' % sz if int(sz) != sz else unicode_type(sz))
if col == 2: if col == 2:
return type('')(len(entry.usage)) return unicode_type(len(entry.usage))
if col == 3: if col == 3:
return '%d x %d' % (entry.width, entry.height) return '%d x %d' % (entry.width, entry.height)
elif role == Qt.UserRole: elif role == Qt.UserRole:
@ -713,7 +713,7 @@ class WordsModel(FileCollection):
ans += ' (%s)' % entry.locale.countrycode ans += ' (%s)' % entry.locale.countrycode
return ans return ans
if col == 2: if col == 2:
return type('')(len(entry.usage)) return unicode_type(len(entry.usage))
elif role == Qt.UserRole: elif role == Qt.UserRole:
try: try:
return self.files[index.row()] return self.files[index.row()]
@ -802,7 +802,7 @@ class CharsModel(FileCollection):
if col == 2: if col == 2:
return ('U+%04X' if entry.codepoint < 0x10000 else 'U+%06X') % entry.codepoint return ('U+%04X' if entry.codepoint < 0x10000 else 'U+%06X') % entry.codepoint
if col == 3: if col == 3:
return type('')(entry.count) return unicode_type(entry.count)
elif role == Qt.UserRole: elif role == Qt.UserRole:
try: try:
return self.files[index.row()] return self.files[index.row()]

View File

@ -320,7 +320,7 @@ class Main(MainWindow):
toolbar_actions[sid] = ac toolbar_actions[sid] = ac
if target is not None: if target is not None:
ac.triggered.connect(target) ac.triggered.connect(target)
if isinstance(keys, type('')): if isinstance(keys, unicode_type):
keys = (keys,) keys = (keys,)
self.keyboard.register_shortcut( self.keyboard.register_shortcut(
sid, unicode_type(ac.text()).replace('&', ''), default_keys=keys, description=description, action=ac, group=group) sid, unicode_type(ac.text()).replace('&', ''), default_keys=keys, description=description, action=ac, group=group)

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import sys, subprocess, struct, os import sys, subprocess, struct, os
from threading import Thread from threading import Thread
from uuid import uuid4 from uuid import uuid4
@ -59,7 +59,7 @@ def serialize_binary(key, val):
def serialize_string(key, val): def serialize_string(key, val):
key = key.encode('ascii') if not isinstance(key, bytes) else key key = key.encode('ascii') if not isinstance(key, bytes) else key
val = type('')(val).encode('utf-8') val = unicode_type(val).encode('utf-8')
if len(val) > 2**16 - 1: if len(val) > 2**16 - 1:
raise ValueError('%s is too long' % key) raise ValueError('%s is too long' % key)
return struct.pack(b'=B%dsH%ds' % (len(key), len(val)), len(key), key, len(val), val) return struct.pack(b'=B%dsH%ds' % (len(key), len(val)), len(key), key, len(val), val)
@ -198,7 +198,7 @@ def run_file_dialog(
from calibre import prints from calibre import prints
from calibre.constants import DEBUG from calibre.constants import DEBUG
if DEBUG: if DEBUG:
prints('stdout+stderr from file dialog helper:', type('')([h.stdoutdata, h.stderrdata])) prints('stdout+stderr from file dialog helper:', unicode_type([h.stdoutdata, h.stderrdata]))
if h.rc != 0: if h.rc != 0:
raise Exception('File dialog failed (return code %s): %s' % (h.rc, get_errors())) raise Exception('File dialog failed (return code %s): %s' % (h.rc, get_errors()))
@ -211,7 +211,7 @@ def run_file_dialog(
return () return ()
parts = list(filter(None, server.data.split(b'\0'))) parts = list(filter(None, server.data.split(b'\0')))
if DEBUG: if DEBUG:
prints('piped data from file dialog helper:', type('')(parts)) prints('piped data from file dialog helper:', unicode_type(parts))
if len(parts) < 2: if len(parts) < 2:
return () return ()
if parts[0] != secret: if parts[0] != secret:
@ -310,7 +310,7 @@ class PipeServer(Thread):
def as_unicode(err): def as_unicode(err):
try: try:
self.err_msg = type('')(err) self.err_msg = unicode_type(err)
except Exception: except Exception:
self.err_msg = repr(err) self.err_msg = repr(err)
try: try:

View File

@ -15,7 +15,7 @@ from calibre.srv.routes import Router
from calibre.srv.users import UserManager from calibre.srv.users import UserManager
from calibre.utils.date import utcnow from calibre.utils.date import utcnow
from calibre.utils.search_query_parser import ParseException from calibre.utils.search_query_parser import ParseException
from polyglot.builtins import itervalues, filter from polyglot.builtins import itervalues, filter, unicode_type
class Context(object): class Context(object):
@ -148,7 +148,7 @@ class Context(object):
if old is None or old[0] <= db.last_modified(): if old is None or old[0] <= db.last_modified():
categories = db.get_categories(book_ids=restrict_to_ids, sort=opts.sort_by, first_letter_sort=opts.collapse_model == 'first letter') categories = db.get_categories(book_ids=restrict_to_ids, sort=opts.sort_by, first_letter_sort=opts.collapse_model == 'first letter')
data = json.dumps(render(db, categories), ensure_ascii=False) data = json.dumps(render(db, categories), ensure_ascii=False)
if isinstance(data, type('')): if isinstance(data, unicode_type):
data = data.encode('utf-8') data = data.encode('utf-8')
cache[key] = old = (utcnow(), data) cache[key] = old = (utcnow(), data)
if len(cache) > self.CATEGORY_CACHE_SIZE: if len(cache) > self.CATEGORY_CACHE_SIZE:

View File

@ -23,7 +23,7 @@ from calibre.utils.socket_inheritance import set_socket_inherit
from calibre.utils.logging import ThreadSafeLog from calibre.utils.logging import ThreadSafeLog
from calibre.utils.monotonic import monotonic from calibre.utils.monotonic import monotonic
from calibre.utils.mdns import get_external_ip from calibre.utils.mdns import get_external_ip
from polyglot.builtins import iteritems from polyglot.builtins import iteritems, unicode_type
from polyglot.queue import Empty, Full from polyglot.queue import Empty, Full
READ, WRITE, RDWR, WAIT = 'READ', 'WRITE', 'RDWR', 'WAIT' READ, WRITE, RDWR, WAIT = 'READ', 'WRITE', 'RDWR', 'WAIT'
@ -451,7 +451,7 @@ class ServerLoop(object):
self.socket.listen(min(socket.SOMAXCONN, 128)) self.socket.listen(min(socket.SOMAXCONN, 128))
self.bound_address = ba = self.socket.getsockname() self.bound_address = ba = self.socket.getsockname()
if isinstance(ba, tuple): if isinstance(ba, tuple):
ba = ':'.join(map(type(''), ba)) ba = ':'.join(map(unicode_type, ba))
self.pool.start() self.pool.start()
with TemporaryDirectory(prefix='srv-') as tdir: with TemporaryDirectory(prefix='srv-') as tdir:
self.tdir = tdir self.tdir = tdir

View File

@ -143,7 +143,7 @@ class Route(object):
default = self.defaults[name] = eval(default) default = self.defaults[name] = eval(default)
if isinstance(default, numbers.Number): if isinstance(default, numbers.Number):
self.type_checkers[name] = type(default) self.type_checkers[name] = type(default)
if is_sponge and not isinstance(default, type('')): if is_sponge and not isinstance(default, unicode_type):
raise route_error('Soak up path component must have a default value of string type') raise route_error('Soak up path component must have a default value of string type')
else: else:
if found_optional_part is not False: if found_optional_part is not False:

View File

@ -353,25 +353,25 @@ class TestHTTP(BaseTest):
conn = server.connect() conn = server.connect()
conn.request('GET', '/test') conn.request('GET', '/test')
r = conn.getresponse() r = conn.getresponse()
etag = type('')(r.getheader('ETag')) etag = unicode_type(r.getheader('ETag'))
self.assertTrue(etag) self.assertTrue(etag)
self.ae(r.getheader('Content-Type'), guess_type(f.name)[0]) self.ae(r.getheader('Content-Type'), guess_type(f.name)[0])
self.ae(type('')(r.getheader('Accept-Ranges')), 'bytes') self.ae(unicode_type(r.getheader('Accept-Ranges')), 'bytes')
self.ae(int(r.getheader('Content-Length')), len(fdata)) self.ae(int(r.getheader('Content-Length')), len(fdata))
self.ae(r.status, http_client.OK), self.ae(r.read(), fdata) self.ae(r.status, http_client.OK), self.ae(r.read(), fdata)
conn.request('GET', '/test', headers={'Range':'bytes=2-25'}) conn.request('GET', '/test', headers={'Range':'bytes=2-25'})
r = conn.getresponse() r = conn.getresponse()
self.ae(r.status, http_client.PARTIAL_CONTENT) self.ae(r.status, http_client.PARTIAL_CONTENT)
self.ae(type('')(r.getheader('Accept-Ranges')), 'bytes') self.ae(unicode_type(r.getheader('Accept-Ranges')), 'bytes')
self.ae(type('')(r.getheader('Content-Range')), 'bytes 2-25/%d' % len(fdata)) self.ae(unicode_type(r.getheader('Content-Range')), 'bytes 2-25/%d' % len(fdata))
self.ae(int(r.getheader('Content-Length')), 24) self.ae(int(r.getheader('Content-Length')), 24)
self.ae(r.read(), fdata[2:26]) self.ae(r.read(), fdata[2:26])
conn.request('GET', '/test', headers={'Range':'bytes=100000-'}) conn.request('GET', '/test', headers={'Range':'bytes=100000-'})
r = conn.getresponse() r = conn.getresponse()
self.ae(r.status, http_client.REQUESTED_RANGE_NOT_SATISFIABLE) self.ae(r.status, http_client.REQUESTED_RANGE_NOT_SATISFIABLE)
self.ae(type('')(r.getheader('Content-Range')), 'bytes */%d' % len(fdata)) self.ae(unicode_type(r.getheader('Content-Range')), 'bytes */%d' % len(fdata))
conn.request('GET', '/test', headers={'Range':'bytes=25-50', 'If-Range':etag}) conn.request('GET', '/test', headers={'Range':'bytes=25-50', 'If-Range':etag})
r = conn.getresponse() r = conn.getresponse()

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import socket, os, struct, errno, numbers import socket, os, struct, errno, numbers
from collections import deque, namedtuple from collections import deque, namedtuple
from functools import partial from functools import partial
@ -132,7 +132,7 @@ class WSClient(object):
def write_message(self, msg, chunk_size=None): def write_message(self, msg, chunk_size=None):
if isinstance(msg, tuple): if isinstance(msg, tuple):
opcode, msg = msg opcode, msg = msg
if isinstance(msg, type('')): if isinstance(msg, unicode_type):
msg = msg.encode('utf-8') msg = msg.encode('utf-8')
return self.write_frame(1, opcode, msg) return self.write_frame(1, opcode, msg)
w = MessageWriter(msg, self.mask, chunk_size) w = MessageWriter(msg, self.mask, chunk_size)
@ -147,7 +147,7 @@ class WSClient(object):
self.socket.sendall(frame) self.socket.sendall(frame)
def write_close(self, code, reason=b''): def write_close(self, code, reason=b''):
if isinstance(reason, type('')): if isinstance(reason, unicode_type):
reason = reason.encode('utf-8') reason = reason.encode('utf-8')
self.write_frame(1, CLOSE, struct.pack(b'!H', code) + reason) self.write_frame(1, CLOSE, struct.pack(b'!H', code) + reason)

View File

@ -32,7 +32,7 @@ encode_name, decode_name
def http_date(timeval=None): def http_date(timeval=None):
return type('')(formatdate(timeval=timeval, usegmt=True)) return unicode_type(formatdate(timeval=timeval, usegmt=True))
class MultiDict(dict): # {{{ class MultiDict(dict): # {{{

View File

@ -21,6 +21,7 @@ from calibre.srv.loop import (
from calibre.srv.utils import DESIRED_SEND_BUFFER_SIZE from calibre.srv.utils import DESIRED_SEND_BUFFER_SIZE
from calibre.utils.speedups import ReadOnlyFileBuffer from calibre.utils.speedups import ReadOnlyFileBuffer
from polyglot import http_client from polyglot import http_client
from polylot.builtins import unicode_type
from polyglot.binary import as_base64_unicode from polyglot.binary import as_base64_unicode
from polyglot.queue import Empty, Queue from polyglot.queue import Empty, Queue
@ -184,7 +185,7 @@ class ReadFrame(object): # {{{
def create_frame(fin, opcode, payload, mask=None, rsv=0): def create_frame(fin, opcode, payload, mask=None, rsv=0):
if isinstance(payload, type('')): if isinstance(payload, unicode_type):
payload = payload.encode('utf-8') payload = payload.encode('utf-8')
l = len(payload) l = len(payload)
header_len = 2 + (0 if l < 126 else 2 if 126 <= l <= 65535 else 8) + (0 if mask is None else 4) header_len = 2 + (0 if l < 126 else 2 if 126 <= l <= 65535 else 8) + (0 if mask is None else 4)
@ -213,7 +214,7 @@ class MessageWriter(object):
def __init__(self, buf, mask=None, chunk_size=None): def __init__(self, buf, mask=None, chunk_size=None):
self.buf, self.data_type, self.mask = buf, BINARY, mask self.buf, self.data_type, self.mask = buf, BINARY, mask
if isinstance(buf, type('')): if isinstance(buf, unicode_type):
self.buf, self.data_type = ReadOnlyFileBuffer(buf.encode('utf-8')), TEXT self.buf, self.data_type = ReadOnlyFileBuffer(buf.encode('utf-8')), TEXT
elif isinstance(buf, bytes): elif isinstance(buf, bytes):
self.buf = ReadOnlyFileBuffer(buf) self.buf = ReadOnlyFileBuffer(buf)
@ -428,7 +429,7 @@ class WebSocketConnection(HTTPConnection):
self.set_ws_state() self.set_ws_state()
def websocket_close(self, code=NORMAL_CLOSE, reason=b''): def websocket_close(self, code=NORMAL_CLOSE, reason=b''):
if isinstance(reason, type('')): if isinstance(reason, unicode_type):
reason = reason.encode('utf-8') reason = reason.encode('utf-8')
self.stop_reading = True self.stop_reading = True
reason = reason[:123] reason = reason[:123]
@ -493,7 +494,7 @@ class WebSocketConnection(HTTPConnection):
''' Useful for streaming handlers that want to break up messages into ''' Useful for streaming handlers that want to break up messages into
frames themselves. Note that these frames will be interleaved with frames themselves. Note that these frames will be interleaved with
control frames, so they should not be too large. ''' control frames, so they should not be too large. '''
opcode = (TEXT if isinstance(data, type('')) else BINARY) if is_first else CONTINUATION opcode = (TEXT if isinstance(data, unicode_type) else BINARY) if is_first else CONTINUATION
fin = 1 if is_last else 0 fin = 1 if is_last else 0
frame = create_frame(fin, opcode, data) frame = create_frame(fin, opcode, data)
with self.cf_lock: with self.cf_lock:
@ -502,7 +503,7 @@ class WebSocketConnection(HTTPConnection):
def send_websocket_ping(self, data=b''): def send_websocket_ping(self, data=b''):
''' Send a PING to the remote client, it should reply with a PONG which ''' Send a PING to the remote client, it should reply with a PONG which
will be sent to the handle_websocket_pong callback in your handler. ''' will be sent to the handle_websocket_pong callback in your handler. '''
if isinstance(data, type('')): if isinstance(data, unicode_type):
data = data.encode('utf-8') data = data.encode('utf-8')
frame = create_frame(True, PING, data) frame = create_frame(True, PING, data)
with self.cf_lock: with self.cf_lock:

View File

@ -1,8 +1,8 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import os, json, struct, hashlib, sys, errno, tempfile, time, shutil, uuid import os, json, struct, hashlib, sys, errno, tempfile, time, shutil, uuid
from collections import Counter from collections import Counter
@ -25,7 +25,7 @@ def send_file(from_obj, to_obj, chunksize=1<<20):
break break
m.update(raw) m.update(raw)
to_obj.write(raw) to_obj.write(raw)
return type('')(m.hexdigest()) return unicode_type(m.hexdigest())
class FileDest(object): class FileDest(object):
@ -55,7 +55,7 @@ class FileDest(object):
def close(self): def close(self):
if not self._discard: if not self._discard:
size = self.exporter.f.tell() - self.start_pos size = self.exporter.f.tell() - self.start_pos
digest = type('')(self.hasher.hexdigest()) digest = unicode_type(self.hasher.hexdigest())
self.exporter.file_metadata[self.key] = (len(self.exporter.parts), self.start_pos, size, digest, self.mtime) self.exporter.file_metadata[self.key] = (len(self.exporter.parts), self.start_pos, size, digest, self.mtime)
del self.exporter, self.hasher del self.exporter, self.hasher

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015-2019, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2015-2019, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import errno import errno
@ -54,7 +53,7 @@ def get_exe_path(name):
def load_jxr_data(data): def load_jxr_data(data):
with TemporaryDirectory() as tdir: with TemporaryDirectory() as tdir:
if iswindows and isinstance(tdir, type('')): if iswindows and isinstance(tdir, unicode_type):
tdir = tdir.encode('mbcs') tdir = tdir.encode('mbcs')
with lopen(os.path.join(tdir, 'input.jxr'), 'wb') as f: with lopen(os.path.join(tdir, 'input.jxr'), 'wb') as f:
f.write(data) f.write(data)
@ -97,7 +96,7 @@ def image_from_path(path):
def image_from_x(x): def image_from_x(x):
' Create an image from a bytestring or a path or a file like object. ' ' Create an image from a bytestring or a path or a file like object. '
if isinstance(x, type('')): if isinstance(x, unicode_type):
return image_from_path(x) return image_from_path(x)
if hasattr(x, 'read'): if hasattr(x, 'read'):
return image_from_data(x.read()) return image_from_data(x.read())
@ -512,7 +511,7 @@ def run_optimizer(file_path, cmd, as_filter=False, input_data=None):
# encodeable in mbcs, so we fail here, where it is more explicit, # encodeable in mbcs, so we fail here, where it is more explicit,
# instead. # instead.
cmd = [x.encode('mbcs') if isinstance(x, unicode_type) else x for x in cmd] cmd = [x.encode('mbcs') if isinstance(x, unicode_type) else x for x in cmd]
if isinstance(cwd, type('')): if isinstance(cwd, unicode_type):
cwd = cwd.encode('mbcs') cwd = cwd.encode('mbcs')
stdin = subprocess.PIPE if as_filter else None stdin = subprocess.PIPE if as_filter else None
stderr = subprocess.PIPE if as_filter else subprocess.STDOUT stderr = subprocess.PIPE if as_filter else subprocess.STDOUT

View File

@ -1,13 +1,13 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
from struct import unpack, error from struct import unpack, error
import os import os
from calibre.utils.speedups import ReadOnlyFileBuffer from calibre.utils.speedups import ReadOnlyFileBuffer
from calibre.constants import ispy3 from calibre.constants import ispy3
from polyglot.builtins import string_or_bytes from polyglot.builtins import string_or_bytes, unicode_type
""" Recognize image file formats and sizes based on their first few bytes.""" """ Recognize image file formats and sizes based on their first few bytes."""
@ -43,7 +43,7 @@ def identify(src):
recognized. ''' recognized. '''
width = height = -1 width = height = -1
if isinstance(src, type('')): if isinstance(src, unicode_type):
stream = lopen(src, 'rb') stream = lopen(src, 'rb')
elif isinstance(src, bytes): elif isinstance(src, bytes):
stream = ReadOnlyFileBuffer(src) stream = ReadOnlyFileBuffer(src)

View File

@ -13,7 +13,7 @@ from calibre.constants import filesystem_encoding, cache_dir
from calibre.utils.icu import numeric_sort_key as sort_key from calibre.utils.icu import numeric_sort_key as sort_key
from calibre.utils.localization import canonicalize_lang, get_lang from calibre.utils.localization import canonicalize_lang, get_lang
from calibre.utils.serialize import msgpack_dumps, msgpack_loads from calibre.utils.serialize import msgpack_dumps, msgpack_loads
from polyglot.builtins import iteritems, itervalues, string_or_bytes from polyglot.builtins import iteritems, itervalues, string_or_bytes, unicode_type
def parse_localized_key(key): def parse_localized_key(key):
@ -66,7 +66,7 @@ def parse_desktop_file(path):
name, lang = parse_localized_key(k) name, lang = parse_localized_key(k)
if name not in ans: if name not in ans:
ans[name] = {} ans[name] = {}
if isinstance(ans[name], type('')): if isinstance(ans[name], unicode_type):
ans[name] = {None:ans[name]} ans[name] = {None:ans[name]}
ans[name][lang] = v ans[name][lang] = v
else: else:

View File

@ -39,7 +39,7 @@ def update_rapydscript():
base = d(d(d(d(d(abspath(__file__)))))) base = d(d(d(d(d(abspath(__file__))))))
base = os.path.join(base, 'rapydscript') base = os.path.join(base, 'rapydscript')
raw = subprocess.check_output(['node', '--harmony', os.path.join(base, 'bin', 'export')]) raw = subprocess.check_output(['node', '--harmony', os.path.join(base, 'bin', 'export')])
if isinstance(raw, type('')): if isinstance(raw, unicode_type):
raw = raw.encode('utf-8') raw = raw.encode('utf-8')
path = P(COMPILER_PATH, allow_user_override=False) path = P(COMPILER_PATH, allow_user_override=False)
with open(path, 'wb') as f: with open(path, 'wb') as f:
@ -273,7 +273,7 @@ def leading_whitespace(line):
def format_error(data): def format_error(data):
return ':'.join(map(type(''), (data['file'], data['line'], data['col'], data['message']))) return ':'.join(map(unicode_type, (data['file'], data['line'], data['col'], data['message'])))
class Repl(Thread): class Repl(Thread):

View File

@ -1,7 +1,6 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# vim:fileencoding=utf-8 # vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net> # License: GPLv3 Copyright: 2015, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
''' '''
@ -10,6 +9,8 @@ Generate UUID encoded using a user specified alphabet.
import string, math, uuid as _uuid import string, math, uuid as _uuid
from polyglot.builtins import unicode_type
def num_to_string(number, alphabet, alphabet_len, pad_to_length=None): def num_to_string(number, alphabet, alphabet_len, pad_to_length=None):
ans = [] ans = []
@ -35,7 +36,7 @@ class ShortUUID(object):
# We do not include zero and one in the default alphabet as they can be # We do not include zero and one in the default alphabet as they can be
# confused with the letters O and I in some fonts. And removing them # confused with the letters O and I in some fonts. And removing them
# does not change the uuid_pad_len. # does not change the uuid_pad_len.
self.alphabet = tuple(sorted(type('')(alphabet or (string.digits + string.ascii_letters)[2:]))) self.alphabet = tuple(sorted(unicode_type(alphabet or (string.digits + string.ascii_letters)[2:])))
self.alphabet_len = len(self.alphabet) self.alphabet_len = len(self.alphabet)
self.alphabet_map = {c:i for i, c in enumerate(self.alphabet)} self.alphabet_map = {c:i for i, c in enumerate(self.alphabet)}
self.uuid_pad_len = int(math.ceil(math.log(1 << 128, self.alphabet_len))) self.uuid_pad_len = int(math.ceil(math.log(1 << 128, self.alphabet_len)))

View File

@ -8,6 +8,8 @@ __copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
import ctypes, ctypes.wintypes as types, struct, datetime, numbers import ctypes, ctypes.wintypes as types, struct, datetime, numbers
import winerror, win32con import winerror, win32con
from polyglot.builtins import unicode_type
try: try:
import winreg import winreg
except ImportError: except ImportError:
@ -111,11 +113,11 @@ def expand_environment_strings(src):
def convert_to_registry_data(value, has_expansions=False): def convert_to_registry_data(value, has_expansions=False):
if value is None: if value is None:
return None, winreg.REG_NONE, 0 return None, winreg.REG_NONE, 0
if isinstance(value, (type(''), bytes)): if isinstance(value, (unicode_type, bytes)):
buf = ctypes.create_unicode_buffer(value) buf = ctypes.create_unicode_buffer(value)
return buf, (winreg.REG_EXPAND_SZ if has_expansions else winreg.REG_SZ), len(buf) * 2 return buf, (winreg.REG_EXPAND_SZ if has_expansions else winreg.REG_SZ), len(buf) * 2
if isinstance(value, (list, tuple)): if isinstance(value, (list, tuple)):
buf = ctypes.create_unicode_buffer('\0'.join(map(type(''), value)) + '\0\0') buf = ctypes.create_unicode_buffer('\0'.join(map(unicode_type, value)) + '\0\0')
return buf, winreg.REG_MULTI_SZ, len(buf) * 2 return buf, winreg.REG_MULTI_SZ, len(buf) * 2
if isinstance(value, numbers.Integral): if isinstance(value, numbers.Integral):
try: try:

View File

@ -137,7 +137,7 @@ def writefile(path, data, enc='utf-8'):
if enc == undefined: if enc == undefined:
enc = 'utf-8' enc = 'utf-8'
try: try:
if isinstance(data, type('')): if isinstance(data, unicode_type):
data = data.encode(enc or 'utf-8') data = data.encode(enc or 'utf-8')
atomic_write(path, data) atomic_write(path, data)
except UnicodeEncodeError as e: except UnicodeEncodeError as e:
@ -170,8 +170,8 @@ class Function(object):
def to_python(x): def to_python(x):
try: try:
if isinstance(x, (numbers.Number, type(''), bytes, bool)): if isinstance(x, (numbers.Number, unicode_type, bytes, bool)):
if isinstance(x, type('')): if isinstance(x, unicode_type):
x = x.encode('utf-8') x = x.encode('utf-8')
if isinstance(x, numbers.Integral): if isinstance(x, numbers.Integral):
x = int(x) x = int(x)
@ -195,11 +195,11 @@ class JSError(Exception):
if isinstance(e, dict): if isinstance(e, dict):
if 'message' in e: if 'message' in e:
fn, ln = e.get('fileName'), e.get('lineNumber') fn, ln = e.get('fileName'), e.get('lineNumber')
msg = type('')(e['message']) msg = unicode_type(e['message'])
if ln: if ln:
msg = type('')(ln) + ':' + msg msg = unicode_type(ln) + ':' + msg
if fn: if fn:
msg = type('')(fn) + ':' + msg msg = unicode_type(fn) + ':' + msg
Exception.__init__(self, msg) Exception.__init__(self, msg)
for k, v in e.items(): for k, v in e.items():
if k != 'message': if k != 'message':
@ -207,11 +207,11 @@ class JSError(Exception):
else: else:
setattr(self, 'js_message', v) setattr(self, 'js_message', v)
else: else:
Exception.__init__(self, type('')(to_python(e))) Exception.__init__(self, unicode_type(to_python(e)))
else: else:
# Happens if js code throws a string or integer rather than a # Happens if js code throws a string or integer rather than a
# subclass of Error # subclass of Error
Exception.__init__(self, type('')(e)) Exception.__init__(self, unicode_type(e))
self.name = self.js_message = self.fileName = self.lineNumber = self.stack = None self.name = self.js_message = self.fileName = self.lineNumber = self.stack = None
def as_dict(self): def as_dict(self):
@ -246,7 +246,7 @@ def run_in_context(code, ctx, options=None):
except Exception as e: except Exception as e:
import traceback import traceback
traceback.print_exc() traceback.print_exc()
return [False, {'message':type('')(e)}] return [False, {'message':unicode_type(e)}]
return [True, to_python(ans)] return [True, to_python(ans)]