Files
mostovik-backend/README.md
Aleksandr Meshchriakov 199d871923
Some checks failed
CI/CD Pipeline / Build Docker Images (push) Blocked by required conditions
CI/CD Pipeline / Push to Gitea Registry (push) Blocked by required conditions
CI/CD Pipeline / Code Quality Checks (push) Failing after 3m55s
CI/CD Pipeline / Run Tests (push) Failing after 3h11m38s
feat(parsers): add proverki.gov.ru parser with sync_inspections task
- Add InspectionRecord model with is_federal_law_248, data_year, data_month fields
- Add ProverkiClient with Playwright support for JS-rendered portal
- Add streaming XML parser for large files (>50MB)
- Add sync_inspections task with incremental loading logic
  - Starts from 01.01.2025 if DB is empty
  - Loads both FZ-294 and FZ-248 inspections
  - Stops after 2 consecutive empty months
- Add InspectionService methods: get_last_loaded_period, has_data_for_period
- Add Minpromtorg parsers (certificates, manufacturers)
- Add Django Admin for parser models
- Update README with parsers documentation and changelog
2026-01-21 20:16:25 +01:00

13 KiB
Raw Blame History

Django ETL Boilerplate

Шаблон Django приложения для ETL (Extract, Transform, Load) операций с функциями веб-скрапинга.

Технологический стек

  • Python: 3.11.2
  • Django: 3.2.25
  • Django REST Framework: 3.14.0
  • PostgreSQL: 15.10
  • Redis: 7.x
  • Celery: 5.3.6
  • Playwright: 1.52+ (browser automation)
  • Gunicorn: 21.2.0
  • Apache: 2.4.57

Парсеры данных

Проект включает парсеры для загрузки данных из государственных источников:

Минпромторг (minpromtorg.gov.ru)

  • Сертификаты промышленного производства - parse_industrial_production
  • Реестр производителей - parse_manufactures

Единый реестр проверок (proverki.gov.ru)

  • Проверки по ФЗ-294 - традиционные проверки
  • Проверки по ФЗ-248 - новые проверки с 2021 года
  • Автоматическая синхронизация - sync_inspections

Запуск парсеров

# Через Celery
from apps.parsers.tasks import (
    parse_industrial_production,
    parse_manufactures, 
    parse_inspections,
    sync_inspections,
)

# Парсинг сертификатов
parse_industrial_production.delay()

# Парсинг производителей
parse_manufactures.delay()

# Парсинг проверок за конкретный месяц
parse_inspections.delay(year=2025, month=10, is_federal_law_248=False)

# Автоматическая синхронизация (с 01.01.2025 до текущего месяца)
sync_inspections.delay()

Особенности парсера proverki.gov.ru

  • Использует Playwright для JS-рендеринга
  • Поддержка потокового парсинга для больших файлов (>50 МБ)
  • Автоматическое определение последнего загруженного периода
  • Раздельная загрузка ФЗ-294 и ФЗ-248

Структура проекта

mostovik-backend/
├── src/                    # Исходный код Django
│   ├── config/            # Конфигурация Django
│   │   ├── settings/      # Настройки (base, dev, prod, test)
│   │   ├── celery.py     # Конфигурация Celery
│   │   └── urls.py       # URL маршруты
│   ├── apps/              # Django приложения
│   │   └── user/         # Приложение пользователей
│   └── manage.py         # Управление Django
├── tests/                  # Тесты (в корне проекта)
│   ├── apps/user/         # Тесты для user app
│   ├── conftest.py       # Конфигурация pytest
│   └── README.md         # Документация по тестам
├── docker/                # Docker конфигурации  
├── deploy/                # Файлы развертывания
├── pyproject.toml         # Конфигурация проекта и инструментов
├── Makefile              # Команды для разработки
└── docker-compose.yml    # Docker Compose для разработки

Быстрый старт (локальная разработка)

1. Установка зависимостей

# Установка uv (если не установлен)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.cargo/env

# Создание виртуального окружения с uv
uv venv .venv
source .venv/bin/activate

# Установка зависимостей через uv
uv pip install -e ".[dev]"

# Или через Makefile
make install

# Настройка окружения разработки (pre-commit hooks)
make setup-dev

2. Настройка окружения

# Копирование файла окружения
cp .env.example .env

# Редактирование .env файла по необходимости
nano .env

3. Запуск с Docker Compose (рекомендуется)

# Запуск всех сервисов
docker-compose up -d

# Проверка состояния контейнеров
docker-compose ps

# Просмотр логов
docker-compose logs -f web

4. Ручная настройка (без Docker)

Запуск баз данных:

# PostgreSQL
sudo systemctl start postgresql

# Redis
sudo systemctl start redis

Миграции и запуск:

cd src

# Миграции
python manage.py makemigrations
python manage.py migrate

# Создание суперпользователя
python manage.py createsuperuser

# Запуск разработческого сервера
python manage.py runserver

# Запуск Celery worker (в отдельном терминале)
celery -A config worker --loglevel=info

# Запуск Celery beat (в отдельном терминале)
celery -A config beat --loglevel=info

API Endpoints

Основной префикс: /api/

