"""ETL datastore related functions.""" import MySQLdb from flows import config from flows import database def _connection(): """Mysql connection for database module functions. Returns: MySQLdb.connection: connection object. """ return MySQLdb.connect(**config.DATASTORE_CREDENTIALS) def context(*args, **kwargs): # noqa """Mysql adapter for database.context(). Args: *args: Additional argument for cursor constructor. **kwargs: Additional keyword arguments for cursor constructor. Returns: context: database context manager with cursor and connection objects. """ return database.context(_connection(), *args, **kwargs) def execute(sql, params=None, *args, **kwargs): # noqa """Mysql adapter for database.execute(). Args: sql (str): Query to run. params (dict): Params matching the sql. *args: Additional argument for cursor constructor. **kwargs: Additional keyword arguments for cursor constructor. Returns: mixed: query specific, or None """ return database.execute(_connection(), sql, params, *args, **kwargs) def executemany(sql, sequence, *args, **kwargs): # noqa """Mysql adapter for database.executemany(). Args: sql (str): Query to run. sequence (iterable): rows to run sql on. *args: Additional argument for cursor constructor. **kwargs: Additional keyword arguments for cursor constructor. Returns: mixed: query specific, or None """ return database.executemany(_connection(), sql, sequence, *args, **kwargs) def query(sql, params=None, *args, **kwargs): # noqa """Mysql adapter for database.query(). Args: sql (str): Query to run. params (dict): Params matching the sql. *args: Additional argument for cursor constructor. **kwargs: Additional keyword arguments for cursor constructor. Returns: Cursor: database cursor after a query is executed. """ return database.query(_connection(), sql, params, *args, **kwargs)