dataloader/rest_template.md

6.7 KiB
Raw Blame History

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 Базовые классы и типы, переиспользуемые в проекте.
context.py Реализация паттерна AppContext — единая точка доступа к зависимостям.

src/tenera_etl/logger/

Файл Назначение
context_vars.py Контекстные переменные для логирования (Request-ID и др.). ⚠️ Не редактировать.
logger.py Основной логгер приложения. ⚠️ Не редактировать.
models.py Модели логов, метрик, аудита. ⚠️ Не редактировать.
utils.py Утилиты логгера, включая маскирование данных.
uvicorn_logging_config.py Конфигурация логгирования uvicorn.

src/tenera_etl/api/

Файл Назначение
__init__.py Конфигуратор FastAPI — регистрация версий и роутов.
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/

Файл / Папка Назначение
всё содержимое Интерфейсы взаимодействия с внешними системами (АС и пр.).

Пример логирования в коде:

from tenera_etl.logger import logger

logger.info("End processing user registration request")

⚠️ Не передавайте в logger.info(...) ничего, кроме строки — она будет записана в поле message.

Маскирование чувствительных данных

В файле logger/utils.py реализовано маскирование:

все поля, содержащие ключевые слова вроде password, token, secret, будут скрыты;

работает автоматически, но вы можете конфигурировать список слов и правила.

Перед добавлением кастомной маскировки — ознакомьтесь с документацией, чтобы избежать утечки данных.