Data Processor

  • GET/POST /api/data-sources/ - Источники данных
  • GET/POST /api/data-pipelines/ - ETL пайплайны
  • GET /api/extracted-data/ - Извлеченные данные
  • GET /api/processing-logs/ - Логи обработки

Web Scraping

  • GET/POST /api/scraping-jobs/ - Задачи скрапинга
  • GET /api/scraped-items/ - Скрапленные данные
  • GET/POST /api/spider-configurations/ - Конфигурации пауков
  • GET/POST /api/proxy-servers/ - Прокси сервера

Аутентификация

  • POST /api/api-token-auth/ - Получение API токена

Развертывание на сервере Astra Linux

Автоматическое развертывание

# Сделать скрипт исполняемым
chmod +x deploy/scripts/deploy.sh

# Запуск скрипта развертывания
sudo ./deploy/scripts/deploy.sh

Ручное развертывание

  1. Установка системных зависимостей:
sudo apt-get update
sudo apt-get install python3.11 python3.11-venv postgresql-15 redis-server nginx
  1. Настройка проекта:
# Клонирование репозитория
git clone ваш_репозиторий.git /var/www/project
cd /var/www/project

# Создание виртуального окружения
python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Настройка базы данных
sudo -u postgres psql -c "CREATE DATABASE project_prod;"
sudo -u postgres psql -c "CREATE USER project_user WITH PASSWORD 'secure_password';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE project_prod TO project_user;"
  1. Конфигурация systemd:
sudo cp deploy/systemd/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable gunicorn celery-worker celery-beat
  1. Настройка Apache:
sudo cp deploy/apache/project.conf /etc/apache2/sites-available/project.conf
sudo a2ensite project.conf
sudo a2enmod ssl rewrite headers expires
sudo a2dissite 000-default
sudo systemctl restart apache2

Мониторинг и логирование

Логи приложения

# Логи Django
tail -f logs/django.log

# Логи Celery
tail -f logs/celery.log

# Системные логи
journalctl -u gunicorn -f
journalctl -u celery-worker -f

Мониторинг Celery

# Запуск Flower (в отдельном терминале)
celery -A config flower

# Доступ через браузер: http://localhost:5555

Разработка

Запуск тестов

# Запуск всех тестов
make test

# Запуск с покрытием
make test-cov

# Запуск только быстрых тестов
make test-fast

# Запуск тестов конкретного модуля
make test TARGET=user

# Линтинг и форматирование
make lint
make format

# Проверка типов
make type-check

# Проверка безопасности
make security-check

Создание миграций

# Через Makefile
make migrate

# Или напрямую
cd src
python manage.py makemigrations
python manage.py migrate

# Создание суперпользователя
make createsuperuser

Работа с задачами Celery

# В коде Python
from apps.data_processor.tasks import process_extracted_data
from apps.scraping.tasks import run_scraping_job

# Запуск асинхронно
result = process_extracted_data.delay()
print(result.id)  # ID задачи

Конфигурация инструментов

Все конфигурации инструментов разработки централизованы в файле pyproject.toml:

  • pytest: настройки тестирования
  • coverage: отчеты о покрытии кода
  • ruff: линтинг и форматирование
  • black: форматирование кода
  • isort: сортировка импортов
  • mypy: проверка типов
  • bandit: проверка безопасности

Полезные команды Make

# Качество кода
make lint          # Проверка линтерами
make format        # Форматирование кода
make type-check    # Проверка типов
make security-check # Проверка безопасности
make pre-commit    # Запуск всех pre-commit hooks

# Тестирование
make test          # Все тесты
make test-cov      # Тесты с покрытием
make test-fast     # Только быстрые тесты

# Разработка
make shell         # Django shell
make migrate       # Миграции
make clean         # Очистка временных файлов

Безопасность

  • Все секретные ключи хранятся в переменных окружения
  • Используется HTTPS в продакшене
  • Настроены заголовки безопасности в Apache
  • Регулярное обновление зависимостей

Поддержка

Для вопросов и поддержки обращайтесь к документации Django и используемым библиотекам:

Лицензия

MIT License


Changelog

2026-01-21

Добавлено

  • Задача sync_inspections - автоматическая синхронизация проверок с proverki.gov.ru
    • Инкрементальная загрузка с последнего сохранённого периода
    • Начало с 01.01.2025 если БД пуста
    • Раздельная загрузка ФЗ-294 и ФЗ-248
    • Автоматическая остановка при отсутствии данных (2 пустых месяца)
  • Поля в модели InspectionRecord:
    • is_federal_law_248 - признак проверки по ФЗ-248
    • data_year - год загруженных данных
    • data_month - месяц загруженных данных
  • Потоковый парсинг XML для файлов >50 МБ (iterparse)
  • Методы в InspectionService:
    • get_last_loaded_period() - получение последнего загруженного периода
    • has_data_for_period() - проверка наличия данных за период

2026-01-20

Добавлено

  • Парсер proverki.gov.ru с поддержкой Playwright
  • Навигация по порталу (клик на вкладку "Скачать")
  • Парсинг XML с namespaces
  • Извлечение данных из атрибутов и вложенных элементов

2026-01-19

Добавлено

  • Парсеры Минпромторга (сертификаты, производители)
  • Модуль apps.parsers с клиентами, сервисами и задачами Celery
  • Django Admin для управления записями парсеров
  • Дедупликация по unique constraints