Source code for bkgen.metadata


from bxml import XML
from . import NS    

[docs]class Metadata(XML): ROOT_TAG = "{%(pub)s}metadata" % NS
[docs] def identifier(self, id_patterns=['isbn']): identifier = None for pattern in id_patterns: identifier = self.find(self.root, "dc:identifier[contains(@id, '%s')]" % pattern, namespaces=NS) if identifier is not None: return identifier
[docs] def element_text(self, xpath): return self.find(self.root, "%s/text()" % xpath, namespaces=NS)
[docs] def meta_text(self, property_name): return self.element_text("opf:meta[@property='%s']" % property_name)
@property def title_text(self): return self.element_text("dc:title") @property def publisher_text(self): return self.element_text("dc:publisher") @property def date_text(self): return self.element_text("dc:date") @property def description_text(self): return self.element_text("dc:description") @property def rights(self): return self.element_text("dc:rights") @property def identifiers(self): return self.xpath(self.root, "dc:identifiers/text()", namespaces=NS) @property def identifiers_with_formats(self): entries = [] for elem in self.xpath(self.root, "dc:identifier", namespaces=NS): entries.append( (elem.text or '', self.element_text("opf:meta[@refines='#%s']" % elem.get('id')))) return entries @property def creators(self): return self.xpath(self.root, "dc:creator/text()", namespaces=NS) @property def creators_with_roles(self): entries = [] for elem in self.xpath(self.root, "dc:creator", namespaces=NS): entries.append( (elem.text or '', self.element_text("opf:meta[@refines='#%s']" % elem.get('id')))) return entries @property def contributors(self): return self.xpath(self.root, "dc:contributor/text()", namespaces=NS) @property def subjects(self): return self.xpath(self.root, "dc:subject/text()", namespaces=NS)