Библиотека 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.xmlrun_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)
| File | Size | Uploaded | |
|---|---|---|---|
| treport-0.0.6.tar.gz | 17.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|