Skip to main content

A Django app to create reports.

Project description

PyPI version Python versions Django versions

Django-библиотека для создания и экспорта отчётов в Excel, Word и PDF форматах с поддержкой шаблонов и гибкой настройкой хранилища (локальное или S3).

Основные возможности

  • 📊 Генерация отчётов - создание Excel, Word и PDF документов

  • 📝 Работа с шаблонами - подстановка данных в готовые шаблоны

  • 🎨 Гибкое форматирование - цвета, стили, объединение ячеек

  • 💾 Два режима хранения - локальное хранилище или Amazon S3

  • Асинхронная генерация - интеграция с Celery

  • 🔄 Обратная совместимость - полная поддержка существующего кода

Установка

Базовая установка

pip install keydev-reports

Установка с поддержкой S3

pip install keydev-reports[s3]

Быстрый старт

  1. Добавьте keydev_reports в INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'keydev_reports',
]
  1. Примените миграции:

python manage.py migrate
  1. Создайте шаблон отчёта в админке Django (/admin/keydev_reports/reporttemplate/)

Настройка хранилища

Локальное хранилище (по умолчанию)

Без дополнительных настроек файлы сохраняются в MEDIA_ROOT/keydev_reports/requested_reports/:

# settings.py
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'

Хранилище Amazon S3

Шаг 1: Установка зависимостей

pip install keydev-reports[s3]

Шаг 2: Настройка Django

# settings.py

KEYDEV_REPORTS_STORAGE = {
    # Обязательные параметры
    'STORAGE_BACKEND': 's3',
    'S3_BUCKET': 'my-reports-bucket',

    # Опциональные параметры (значения по умолчанию)
    'S3_REGION': 'us-east-1',
    'S3_PREFIX': 'keydev_reports/requested_reports/',
    'S3_TEMPLATE_PREFIX': 'keydev_reports/report_templates',
    'S3_PRESIGNED_URL_EXPIRATION': 3600,  # 1 час

    # AWS credentials (не нужны при использовании IAM ролей)
    'AWS_ACCESS_KEY_ID': 'AKIA...',
    'AWS_SECRET_ACCESS_KEY': 'secret...',
}

Шаг 3: Настройка IAM политики

