Skip to main content

Библиотека treport

Назначение библиотеки

Библиотека treport предназначена для формирования отчетов, имеющих исключительно табличное представление и фиксированное количество колонок. Результат формирования отчета выводится в формате MS Excel.

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

Для работы библиотеки требуется установить следующие пакеты:

  • lxml >= 4.8.0
  • Jinja2 >= 3.1.2
  • openpyxl >= 3.0.10
  • postgres >= 4.0

Файл, в котором хранится информация о все необходимых пакетах, можно скачать по ссылке. Для установки всех требуемых пакетов необходимо выполнить команду

pip install -r requirements.txt

Установка библиотеки

Установить библиотеку можно, выполнив команду

pip install treport

Или скачать проект с GitHub.

Использование библиотеки

Подготовительные мероприятия

Перед использованием библиотеки рекомендуется создать рабочий каталог, где будут размещаться файлы с SQL-запросами к базе данных, шаблоны отчетных форм, описание параметров формирования отчетов, описание параметров подключения к базе данных. Для удобства внутри рабочего каталога можно создать другие каталоги, где можно было бы размещать файлы SQL-запросов, файлы шаблонов отчетов и т.п.

Пример, демонстрирующий работу библиотеки

Пример, демонстрирующий работу библиотеки, можно увидеть, перейдя по ссылке. В качестве примера рабочего каталога был создан каталог treport_example. Внутри него были размещены следующие файлы:

  • run_report.xml- декларативное описание параметров формирования отчетных форм;
  • run_report.ini - ini-файл, в котором прописаны параметры подклбчения к базе данных и путь к файлу run_report.xml
  • run_report.py - программа на языке программирования Python, демонстрирующая использование библиотеки.

Внутри каталога treport_example размещаются следующие каталоги:

  • sql - каталог для хранения файлов с SQL-запросами, которые формируют контент отчета;
  • templates - каталог для хранения файлов шаблонов отчетных форм;
  • out - каталог для хранения файлов сформированных отчетов.

Для демонстрации работы библиотеки необходимо иметь возможность подключения к базе данных PostgreSQL. Необходимо создать таблицу documents.

-- documents definition

CREATE TABLE documents (
	id int8 NOT NULL GENERATED ALWAYS AS IDENTITY,
	docnum varchar NOT NULL,
	docdate date NOT NULL,
	docsum numeric NOT NULL,
	docsum2 numeric NOT NULL
);

Содержимое таблицы представлено в файле documents.csv. Для импорта данных из CSV-файла необходимо выполнить команду

copy documents(docnum, docdate, docsum, docsum2) from '/path/to/documents.csv' delimiter ';' csv header;

Подготовка шаблона отчета

Шаблон отчета- это файл в формате xlsx. Отчет может состоять из нескольких листов. Нужно иметь в виду, что данная библиотека позволяет формировать отчетные формы, которые имеют исключительно табличный вид. Отчет может содержать формулы MS Excel. В этом случае необходимо в SQL-запросе предусмотреть выводить в данной колонке пустого значения, а XML-файле, описывающем свойства отчета, указать номера колонок, которые необходимо игнорировать при формировании отчета.

Подготовка SQL-файла

Для получения данных из БД необходимо подготовить файл с SQL-запросом. Для каждого листа отчета необходимо подготовить свой файл. Если требуется формировать отчет по заданным параметрам, то необходимо чтобы значения этих параметров были переданы в SQL-запрос. Для этого в тексте SQL-запроса параметры обрамляются двойными фигурными скобками (например {{ p_start_date }}).

Подготовка ini-файла

Необходимо подготовить ini-файл, в котором описываются параметры подключение к базе данных и путь к декларативному описанию свойств отчетов.

Пример ini-файла.

[database]
login = sergejnovikov
password =
port = 5432
host = localhost
database = postgres

[report]
params_reports = run_report.xml

Секция database- описываются параметры подключения к БД.

Список параметров:

  • login - имя пользователя для подключения к БД;
  • password - пароль пользователя для подключения к БД;
  • port - порт, по которому происходит подключение к БД;
  • host - адрес хоста, на котором размещается СУБД PostgreSQL;
  • database - наименование БД.

Секция report - описывает параметры отчетных форм.

В данной секции пока только один параметр- params_reports. Значение параметра- путь к файлу, в котором приведено описание свойств отчетных форм.

Декларативное описание отчета

Отчет состоит из двух основных частей- SQL-запроса к базе данных и шаблона, описывающего его внешний вид.

Для того чтобы библиотека понимала какие параметры допустимы для формирования отчета, какой шаблон использовать для формирования отчета, какой SQL-запрос является источником данных для страницы отчета и т.д. необходимо описать характеристики отчетов.

Свойства отчета описываются в файле в формате XML. Правило описания свойства отчетов приведено в документации. Файл с XSD-схемой можно скачать со страницы проекта.

Формирование отчета

С использованием программы на Pythonn

После того как подключение к БД настроено, разработаны SQL-запросы, подготовлен шаблон отчета, можно приступить к написанию скрипта, который вызовет библиотеку и сформирует отчет.

