Files
dify-docs/scripts/contributing_in_page.py
2025-05-19 14:52:31 +08:00

183 lines
7.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
def generate_contributing_section(repo_owner, repo_name, target_dir_relative, filename, language):
repo_url = f"https://github.com/{repo_owner}/{repo_name}"
if language == "zh":
contributing_section = f"""
{{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}}
<CardGroup cols="2">
<Card
title="编辑此页面"
icon="pen-to-square"
href="{repo_url}/edit/main/{target_dir_relative}/{filename}"
>
通过直接提交修改来帮助改进文档内容
</Card>
<Card
title="提交问题"
icon="github"
href="{repo_url}/issues/new?title=文档问题%3A%20{filename[5:-7]}&body=%23%23%20问题描述%0A%3C%21--%20请简要描述您发现的问题%20--%3E%0A%0A%23%23%20页面链接%0Ahttps%3A%2F%2Fgithub.com%2F{repo_owner}%2F{repo_name}%2Fblob%2Fmain%2F{target_dir_relative}%2F{filename}%0A%0A%23%23%20建议修改%0A%3C%21--%20如果有具体的修改建议请在此说明%20--%3E%0A%0A%3C%21--%20感谢您对文档质量的关注%20--%3E"
>
发现错误或有改进建议?请提交问题反馈
</Card>
</CardGroup>
"""
elif language == "en":
contributing_section = f"""
{{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}}
<CardGroup cols="2">
<Card
title="Edit this page"
icon="pen-to-square"
href="{repo_url}/edit/main/{target_dir_relative}/{filename}"
>
Help improve our documentation by contributing directly
</Card>
<Card
title="Report an issue"
icon="github"
href="{repo_url}/issues/new?title=Documentation%20Issue%3A%20{filename[5:-7]}&body=%23%23%20Issue%20Description%0A%3C%21--%20Please%20briefly%20describe%20the%20issue%20you%20found%20--%3E%0A%0A%23%23%20Page%20Link%0Ahttps%3A%2F%2Fgithub.com%2F{repo_owner}%2F{repo_name}%2Fblob%2Fmain%2F{target_dir_relative}%2F{filename}%0A%0A%23%23%20Suggested%20Changes%0A%3C%21--%20If%20you%20have%20specific%20suggestions%20for%20changes%2C%20please%20describe%20them%20here%20--%3E%0A%0A%3C%21--%20Thank%20you%20for%20helping%20improve%20our%20documentation%21%20--%3E"
>
Found an error or have suggestions? Let us know
</Card>
</CardGroup>
"""
elif language == "jp":
contributing_section = f"""
{{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}}
<CardGroup cols="2">
<Card
title="このページを編集する"
icon="pen-to-square"
href="{repo_url}/edit/main/{target_dir_relative}/{filename}"
>
直接貢献することでドキュメントの改善にご協力ください
</Card>
<Card
title="問題を報告する"
icon="github"
href="{repo_url}/issues/new?title=ドキュメントの問題%3A%20{filename[5:-7]}&body=%23%23%20問題の説明%0A%3C%21--%20発見した問題について簡単に説明してください%20--%3E%0A%0A%23%23%20ページリンク%0Ahttps%3A%2F%2Fgithub.com%2F{repo_owner}%2F{repo_name}%2Fblob%2Fmain%2F{target_dir_relative}%2F{filename}%0A%0A%23%23%20提案される変更%0A%3C%21--%20特定の変更案がある場合は、ここで説明してください%20--%3E%0A%0A%3C%21--%20ドキュメントの品質向上にご協力いただきありがとうございます%20--%3E"
>
エラーを見つけたり提案がありますか?お知らせください
</Card>
</CardGroup>
"""
else:
raise ValueError("Unsupported language. Supported languages are 'zh', 'en', and 'jp'.")
return contributing_section
def append_content_to_files(
target_dir_relative, repo_owner, repo_name, language, base_dir=BASE_DIR, file_extension=".mdx"
):
target_path = os.path.join(base_dir, target_dir_relative)
if not os.path.isdir(target_path):
print(f"Error: Directory '{target_path}' not found.")
return
fix_md_endings(target_dir_relative, base_dir, file_extension)
appended_count = 0
error_count = 0
for filename in os.listdir(target_path):
if filename.endswith(file_extension):
filepath = os.path.join(target_path, filename)
try:
# Open in text append mode to write
with open(filepath, "a", encoding="utf-8") as f:
f.write(generate_contributing_section(repo_owner, repo_name, target_dir_relative, filename, language))
appended_count += 1
except (IOError, OSError) as e:
print(f"Error processing file {filepath}: {e}")
error_count += 1
print(
f"Finished processing directory '{target_path}'. "
f"Appended to {appended_count} files. Encountered {error_count} errors."
)
def remove_contributing_section(target_dir_relative, base_dir=BASE_DIR, file_extension=".mdx"):
import re
target_path = os.path.join(base_dir, target_dir_relative)
if not os.path.isdir(target_path):
print(f"Error: Directory '{target_path}' not found.")
return
removed_count = 0
error_count = 0
for filename in os.listdir(target_path):
if filename.endswith(file_extension):
filepath = os.path.join(target_path, filename)
try:
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
pattern = re.compile(r"\{/\*[\s\S]*?Contributing Section[\s\S]*?</CardGroup>", re.DOTALL)
new_content = re.sub(pattern, "", content, count=1)
if new_content != content:
with open(filepath, "w", encoding="utf-8") as f:
f.write(new_content)
removed_count += 1
except (IOError, OSError) as e:
print(f"Error processing file {filepath}: {e}")
error_count += 1
fix_md_endings(target_dir_relative, base_dir, file_extension)
print(f"Removed from {removed_count} files. Encountered {error_count} errors.")
def fix_md_endings(target_dir_relative, base_dir=BASE_DIR, file_extension=".mdx"):
target_path = os.path.join(base_dir, target_dir_relative)
if not os.path.isdir(target_path):
print(f"Error: Directory '{target_path}' not found.")
return
fixed_count = 0
error_count = 0
for filename in os.listdir(target_path):
if filename.endswith(file_extension):
filepath = os.path.join(target_path, filename)
try:
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
processed_content = content.replace("\r\n", "\n")
processed_content = processed_content.rstrip()
processed_content += "\n"
if processed_content != content:
with open(filepath, "w", encoding="utf-8") as f:
f.write(processed_content)
fixed_count += 1
except (IOError, OSError) as e:
print(f"Error processing file {filepath}: {e}")
error_count += 1
print(f"Fixed line endings and trailing lines in {fixed_count} files. Encountered {error_count} errors.")
if __name__ == "__main__":
# test
target_dir_relative = "test"
language = "zh" # "zh", "en", "jp"
repo_name = "dify-docs-plugin-dev"
repo_owner = "alterxyz"
append_content_to_files(
target_dir_relative="plugin-dev-en",
repo_owner="alterxyz",
repo_name="dify-docs-plugin-dev",
language="en"
)
append_content_to_files(
target_dir_relative="plugin-dev-zh",
repo_owner="alterxyz",
repo_name="dify-docs-plugin-dev",
language="zh"
)