80 lines
2.7 KiB
Python
80 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
||
"""Сборщик итогового файла test.js.
|
||
|
||
Берёт файл tpl.js и заменяет в нём строку-заглушку "code;" на
|
||
объединённое содержимое всех файлов из папки src (в алфавитном порядке).
|
||
Результат сохраняется в файл test.js.
|
||
"""
|
||
|
||
import os
|
||
|
||
# Файлы, участвующие в сборке (пути относительно скрипта)
|
||
TPL_FILE = "tpl.js"
|
||
SRC_DIR = "src"
|
||
OUTPUT_FILE = "test.js"
|
||
|
||
# Строка-заглушка, которую заменяем на код из src
|
||
PLACEHOLDER = "code;"
|
||
|
||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||
|
||
|
||
def read_file(path):
|
||
"""Читает файл и возвращает его содержимое в виде строки."""
|
||
with open(path, "r", encoding="utf-8") as f:
|
||
return f.read()
|
||
|
||
|
||
def write_file(path, content):
|
||
"""Записывает содержимое в файл."""
|
||
with open(path, "w", encoding="utf-8") as f:
|
||
f.write(content)
|
||
|
||
|
||
def build():
|
||
"""Собирает итоговый файл test.js из tpl.js и содержимого src/."""
|
||
# Читаем шаблон
|
||
tpl_path = os.path.join(BASE_DIR, TPL_FILE)
|
||
if not os.path.isfile(tpl_path):
|
||
raise FileNotFoundError("Не найден файл шаблона: {}".format(TPL_FILE))
|
||
template = read_file(tpl_path)
|
||
|
||
# Читаем файлы из папки src в алфавитном порядке
|
||
src_path = os.path.join(BASE_DIR, SRC_DIR)
|
||
parts = []
|
||
if os.path.isdir(src_path):
|
||
src_files = sorted(
|
||
f for f in os.listdir(src_path)
|
||
if os.path.isfile(os.path.join(src_path, f))
|
||
)
|
||
for name in src_files:
|
||
parts.append(read_file(os.path.join(src_path, name)))
|
||
else:
|
||
print("Предупреждение: не найдена папка: {}".format(SRC_DIR + "/"))
|
||
|
||
code_content = "\n".join(parts)
|
||
|
||
# Проверяем наличие заглушки
|
||
if PLACEHOLDER not in template:
|
||
raise ValueError(
|
||
"В шаблоне {} не найдена строка-заглушка '{}'".format(
|
||
TPL_FILE, PLACEHOLDER
|
||
)
|
||
)
|
||
|
||
# Заменяем заглушку на объединённый код src
|
||
result = template.replace(PLACEHOLDER, code_content)
|
||
|
||
# Записываем результат
|
||
output_path = os.path.join(BASE_DIR, OUTPUT_FILE)
|
||
write_file(output_path, result)
|
||
|
||
print("Готово: {} -> {} ({} символов)".format(
|
||
", ".join([TPL_FILE, SRC_DIR + "/*"]),
|
||
OUTPUT_FILE,
|
||
len(result),
|
||
))
|
||
|
||
|
||
if __name__ == "__main__":
|
||
build() |