from treport.report import Report, get_config

if __name__ == '__main__':
    parameters = {'p_start_date': '01.05.2022', 'p_end_date': '31.05.2022'}
    db_url, path_to_params_reports_file = get_config('run_report.ini')
    report = Report('treport_example', path_to_params_reports_file, parameters, db_url)

    if report.isCorrect:
        report.contentReport.save(report.outDir + report.report_file_name)
        report.logger.info(f'Файл {report.outDir + report.report_file_name} сохранен')

В переменной parameters хранятся параметры формирования отчета и их значения.

db_url, path_to_params_reports_file = get_config('run_report.ini') - вызывается функция get_config, аргумент функции- путь к ini-файлу, возвращается URL подключения к БД и путь к XML-файлу, описывающему свойства отчетов.

Далее создается объект ```report``. В конструктор класса передаются код формируемого отчета, путь к XML-файлу, описывающему свойства отчетов, параметры формирования отчета и URL подключения к БД.

Далее происходит проверка на предмет того соответствует ли XML-файл XSD-схеме. Если соответствует, то происходит сохранение файла отчета на файловую систему.

Из командной строки

Для формирования отчета из командной строки необходимо выолнить команду

python -m treport --report <код отчета> --config <ini-файл> --parameters-file <файл с параметрами отчета> --parameters <параметры отчета>

Аргументы командной строки:

--help - выводит помощь с описанием списка аргументов;
--report - код отчета, который необходимо сформировать;
--config - наименование конфигурационного файла, если параметр не указан, то в текущем каталоге ищется файл treport.ini;
--parameters-file - имя файла, в котором хранятся значения, в качестве разделителя используется символ "=";
--parameters - список передаваемых параметров, указывается в кавычках, в качестве разделителя используется символ ":".

Пример 1

python -m treport --report treport_example --parameters "p_start_date:01.04.2022;p_end_date:31.05.2022"

Будет сформирован отчет treport_example за период с 01.04.2022 по 31.05.2022, параметры подключения к базе данных и имя XML-файла будут прочитаны из файла treport.ini. Если такой файл в рабочем каталоге будет отсутствовать, то формирование отчета будет прервано.

Пример 2

python -m treport --report treport_example --config run_report.ini --parameters "p_start_date:01.04.2022;p_end_date:31.05.2022"

Параметры формирование отчета аналогичные параметрам в Примере 1, параметры подключения к базе данных и имя XML-файла будут прочитаны из файла run_report.ini.

Пример 3

python -m treport --report treport_example --parameters-file run_report_params.txt

Параметры подключения к базе данных и имя XML-файла будут прочитаны из файла treport.ini, параметры формирования отчета - из файла run_report_params.txt.

Пример 4

python -m treport --report treport_example --parameters-file run_report_params.txt --parameters "p_end_date:31.05.2022"

Параметры подключения к базе данных и имя XML-файла будут прочитаны из файла treport.ini, параметры формирования отчета - из файла run_report_params.txt, но более приоритетным значением будет значение, указанное в качестве значения параметра --parameters (дата окончания условий отбора будет установлена "31.05.2022", вне зависимости от того, какой значенние этого параметра указано в файле).

Пример 5

python -m treport --help

В результате выполннения команды бужет отображена следующая информация

usage: __main__.py [-h] [-c CONFIG] [-r REPORT] [-pf PARAMETERS_FILE] [-p PARAMETERS]

Программа предназначена для формирования отчетов, имеющих табличное представление

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        Указывается путь конфигурационному файлу
  -r REPORT, --report REPORT
                        Код формируемого отчета
  -pf PARAMETERS_FILE, --parameters-file PARAMETERS_FILE
                        Файл с параметрами отчета
  -p PARAMETERS, --parameters PARAMETERS
                        Параметры отчета. Например: "param_name1:value_param1;param_name2:value_param2"

Release files for treport 0.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for treport 0.0.6
File Size Uploaded
treport-0.0.6.tar.gz 17.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for treport 0.0.6
File Interpreter ABI Platform
treport-0.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 31.4 kB

Release files / treport-0.0.6.tar.gz

Download URL treport-0.0.6.tar.gz
Size 17.1 kB
Tags Source
SHA-256 checksum
How to use checksums
50368676ba858502a68fb69e0a9509a27d560bc81205a2fc1cb87766b00fa8f8
BLAKE2b-256 checksum
How to use checksums
8d59825d8d80083aa6cfdad6410a46eb6635d2a24e8a971b52de92e6a3ea7fd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.8.2

Release files / treport-0.0.6-py3-none-any.whl

Download URL treport-0.0.6-py3-none-any.whl
Size 14.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9e201e23595886ed50f7338360957a9beb274a49a0b1537169dbfbade334463b
BLAKE2b-256 checksum
How to use checksums
b58a1d36f9b2214ae6cac1dd84853313892107ecc39583c41045b7cac0bad1e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.0 CPython/3.8.2

Release history Release notifications | RSS feed

This release

0.0.6 This release

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page