mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use os.path.relpath instead of custom implementation
This commit is contained in:
parent
bae243edce
commit
654dfbdf2c
@ -284,39 +284,7 @@ def launch(path_or_url):
|
||||
path_or_url = 'file:'+path_or_url
|
||||
QDesktopServices.openUrl(QUrl(path_or_url))
|
||||
|
||||
def relpath(target, base=os.curdir):
|
||||
"""
|
||||
Return a relative path to the target from either the current dir or an optional base dir.
|
||||
Base can be a directory specified either as absolute or relative to current dir.
|
||||
"""
|
||||
|
||||
#if not os.path.exists(target):
|
||||
# raise OSError, 'Target does not exist: '+target
|
||||
if target == base:
|
||||
raise ValueError('target and base are both: %s'%target)
|
||||
if not os.path.isdir(base):
|
||||
raise OSError, 'Base is not a directory or does not exist: '+base
|
||||
|
||||
base_list = (os.path.abspath(base)).split(os.sep)
|
||||
target_list = (os.path.abspath(target)).split(os.sep)
|
||||
|
||||
# On the windows platform the target may be on a completely different drive from the base.
|
||||
if iswindows and base_list[0].upper() != target_list[0].upper():
|
||||
raise OSError, 'Target is on a different drive to base. Target: '+repr(target)+', base: '+repr(base)
|
||||
|
||||
# Starting from the filepath root, work out how much of the filepath is
|
||||
# shared by base and target.
|
||||
for i in range(min(len(base_list), len(target_list))):
|
||||
if base_list[i] != target_list[i]: break
|
||||
else:
|
||||
# If we broke out of the loop, i is pointing to the first differing path elements.
|
||||
# If we didn't break out of the loop, i is pointing to identical path elements.
|
||||
# Increment i so that in all cases it points to the first differing path elements.
|
||||
i+=1
|
||||
|
||||
rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:]
|
||||
return os.path.join(*rel_list)
|
||||
|
||||
relpath = os.path.relpath
|
||||
_spat = re.compile(r'^the\s+|^a\s+|^an\s+', re.IGNORECASE)
|
||||
def english_sort(x, y):
|
||||
'''
|
||||
|
@ -15,7 +15,6 @@ from lxml import etree
|
||||
from dateutil import parser
|
||||
|
||||
from calibre.ebooks.chardet import xml_to_unicode
|
||||
from calibre import relpath
|
||||
from calibre.constants import __appname__, __version__
|
||||
from calibre.ebooks.metadata.toc import TOC
|
||||
from calibre.ebooks.metadata import MetaInformation, string_to_authors
|
||||
@ -86,8 +85,8 @@ class Resource(object):
|
||||
if self.path == basedir:
|
||||
return ''+frag
|
||||
try:
|
||||
rpath = relpath(self.path, basedir)
|
||||
except OSError: # On windows path and basedir could be on different drives
|
||||
rpath = os.path.relpath(self.path, basedir)
|
||||
except ValueError: # On windows path and basedir could be on different drives
|
||||
rpath = self.path
|
||||
if isinstance(rpath, unicode):
|
||||
rpath = rpath.encode('utf-8')
|
||||
@ -560,7 +559,7 @@ class OPF(object):
|
||||
has_path = True
|
||||
break
|
||||
if not has_path:
|
||||
href = relpath(path, self.base_dir).replace(os.sep, '/')
|
||||
href = os.path.relpath(path, self.base_dir).replace(os.sep, '/')
|
||||
item = self.create_manifest_item(href, media_type)
|
||||
manifest = self.manifest_ppath(self.root)[0]
|
||||
manifest.append(item)
|
||||
|
@ -511,7 +511,7 @@ class MobiWriter(object):
|
||||
indxt, indxt_count, indices, last_name = \
|
||||
self._generate_indxt(ctoc)
|
||||
if last_name is None:
|
||||
self._oeb.log.warn('Input document has no TOC. No idex generated.')
|
||||
self._oeb.log.warn('Input document has no TOC. No index generated.')
|
||||
return
|
||||
|
||||
indx1 = StringIO()
|
||||
@ -628,8 +628,8 @@ class MobiWriter(object):
|
||||
self._last_toc_entry = None
|
||||
ctoc = StringIO()
|
||||
|
||||
def add_node(node, cls):
|
||||
t = node.title
|
||||
def add_node(node, cls, title=None):
|
||||
t = node.title if title is None else title
|
||||
if t and t.strip():
|
||||
t = t.strip()
|
||||
if not isinstance(t, unicode):
|
||||
@ -640,8 +640,10 @@ class MobiWriter(object):
|
||||
self._ctoc_name_map[node] = t
|
||||
ctoc.write(decint(len(t), DECINT_FORWARD)+t)
|
||||
|
||||
first = True
|
||||
for child in toc.iter():
|
||||
add_node(child, 'chapter')
|
||||
add_node(child, 'chapter', title='Title Page' if first else None)
|
||||
first = False
|
||||
|
||||
return align_block(ctoc.getvalue())
|
||||
|
||||
@ -842,7 +844,8 @@ class MobiWriter(object):
|
||||
if INDEXING:
|
||||
# Write unknown EXTH records as 0s
|
||||
for code, size in [(204,4), (205,4), (206,4), (207,4), (300,40)]:
|
||||
exth.write(pack('>I', code)+'\0'*size)
|
||||
exth.write(pack('>II', code, 8+size)+'\0'*size)
|
||||
nrecs += 1
|
||||
exth = exth.getvalue()
|
||||
trail = len(exth) % 4
|
||||
pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte
|
||||
|
Loading…
x
Reference in New Issue
Block a user