# 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)