Managers
########
The manager objects are responsible for managing inputs or outputs. We can have three macro types of managers: *database*, *file* and *ldap*.
.. toctree::
Type of managers
****************
Each type of manager is managed by micro types; Below is the complete list:
#. Database
#. sqlite (SQLite)
#. mysql (MySQL or MariaDB)
#. postgresql (PostgreSQL or EnterpriseDB)
#. File
#. file (standard text file)
#. log (log file)
#. csv (Comma Separated Value file)
#. json (JSON file)
#. yaml (YAML file)
#. xlsx (Microsoft Excel file)
#. LDAP
#. ldap (Active Directory Server, OpenLDAP, FreeIPA, etc.)
#. NoSQL
#. nosql (MongoDB, CouchDB, RavenDB, Redis, Neo4j, Cassandra, etc.)
.. note::
The connection arguments of a ``DatabaseManager`` vary according to the type of database being accessed.
Look at the manuals and documentation of each type of database to find out more.
.. code-block:: python
import pyreports
# DatabaseManager object
sqlite_db = pyreports.manager('sqlite', database='/tmp/mydb.db')
mysql_db = pyreports.manager('mysql', host='mysql1.local', database='test', user='dba', password='dba0000')
postgresql_db = pyreports.manager('postgresql', host='postgresql1.local', database='test', user='dba', password='dba0000')
# FileManager object
file = pyreports.manager('file', '/tmp/text.txt')
log = pyreports.manager('log', '/tmp/log.log')
csv = pyreports.manager('csv', '/tmp/csv.csv')
json = pyreports.manager('json', '/tmp/json.json')
yaml = pyreports.manager('yaml', '/tmp/yaml.yml')
xlsx = pyreports.manager('xlsx', '/tmp/xlsx.xlsx')
# LdapManager object
ldap = pyreports.manager('ldap', server='ldap.local', username='user', password='password', ssl=False, tls=True)
# NoSQLManager object (nosql api compliant https://nosqlapi.rtfd.io/)
nosql = pyreports.manager('nosql', MongoDBConnection, host='mongo1.local', database='test', user='dba', password='dba0000')
Managers at work
****************
A Manager object corresponds to each type of manager. And each Manager object has its own methods for writing and reading data.
DatabaseManager
---------------
**Databasemanager** have eight methods that are used to reconnect, query, commit changes and much more. Let's see these methods in action below.
.. note::
The following example will be done on a *mysql* type database, but it can be applied to any database because `DB-API 2.0 `_ is used.
.. code-block:: python
import pyreports
# DatabaseManager object
mysql_db = pyreports.manager('mysql', host='mysql1.local', database='test', user='dba', password='dba0000')
# Reconnect to database
mysql_db.reconnect()
# Query: CREATE
mysql_db.execute("CREATE TABLE cars(id SERIAL PRIMARY KEY, name VARCHAR(255), price INT)")
# Query: INSERT
mysql_db.execute("INSERT INTO cars(name, price) VALUES('Audi', 52642)")
# Query: INSERT (many)
new_cars = [
('Alfa Romeo', 42123),
('Aston Martin', 78324),
('Ferrari', 129782),
]
mysql_db.executemany("INSERT INTO cars(name, price) VALUES(%s, %s)", new_cars)
# Commit changes
mysql_db.commit()
# Query: SELECT
mysql_db.execute('SELECT * FROM cars')
# View description and other info of last query
print(mysql_db.description, mysql_db.lastrowid, mysql_db.rowcount)
# Fetch all data
print(mysql_db.fetchall()) # Dataset object
# Fetch first row
print(mysql_db.fetchone()) # Dataset object
# Fetch select N row
print(mysql_db.fetchmany(2)) # Dataset object
print(mysql_db.fetchmany()) # This is same fetchone() method
# Query: SHOW
mysql_db.execute("SHOW TABLES")
print(mysql_db.fetchall()) # Dataset object
# Call store procedure
mysql_db.callproc('select_cars')
mysql_db.callproc('select_cars', ['Audi']) # Call with args
print(mysql_db.fetchall()) # Dataset object
.. note::
Whatever operation is done, the return value of the ``fetch*`` methods return `Dataset objects `_.
FileManager
-----------
**FileManager** has two simple methods: *read* and *write*. Let's see how to use this manager.
.. code-block:: python
import pyreports
# FileManager object
csv = pyreports.manager('csv', '/tmp/cars.csv')
# Read data
cars = csv.read() # Dataset object
# Write data
cars.append(['Audi', 52642])
csv.write(cars)
LdapManager
-----------
**LdapManager** is an object that allows you to interface and get data from a directory server via the ldap protocol.
.. code-block:: python
import pyreports
# LdapManager object
ldap = pyreports.manager('ldap', server='ldap.local', username='user', password='password', ssl=False, tls=True)
# Rebind connection
ldap.rebind()
# Query: get data
# This is Dataset object
users = ldap.query('DC=test,DC=local', '(&(objectClass=user)(objectCategory=person))', ['name', 'mail', 'phone'])
if users:
print(users)
# Close connection
ldap.unbind()
.. warning::
*LdapManager* should only be used for inputs. An ldap manager has no write methods.
NoSQLManager
------------
**NoSQLManager** is an object that allows you to interface and get data from a NoSQL database server.
.. code-block:: python
import pyreports
# LdapManager object
nosql = pyreports.manager('nosql', MongoDBConnection, host='mongo1.local', database='test', user='dba', password='dba0000')
# Get data
nosql.get('doc1') # Dataset object
# Find data
nosql.find('{"name": "Matteo"}') # Dataset object
.. note::
*NoSQLManager* object accept connection that must be compliant of `nosqlapi `_.