| # Руководство по интеграции модуля Common | |
| ## 📋 Обзор | |
| Модуль `common/` содержит общие утилиты для улучшения кода проекта. Он уже создан и документирован, но пока не интегрирован в основной код. | |
| ## 🎯 Преимущества интеграции | |
| ### 1. **Централизованное управление исключениями** | |
| ```python | |
| from common import AudioFileException, ValidationException | |
| try: | |
| # код обработки аудио | |
| except AudioFileException as e: | |
| logger.error(f"Ошибка аудиофайла: {e}") | |
| ``` | |
| ### 2. **Единые константы и настройки** | |
| ```python | |
| from common import UIColors, Messages, AudioFormats | |
| # Использование в GUI | |
| button.setStyleSheet(f"background-color: {UIColors.PRIMARY}") | |
| error_message = Messages.AUDIO_FILE_ERROR | |
| ``` | |
| ### 3. **Централизованное логирование** | |
| ```python | |
| from common import configure_logging, get_logger | |
| # В main.py или run_gui.py | |
| configure_logging() | |
| logger = get_logger(__name__) | |
| ``` | |
| ### 4. **Типизированные модели данных** | |
| ```python | |
| from common import PipelineResult, PatientMetadata | |
| result = PipelineResult( | |
| status="success", | |
| transcription="...", | |
| metadata=PatientMetadata( | |
| patient_name="ФИО", | |
| patient_dob="дата" | |
| ) | |
| ) | |
| ``` | |
| ### 5. **Валидация данных** | |
| ```python | |
| from common import Validator, ValidationException | |
| try: | |
| Validator.validate_audio_file(audio_path) | |
| Validator.validate_api_key(api_key) | |
| except ValidationException as e: | |
| # обработка ошибки | |
| ``` | |
| ## 🔄 План поэтапной интеграции | |
| ### Этап 1: Логирование (Приоритет: Высокий) | |
| **Файлы для изменения:** | |
| - `app/gui_app.py` | |
| - `pipeline/medical_pipeline.py` | |
| - `corrector/llm_corrector.py` | |
| - `stt/whisper_transcriber.py` | |
| **Изменения:** | |
| ```python | |
| # Заменить | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| # На | |
| from common import get_logger | |
| logger = get_logger(__name__) | |
| ``` | |
| **В точках входа (run_gui.py, app/main.py):** | |
| ```python | |
| from common import configure_logging | |
| if __name__ == "__main__": | |
| configure_logging() | |
| # остальной код | |
| ``` | |
| ### Этап 2: Исключения (Приоритет: Средний) | |
| **Файлы для изменения:** | |
| - `stt/audio_processor.py` | |
| - `corrector/llm_corrector.py` | |
| - `pipeline/medical_pipeline.py` | |
| **Изменения:** | |
| ```python | |
| # Заменить общие исключения | |
| raise ValueError("Некорректный аудиофайл") | |
| # На специфичные | |
| from common import AudioFileException | |
| raise AudioFileException("Некорректный аудиофайл") | |
| ``` | |
| ### Этап 3: Константы UI (Приоритет: Средний) | |
| **Файлы для изменения:** | |
| - `app/gui_app.py` | |
| **Изменения:** | |
| ```python | |
| from common import UIColors, UIDimensions, Messages | |
| # Использовать в apply_styles() | |
| style = f""" | |
| QPushButton {{ | |
| background-color: {UIColors.PRIMARY}; | |
| min-height: {UIDimensions.BUTTON_HEIGHT}px; | |
| }} | |
| """ | |
| ``` | |
| ### Этап 4: Валидация (Приоритет: Низкий) | |
| **Файлы для изменения:** | |
| - `app/gui_app.py` (валидация пользовательского ввода) | |
| - `pipeline/medical_pipeline.py` (валидация путей) | |
| **Изменения:** | |
| ```python | |
| from common import Validator, ValidationException | |
| try: | |
| Validator.validate_audio_file(audio_path) | |
| Validator.validate_patient_data(patient_data) | |
| except ValidationException as e: | |
| # показать ошибку пользователю | |
| ``` | |
| ### Этап 5: Модели данных (Приоритет: Низкий) | |
| **Файлы для изменения:** | |
| - `pipeline/medical_pipeline.py` | |
| **Изменения:** | |
| ```python | |
| from common import PipelineResult, PatientMetadata | |
| def process(...) -> PipelineResult: | |
| # использовать типизированные модели | |
| return PipelineResult(...) | |
| ``` | |
| ## 🚀 Быстрый старт (минимальная интеграция) | |
| Для быстрого улучшения проекта начните с логирования: | |
| 1. **Шаг 1**: Обновите `run_gui.py`: | |
| ```python | |
| #!/usr/bin/env python3 | |
| import sys | |
| from pathlib import Path | |
| project_root = Path(__file__).parent | |
| if str(project_root) not in sys.path: | |
| sys.path.insert(0, str(project_root)) | |
| # Добавить централизованное логирование | |
| from common import configure_logging | |
| if __name__ == "__main__": | |
| configure_logging() # Настроить логирование | |
| from app.gui_app import main | |
| main() | |
| ``` | |
| 2. **Шаг 2**: В `app/gui_app.py` замените стандартный logger: | |
| ```python | |
| # Было: | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| # Стало: | |
| from common import get_logger | |
| logger = get_logger(__name__) | |
| ``` | |
| 3. **Шаг 3**: Повторите для остальных файлов | |
| ## 📝 Проверка интеграции | |
| После интеграции проверьте: | |
| 1. **Логирование работает**: | |
| - Логи появляются в папке `logs/` | |
| - Формат логов единообразный | |
| - Уровни логирования корректны | |
| 2. **Исключения корректны**: | |
| - Специфичные исключения вместо общих | |
| - Правильная обработка ошибок | |
| 3. **UI консистентен**: | |
| - Единые цвета и размеры | |
| - Единообразные сообщения | |
| ## ⚠️ Важные замечания | |
| 1. **Обратная совместимость**: Интеграция не ломает существующий код | |
| 2. **Постепенность**: Можно интегрировать по одному модулю | |
| 3. **Тестирование**: После каждого этапа проверяйте работоспособность | |
| 4. **Документация**: Обновляйте комментарии при изменениях | |
| ## 🔗 Связанные файлы | |
| - [APP_ARCHITECTURE.md](APP_ARCHITECTURE.md) - Архитектура приложения | |
| - [common/__init__.py](common/__init__.py) - Экспорты модуля | |
| - [FILES_REFACTORED.md](FILES_REFACTORED.md) - Документация по рефакторингу | |
| --- | |
| **Статус модуля**: ✅ Готов к интеграции | |
| **Рекомендация**: Начните с логирования (Этап 1), затем постепенно добавляйте остальные модули | |