def _format_metadata(book): metadata = {} # there must be language, creator, identifier and title #key is [ '{' namespace '}' ] name [ '[' scheme ']' ] key_re = re.compile(r'^(?:\{([^}]*)\})?' # namespace r'([^{]+)' # keyword r'(?:\{([^}]*)\})?$' #schema ) for item in models.Info.objects.filter(book=book): key = item.name value = item.getValue() m = key_re.match(key) if m is None: keyword = key namespace, scheme = '', '' else: namespace, keyword, scheme = m.groups('') add_metadata(metadata, keyword, value, namespace, scheme) now = time.strftime("%Y.%m.%d-%H.%M") created = book.created.strftime("%Y.%m.%d-%H.%M") mods = models.BookHistory.objects.filter(book=book).datetimes("modified", "day", order='DESC') if not mods: lastmod = created else: lastmod = mods[0].strftime("%Y.%m.%d-%H.%M") author = 'Author' if book.owner: if book.owner.first_name: author = book.owner.first_name language = 'en' if book.language: language = getattr(book.language, 'abbrevation', 'en') # add some default values if values are not otherwise specified for namespace, keyword, scheme, value in ( (DC, "publisher", "", DEFAULT_PUBLISHER), (DC, "language", "", language), (DC, "creator", "", author), (DC, "title", "", book.title), (DC, "date", "start", created), (DC, "date", "last-modified", lastmod), (DC, "date", "published", now), (DC, "identifier", "booki.cc", "http://%s/%s/%s" % (THIS_BOOKI_SERVER, book.url_title, now)) ): if not get_metadata(metadata, keyword, namespace, scheme): add_metadata(metadata, keyword, value, namespace, scheme) #XXX add contributors return metadata
def _format_metadata(book): metadata = {} # there must be language, creator, identifier and title #key is [ '{' namespace '}' ] name [ '[' scheme ']' ] key_re = re.compile(r'^(?:\{([^}]*)\})?' # namespace r'([^{]+)' # keyword r'(?:\{([^}]*)\})?$' #schema ) for item in models.Info.objects.filter(book=book): key = item.name value = item.getValue() m = key_re.match(key) if m is None: keyword = key namespace, scheme = '', '' else: namespace, keyword, scheme = m.groups('') add_metadata(metadata, keyword, value, namespace, scheme) now = time.strftime("%Y.%m.%d-%H.%M") created = book.created.strftime("%Y.%m.%d-%H.%M") mods = models.BookHistory.objects.filter(book=book).dates("modified", "day", order='DESC') if not mods: lastmod = created else: lastmod = mods[0].strftime("%Y.%m.%d-%H.%M") author = 'Author' if book.owner: if book.owner.first_name: author = book.owner.first_name language = 'en' if book.language: language = getattr(book.language, 'abbrevation', 'en') # add some default values if values are not otherwise specified for namespace, keyword, scheme, value in ( (DC, "publisher", "", DEFAULT_PUBLISHER), (DC, "language", "", language), (DC, "creator", "", author), (DC, "title", "", book.title), (DC, "date", "start", created), (DC, "date", "last-modified", lastmod), (DC, "date", "published", now), (DC, "identifier", "booki.cc", "http://%s/%s/%s" % (THIS_BOOKI_SERVER, book.url_title, now)) ): if not get_metadata(metadata, keyword, namespace, scheme): add_metadata(metadata, keyword, value, namespace, scheme) #XXX add contributors return metadata
def _format_metadata(book): metadata = {} # there must be language, creator, identifier and title # key is [ '{' namespace '}' ] name [ '[' scheme ']' ] key_re = re.compile(r"^(?:\{([^}]*)\})?" r"([^{]+)" r"(?:\{([^}]*)\})?$") # namespace # keyword # schema for item in models.Info.objects.filter(book=book): key = item.name value = item.getValue() m = key_re.match(key) if m is None: keyword = key namespace, scheme = "", "" else: namespace, keyword, scheme = m.groups("") add_metadata(metadata, keyword, value, namespace, scheme) now = time.strftime("%Y.%m.%d-%H.%M") created = book.created.strftime("%Y.%m.%d-%H.%M") mods = models.BookHistory.objects.filter(book=book).dates("modified", "day", order="DESC") if not mods: lastmod = created else: lastmod = mods[0].strftime("%Y.%m.%d-%H.%M") # add some default values if values are not otherwise specified for namespace, keyword, scheme, value in ( (DC, "publisher", "", DEFAULT_PUBLISHER), (DC, "language", "", "en"), (DC, "creator", "", "The Contributors"), (DC, "title", "", book.title), (DC, "date", "start", created), (DC, "date", "last-modified", lastmod), (DC, "date", "published", now), (DC, "identifier", "booki.cc", "http://%s/%s/%s" % (THIS_BOOKI_SERVER, book.url_title, now)), ): if not get_metadata(metadata, keyword, namespace, scheme): add_metadata(metadata, keyword, value, namespace, scheme) # XXX add contributors return metadata
def _fetch_metadata(self, force=False): """Get information about a twiki book (as much as is easy and useful). If force is False (default) then it will not be reloaded if it has already been set. """ if self.metadata is not None and not force: log("not reloading metadata") return meta = { config.DC: { "publisher": { "": ["FLOSS Manuals http://flossmanuals.net"] }, 'identifier': { "": ['http://%s/epub/%s/%s' % (self.server, self.book, time.strftime('%Y.%m.%d-%H.%M.%S'))] }, 'creator': { "": ['The Contributors'] }, 'date': { "": [time.strftime('%Y-%m-%d')] }, 'title': { "": [self.book] }, }, config.FM: { 'server': {"": [self.server]}, 'book': {"": [self.book]}, } } lang = guess_lang(self.server, self.book) self.dir = guess_text_dir(self.server, self.book) #log(self.server, self.book, lang, self.dir) if lang is not None: add_metadata(meta, 'language', lang) if self.dir is not None: add_metadata(meta, 'dir', self.dir, ns=config.FM) spine = [] toc = [] section = toc waiting_for_url = [] for t in toc_iterator(self.server, self.book): #log(t) if t.is_title(): meta[config.DC]['title'][''] = [t.title] continue item = t.as_zipitem() if item['url'] is None: waiting_for_url.append(item) elif waiting_for_url: for wt in waiting_for_url: wt['url'] = item['url'] waiting_for_url = [] if t.is_chapter(): spine.append(t.chapter) section.append(item) elif t.is_section(): section = item['children'] toc.append(item) self.metadata = { 'version': 1, 'metadata': meta, 'TOC': toc, 'spine': spine, 'manifest': {}, } self._parse_credits() for c in self.contributors: add_metadata(meta, 'contributor', c)
def _fetch_metadata(self, force=False): """Get information about a twiki book (as much as is easy and useful). If force is False (default) then it will not be reloaded if it has already been set. """ if self.metadata is not None and not force: log("not reloading metadata") return meta = { config.DC: { "publisher": { "": ["FLOSS Manuals http://flossmanuals.net"] }, 'identifier': { "": [ 'http://%s/epub/%s/%s' % (self.server, self.book, time.strftime('%Y.%m.%d-%H.%M.%S')) ] }, 'creator': { "": ['The Contributors'] }, 'date': { "": [time.strftime('%Y-%m-%d')] }, 'title': { "": [self.book] }, }, config.FM: { 'server': { "": [self.server] }, 'book': { "": [self.book] }, } } lang = guess_lang(self.server, self.book) self.dir = guess_text_dir(self.server, self.book) #log(self.server, self.book, lang, self.dir) if lang is not None: add_metadata(meta, 'language', lang) if self.dir is not None: add_metadata(meta, 'dir', self.dir, ns=config.FM) spine = [] toc = [] section = toc waiting_for_url = [] for t in toc_iterator(self.server, self.book): #log(t) if t.is_title(): meta[config.DC]['title'][''] = [t.title] continue item = t.as_zipitem() if item['url'] is None: waiting_for_url.append(item) elif waiting_for_url: for wt in waiting_for_url: wt['url'] = item['url'] waiting_for_url = [] if t.is_chapter(): spine.append(t.chapter) section.append(item) elif t.is_section(): section = item['children'] toc.append(item) self.metadata = { 'version': 1, 'metadata': meta, 'TOC': toc, 'spine': spine, 'manifest': {}, } self._parse_credits() for c in self.contributors: add_metadata(meta, 'contributor', c)