1
0
mirror of https://github.com/gryf/ebook-converter.git synced 2026-04-16 19:13:32 +02:00

Removed iteritems and itervalues, which are redundant

This commit is contained in:
2020-04-21 18:20:08 +02:00
parent 9e076e0af4
commit 3234e4de27
82 changed files with 382 additions and 457 deletions

View File

@@ -1,6 +1,5 @@
import numbers
from collections import OrderedDict
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -133,11 +132,11 @@ def read_border(parent, dest, XPath, get, border_edges=border_edges, name='pBdr'
for border in XPath('./w:' + name)(parent):
for edge in border_edges:
for prop, val in iteritems(read_single_border(border, edge, XPath, get)):
for prop, val in read_single_border(border, edge, XPath, get).items():
if val is not None:
vals[prop % edge] = val
for key, val in iteritems(vals):
for key, val in vals.items():
setattr(dest, key, val)
@@ -472,4 +471,4 @@ class ParagraphStyle(object):
return False
read_funcs = {k[5:]:v for k, v in iteritems(globals()) if k.startswith('read_')}
read_funcs = {k[5:]:v for k, v in globals().items() if k.startswith('read_')}

View File

@@ -1,5 +1,4 @@
import os
from ebook_converter.polyglot.builtins import itervalues
__license__ = 'GPL v3'
@@ -143,7 +142,7 @@ def cleanup_markup(log, root, styles, dest_dir, detect_cover, XPath):
current_run = [span]
# Process dir attributes
class_map = dict(itervalues(styles.classes))
class_map = dict(styles.classes.values())
parents = ('p', 'div') + tuple('h%d' % i for i in range(1, 7))
for parent in root.xpath('//*[(%s)]' % ' or '.join('name()="%s"' % t for t in parents)):
# Ensure that children of rtl parents that are not rtl have an

View File

@@ -1,7 +1,7 @@
import re
from ebook_converter.ebooks.docx.index import process_index, polish_index_markup
from ebook_converter.polyglot.builtins import iteritems, native_string_type
from ebook_converter.polyglot.builtins import native_string_type
__license__ = 'GPL v3'
@@ -234,7 +234,7 @@ class Fields(object):
def polish_markup(self, object_map):
if not self.index_fields:
return
rmap = {v:k for k, v in iteritems(object_map)}
rmap = {v:k for k, v in object_map.items()}
for idx, blocks in self.index_fields:
polish_index_markup(idx, [rmap[b] for b in blocks])

View File

@@ -6,7 +6,6 @@ from ebook_converter.utils.filenames import ascii_filename
from ebook_converter.utils.fonts.scanner import font_scanner, NoFonts
from ebook_converter.utils.fonts.utils import panose_to_css_generic_family, is_truetype_font
from ebook_converter.utils.icu import ord_string
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -168,7 +167,7 @@ class Fonts(object):
d['font-weight'] = 'bold'
if 'Italic' in variant:
d['font-style'] = 'italic'
d = ['%s: %s' % (k, v) for k, v in iteritems(d)]
d = ['%s: %s' % (k, v) for k, v in d.items()]
d = ';\n\t'.join(d)
defs.append('@font-face {\n\t%s\n}\n' % d)
return '\n'.join(defs)

View File

@@ -1,5 +1,4 @@
from collections import OrderedDict
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -54,7 +53,7 @@ class Footnotes(object):
return None, None
def __iter__(self):
for anchor, (counter, note) in iteritems(self.notes):
for anchor, (counter, note) in self.notes.items():
yield anchor, counter, note
@property

View File

@@ -7,7 +7,6 @@ from ebook_converter.ebooks.docx.names import barename
from ebook_converter.utils.filenames import ascii_filename
from ebook_converter.utils.img import resize_to_fit, image_to_data
from ebook_converter.utils.imghdr import what
from ebook_converter.polyglot.builtins import iteritems, itervalues
__license__ = 'GPL v3'
@@ -63,7 +62,7 @@ def get_image_properties(parent, XPath, get):
def get_image_margins(elem):
ans = {}
for w, css in iteritems({'L':'left', 'T':'top', 'R':'right', 'B':'bottom'}):
for w, css in {'L':'left', 'T':'top', 'R':'right', 'B':'bottom'}.items():
val = elem.get('dist%s' % w, None)
if val is not None:
try:
@@ -154,7 +153,7 @@ class Images(object):
return raw, base
def unique_name(self, base):
exists = frozenset(itervalues(self.used))
exists = frozenset(self.used.values())
c = 1
name = base
while name in exists:
@@ -239,7 +238,7 @@ class Images(object):
ans = self.pic_to_img(pic, alt, inline, title)
if ans is not None:
if style:
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in iteritems(style)))
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in style.items()))
yield ans
# Now process the floats
@@ -250,7 +249,7 @@ class Images(object):
ans = self.pic_to_img(pic, alt, anchor, title)
if ans is not None:
if style:
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in iteritems(style)))
ans.set('style', '; '.join('%s: %s' % (k, v) for k, v in style.items()))
yield ans
def pict_to_html(self, pict, page):
@@ -272,7 +271,7 @@ class Images(object):
style['margin-left'] = '0' if align == 'left' else 'auto'
style['margin-right'] = 'auto' if align == 'left' else '0'
if style:
hr.set('style', '; '.join(('%s:%s' % (k, v) for k, v in iteritems(style))))
hr.set('style', '; '.join(('%s:%s' % (k, v) for k, v in style.items())))
yield hr
for imagedata in XPath('descendant::v:imagedata[@r:id]')(pict):

