예제 #1
0
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
예제 #2
0
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
예제 #3
0
파일: common.py 프로젝트: jbarmash/Booktype
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
예제 #4
0
    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)
예제 #5
0
    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)