mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
use unicode_type instead of introspecting type('')
This commit is contained in:
parent
519cf86786
commit
c05fdfa1c6
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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'))
|
||||||
|
@ -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__
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@ -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:
|
||||||
|
@ -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] = []
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
@ -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))
|
||||||
|
@ -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)
|
||||||
|
@ -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))
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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()]
|
||||||
|
@ -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)
|
||||||
|
@ -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:
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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()
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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): # {{{
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -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:
|
||||||
|
@ -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):
|
||||||
|
@ -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)))
|
||||||
|
@ -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:
|
||||||
|
@ -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)]
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user