From 031049ea9df48a8894e5176bde560b0138a97473 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 6 Jul 2016 10:29:18 +0530 Subject: [PATCH] DRYer --- src/calibre/ebooks/metadata/opf3.py | 5 +++-- src/calibre/ebooks/oeb/polish/container.py | 14 +++++--------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/calibre/ebooks/metadata/opf3.py b/src/calibre/ebooks/metadata/opf3.py index f7879b4c5b..5ccfadf275 100644 --- a/src/calibre/ebooks/metadata/opf3.py +++ b/src/calibre/ebooks/metadata/opf3.py @@ -117,12 +117,13 @@ def simple_text(f): return wrapper def items_with_property(root, q, prefixes): - q = expand_prefix(q, prefixes) + q = expand_prefix(q, prefixes).lower() for item in XPath("./opf:manifest/opf:item[@properties]")(root): - for prop in (item.get('properties') or '').split(): + for prop in (item.get('properties') or '').lower().split(): prop = expand_prefix(prop, prefixes) if prop == q: yield item + break # }}} diff --git a/src/calibre/ebooks/oeb/polish/container.py b/src/calibre/ebooks/oeb/polish/container.py index 9a577c2a7b..d0795f6a67 100644 --- a/src/calibre/ebooks/oeb/polish/container.py +++ b/src/calibre/ebooks/oeb/polish/container.py @@ -24,7 +24,7 @@ from calibre.ebooks.chardet import xml_to_unicode from calibre.ebooks.conversion.plugins.epub_input import ( ADOBE_OBFUSCATION, IDPF_OBFUSCATION, decrypt_font_data) from calibre.ebooks.conversion.preprocess import HTMLPreProcessor, CSSPreProcessor as cssp -from calibre.ebooks.metadata.opf3 import read_prefixes, expand_prefix, ensure_prefix, CALIBRE_PREFIX +from calibre.ebooks.metadata.opf3 import read_prefixes, items_with_property, ensure_prefix, CALIBRE_PREFIX from calibre.ebooks.metadata.utils import parse_opf_version from calibre.ebooks.mobi import MobiError from calibre.ebooks.mobi.reader.headers import MetadataHeader @@ -614,14 +614,10 @@ class Container(ContainerBase): # {{{ def manifest_items_with_property(self, property_name): ' All manifest items that have the specified property ' prefixes = read_prefixes(self.opf) - q = expand_prefix(property_name, prefixes).lower() - for item in self.opf_xpath('//opf:manifest/opf:item[@href and @properties]'): - props = (item.get('properties') or '').lower().split() - for p in props: - pq = expand_prefix(p, prefixes).lower() - if pq == q: - yield self.href_to_name(item.get('href'), self.opf_name) - break + for item in items_with_property(self.opf, property_name, prefixes): + href = item.get('href') + if href: + yield self.href_to_name(item.get('href'), self.opf_name) def manifest_items_of_type(self, predicate): ''' The names of all manifest items whose media-type matches predicate.