import os import re 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. */}} 通过直接提交修改来帮助改进文档内容 发现错误或有改进建议?请提交问题反馈 """ elif language == "en": contributing_section = f""" {{/* Contributing Section DO NOT edit this section! It will be automatically generated by the script. */}} Help improve our documentation by contributing directly Found an error or have suggestions? Let us know """ elif language == "ja": contributing_section = f""" {{/* Contributing Section DO NOT edit this section! It will be automatically generated by the script. */}} 直接貢献することでドキュメントの改善にご協力ください エラーを見つけたり提案がありますか?お知らせください """ else: raise ValueError( "Unsupported language. Supported languages are 'zh', 'en', and 'ja'." ) 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 root, dirs, files in os.walk(target_path): for filename in files: if filename.endswith(file_extension): filepath = os.path.join(root, filename) current_dir_relative = os.path.relpath(root, base_dir) try: with open(filepath, "a", encoding="utf-8") as f: f.write( generate_contributing_section( repo_owner, repo_name, current_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 tree starting at '{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" ): 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 root, dirs, files in os.walk(target_path): for filename in files: if filename.endswith(file_extension): filepath = os.path.join(root, filename) try: with open(filepath, "r", encoding="utf-8") as f: content = f.read() pattern = re.compile( r"\{\/\*\s*Contributing Section[\s\S]*?\*\/\}[\s\S]*?[\s\S]*?", re.DOTALL, ) new_content = re.sub(pattern, "", content) 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"Finished processing directory tree starting at '{target_path}'. " 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 root, dirs, files in os.walk(target_path): for filename in files: if filename.endswith(file_extension): filepath = os.path.join(root, 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"Finished processing directory tree starting at '{target_path}'. " f"Fixed line endings and trailing lines in {fixed_count} files. Encountered {error_count} errors." ) def refresh( target_dir_relative, repo_owner, repo_name, language, base_dir=BASE_DIR, file_extension=".mdx", ): remove_contributing_section(target_dir_relative, base_dir, file_extension) append_content_to_files( target_dir_relative, repo_owner, repo_name, language, base_dir, file_extension ) def loop(dict): for config_name, config_data in dict.items(): refresh( target_dir_relative=config_data["target_dir_relative"], repo_owner=config_data["repo_owner"], repo_name=config_data["repo_name"], language=config_data["language"], ) def main_contributing_in_page(): process = { # Help Documentation "zh_help": { "target_dir_relative": "zh-hans", "repo_owner": "langgenius", "repo_name": "dify-docs-mintlify", "language": "zh", }, "en_help": { "target_dir_relative": "en", "repo_owner": "langgenius", "repo_name": "dify-docs-mintlify", "language": "en", }, "ja_help": { "target_dir_relative": "ja-jp", "repo_owner": "langgenius", "repo_name": "dify-docs-mintlify", "language": "ja", }, # Plugin Development "zh_plugin_dev": { "target_dir_relative": "plugin_dev_zh", "repo_owner": "langgenius", "repo_name": "dify-docs-mintlify", "language": "zh", }, "en_plugin_dev": { "target_dir_relative": "plugin_dev_en", "repo_owner": "langgenius", "repo_name": "dify-docs-mintlify", "language": "en", }, "ja_plugin_dev": { "target_dir_relative": "plugin_dev_ja", "repo_owner": "langgenius", "repo_name": "dify-docs-mintlify", "language": "ja" }, } try: loop(process) return "success" except Exception as e: return (f"{str(e)}") if __name__ == "__main__": result_message = main_contributing_in_page() print("\n--- Script Execution Result ---") print(result_message)