pyreports
pyreports is a python library that allows you to create complex reports from various sources such as databases,
text files, ldap, etc. and perform processing, filters, counters, etc.
and then export or write them in various formats or in databases.
Test package
To test the package, follow these instructions:
$ git clone https://github.com/MatteoGuadrini/pyreports.git
$ cd pyreports
$ python -m unittest discover tests
Install package
To install package, follow these instructions:
$ pip install pyreports
$ git clone https://github.com/MatteoGuadrini/pyreports.git
$ cd pyreports
$ python setup.py install
Why choose this library?
pyreports wants to be a library that simplifies the collection of data from multiple sources such as databases,
files and directory servers (through LDAP), the processing of them through built-in and customized functions,
and the saving in various formats (or, by inserting the data in a database).
How does it work
pyreports uses the tablib library to organize the data into Dataset object.
Simple report
I take the data from a database table, filter the data I need and save it in a csv file
import pyreports
mydb = pyreports.manager('mysql', host='mysql1.local', database='login_users', user='dba', password='dba0000')
mydb.execute('SELECT * FROM site_login')
site_login = mydb.fetchall()
error_login = pyreports.Executor(site_login)
error_login.filter([400, 401, 403, 404, 500])
output = pyreports.manager('csv', '/home/report/error_login.csv')
output.write(error_login.get_data())
Combine source
I take the data from a database table, and a log file, and save the report in json format
import pyreports
mydb = pyreports.manager('mysql', host='mysql1.local', database='login_users', user='dba', password='dba0000')
mylog = pyreports.manager('file', '/var/log/httpd/error.log')
mydb.execute('SELECT * FROM site_login')
site_login = mydb.fetchall()
error_log = mylog.read()
error_login = pyreports.Executor(site_login)
error_login.filter([400, 401, 403, 404, 500])
users_in_error = set(error_login.select_column('users'))
myreport = dict()
log_user_error = pyreports.Executor(error_log)
log_user_error.filter(list(users_in_error))
for line in log_user_error:
for user in users_in_error:
myreport.setdefault(user, [])
myreport[user].append(line)
output = pyreports.manager('json', '/home/report/error_login.json')
output.write(myreport)
Report object
import pyreports
mydb = pyreports.manager('mysql', host='mysql1.local', database='login_users', user='dba', password='dba0000')
output = pyreports.manager('xlsx', '/home/report/error_login.xlsx', mode='w')
mydb.execute('SELECT * FROM site_login')
site_login = mydb.fetchall()
report = pyreports.Report(site_login, title='Site login failed', filters=[400, 401, 403, 404, 500], output=output)
report.exec()
report.export()
ReportBook collection object
import pyreports
mydb = pyreports.manager('mysql', host='mysql1.local', database='login_users', user='dba', password='dba0000')
mydb.execute('SELECT * FROM site_login')
site_login = mydb.fetchall()
report_failed = pyreports.Report(site_login, title='Site login failed', filters=[400, 401, 403, 404, 500])
report_success = pyreports.Report(site_login, title='Site login success', filters=[200, 201, 202, 'OK'])
report_failed.exec()
report_success.exec()
my_report = pyreports.ReportBook([report_failed, report_success])
my_report.export(output='/home/report/site_login.xlsx')
Tools for dataset
This library includes many tools for handling data received from databases and files.
Here are some practical examples of data manipulation.
import pyreports
mydb = pyreports.manager('mysql', host='mysql1.local', database='login_users', user='dba', password='dba0000')
mydb.execute('SELECT * FROM site_login')
site_login = mydb.fetchall()
most_common_error_code = pyreports.most_common(site_login, 'code')
print(most_common_error_code)
percentage_error_404 = pyreports.percentage(site_login, 404)
print(percentage_error_404)
count_error_code = pyreports.counter(site_login, 'code')
print(count_error_code)
Command line
$ cat car.yml
reports:
- report:
title: 'Red ford machine'
input:
manager: 'mysql'
source:
# Connection parameters of my mysql database
host: 'mysql1.local'
database: 'cars'
user: 'admin'
password: 'dba0000'
params:
query: 'SELECT * FROM cars WHERE brand = %s AND color = %s'
params: ['ford', 'red']
# Filter km
filters: [40000, 45000]
output:
manager: 'csv'
filename: '/tmp/car_csv.csv'
$ report car.yaml
Official docs
In the following links there is the official documentation, for the use and development of the library.
Open source
pyreports is an open source project. Any contribute, It's welcome.
A great thanks.
For donations, press this
For me
For Telethon
The Telethon Foundation is a non-profit organization recognized by the Ministry of University and Scientific and Technological Research.
They were born in 1990 to respond to the appeal of patients suffering from rare diseases.
Come today, we are organized to dare to listen to them and answers, every day of the year.
Adopt the future
Acknowledgments
Thanks to Mark Lutz for writing the Learning Python and Programming Python books that make up my python foundation.
Thanks to Kenneth Reitz and Tanya Schlusser for writing the The Hitchhiker’s Guide to Python books.
Thanks to Dane Hillard for writing the Practices of the Python Pro books.
Special thanks go to my wife, who understood the hours of absence for this development.
Thanks to my children, for the daily inspiration they give me and to make me realize, that life must be simple.
Thanks Python!