-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
141 lines (121 loc) · 5.55 KB
/
main.py
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import os
from dotenv import load_dotenv
from utils.logger import setup_global_logger
from formatters.json_manager import JSONManager
from extractors.python_extractor import PythonExtractor
from extractors.yii2_extractor import Yii2Extractor
from extractors.react_extractor import ReactExtractor
from extractors.bitrix_extractor import BitrixExtractor
from utils.qa_manager import QAManager
# Загрузка конфигурации
load_dotenv()
SOURCE_DIR = os.getenv("SOURCE_DIR")
OUTPUT_DIR = os.getenv("OUTPUT_DIR")
EXCLUDED_DIRS = os.getenv("EXCLUDED_DIRS", "").split(",")
EXCLUDED_DIRS = [f.strip() for f in EXCLUDED_DIRS if f.strip()] or None
PROJECT_PREFIX = os.getenv("PROJECT_PREFIX", "project")
CHUNK_SIZE = int(os.getenv("CHUNK_SIZE", "5000"))
PROJECT_TYPES = os.getenv("PROJECT_TYPES", "").split(",") # Список типов проектов
MAX_SUMMARY_FILE_SIZE = int(os.getenv("MAX_SUMMARY_FILE_SIZE", "1048576"))
INCLUDED_FILES = os.getenv("INCLUDED_FILES", "").split(",")
INCLUDED_FILES = [f.strip() for f in INCLUDED_FILES if f.strip()] or None
# Настройка глобального логгера
logger = setup_global_logger(PROJECT_PREFIX)
# Создаем экземпляр JSONManager
json_manager = JSONManager(output_directory=OUTPUT_DIR, project_prefix=PROJECT_PREFIX)
def clear_output_directory(output_dir):
"""
Удаляет все файлы с расширением .json и .jsonl в указанной директории.
:param output_dir: Путь к директории для очистки.
"""
logger.info(f"Очистка директории вывода: {output_dir}")
for root, dirs, files in os.walk(output_dir):
for file in files:
if file.endswith(".json") or file.endswith(".jsonl"):
file_path = os.path.join(root, file)
try:
os.remove(file_path)
logger.info(f"Удален файл: {file_path}")
except Exception as e:
logger.error(f"Не удалось удалить файл {file_path}: {e}")
def process_project():
"""
Выполняет обработку проекта, основываясь на типах проектов.
"""
if "python" in PROJECT_TYPES:
logger.info("Обработка Python файлов...")
python_extractor = PythonExtractor(
project_root=SOURCE_DIR,
output_dir=OUTPUT_DIR,
prefix=PROJECT_PREFIX,
json_manager=json_manager,
chunk_size=CHUNK_SIZE,
excluded_dirs=EXCLUDED_DIRS,
included_files=INCLUDED_FILES
)
python_extractor.extract()
logger.info("Обработка Python завершена.")
if "yii2" in PROJECT_TYPES:
logger.info("Обработка Yii2 файлов...")
yii2_extractor = Yii2Extractor(
project_root=SOURCE_DIR,
output_dir=OUTPUT_DIR,
prefix=PROJECT_PREFIX,
json_manager=json_manager,
chunk_size=CHUNK_SIZE,
excluded_dirs=EXCLUDED_DIRS,
included_files=INCLUDED_FILES
)
yii2_extractor.extract()
logger.info("Обработка Yii2 завершена.")
if "react" in PROJECT_TYPES:
logger.info("Обработка React файлов...")
react_extractor = ReactExtractor(
project_root=SOURCE_DIR,
output_dir=OUTPUT_DIR,
prefix=PROJECT_PREFIX,
json_manager=json_manager,
chunk_size=CHUNK_SIZE,
excluded_dirs=EXCLUDED_DIRS,
included_files=INCLUDED_FILES
)
react_extractor.extract()
logger.info("Обработка React завершена.")
if "bitrix" in PROJECT_TYPES:
logger.info("Обработка Bitrix файлов...")
bitrix_extractor = BitrixExtractor(
project_root=SOURCE_DIR,
output_dir=OUTPUT_DIR,
prefix=PROJECT_PREFIX,
json_manager=json_manager,
chunk_size=CHUNK_SIZE,
excluded_dirs=EXCLUDED_DIRS,
included_files=INCLUDED_FILES
)
bitrix_extractor.extract()
logger.info("Обработка Bitrix завершена.")
# Здесь можно добавить обработку других типов проектов:
# if "laravel" in PROJECT_TYPES:
# logger.info("Обработка Laravel файлов...")
# laravel_extractor = LaravelExtractor(SOURCE_DIR, OUTPUT_DIR, PROJECT_PREFIX, json_manager, CHUNK_SIZE, EXCLUDED_DIRS)
# laravel_extractor.extract()
# logger.info("Обработка Laravel завершена.")
def main():
logger.info("Начало обработки проекта...")
try:
# Очистка директории вывода
clear_output_directory(OUTPUT_DIR)
# Обработка проекта на основе типов
process_project()
# Сохранение всех данных
logger.info("Сохранение всех данных...")
json_manager.save_all(group_by="metadata.source", max_summary_file_size=MAX_SUMMARY_FILE_SIZE)
qa_manager = QAManager()
qa_manager.save_to_jsonl()
logger.info("Все данные успешно сохранены.")
except Exception as e:
logger.error(f"Ошибка обработки: {e}")
raise
logger.info("Обработка завершена успешно.")
if __name__ == "__main__":
main()