Refactor project structure and add new features

This commit is contained in:
Serge Zaigraeff
2025-10-23 00:42:09 +03:00
parent 144414fcf8
commit 852f7975b9
63 changed files with 8101 additions and 1341 deletions
+90 -54
View File
@@ -1,15 +1,33 @@
import json
"""
Главный модуль приложения, содержащий класс WhisperServiceAPI для инициализации
и запуска сервиса распознавания речи.
"""
import os
import logging
from flask import Flask
from typing import Dict
from flask import Flask
import waitress
from .core.transcriber import WhisperTranscriber
from .core.config import load_config
from .api.routes import Routes
from .infrastructure.validation.validators import FileValidator
from .infrastructure.storage.file_manager import temp_file_manager
from .infrastructure.logging.config import setup_logging
from .infrastructure.logging.request_logger import RequestLogger
# Импорт классов и функций из других модулей
from .transcriber import WhisperTranscriber
from .routes import Routes
from .utils import logger
class WhisperServiceAPI:
"""Класс для API сервиса распознавания речи."""
"""
Класс для API сервиса распознавания речи.
Attributes:
config (Dict): Словарь с параметрами конфигурации.
port (int): Порт для сервиса.
transcriber (WhisperTranscriber): Экземпляр транскрайбера.
app (Flask): Flask-приложение.
file_validator (FileValidator): Валидатор файлов.
"""
def __init__(self, config_path: str):
"""
@@ -19,50 +37,68 @@ class WhisperServiceAPI:
config_path: Путь к конфигурационному файлу.
"""
# Загрузка конфигурации
self.config = self._load_config(config_path)
# Порт для сервиса
self.port = self.config["service_port"]
# Создание экземпляра транскрайбера
self.transcriber = WhisperTranscriber(self.config)
# Создание Flask-приложения
self.app = Flask("whisper-service")
# Регистрация маршрутов
Routes(self.app, self.transcriber, self.config)
logger.info(f"API сервис инициализирован, порт: {self.port}")
def _load_config(self, config_path: str) -> Dict:
"""
Загрузка конфигурации из JSON-файла.
Args:
config_path: Путь к файлу конфигурации.
Returns:
Словарь с параметрами конфигурации.
Raises:
FileNotFoundError: Если файл конфигурации не найден.
json.JSONDecodeError: Если файл конфигурации содержит некорректный JSON.
"""
try:
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
return config
except FileNotFoundError as e:
logger.error(f"Файл конфигурации не найден: {e}")
raise
except json.JSONDecodeError as e:
logger.error(f"Ошибка при загрузке конфигурации: {e}")
raise
def run(self):
"""Запуск сервиса."""
logger.info(f"Запуск сервиса на порту {self.port}")
self.config = load_config(config_path)
# Использовать waitress для production-ready сервера
waitress.serve(self.app, host='0.0.0.0', port=self.port)
# Установка уровня логирования
log_level = getattr(logging, self.config.get('log_level', 'INFO').upper())
log_file = self.config.get('log_file')
setup_logging(log_level=log_level, log_file=log_file)
# Получаем логгер для этого модуля
self.logger = logging.getLogger('app')
self.logger.info("Инициализация WhisperServiceAPI")
# Инициализация Flask приложения
self.app = Flask(__name__)
self.port = self.config.get('port', 5000)
# Инициализация компонентов
self.transcriber = WhisperTranscriber(self.config)
self.file_validator = FileValidator(self.config)
# Настройка логирования запросов
request_logger_config = self.config.get('request_logger', {})
request_logger = RequestLogger(self.app, request_logger_config)
# Регистрация маршрутов
routes = Routes(self.app, self.transcriber, self.config, self.file_validator)
# Регистрация обработчиков очистки
self._register_cleanup_handlers()
self.logger.info("WhisperServiceAPI успешно инициализирован")
def _register_cleanup_handlers(self) -> None:
"""
Регистрация обработчиков для очистки ресурсов при завершении приложения.
"""
@self.app.teardown_appcontext
def cleanup(error):
"""
Очистка временных файлов при завершении контекста запроса.
Args:
error: Ошибка, если она произошла.
"""
# Выполнение очистки временных файлов, если необходимо
pass
def run(self, host: str = '0.0.0.0', debug: bool = False) -> None:
"""
Запуск Flask приложения.
Args:
host: Хост для запуска приложения.
debug: Флаг отладочного режима.
"""
self.logger.info(f"Запуск сервиса на {host}:{self.port}")
self.app.run(host=host, port=self.port, debug=debug)
def create_app(self) -> Flask:
"""
Создание и настройка Flask приложения (для использования с WSGI серверами).
Returns:
Настроенное Flask приложение.
"""
return self.app