Минимальные права доступа для S3:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-reports-bucket/*",
            "arn:aws:s3:::my-reports-bucket"
        ]
    }]
}

Шаг 4: Автоудаление старых файлов (рекомендуется)

Настройте S3 Lifecycle Policy для автоматической очистки:

{
    "Rules": [{
        "Id": "DeleteOldReports",
        "Status": "Enabled",
        "Prefix": "keydev_reports/requested_reports/",
        "Expiration": {"Days": 7}
    }]
}

Примеры использования

Создание Excel отчёта

from keydev_reports.report_tools import ExcelCreator

# Создание отчёта
report = ExcelCreator()
sheet = report.book.add_worksheet('Sales Report')

# Добавление данных
data = [
    ['Product', 'Sales', 'Revenue'],
    ['Product A', 100, 15000],
    ['Product B', 150, 22500],
]
report.populate_with_add_table(sheet, data, start_row=0)

# Сохранение
report.save_excel()
content = report.get_bytes_io()

Работа с шаблонами Word

from keydev_reports.report_tools import WordEditor

# Загрузка шаблона
editor = WordEditor('template.docx')

# Замена переменных
editor.docx_replace(
    company_name='ACME Corp',
    report_date='2026-01-15',
    total_sales='$45,000'
)

# Добавление таблицы
table_data = [
    ['Item', 'Quantity', 'Price'],
    ['Product A', '10', '$150'],
    ['Product B', '5', '$200'],
]
editor.add_table(table_data)

# Сохранение
editor.save('report.docx')

Использование провайдеров

from keydev_reports.exporter import ReportExporter

# Создание экспортёра
exporter = ReportExporter(
    report_data={'table_data': data, 'title': 'Monthly Report'},
    user_name='john_doe',
    report_name='sales_report',
    extension='xlsx',
    provider_name='AddTableProvider'
)

# Генерация отчёта (путь к файлу или S3 URL)
report_url = exporter.get_report()

Настройка Celery для асинхронной генерации

# tasks.py
from keydev_reports.tasks import get_no_template_report

# Запуск асинхронной задачи
task = get_no_template_report.delay(
    report_data=data,
    user_name='john_doe',
    report_name='sales_report',
    extension='xlsx',
    provider_name='AddTableProvider'
)

# Получение результата
result = task.get()  # Путь к файлу или S3 URL

Параметры конфигурации

KEYDEV_REPORTS_STORAGE

Все параметры конфигурации хранилища:

Параметр

Тип

Описание

STORAGE_BACKEND

str

'local' или 's3' (по умолчанию: 'local')

S3_BUCKET

str

Имя S3 бакета (обязательно для S3)

S3_REGION

str

AWS регион (по умолчанию: 'us-east-1')

S3_PREFIX

str

Префикс пути для отчётов (по умолчанию: 'keydev_reports/requested_reports/')

S3_TEMPLATE_PREFIX

str

Префикс пути для шаблонов (по умолчанию: 'keydev_reports/report_templates')

S3_PRESIGNED_URL_EXPIRATION

int

Время жизни presigned URL в секундах (по умолчанию: 3600)

AWS_ACCESS_KEY_ID

str

AWS Access Key (опционально при использовании IAM ролей)

AWS_SECRET_ACCESS_KEY

str

AWS Secret Key (опционально при использовании IAM ролей)

Миграция между хранилищами

При переключении с локального хранилища на S3 (или наоборот):

  • ✅ Существующие файлы остаются в старом хранилище

  • ✅ Новые файлы создаются в новом хранилище

  • ⚠️ Для миграции существующих файлов необходим собственный скрипт

Использование IAM ролей (EC2/ECS)

При развёртывании на AWS EC2 или ECS можно использовать IAM роли вместо ключей доступа:

# settings.py
KEYDEV_REPORTS_STORAGE = {
    'STORAGE_BACKEND': 's3',
    'S3_BUCKET': 'my-reports-bucket',
    # AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY не нужны
}

Прикрепите IAM роль с необходимыми правами к вашему EC2 инстансу или ECS задаче.

Troubleshooting

Ошибка: “boto3 is required for S3 storage”

Установите зависимости S3: pip install keydev-reports[s3]

Ошибка: “S3 bucket not found”

Проверьте имя бакета в настройках KEYDEV_REPORTS_STORAGE['S3_BUCKET']

Ошибка: “Access denied to S3 bucket”

Проверьте IAM права доступа. Необходимы: s3:PutObject, s3:GetObject, s3:DeleteObject

Presigned URL истекает слишком быстро

Увеличьте S3_PRESIGNED_URL_EXPIRATION в настройках (значение в секундах)

Файлы не удаляются автоматически

Настройте S3 Lifecycle Policy для автоматического удаления старых файлов

Требования

  • Python >= 3.8

  • Django >= 4.1.3

  • openpyxl >= 3.0.10

  • xlsxwriter >= 3.1.9

  • python-docx >= 0.8.11

  • celery

  • boto3 >= 1.26.0 (только для S3)

  • django-storages[s3] >= 1.13.0 (только для S3)

Лицензия

BSD-3-Clause

Поддержка

Если у вас возникли проблемы или есть предложения, создайте issue на GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

keydev_reports-1.0.3.tar.gz (41.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

keydev_reports-1.0.3-py3-none-any.whl (50.6 kB view details)

Uploaded Python 3

File details

Details for the file keydev_reports-1.0.3.tar.gz.

File metadata

  • Download URL: keydev_reports-1.0.3.tar.gz
  • Upload date:
  • Size: 41.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for keydev_reports-1.0.3.tar.gz
Algorithm Hash digest
SHA256 4612c565a40d0850f24f3c439f2dff7425298b0250d923159ef954b2350cfb71
MD5 71d878092897229e4365a8b3bd82678e
BLAKE2b-256 eb36483ba570f1b517f34469e4ba6f18b3b5555e725643efd1096118130c085c

See more details on using hashes here.

File details

Details for the file keydev_reports-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: keydev_reports-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 50.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for keydev_reports-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 645d45b85834cd016c847ac102e22d421c4de0328f01b54cff668f9e7e330337
MD5 0c9330dade1a534337a095dfd6febe3d
BLAKE2b-256 1ba81e38dd95a409e8804b5912405116467be20c45857ffbc8b705fc36a5bf69

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page