diff --git a/src/libprs500/ebooks/metadata/opf.py b/src/libprs500/ebooks/metadata/opf.py index b16577c59f..e1d078d9a0 100644 --- a/src/libprs500/ebooks/metadata/opf.py +++ b/src/libprs500/ebooks/metadata/opf.py @@ -18,6 +18,7 @@ import sys, re, os, glob from urllib import unquote from urlparse import urlparse import xml.dom.minidom as dom +from itertools import repeat from libprs500.ebooks.metadata import MetaInformation from libprs500.ebooks.BeautifulSoup import BeautifulStoneSoup, BeautifulSoup @@ -193,16 +194,19 @@ class OPF(MetaInformation): rating = standard_field('rating') tags = standard_field('tags') + HEADER = '''\ + + +''' def __init__(self): raise NotImplementedError('Abstract base class') def _initialize(self): if not hasattr(self, 'soup'): self.soup = BeautifulStoneSoup(u'''\ - - +%s -''') +'''%self.HEADER) def _commit(self, doc): self.soup = BeautifulStoneSoup(doc.toxml('utf-8'), fromEncoding='utf-8') @@ -297,8 +301,8 @@ class OPF(MetaInformation): def set_authors(self, authors): if not authors: authors = ['Unknown'] - attrs = [[('role', 'aut')] for a in authors] - self._set_metadata_element('dc:Creator', authors, attrs) + attrs = list(repeat([('role', 'aut')], len(authors))) + self._set_metadata_element('dc:creator', authors, attrs) def get_author_sort(self): creators = self.soup.package.metadata.findAll('dc:creator') @@ -319,7 +323,7 @@ class OPF(MetaInformation): self.set_authors([]) doc = dom.parseString(self.soup.__str__('UTF-8')) package = doc.documentElement - aut = package.getElementsByTagName('dc:Creator')[0] + aut = package.getElementsByTagName('dc:creator')[0] aut.setAttribute('file-as', aus) self._commit(doc) @@ -338,7 +342,7 @@ class OPF(MetaInformation): self.title = None doc = dom.parseString(self.soup.__str__('UTF-8')) package = doc.documentElement - tit = package.getElementsByTagName('dc:Title')[0] + tit = package.getElementsByTagName('dc:title')[0] tit.setAttribute('file-as', title_sort) self._commit(doc) @@ -351,7 +355,7 @@ class OPF(MetaInformation): def set_comments(self, comments): if not comments: comments = '' - self._set_metadata_element('dc:Description', comments) + self._set_metadata_element('dc:description', comments) def get_uid(self): package = self.soup.find('package') @@ -371,7 +375,7 @@ class OPF(MetaInformation): def set_category(self, category): if not category: category = '' - self._set_metadata_element('dc:Type', category) + self._set_metadata_element('dc:type', category) def get_publisher(self): publisher = self.soup.find('dc:publisher') @@ -382,7 +386,7 @@ class OPF(MetaInformation): def set_publisher(self, category): if not category: category = 'Unknown' - self._set_metadata_element('dc:Publisher', category) + self._set_metadata_element('dc:publisher', category) def get_isbn(self): @@ -396,7 +400,7 @@ class OPF(MetaInformation): def set_isbn(self, isbn): if isbn: - self._set_metadata_element('dc:Identifier', isbn, [('scheme', 'ISBN')], + self._set_metadata_element('dc:identifier', isbn, [('scheme', 'ISBN')], replace=True) def get_libprs_id(self): @@ -407,7 +411,7 @@ class OPF(MetaInformation): def set_libprs_id(self, val): if val: - self._set_metadata_element('dc:Identifier', str(val), [('scheme', 'libprs'), ('id', 'libprs_id')], + self._set_metadata_element('dc:identifier', str(val), [('scheme', 'libprs'), ('id', 'libprs_id')], replace=True) def get_cover(self): @@ -509,15 +513,40 @@ class OPF(MetaInformation): return [unicode(a).strip() for a in ans] def set_tags(self, tags): - self._set_metadata_element('dc:Subject', tags) + self._set_metadata_element('dc:subject', tags) def write(self, stream): - src = unicode(self.soup) - src = re.sub(r'>\s*', ' />\n', src) - src = re.sub(r'<', '\n<', src) - src = re.sub(r'<', '\n<', src) - src = re.sub(r'^', '>') print mi - res = str(mi.soup) - del mi - open(args[1], 'wb').write(res) + mi.write(open(args[1], 'wb')) return 0 if __name__ == '__main__':