-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmake_summary.py
More file actions
96 lines (75 loc) · 4.36 KB
/
make_summary.py
File metadata and controls
96 lines (75 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
## \file /src/endpoints/hypo69/code_assistant/make_summary.py
# -*- coding: utf-8 -*-
#! venv/bin/python/python3.12
"""
module: src.endpoints.hypo69.code_assistant.make_summary
:platform: Windows, Unix
:synopsis: Модуль собирает файл `summary.md` для компиляции средствами `mdbook`
Подробнее: https://chatgpt.com/share/6742f054-aaa0-800d-9f84-0ab035a2a2c2
"""
from pathlib import Path
import argparse
import header # Импорт модуля, который определяет корневой путь проекта
# Используем корневой путь проекта
PROJECT_ROOT = header.__root__
def make_summary(docs_dir: Path, lang: str = 'en') -> None:
"""
Создает файл SUMMARY.md, рекурсивно обходя папку.
Args:
docs_dir (Path): Путь к исходной директории 'src'.
lang (str): Язык фильтрации файлов. Возможные значения: 'ru' или 'en'.
"""
# Используем корневой путь для формирования пути к SUMMARY.md
summary_file = prepare_summary_path(docs_dir)
summary_file.parent.mkdir(parents=True, exist_ok=True)
_make_summary(docs_dir, summary_file, lang)
def _make_summary(src_dir: Path, summary_file: Path, lang: str = 'en') -> bool:
"""
Рекурсивно обходит папку и создает файл SUMMARY.md с главами на основе .md файлов.
Args:
src_dir (Path): Путь к папке с исходниками .md.
summary_file (Path): Путь для сохранения файла SUMMARY.md.
lang (str): Язык фильтрации файлов. Возможные значения: 'ru' или 'en'.
"""
try:
if summary_file.exists():
print(f"Файл {summary_file} уже существует. Его содержимое будет перезаписано.")
with summary_file.open('w', encoding='utf-8') as summary:
summary.write('# Summary\n\n')
for path in sorted(src_dir.rglob('*.md')):
if path.name == 'SUMMARY.md':
continue
# Фильтрация файлов по языку
if lang == 'ru' and not path.name.endswith('.ru.md'):
continue # Пропускаем файлы без суффикса .ru.md
elif lang == 'en' and path.name.endswith('.ru.md'):
continue # Пропускаем файлы с суффиксом .ru.md
relative_path = path.relative_to(src_dir.parent)
summary.write(f'- [{path.stem}]({relative_path.as_posix()})\n')
return True
except Exception as ex:
print(f"Ошибка создания файла `summary.md`: {ex}")
return False
def prepare_summary_path(src_dir: Path, file_name: str = 'SUMMARY.md') -> Path:
"""
Формирует путь к файлу, заменяя часть пути 'src' на 'docs' и добавляя имя файла.
Args:
src_dir (Path): Исходный путь с 'src'.
file_name (str): Имя файла, который нужно создать. По умолчанию 'SUMMARY.md'.
Returns:
Path: Новый путь к файлу.
"""
# Используем корневой путь для формирования пути к SUMMARY.md
new_dir = PROJECT_ROOT / 'docs'
summary_file = new_dir / file_name
return summary_file
if __name__ == '__main__':
# Парсинг аргументов командной строки
parser = argparse.ArgumentParser(description="Создание файла SUMMARY.md с фильтрацией по языку.")
parser.add_argument('-lang', type=str, choices=['ru', 'en'], default='en', help="Язык фильтрации файлов (ru или en). По умолчанию 'en'.")
parser.add_argument('src_dir', type=str, help="Путь к исходной директории 'src'.")
args = parser.parse_args()
# Преобразование пути в объект Path
src_dir = PROJECT_ROOT / args.src_dir
# Вызов функции make_summary с переданными аргументами
make_summary(src_dir, args.lang)