dataloader/rest_template.md

129 lines
6.7 KiB
Markdown
Raw Permalink Normal View History

2025-11-04 23:11:41 +01:00
```bash
aigw-project/
└── src/
└── tenera_etl/ # следует использовать своё название
├── api/
│ ├── v1/
│ │ ├── __init__.py
│ │ ├── router.py
│ │ ├── schemas.py # pydantic models
│ │ ├── service.py
│ │ ├── models.py # db models, data classes, named tuples
│ │ ├── exceptions.py
│ │ └── utils.py
│ ├── __init__.py
│ ├── middleware.py
│ ├── os_router.py # роутер для health и status endpoints
│ ├── metric_router.py # !BETA! роутер для оценки сервиса
│ └── schemas.py # валидация endpoint-ов из os_router и metric_router
├── interfaces/ # интерфейсы для подключения к внешним AC
├── logger/
│ ├── __init__.py
│ ├── context_vars.py # управление контекстом запросов для логирования
│ ├── logger.py # реализация логгера
│ ├── models.py # модели логов, метрик, событий аудита
│ ├── utils.py # функции + маскирование args
│ └── uvicorn_logging_config.py # конфигурация логирования uvicorn
├── __main__.py
├── base.py
├── config.py # global configs
├── exceptions.py # global exceptions
└── context.py
├── tests/
│ └── integration_tests/
│ ├── fixtures/
│ │ └── fixture_*.py
│ ├── conftest.py
│ ├── gigachat_interface/ # тесты интерфейсов (на GigaController)
│ │ └── test_gptchat_*.py
│ └── v1_api/
│ ├── constants.py
│ ├── test_service.py # тесты бизнес-логики
│ └── test_service_*.py
├── app.sh # запуск в OpenShift, содержит tool.poetry.scripts
├── Dockerfile # основной Dockerfile
├── Dockerfile-k8s # локальный Docker
├── pyproject.toml
├── poetry.lock
├── .env # переменные окружения
└── .gitignore
```
## 📁 Назначение ключевых файлов
### `src/tenera_etl/`
| Файл | Назначение |
|--------------------------|------------|
| `__main__.py` | Точка входа. Запускает FastAPI-приложение. |
| `config.py` | Загрузка и обработка переменных окружения. |
| `base.py` | Базовые классы и типы, переиспользуемые в проекте. |
2025-11-05 14:01:37 +01:00
| `context.py` | Реализация паттерна `AppContext` - единая точка доступа к зависимостям. |
2025-11-04 23:11:41 +01:00
---
### `src/tenera_etl/logger/`
| Файл | Назначение |
|------------------------------|------------|
| `context_vars.py` | Контекстные переменные для логирования (`Request-ID` и др.). ⚠️ Не редактировать.|
| `logger.py` | Основной логгер приложения. ⚠️ Не редактировать. |
| `models.py` | Модели логов, метрик, аудита. ⚠️ Не редактировать. |
| `utils.py` | Утилиты логгера, включая маскирование данных. |
| `uvicorn_logging_config.py` | Конфигурация логгирования `uvicorn`. |
---
### `src/tenera_etl/api/`
| Файл | Назначение |
|--------------------|------------|
2025-11-05 14:01:37 +01:00
| `__init__.py` | Конфигуратор FastAPI - регистрация версий и роутов. |
2025-11-04 23:11:41 +01:00
| `os_router.py` | Инфраструктурные endpoint'ы (`/health`, `/status`). ⚠️ Не редактировать. |
| `metric_router.py` | Метрики (BETA). ⚠️ Не редактировать. |
| `schemas.py` | Схемы (Pydantic) для `os_router` и `metric_router`. ⚠️ Не редактировать. |
| `middleware.py` | Мидлвар для логирования входящих и исходящих запросов. ⚠️ Не редактировать. |
---
### `src/tenera_etl/api/v1/`
| Файл | Назначение |
|------------------|------------|
| `router.py` | Основные endpoint'ы бизнес-логики (`v1`). |
| `schemas.py` | Pydantic-схемы запросов и ответов. |
| `models.py` | Модели данных (DB, классы, namedtuples). |
| `service.py` | Реализация бизнес-логики. |
| `utils.py` | Утилиты и вспомогательные функции. |
| `exceptions.py` | Исключения (`RestNotFound`, `InvalidUserData`, и др.). |
---
### `src/tenera_etl/interfaces/`
| Файл / Папка | Назначение |
|--------------|------------|
| *всё содержимое* | Интерфейсы взаимодействия с внешними системами (АС и пр.). |
Пример логирования в коде:
```python
from tenera_etl.logger import logger
logger.info("End processing user registration request")
```
2025-11-05 14:01:37 +01:00
⚠️ Не передавайте в logger.info(...) ничего, кроме строки - она будет записана в поле message.
2025-11-04 23:11:41 +01:00
Маскирование чувствительных данных
В файле logger/utils.py реализовано маскирование:
все поля, содержащие ключевые слова вроде password, token, secret, будут скрыты;
работает автоматически, но вы можете конфигурировать список слов и правила.
2025-11-05 14:01:37 +01:00
Перед добавлением кастомной маскировки - ознакомьтесь с документацией, чтобы избежать утечки данных.