git @ Cat's Eye Technologies Feedmark / master src / feedmark / formats / atom.py
master

Tree @master (Download .tar.gz)

atom.py @masterraw · history · blame

# Copyright (c) 2019-2024 Chris Pressey, Cat's Eye Technologies
# This file is distributed under an MIT license.  See LICENSES/ directory.
# SPDX-License-Identifier: LicenseRef-MIT-X-Feedmark

from __future__ import absolute_import

from datetime import datetime

import atomize

from feedmark.feeds import extract_feed_properties, extract_sections, construct_entry_url
from feedmark.formats.markdown import markdown_to_html5


def convert_section_to_entry(section, properties, markdown_links_base=None):

    guid = properties['url'] + "/" + section.title
    updated = section.publication_date

    summary = atomize.Summary(markdown_to_html5(section.body), content_type='html')

    links = []
    entry_url = construct_entry_url(section)
    if entry_url is not None:
        links.append(atomize.Link(entry_url, content_type='text/html', rel='alternate'))

    return atomize.Entry(
        title=section.title,
        guid=guid,
        updated=updated,
        summary=summary,
        links=links
    )


def feedmark_atomize(documents, out_filename, limit=None):
    properties = {}

    for document in documents:
        these_properties = extract_feed_properties(document)
        properties.update(these_properties)  # TODO: something more elegant than this

    entries = []
    for section in extract_sections(documents):
        entries.append(convert_section_to_entry(section, properties))

    if limit and len(entries) > limit:
        entries = entries[:limit]

    assert properties['author'], "Need author"

    feed = atomize.Feed(
        author=properties['author'],
        title=properties['title'],
        updated=datetime.utcnow(),
        guid=properties['url'],
        self_link=properties['url'],
        entries=entries
    )

    feed.write_file(out_filename)