Files
python_parser/python_parser/README.md
2025-09-01 12:24:37 +03:00

5.4 KiB
Raw Blame History

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 - Получение данных мониторинга топлива

📊 Поддерживаемые типы отчетов

  1. svodka_pm - Сводки по переработке нефти (ПМ)
    • Геттеры: single_og, total_ogs
  2. svodka_ca - Сводки по переработке нефти (ЦА)
    • Геттеры: get_data
  3. 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