5.4 KiB
5.4 KiB
NIN Excel Parsers API
API для парсинга Excel отчетов нефтеперерабатывающих заводов (НПЗ) с использованием FastAPI и MinIO для хранения данных.
🚀 Быстрый запуск
Вариант 1: Все сервисы в Docker (рекомендуется)
# Запуск всех сервисов: MinIO + FastAPI + Streamlit
docker-compose up -d
# Доступ:
# - MinIO Console: http://localhost:9001
# - FastAPI: http://localhost:8000
# - Streamlit: http://localhost:8501
# - API Docs: http://localhost:8000/docs
Вариант 2: Только MinIO в Docker + FastAPI локально
# Запуск MinIO в Docker
docker-compose up -d minio
# Запуск FastAPI локально
python run_dev.py
# В отдельном терминале запуск Streamlit
cd streamlit_app
streamlit run app.py
Вариант 3: Только MinIO в Docker
# Запуск только MinIO
docker-compose up -d minio
📋 Описание сервисов
- MinIO (порт 9000-9001): S3-совместимое хранилище для данных
- FastAPI (порт 8000): API сервер для парсинга Excel файлов
- Streamlit (порт 8501): Веб-интерфейс для демонстрации API
🛑 Остановка
Остановка Docker сервисов:
# Все сервисы
docker-compose down
# Только MinIO
docker-compose stop minio
Остановка локальных сервисов:
# Нажмите Ctrl+C в терминале с FastAPI/Streamlit
📁 Структура проекта
python_parser/
├── app/ # FastAPI приложение
│ ├── main.py # Основной файл приложения
│ └── schemas/ # Pydantic схемы
├── core/ # Бизнес-логика
│ ├── models.py # Модели данных
│ ├── ports.py # Интерфейсы (порты)
│ └── services.py # Сервисы
├── adapters/ # Адаптеры для внешних систем
│ ├── storage.py # MinIO адаптер
│ └── parsers/ # Парсеры Excel файлов
├── streamlit_app/ # Изолированный Streamlit пакет
│ ├── app.py # Основное Streamlit приложение
│ ├── requirements.txt # Зависимости Streamlit
│ ├── Dockerfile # Docker образ для Streamlit
│ └── .streamlit/ # Конфигурация Streamlit
├── data/ # Тестовые данные
├── docker-compose.yml # Docker Compose конфигурация
├── Dockerfile # Docker образ для FastAPI
└── run_dev.py # Запуск FastAPI локально
🔍 Доступные эндпоинты
- GET / - Информация об API
- GET /docs - Swagger документация
- GET /parsers - Список доступных парсеров
- GET /parsers/{parser_name}/getters - Информация о геттерах парсера
- POST /svodka_pm/upload-zip - Загрузка сводок ПМ
- POST /svodka_ca/upload - Загрузка сводок ЦА
- POST /monitoring_fuel/upload-zip - Загрузка мониторинга топлива
- POST /svodka_pm/get_data - Получение данных сводок ПМ
- POST /svodka_ca/get_data - Получение данных сводок ЦА
- POST /monitoring_fuel/get_data - Получение данных мониторинга топлива
📊 Поддерживаемые типы отчетов
- svodka_pm - Сводки по переработке нефти (ПМ)
- Геттеры:
single_og,total_ogs
- Геттеры:
- svodka_ca - Сводки по переработке нефти (ЦА)
- Геттеры:
get_data
- Геттеры:
- monitoring_fuel - Мониторинг топлива
- Геттеры:
total_by_columns,month_by_code
- Геттеры:
🏗️ Архитектура
Проект использует Hexagonal Architecture (Ports and Adapters):
- Порты (Ports): Интерфейсы для бизнес-логики
- Адаптеры (Adapters): Реализации для внешних систем
- Сервисы (Services): Бизнес-логика приложения
Система геттеров парсеров
Каждый парсер может иметь несколько методов получения данных (геттеров):
- Регистрация геттеров в словаре с метаданными
- Валидация параметров для каждого геттера
- Единый интерфейс
get_value(getter_name, params)
🐳 Docker
Сборка образов:
# FastAPI
docker build -t nin-fastapi .
# Streamlit
docker build -t nin-streamlit ./streamlit_app
Запуск отдельных сервисов:
# Только MinIO
docker-compose up -d minio
# MinIO + FastAPI
docker-compose up -d minio fastapi
# Все сервисы
docker-compose up -d