mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
py3: More unicode_literals and str() porting
This commit is contained in:
parent
d8af514a92
commit
a523330738
@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2011, John Schember <john at nachtimwald.com>'
|
__copyright__ = '2011, John Schember <john at nachtimwald.com>'
|
||||||
@ -17,7 +18,7 @@ from calibre.ebooks.mobi.reader.headers import MetadataHeader
|
|||||||
from calibre.utils.logging import default_log
|
from calibre.utils.logging import default_log
|
||||||
from calibre import prints, fsync
|
from calibre import prints, fsync
|
||||||
from calibre.constants import DEBUG
|
from calibre.constants import DEBUG
|
||||||
from polyglot.builtins import range, as_unicode, as_bytes
|
from polyglot.builtins import range, as_unicode, as_bytes, unicode_type, map
|
||||||
|
|
||||||
|
|
||||||
class APNXBuilder(object):
|
class APNXBuilder(object):
|
||||||
@ -32,7 +33,7 @@ class APNXBuilder(object):
|
|||||||
using either the fast or accurate algorithm.
|
using either the fast or accurate algorithm.
|
||||||
'''
|
'''
|
||||||
import uuid
|
import uuid
|
||||||
apnx_meta = {'guid': str(uuid.uuid4()).replace('-', '')[:8], 'asin':
|
apnx_meta = {'guid': unicode_type(uuid.uuid4()).replace('-', '')[:8], 'asin':
|
||||||
'', 'cdetype': 'EBOK', 'format': 'MOBI_7', 'acr': ''}
|
'', 'cdetype': 'EBOK', 'format': 'MOBI_7', 'acr': ''}
|
||||||
|
|
||||||
with lopen(mobi_file_path, 'rb') as mf:
|
with lopen(mobi_file_path, 'rb') as mf:
|
||||||
@ -52,11 +53,11 @@ class APNXBuilder(object):
|
|||||||
if mh.exth is None or not mh.exth.cdetype:
|
if mh.exth is None or not mh.exth.cdetype:
|
||||||
apnx_meta['cdetype'] = 'EBOK'
|
apnx_meta['cdetype'] = 'EBOK'
|
||||||
else:
|
else:
|
||||||
apnx_meta['cdetype'] = str(mh.exth.cdetype)
|
apnx_meta['cdetype'] = unicode_type(mh.exth.cdetype)
|
||||||
if mh.exth is None or not mh.exth.uuid:
|
if mh.exth is None or not mh.exth.uuid:
|
||||||
apnx_meta['asin'] = ''
|
apnx_meta['asin'] = ''
|
||||||
else:
|
else:
|
||||||
apnx_meta['asin'] = str(mh.exth.uuid)
|
apnx_meta['asin'] = unicode_type(mh.exth.uuid)
|
||||||
|
|
||||||
# Get the pages depending on the chosen parser
|
# Get the pages depending on the chosen parser
|
||||||
pages = []
|
pages = []
|
||||||
@ -113,16 +114,18 @@ class APNXBuilder(object):
|
|||||||
|
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
prints('APNX Content Header:', content_header)
|
prints('APNX Content Header:', content_header)
|
||||||
|
content_header = as_bytes(content_header)
|
||||||
|
page_header = as_bytes(page_header)
|
||||||
|
|
||||||
apnx += struct.pack('>I', 65537)
|
apnx += struct.pack('>I', 65537)
|
||||||
apnx += struct.pack('>I', 12 + len(content_header))
|
apnx += struct.pack('>I', 12 + len(content_header))
|
||||||
apnx += struct.pack('>I', len(content_header))
|
apnx += struct.pack('>I', len(content_header))
|
||||||
apnx += as_bytes(content_header)
|
apnx += content_header
|
||||||
apnx += struct.pack('>H', 1)
|
apnx += struct.pack('>H', 1)
|
||||||
apnx += struct.pack('>H', len(page_header))
|
apnx += struct.pack('>H', len(page_header))
|
||||||
apnx += struct.pack('>H', len(pages))
|
apnx += struct.pack('>H', len(pages))
|
||||||
apnx += struct.pack('>H', 32)
|
apnx += struct.pack('>H', 32)
|
||||||
apnx += as_bytes(page_header)
|
apnx += page_header
|
||||||
|
|
||||||
# Write page values to APNX.
|
# Write page values to APNX.
|
||||||
for page in pages:
|
for page in pages:
|
||||||
@ -234,15 +237,17 @@ class APNXBuilder(object):
|
|||||||
# not modifying the text. In this case the case
|
# not modifying the text. In this case the case
|
||||||
# doesn't matter just the absolute character and
|
# doesn't matter just the absolute character and
|
||||||
# the position within the stream.
|
# the position within the stream.
|
||||||
for c in mr.mobi_html.lower():
|
data = bytearray(as_bytes(mr.mobi_html.lower()))
|
||||||
|
slash, p, lt, gt = map(ord, '/p<>')
|
||||||
|
for c in data:
|
||||||
pos += 1
|
pos += 1
|
||||||
|
|
||||||
# Check if we are starting or stopping a p tag.
|
# Check if we are starting or stopping a p tag.
|
||||||
if check_p:
|
if check_p:
|
||||||
if c == '/':
|
if c == slash:
|
||||||
closing = True
|
closing = True
|
||||||
continue
|
continue
|
||||||
elif c == 'p':
|
elif c == p:
|
||||||
if closing:
|
if closing:
|
||||||
in_p = False
|
in_p = False
|
||||||
else:
|
else:
|
||||||
@ -252,11 +257,11 @@ class APNXBuilder(object):
|
|||||||
closing = False
|
closing = False
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if c == '<':
|
if c == lt:
|
||||||
in_tag = True
|
in_tag = True
|
||||||
check_p = True
|
check_p = True
|
||||||
continue
|
continue
|
||||||
elif c == '>':
|
elif c == gt:
|
||||||
in_tag = False
|
in_tag = False
|
||||||
check_p = False
|
check_p = False
|
||||||
continue
|
continue
|
||||||
@ -287,8 +292,8 @@ class APNXBuilder(object):
|
|||||||
return self.get_pages_fast(mobi_file_path)
|
return self.get_pages_fast(mobi_file_path)
|
||||||
mr.extract_text()
|
mr.extract_text()
|
||||||
|
|
||||||
html = mr.mobi_html.lower()
|
html = as_bytes(mr.mobi_html.lower())
|
||||||
for m in re.finditer('<[^>]*pagebreak[^>]*>', html):
|
for m in re.finditer(b'<[^>]*pagebreak[^>]*>', html):
|
||||||
pages.append(m.end())
|
pages.append(m.end())
|
||||||
|
|
||||||
return pages
|
return pages
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ class Bookmark(): # {{{
|
|||||||
bpar_offset, = unpack('>I', data[0x4e:0x52])
|
bpar_offset, = unpack('>I', data[0x4e:0x52])
|
||||||
lrlo = bpar_offset + 0x0c
|
lrlo = bpar_offset + 0x0c
|
||||||
self.last_read = int(unpack('>I', data[lrlo:lrlo+4])[0])
|
self.last_read = int(unpack('>I', data[lrlo:lrlo+4])[0])
|
||||||
self.last_read_location = self.last_read/MAGIC_MOBI_CONSTANT + 1
|
self.last_read_location = self.last_read // MAGIC_MOBI_CONSTANT + 1
|
||||||
entries, = unpack('>I', data[0x4a:0x4e])
|
entries, = unpack('>I', data[0x4a:0x4e])
|
||||||
|
|
||||||
# Store the annotations/locations
|
# Store the annotations/locations
|
||||||
@ -73,13 +74,13 @@ class Bookmark(): # {{{
|
|||||||
sig = data[eo:eo+4]
|
sig = data[eo:eo+4]
|
||||||
previous_block = None
|
previous_block = None
|
||||||
|
|
||||||
while sig == 'DATA':
|
while sig == b'DATA':
|
||||||
text = None
|
text = None
|
||||||
entry_type = None
|
entry_type = None
|
||||||
rec_len, = unpack('>I', data[eo+4:eo+8])
|
rec_len, = unpack('>I', data[eo+4:eo+8])
|
||||||
if rec_len == 0:
|
if rec_len == 0:
|
||||||
current_block = "empty_data"
|
current_block = "empty_data"
|
||||||
elif data[eo+8:eo+12] == "EBAR":
|
elif data[eo+8:eo+12] == b"EBAR":
|
||||||
current_block = "data_header"
|
current_block = "data_header"
|
||||||
# entry_type = "data_header"
|
# entry_type = "data_header"
|
||||||
location, = unpack('>I', data[eo+0x34:eo+0x38])
|
location, = unpack('>I', data[eo+0x34:eo+0x38])
|
||||||
@ -93,7 +94,7 @@ class Bookmark(): # {{{
|
|||||||
text = data[eo+8:eo+8+rec_len].decode('utf-16-be')
|
text = data[eo+8:eo+8+rec_len].decode('utf-16-be')
|
||||||
|
|
||||||
if entry_type:
|
if entry_type:
|
||||||
displayed_location = location/MAGIC_MOBI_CONSTANT + 1
|
displayed_location = location // MAGIC_MOBI_CONSTANT + 1
|
||||||
user_notes[location] = dict(id=self.id,
|
user_notes[location] = dict(id=self.id,
|
||||||
displayed_location=displayed_location,
|
displayed_location=displayed_location,
|
||||||
type=entry_type,
|
type=entry_type,
|
||||||
@ -104,7 +105,7 @@ class Bookmark(): # {{{
|
|||||||
previous_block = current_block
|
previous_block = current_block
|
||||||
sig = data[eo:eo+4]
|
sig = data[eo:eo+4]
|
||||||
|
|
||||||
while sig == 'BKMK':
|
while sig == b'BKMK':
|
||||||
# Fix start location for Highlights using BKMK data
|
# Fix start location for Highlights using BKMK data
|
||||||
end_loc, = unpack('>I', data[eo+0x10:eo+0x14])
|
end_loc, = unpack('>I', data[eo+0x10:eo+0x14])
|
||||||
|
|
||||||
@ -121,7 +122,7 @@ class Bookmark(): # {{{
|
|||||||
start,
|
start,
|
||||||
start//MAGIC_MOBI_CONSTANT + 1)
|
start//MAGIC_MOBI_CONSTANT + 1)
|
||||||
'''
|
'''
|
||||||
user_notes[start]['displayed_location'] = start/MAGIC_MOBI_CONSTANT + 1
|
user_notes[start]['displayed_location'] = start // MAGIC_MOBI_CONSTANT + 1
|
||||||
user_notes.pop(end_loc)
|
user_notes.pop(end_loc)
|
||||||
else:
|
else:
|
||||||
# If a bookmark coincides with a user annotation, the locs could
|
# If a bookmark coincides with a user annotation, the locs could
|
||||||
@ -129,7 +130,7 @@ class Bookmark(): # {{{
|
|||||||
# Skip bookmark for last_read_location
|
# Skip bookmark for last_read_location
|
||||||
if end_loc != self.last_read:
|
if end_loc != self.last_read:
|
||||||
# print " adding Bookmark at 0x%x (%d)" % (end_loc, end_loc/MAGIC_MOBI_CONSTANT + 1)
|
# print " adding Bookmark at 0x%x (%d)" % (end_loc, end_loc/MAGIC_MOBI_CONSTANT + 1)
|
||||||
displayed_location = end_loc/MAGIC_MOBI_CONSTANT + 1
|
displayed_location = end_loc // MAGIC_MOBI_CONSTANT + 1
|
||||||
user_notes[end_loc - 1] = dict(id=self.id,
|
user_notes[end_loc - 1] = dict(id=self.id,
|
||||||
displayed_location=displayed_location,
|
displayed_location=displayed_location,
|
||||||
type='Bookmark',
|
type='Bookmark',
|
||||||
@ -154,7 +155,7 @@ class Bookmark(): # {{{
|
|||||||
split = my_clippings.find('documents') + len('documents/')
|
split = my_clippings.find('documents') + len('documents/')
|
||||||
my_clippings = my_clippings[:split] + "My Clippings.txt"
|
my_clippings = my_clippings[:split] + "My Clippings.txt"
|
||||||
try:
|
try:
|
||||||
with lopen(my_clippings, 'r') as f2:
|
with io.open(my_clippings, encoding='utf-8', errors='replace') as f2:
|
||||||
marker_found = 0
|
marker_found = 0
|
||||||
text = ''
|
text = ''
|
||||||
search_str1 = '%s' % (mi.title)
|
search_str1 = '%s' % (mi.title)
|
||||||
@ -309,7 +310,7 @@ class Bookmark(): # {{{
|
|||||||
from calibre import plugins
|
from calibre import plugins
|
||||||
try:
|
try:
|
||||||
self.book_length = plugins['pdfreflow'][0].get_numpages(open(book_fs).read())
|
self.book_length = plugins['pdfreflow'][0].get_numpages(open(book_fs).read())
|
||||||
except:
|
except :
|
||||||
pass
|
pass
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, John Schember <john at nachtimwald.com>'
|
__copyright__ = '2009, John Schember <john at nachtimwald.com>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
@ -9,13 +9,13 @@ __docformat__ = 'restructuredtext en'
|
|||||||
Device driver for Amazon's Kindle
|
Device driver for Amazon's Kindle
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import datetime, os, re, sys, json, hashlib, errno
|
import datetime, os, re, json, hashlib, errno
|
||||||
|
|
||||||
from calibre.constants import DEBUG
|
from calibre.constants import DEBUG, filesystem_encoding
|
||||||
from calibre.devices.kindle.bookmark import Bookmark
|
from calibre.devices.kindle.bookmark import Bookmark
|
||||||
from calibre.devices.usbms.driver import USBMS
|
from calibre.devices.usbms.driver import USBMS
|
||||||
from calibre import strftime, fsync, prints
|
from calibre import strftime, fsync, prints
|
||||||
from polyglot.builtins import unicode_type, as_bytes
|
from polyglot.builtins import unicode_type, as_bytes, as_unicode
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Notes on collections:
|
Notes on collections:
|
||||||
@ -111,12 +111,10 @@ class KINDLE(USBMS):
|
|||||||
else:
|
else:
|
||||||
mi = cls.metadata_from_formats([path])
|
mi = cls.metadata_from_formats([path])
|
||||||
if mi.title == _('Unknown') or ('-asin' in mi.title and '-type' in mi.title):
|
if mi.title == _('Unknown') or ('-asin' in mi.title and '-type' in mi.title):
|
||||||
|
path = as_unicode(path, filesystem_encoding, 'replace')
|
||||||
match = cls.WIRELESS_FILE_NAME_PATTERN.match(os.path.basename(path))
|
match = cls.WIRELESS_FILE_NAME_PATTERN.match(os.path.basename(path))
|
||||||
if match is not None:
|
if match is not None:
|
||||||
mi.title = match.group('title')
|
mi.title = match.group('title')
|
||||||
if not isinstance(mi.title, unicode_type):
|
|
||||||
mi.title = mi.title.decode(sys.getfilesystemencoding(),
|
|
||||||
'replace')
|
|
||||||
return mi
|
return mi
|
||||||
|
|
||||||
def get_annotations(self, path_map):
|
def get_annotations(self, path_map):
|
||||||
@ -428,7 +426,7 @@ class KINDLE2(KINDLE):
|
|||||||
for x in items:
|
for x in items:
|
||||||
x = x[-40:]
|
x = x[-40:]
|
||||||
if x not in path_map:
|
if x not in path_map:
|
||||||
path_map[x] = set([])
|
path_map[x] = set()
|
||||||
path_map[x].add(col)
|
path_map[x].add(col)
|
||||||
if path_map:
|
if path_map:
|
||||||
for book in bl:
|
for book in bl:
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, John Schember <john at nachtimwald.com>'
|
__copyright__ = '2009, John Schember <john at nachtimwald.com>'
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
#!/usr/bin/env python2
|
#!/usr/bin/env python2
|
||||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||||
|
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,16 +113,16 @@ class ConnectionListener(Thread):
|
|||||||
try:
|
try:
|
||||||
packet = self.driver.broadcast_socket.recvfrom(100)
|
packet = self.driver.broadcast_socket.recvfrom(100)
|
||||||
remote = packet[1]
|
remote = packet[1]
|
||||||
content_server_port = b''
|
content_server_port = ''
|
||||||
try:
|
try:
|
||||||
from calibre.srv.opts import server_config
|
from calibre.srv.opts import server_config
|
||||||
content_server_port = str(server_config().port)
|
content_server_port = unicode_type(server_config().port)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
message = str(self.driver.ZEROCONF_CLIENT_STRING + b' (on ' +
|
message = (self.driver.ZEROCONF_CLIENT_STRING + ' (on ' +
|
||||||
str(socket.gethostname().partition('.')[0]) +
|
unicode_type(socket.gethostname().partition('.')[0]) +
|
||||||
b');' + content_server_port +
|
');' + content_server_port +
|
||||||
b',' + str(self.driver.port))
|
',' + unicode_type(self.driver.port)).encode('utf-8')
|
||||||
self.driver._debug('received broadcast', packet, message)
|
self.driver._debug('received broadcast', packet, message)
|
||||||
self.driver.broadcast_socket.sendto(message, remote)
|
self.driver.broadcast_socket.sendto(message, remote)
|
||||||
except:
|
except:
|
||||||
@ -234,7 +234,7 @@ class SMART_DEVICE_APP(DeviceConfig, DevicePlugin):
|
|||||||
|
|
||||||
CURRENT_CC_VERSION = 128
|
CURRENT_CC_VERSION = 128
|
||||||
|
|
||||||
ZEROCONF_CLIENT_STRING = b'calibre wireless device client'
|
ZEROCONF_CLIENT_STRING = 'calibre wireless device client'
|
||||||
|
|
||||||
# A few "random" port numbers to use for detecting clients using broadcast
|
# A few "random" port numbers to use for detecting clients using broadcast
|
||||||
# The clients are expected to broadcast a UDP 'hi there' on all of these
|
# The clients are expected to broadcast a UDP 'hi there' on all of these
|
||||||
@ -481,7 +481,7 @@ class SMART_DEVICE_APP(DeviceConfig, DevicePlugin):
|
|||||||
opts = config().parse()
|
opts = config().parse()
|
||||||
if not isinstance(template, unicode_type):
|
if not isinstance(template, unicode_type):
|
||||||
template = template.decode('utf-8')
|
template = template.decode('utf-8')
|
||||||
app_id = str(getattr(mdata, 'application_id', ''))
|
app_id = unicode_type(getattr(mdata, 'application_id', ''))
|
||||||
id_ = mdata.get('id', fname)
|
id_ = mdata.get('id', fname)
|
||||||
extra_components = get_components(template, mdata, id_,
|
extra_components = get_components(template, mdata, id_,
|
||||||
timefmt=opts.send_timefmt, length=maxlen-len(app_id)-1,
|
timefmt=opts.send_timefmt, length=maxlen-len(app_id)-1,
|
||||||
@ -1885,7 +1885,7 @@ class SMART_DEVICE_APP(DeviceConfig, DevicePlugin):
|
|||||||
'between 50 and 99. Forced to be %d.')%self.DEFAULT_THUMBNAIL_COMPRESSION_QUALITY
|
'between 50 and 99. Forced to be %d.')%self.DEFAULT_THUMBNAIL_COMPRESSION_QUALITY
|
||||||
self._debug(message)
|
self._debug(message)
|
||||||
self.set_option('thumbnail_compression_quality',
|
self.set_option('thumbnail_compression_quality',
|
||||||
str(self.DEFAULT_THUMBNAIL_COMPRESSION_QUALITY))
|
unicode_type(self.DEFAULT_THUMBNAIL_COMPRESSION_QUALITY))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user