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)