swap_guids plugin fixes, feed settings
This commit is contained in:
parent
219c44054d
commit
ea2c9519cd
|
@ -3,6 +3,11 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append('.')
|
||||||
|
|
||||||
|
import swap_guids
|
||||||
|
|
||||||
AUTHOR = 'Tanner'
|
AUTHOR = 'Tanner'
|
||||||
SITENAME = 'Tanner\'s Site (t0.vc)'
|
SITENAME = 'Tanner\'s Site (t0.vc)'
|
||||||
SITEURL = 'https://t0.vc'
|
SITEURL = 'https://t0.vc'
|
||||||
|
@ -14,6 +19,7 @@ TIMEZONE = 'Canada/Mountain'
|
||||||
DEFAULT_LANG = 'en'
|
DEFAULT_LANG = 'en'
|
||||||
|
|
||||||
# Feed generation is usually not desired when developing
|
# Feed generation is usually not desired when developing
|
||||||
|
FEED_MAX_ITEMS = 15
|
||||||
FEED_ALL_ATOM = None
|
FEED_ALL_ATOM = None
|
||||||
CATEGORY_FEED_ATOM = None
|
CATEGORY_FEED_ATOM = None
|
||||||
TRANSLATION_FEED_ATOM = None
|
TRANSLATION_FEED_ATOM = None
|
||||||
|
@ -43,6 +49,7 @@ MARKDOWN = {
|
||||||
PLUGINS = [
|
PLUGINS = [
|
||||||
'obsidian',
|
'obsidian',
|
||||||
'linkclass',
|
'linkclass',
|
||||||
|
'swap_guids',
|
||||||
]
|
]
|
||||||
|
|
||||||
STATIC_PATHS = ['media', 'extra', 'text']
|
STATIC_PATHS = ['media', 'extra', 'text']
|
||||||
|
|
|
@ -23,8 +23,7 @@ def modify_feed(context, feed):
|
||||||
if not hasattr(article, 'guid') or not article.guid:
|
if not hasattr(article, 'guid') or not article.guid:
|
||||||
log.info(f"Article '{article.title}' ({article.source_path}) is missing a guid. Generating and embedding one.")
|
log.info(f"Article '{article.title}' ({article.source_path}) is missing a guid. Generating and embedding one.")
|
||||||
new_guid_str = uuid.uuid4().hex
|
new_guid_str = uuid.uuid4().hex
|
||||||
# The string to embed in the paragraph. Note the leading space.
|
guid_text_to_embed = f"Guid: {new_guid_str}"
|
||||||
guid_text_to_embed = f" Guid: {new_guid_str}"
|
|
||||||
|
|
||||||
source_path = article.source_path
|
source_path = article.source_path
|
||||||
|
|
||||||
|
@ -38,29 +37,11 @@ def modify_feed(context, feed):
|
||||||
# Pelican's MarkdownReader also provides article._content with \n newlines.
|
# Pelican's MarkdownReader also provides article._content with \n newlines.
|
||||||
try:
|
try:
|
||||||
with open(source_path, 'r', encoding='utf-8') as f:
|
with open(source_path, 'r', encoding='utf-8') as f:
|
||||||
original_file_content_universal_newlines = f.read()
|
current_body_content = f.read()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f"Failed to read original content from '{source_path}': {e}")
|
log.error(f"Failed to read original content from '{source_path}': {e}")
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# Sanity check: the article's body content should be a suffix of the read file content.
|
|
||||||
if not original_file_content_universal_newlines.endswith(article._content):
|
|
||||||
log.error(f"Content mismatch for '{article.title}' in '{source_path}'. "
|
|
||||||
"The article's parsed content (article._content) does not match the "
|
|
||||||
"ending of the raw file (read with universal newlines). This is unexpected "
|
|
||||||
"and may indicate issues with file parsing or concurrent modifications.")
|
|
||||||
# For debugging, one might log tails of both strings here.
|
|
||||||
# log.debug(f"Tail of original file content: '{original_file_content_universal_newlines[-200:]}'")
|
|
||||||
# log.debug(f"Tail of article._content: '{article._content[-200:]}'")
|
|
||||||
raise Exception(f"Content boundary determination error for article '{article.title}'.")
|
|
||||||
|
|
||||||
# Determine the metadata part by subtracting the length of the content body.
|
|
||||||
metadata_section_length = len(original_file_content_universal_newlines) - len(article._content)
|
|
||||||
metadata_part_from_file = original_file_content_universal_newlines[:metadata_section_length]
|
|
||||||
|
|
||||||
# current_body_content is what Pelican parsed as the article's body.
|
|
||||||
current_body_content = article._content
|
|
||||||
|
|
||||||
# Split this body content to find its first paragraph.
|
# Split this body content to find its first paragraph.
|
||||||
# Paragraphs in Markdown are separated by one or more blank lines (\n\n).
|
# Paragraphs in Markdown are separated by one or more blank lines (\n\n).
|
||||||
body_parts = current_body_content.split('\n\n', 1)
|
body_parts = current_body_content.split('\n\n', 1)
|
||||||
|
@ -69,17 +50,12 @@ def modify_feed(context, feed):
|
||||||
|
|
||||||
# Append the Guid text to the end of the first paragraph of the body.
|
# Append the Guid text to the end of the first paragraph of the body.
|
||||||
# .rstrip() removes any trailing whitespace/newlines from the paragraph itself before appending.
|
# .rstrip() removes any trailing whitespace/newlines from the paragraph itself before appending.
|
||||||
modified_first_paragraph_of_body = first_paragraph_of_body.rstrip() + guid_text_to_embed
|
modified_first_paragraph_of_body = first_paragraph_of_body.rstrip() + '\n' + guid_text_to_embed
|
||||||
|
|
||||||
# Reconstruct the new body content with the embedded Guid.
|
|
||||||
new_body_content_with_guid = modified_first_paragraph_of_body
|
|
||||||
if rest_of_body_content: # Add back the rest of the body if it existed.
|
|
||||||
new_body_content_with_guid += '\n\n' + rest_of_body_content
|
|
||||||
|
|
||||||
# Construct the full new file content by combining the original metadata part and the new body.
|
# Construct the full new file content by combining the original metadata part and the new body.
|
||||||
# This preserves the original metadata block verbatim (including comments, formatting, and original newline characters if any within it,
|
# This preserves the original metadata block verbatim (including comments, formatting, and original newline characters if any within it,
|
||||||
# as metadata_part_from_file is a direct slice from original_file_content_universal_newlines which has \n newlines).
|
# as metadata_part_from_file is a direct slice from original_file_content_universal_newlines which has \n newlines).
|
||||||
full_new_content = metadata_part_from_file + new_body_content_with_guid
|
full_new_content = modified_first_paragraph_of_body + '\n\n' + rest_of_body_content
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(source_path, 'w', encoding='utf-8') as f:
|
with open(source_path, 'w', encoding='utf-8') as f:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user