View File

@@ -3,7 +3,6 @@ from operator import itemgetter
from lxml import etree
from ebook_converter.utils.icu import partition_by_first_letter, sort_key
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -99,7 +98,7 @@ def process_index(field, index, xe_fields, log, XPath, expand):
if heading_text is not None:
groups = partition_by_first_letter(xe_fields, key=itemgetter('text'))
items = []
for key, fields in iteritems(groups):
for key, fields in groups.items():
items.append(key), items.extend(fields)
if styles:
heading_style = styles[0]

View File

@@ -3,7 +3,6 @@ import re
from lxml.etree import XPath as X
from ebook_converter.utils.filenames import ascii_text
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -29,7 +28,7 @@ TRANSITIONAL_NAMES = {
STRICT_NAMES = {
k:v.replace('http://schemas.openxmlformats.org/officeDocument/2006', 'http://purl.oclc.org/ooxml/officeDocument')
for k, v in iteritems(TRANSITIONAL_NAMES)
for k, v in TRANSITIONAL_NAMES.items()
}
TRANSITIONAL_NAMESPACES = {
@@ -69,7 +68,7 @@ STRICT_NAMESPACES = {
'http://schemas.openxmlformats.org/officeDocument/2006', 'http://purl.oclc.org/ooxml/officeDocument').replace(
'http://schemas.openxmlformats.org/wordprocessingml/2006', 'http://purl.oclc.org/ooxml/wordprocessingml').replace(
'http://schemas.openxmlformats.org/drawingml/2006', 'http://purl.oclc.org/ooxml/drawingml')
for k, v in iteritems(TRANSITIONAL_NAMESPACES)
for k, v in TRANSITIONAL_NAMESPACES.items()
}
# }}}
@@ -135,7 +134,7 @@ class DOCXNamespace(object):
return self.XPath('|'.join('descendant::%s' % a for a in args))(elem)
def makeelement(self, root, tag, append=True, **attrs):
ans = root.makeelement(self.expand(tag), **{self.expand(k, sep='_'):v for k, v in iteritems(attrs)})
ans = root.makeelement(self.expand(tag), **{self.expand(k, sep='_'):v for k, v in attrs.items()})
if append:
root.append(ans)
return ans

View File

@@ -7,7 +7,6 @@ from lxml.html.builder import OL, UL, SPAN
from ebook_converter.ebooks.docx.block_styles import ParagraphStyle
from ebook_converter.ebooks.docx.char_styles import RunStyle, inherit
from ebook_converter.ebooks.metadata import roman
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -166,7 +165,7 @@ class NumberingDefinition(object):
def copy(self):
ans = NumberingDefinition(self.namespace, an_id=self.abstract_numbering_definition_id)
for l, lvl in iteritems(self.levels):
for l, lvl in self.levels.items():
ans.levels[l] = lvl.copy()
return ans
@@ -222,7 +221,7 @@ class Numbering(object):
if alvl is None:
alvl = Level(self.namespace)
alvl.read_from_xml(lvl, override=True)
for ilvl, so in iteritems(start_overrides):
for ilvl, so in start_overrides.items():
try:
nd.levels[ilvl].start = start_override
except KeyError:
@@ -242,22 +241,22 @@ class Numbering(object):
self.instances[num_id] = create_instance(n, d)
numbering_links = styles.numbering_style_links
for an_id, style_link in iteritems(lazy_load):
for an_id, style_link in lazy_load.items():
num_id = numbering_links[style_link]
self.definitions[an_id] = self.instances[num_id].copy()
for num_id, (an_id, n) in iteritems(next_pass):
for num_id, (an_id, n) in next_pass.items():
d = self.definitions.get(an_id, None)
if d is not None:
self.instances[num_id] = create_instance(n, d)
for num_id, d in iteritems(self.instances):
for num_id, d in self.instances.items():
self.starts[num_id] = {lvl:d.levels[lvl].start for lvl in d.levels}
def get_pstyle(self, num_id, style_id):
d = self.instances.get(num_id, None)
if d is not None:
for ilvl, lvl in iteritems(d.levels):
for ilvl, lvl in d.levels.items():
if lvl.para_link == style_id:
return ilvl
@@ -269,7 +268,7 @@ class Numbering(object):
def update_counter(self, counter, levelnum, levels):
counter[levelnum] += 1
for ilvl, lvl in iteritems(levels):
for ilvl, lvl in levels.items():
restart = lvl.restart
if (restart is None and ilvl == levelnum + 1) or restart == levelnum + 1:
counter[ilvl] = lvl.start

View File

@@ -4,7 +4,6 @@ from collections import OrderedDict, Counter
from ebook_converter.ebooks.docx.block_styles import ParagraphStyle, inherit, twips
from ebook_converter.ebooks.docx.char_styles import RunStyle
from ebook_converter.ebooks.docx.tables import TableStyle
from ebook_converter.polyglot.builtins import iteritems, itervalues
__license__ = 'GPL v3'
@@ -121,7 +120,7 @@ class Styles(object):
self.default_paragraph_style = self.default_character_style = None
def __iter__(self):
for s in itervalues(self.id_map):
for s in self.id_map.values():
yield s
def __getitem__(self, key):
@@ -340,7 +339,7 @@ class Styles(object):
setattr(s, prop, inherit)
setattr(block_style, prop, next(iter(vals)))
for p, runs in iteritems(layers):
for p, runs in layers.items():
has_links = '1' in {r.get('is-link', None) for r in runs}
char_styles = [self.resolve_run(r) for r in runs]
block_style = self.resolve_paragraph(p)
@@ -420,7 +419,7 @@ class Styles(object):
ps.pageBreakBefore = True
def register(self, css, prefix):
h = hash(frozenset(iteritems(css)))
h = hash(frozenset(css.items()))
ans, _ = self.classes.get(h, (None, None))
if ans is None:
self.counter[prefix] += 1
@@ -429,17 +428,17 @@ class Styles(object):
return ans
def generate_classes(self):
for bs in itervalues(self.para_cache):
for bs in self.para_cache.values():
css = bs.css
if css:
self.register(css, 'block')
for bs in itervalues(self.run_cache):
for bs in self.run_cache.values():
css = bs.css
if css:
self.register(css, 'text')
def class_name(self, css):
h = hash(frozenset(iteritems(css)))
h = hash(frozenset(css.items()))
return self.classes.get(h, (None, None))[0]
def generate_css(self, dest_dir, docx, notes_nopb, nosupsub):
@@ -494,8 +493,8 @@ class Styles(object):
prefix = ef + '\n' + prefix
ans = []
for (cls, css) in sorted(itervalues(self.classes), key=lambda x:x[0]):
b = ('\t%s: %s;' % (k, v) for k, v in iteritems(css))
for (cls, css) in sorted(self.classes.values(), key=lambda x:x[0]):
b = ('\t%s: %s;' % (k, v) for k, v in css.items())
b = '\n'.join(b)
ans.append('.%s {\n%s\n}\n' % (cls, b.rstrip(';')))
return prefix + '\n' + '\n'.join(ans)

View File

@@ -2,7 +2,6 @@ from lxml.html.builder import TABLE, TR, TD
from ebook_converter.ebooks.docx.block_styles import inherit, read_shd as rs, read_border, binary_property, border_props, ParagraphStyle, border_to_css
from ebook_converter.ebooks.docx.char_styles import RunStyle
from ebook_converter.polyglot.builtins import iteritems, itervalues
__license__ = 'GPL v3'
@@ -82,7 +81,7 @@ def read_spacing(parent, dest, XPath, get):
def read_float(parent, dest, XPath, get):
ans = inherit
for x in XPath('./w:tblpPr')(parent):
ans = {k.rpartition('}')[-1]: v for k, v in iteritems(x.attrib)}
ans = {k.rpartition('}')[-1]: v for k, v in x.attrib.items()}
setattr(dest, 'float', ans)
@@ -614,7 +613,7 @@ class Table(object):
def __iter__(self):
for p in self.paragraphs:
yield p
for t in itervalues(self.sub_tables):
for t in self.sub_tables.values():
for p in t:
yield p
@@ -661,7 +660,7 @@ class Table(object):
table_style = self.table_style.css
if table_style:
table.set('class', self.styles.register(table_style, 'table'))
for elem, style in iteritems(style_map):
for elem, style in style_map.items():
css = style.css
if css:
elem.set('class', self.styles.register(css, elem.tag))
@@ -682,7 +681,7 @@ class Tables(object):
self.sub_tables |= set(self.tables[-1].sub_tables)
def apply_markup(self, object_map, page_map):
rmap = {v:k for k, v in iteritems(object_map)}
rmap = {v:k for k, v in object_map.items()}
for table in self.tables:
table.apply_markup(rmap, page_map[table.tbl])

View File

@@ -21,7 +21,6 @@ from ebook_converter.ebooks.docx.fields import Fields
from ebook_converter.ebooks.docx.settings import Settings
from ebook_converter.ebooks.metadata.opf2 import OPFCreator
from ebook_converter.utils.localization import canonicalize_lang, lang_as_iso639_1
from ebook_converter.polyglot.builtins import iteritems, itervalues
__license__ = 'GPL v3'
@@ -119,7 +118,7 @@ class Convert(object):
self.read_page_properties(doc)
self.current_rels = relationships_by_id
for wp, page_properties in iteritems(self.page_map):
for wp, page_properties in self.page_map.items():
self.current_page = page_properties
if wp.tag.endswith('}p'):
p = self.convert_p(wp)
@@ -159,7 +158,7 @@ class Convert(object):
self.styles.apply_contextual_spacing(paras)
self.mark_block_runs(paras)
for p, wp in iteritems(self.object_map):
for p, wp in self.object_map.items():
if len(p) > 0 and not p.text and len(p[0]) > 0 and not p[0].text and p[0][0].get('class', None) == 'tab':
# Paragraph uses tabs for indentation, convert to text-indent
parent = p[0]
@@ -189,7 +188,7 @@ class Convert(object):
self.tables.apply_markup(self.object_map, self.page_map)
numbered = []
for html_obj, obj in iteritems(self.object_map):
for html_obj, obj in self.object_map.items():
raw = obj.get('calibre_num_id', None)
if raw is not None:
lvl, num_id = raw.partition(':')[0::2]
@@ -209,7 +208,7 @@ class Convert(object):
self.log.debug('Converting styles to CSS')
self.styles.generate_classes()
for html_obj, obj in iteritems(self.object_map):
for html_obj, obj in self.object_map.items():
style = self.styles.resolve(obj)
if style is not None:
css = style.css
@@ -217,7 +216,7 @@ class Convert(object):
cls = self.styles.class_name(css)
if cls:
html_obj.set('class', cls)
for html_obj, css in iteritems(self.framed_map):
for html_obj, css in self.framed_map.items():
cls = self.styles.class_name(css)
if cls:
html_obj.set('class', cls)
@@ -404,13 +403,13 @@ class Convert(object):
doc_anchors = frozenset(self.namespace.XPath('./w:body/w:bookmarkStart[@w:name]')(doc))
if doc_anchors:
current_bm = set()
rmap = {v:k for k, v in iteritems(self.object_map)}
rmap = {v:k for k, v in self.object_map.items()}
for p in self.namespace.descendants(doc, 'w:p', 'w:bookmarkStart[@w:name]'):
if p.tag.endswith('}p'):
if current_bm and p in rmap:
para = rmap[p]
if 'id' not in para.attrib:
para.set('id', generate_anchor(next(iter(current_bm)), frozenset(itervalues(self.anchor_map))))
para.set('id', generate_anchor(next(iter(current_bm)), frozenset(self.anchor_map.values())))
for name in current_bm:
self.anchor_map[name] = para.get('id')
current_bm = set()
@@ -466,10 +465,10 @@ class Convert(object):
# _GoBack is a special bookmark inserted by Word 2010 for
# the return to previous edit feature, we ignore it
old_anchor = current_anchor
self.anchor_map[anchor] = current_anchor = generate_anchor(anchor, frozenset(itervalues(self.anchor_map)))
self.anchor_map[anchor] = current_anchor = generate_anchor(anchor, frozenset(self.anchor_map.values()))
if old_anchor is not None:
# The previous anchor was not applied to any element
for a, t in tuple(iteritems(self.anchor_map)):
for a, t in tuple(self.anchor_map.items()):
if t == old_anchor:
self.anchor_map[a] = current_anchor
elif x.tag.endswith('}hyperlink'):
@@ -477,11 +476,11 @@ class Convert(object):
elif x.tag.endswith('}instrText') and x.text and x.text.strip().startswith('TOC '):
old_anchor = current_anchor
anchor = str(uuid.uuid4())
self.anchor_map[anchor] = current_anchor = generate_anchor('toc', frozenset(itervalues(self.anchor_map)))
self.anchor_map[anchor] = current_anchor = generate_anchor('toc', frozenset(self.anchor_map.values()))
self.toc_anchor = current_anchor
if old_anchor is not None:
# The previous anchor was not applied to any element
for a, t in tuple(iteritems(self.anchor_map)):
for a, t in tuple(self.anchor_map.items()):
if t == old_anchor:
self.anchor_map[a] = current_anchor
if current_anchor is not None:
@@ -557,7 +556,7 @@ class Convert(object):
def resolve_links(self):
self.resolved_link_map = {}
for hyperlink, spans in iteritems(self.link_map):
for hyperlink, spans in self.link_map.items():
relationships_by_id = self.link_source_map[hyperlink]
span = spans[0]
if len(spans) > 1:
@@ -583,7 +582,7 @@ class Convert(object):
# hrefs that point nowhere give epubcheck a hernia. The element
# should be styled explicitly by Word anyway.
# span.set('href', '#')
rmap = {v:k for k, v in iteritems(self.object_map)}
rmap = {v:k for k, v in self.object_map.items()}
for hyperlink, runs in self.fields.hyperlink_fields:
spans = [rmap[r] for r in runs if r in rmap]
if not spans:
@@ -743,7 +742,7 @@ class Convert(object):
if not self.block_runs:
return
rmap = {v:k for k, v in iteritems(self.object_map)}
rmap = {v:k for k, v in self.object_map.items()}
for border_style, blocks in self.block_runs:
paras = tuple(rmap[p] for p in blocks)
for p in paras:

View File

@@ -5,7 +5,6 @@ from lxml.etree import tostring
from ebook_converter.ebooks.metadata.toc import TOC
from ebook_converter.ebooks.oeb.polish.toc import elem_to_toc_text
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -21,7 +20,7 @@ def from_headings(body, log, namespace, num_levels=3):
level_item_map = {i:frozenset(
x for x in all_heading_nodes if int(x.get('data-heading-level')) == i)
for i in range(1, num_levels+1)}
item_level_map = {e:i for i, elems in iteritems(level_item_map) for e in elems}
item_level_map = {e:i for i, elems in level_item_map.items() for e in elems}
idcount = count()

View File

@@ -11,7 +11,7 @@ from ebook_converter.ebooks.pdf.render.common import PAPER_SIZES
from ebook_converter.utils.date import utcnow
from ebook_converter.utils.localization import canonicalize_lang, lang_as_iso639_1
from ebook_converter.utils.zipfile import ZipFile
from ebook_converter.polyglot.builtins import iteritems, native_string_type
from ebook_converter.polyglot.builtins import native_string_type
__license__ = 'GPL v3'
@@ -52,7 +52,7 @@ def create_skeleton(opts, namespaces=None):
def w(x):
return '{%s}%s' % (namespaces['w'], x)
dn = {k:v for k, v in iteritems(namespaces) if k in {'w', 'r', 'm', 've', 'o', 'wp', 'w10', 'wne', 'a', 'pic'}}
dn = {k:v for k, v in namespaces.items() if k in {'w', 'r', 'm', 've', 'o', 'wp', 'w10', 'wne', 'a', 'pic'}}
E = ElementMaker(namespace=dn['w'], nsmap=dn)
doc = E.document()
body = E.body()
@@ -70,7 +70,7 @@ def create_skeleton(opts, namespaces=None):
E.docGrid(**{w('linePitch'):"360"}),
))
dn = {k:v for k, v in iteritems(namespaces) if k in tuple('wra') + ('wp',)}
dn = {k:v for k, v in namespaces.items() if k in tuple('wra') + ('wp',)}
E = ElementMaker(namespace=dn['w'], nsmap=dn)
styles = E.styles(
E.docDefaults(
@@ -117,12 +117,11 @@ class DocumentRelationships(object):
def __init__(self, namespace):
self.rmap = {}
self.namespace = namespace
for typ, target in iteritems({
namespace.names['STYLES']: 'styles.xml',
namespace.names['NUMBERING']: 'numbering.xml',
namespace.names['WEB_SETTINGS']: 'webSettings.xml',
namespace.names['FONTS']: 'fontTable.xml',
}):
for typ, target in {namespace.names['STYLES']: 'styles.xml',
namespace.names['NUMBERING']: 'numbering.xml',
namespace.names['WEB_SETTINGS']: 'webSettings.xml',
namespace.names['FONTS']: 'fontTable.xml',
}.items():
self.add_relationship(target, typ)
def get_relationship_id(self, target, rtype, target_mode=None):
@@ -142,7 +141,7 @@ class DocumentRelationships(object):
namespaces = self.namespace.namespaces
E = ElementMaker(namespace=namespaces['pr'], nsmap={None:namespaces['pr']})
relationships = E.Relationships()
for (target, rtype, target_mode), rid in iteritems(self.rmap):
for (target, rtype, target_mode), rid in self.rmap.items():
r = E.Relationship(Id=rid, Type=rtype, Target=target)
if target_mode is not None:
r.set('TargetMode', target_mode)
@@ -169,7 +168,7 @@ class DOCX(object):
def contenttypes(self):
E = ElementMaker(namespace=self.namespace.namespaces['ct'], nsmap={None:self.namespace.namespaces['ct']})
types = E.Types()
for partname, mt in iteritems({
for partname, mt in {
"/word/footnotes.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml",
"/word/document.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml",
"/word/numbering.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml",
@@ -181,15 +180,13 @@ class DOCX(object):
"/word/webSettings.xml": "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml",
"/docProps/core.xml": "application/vnd.openxmlformats-package.core-properties+xml",
"/docProps/app.xml": "application/vnd.openxmlformats-officedocument.extended-properties+xml",
}):
}.items():
types.append(E.Override(PartName=partname, ContentType=mt))
added = {'png', 'gif', 'jpeg', 'jpg', 'svg', 'xml'}
for ext in added:
types.append(E.Default(Extension=ext, ContentType=guess_type('a.'+ext)[0]))
for ext, mt in iteritems({
"rels": "application/vnd.openxmlformats-package.relationships+xml",
"odttf": "application/vnd.openxmlformats-officedocument.obfuscatedFont",
}):
for ext, mt in {"rels": "application/vnd.openxmlformats-package.relationships+xml",
"odttf": "application/vnd.openxmlformats-officedocument.obfuscatedFont"}.items():
added.add(ext)
types.append(E.Default(Extension=ext, ContentType=mt))
for fname in self.images:
@@ -267,9 +264,9 @@ class DOCX(object):
zf.writestr('word/fontTable.xml', xml2str(self.font_table))
zf.writestr('word/_rels/document.xml.rels', self.document_relationships.serialize())
zf.writestr('word/_rels/fontTable.xml.rels', xml2str(self.embedded_fonts))
for fname, data_getter in iteritems(self.images):
for fname, data_getter in self.images.items():
zf.writestr(fname, data_getter())
for fname, data in iteritems(self.fonts):
for fname, data in self.fonts.items():
zf.writestr(fname, data)

View File

@@ -2,7 +2,6 @@ import os
import posixpath
from collections import namedtuple
from functools import partial
from ebook_converter.polyglot.builtins import iteritems, itervalues
from lxml import etree
@@ -127,7 +126,7 @@ class ImagesManager(object):
if fake_margins:
# DOCX does not support setting margins for inline images, so we
# fake it by using effect extents to simulate margins
makeelement(parent, 'wp:effectExtent', **{k[-1].lower():v for k, v in iteritems(get_image_margins(style))})
makeelement(parent, 'wp:effectExtent', **{k[-1].lower():v for k, v in get_image_margins(style).items()})
else:
makeelement(parent, 'wp:effectExtent', l='0', r='0', t='0', b='0')
if floating is not None:
@@ -171,7 +170,7 @@ class ImagesManager(object):
return fname
def serialize(self, images_map):
for img in itervalues(self.images):
for img in self.images.values():
images_map['word/' + img.fname] = partial(self.get_data, img.item)
def get_data(self, item):

View File

@@ -1,8 +1,6 @@
from collections import defaultdict
from operator import attrgetter
from ebook_converter.polyglot.builtins import iteritems, itervalues
__license__ = 'GPL v3'
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
@@ -60,7 +58,7 @@ class NumberingDefinition(object):
items_for_level = defaultdict(list)
container_for_level = {}
type_for_level = {}
for ilvl, items in iteritems(self.level_map):
for ilvl, items in self.level_map.items():
for container, list_tag, block, list_type, tag_style in items:
items_for_level[ilvl].append(list_tag)
container_for_level[ilvl] = container
@@ -74,7 +72,7 @@ class NumberingDefinition(object):
return hash(self.levels)
def link_blocks(self):
for ilvl, items in iteritems(self.level_map):
for ilvl, items in self.level_map.items():
for container, list_tag, block, list_type, tag_style in items:
block.numbering_id = (self.num_id + 1, ilvl)
@@ -146,16 +144,16 @@ class ListsManager(object):
ilvl = len(container_tags) - 1
l.level_map[ilvl].append((container_tags[0], list_tag, block, list_type, tag_style))
[nd.finalize() for nd in itervalues(lists)]
[nd.finalize() for nd in lists.values()]
definitions = {}
for defn in itervalues(lists):
for defn in lists.values():
try:
defn = definitions[defn]
except KeyError:
definitions[defn] = defn
defn.num_id = len(definitions) - 1
defn.link_blocks()
self.definitions = sorted(itervalues(definitions), key=attrgetter('num_id'))
self.definitions = sorted(definitions.values(), key=attrgetter('num_id'))
def serialize(self, parent):
for defn in self.definitions:

View File

@@ -7,7 +7,6 @@ from lxml import etree
from ebook_converter.ebooks import parse_css_length
from ebook_converter.ebooks.docx.writer.utils import convert_color, int_or_zero
from ebook_converter.utils.localization import lang_as_iso639_1
from ebook_converter.polyglot.builtins import iteritems
from ebook_converter.tinycss.css21 import CSS21Parser
@@ -155,7 +154,7 @@ class DOCXStyle(object):
getattr(self, x) for x in self.ALL_PROPS))
def makeelement(self, parent, name, **attrs):
return parent.makeelement(self.w(name), **{self.w(k):v for k, v in iteritems(attrs)})
return parent.makeelement(self.w(name), **{self.w(k):v for k, v in attrs.items()})
def __hash__(self):
return self._hash
@@ -362,7 +361,7 @@ class DescendantTextStyle(object):
p = []
def add(name, **props):
p.append((name, frozenset(iteritems(props))))
p.append((name, frozenset(props.items())))
def vals(attr):
return getattr(parent_style, attr), getattr(child_style, attr)
@@ -559,7 +558,7 @@ class BlockStyle(DOCXStyle):
def serialize_properties(self, pPr, normal_style):
makeelement, w = self.makeelement, self.w
spacing = makeelement(pPr, 'spacing')
for edge, attr in iteritems({'top':'before', 'bottom':'after'}):
for edge, attr in {'top':'before', 'bottom':'after'}.items():
getter = attrgetter('css_margin_' + edge)
css_val, css_unit = parse_css_length(getter(self))
if css_unit in ('em', 'ex'):
@@ -693,7 +692,7 @@ class StylesManager(object):
counts = Counter()
smap = {}
for (bs, rs), blocks in iteritems(used_pairs):
for (bs, rs), blocks in used_pairs.items():
s = CombinedStyle(bs, rs, blocks, self.namespace)
smap[(bs, rs)] = s
counts[s] += sum(1 for b in blocks if not b.is_empty())

View File

@@ -2,7 +2,6 @@ from collections import namedtuple
from ebook_converter.ebooks.docx.writer.utils import convert_color
from ebook_converter.ebooks.docx.writer.styles import read_css_block_borders as rcbb, border_edges
from ebook_converter.polyglot.builtins import iteritems
__license__ = 'GPL v3'
@@ -121,7 +120,7 @@ class Cell(object):
makeelement(tcPr, 'w:shd', w_val="clear", w_color="auto", w_fill=bc)
b = makeelement(tcPr, 'w:tcBorders', append=False)
for edge, border in iteritems(self.borders):
for edge, border in self.borders.items():
if border is not None and border.width > 0 and border.style != 'none':
makeelement(b, 'w:' + edge, w_val=border.style, w_sz=str(border.width), w_color=border.color)
if len(b) > 0: