def test_cloudsql_hook_delete_connection_on_exception( self, get_connections, run, get_connection, delete_connection): connection = Connection() connection.parse_from_uri( "gcpcloudsql://*****:*****@127.0.0.1:3200/testdb?database_type=mysql&" "project_id=example-project&location=europe-west1&instance=testdb&" "use_proxy=False") get_connection.return_value = connection db_connection = Connection() db_connection.host = "127.0.0.1" db_connection.set_extra( json.dumps({ "project_id": "example-project", "location": "europe-west1", "instance": "testdb", "database_type": "mysql" })) get_connections.return_value = [db_connection] run.side_effect = Exception("Exception when running a query") operator = CloudSqlQueryOperator(sql=['SELECT * FROM TABLE'], task_id='task_id') with self.assertRaises(Exception) as cm: operator.execute(None) err = cm.exception self.assertEqual("Exception when running a query", str(err)) delete_connection.assert_called_once_with()
def create_airflow_conn(conf): conn = Connection() conn.conn_id = conf.get('conn_id') conn.conn_type = conf.get('conn_type') conn.host = conf.get('host') conn.port = conf.get('port') conn.login = conf.get('login') conn.password = conf.get('password') conn.schema = conf.get('schema') conn.extra = conf.get('extra') session = settings.Session() try: conn_name = session.\ query(Connection).\ filter(Connection.conn_id == conn.conn_id).first() if str(conn_name) == str(conf.get('conn_id')): logger.info(f"Connection {conn.conn_id} already exists") logger.info(f"Deleting connection {conn.conn_id}") session.delete(conn_name) else: session.add(conn) session.commit() session.close() logger.info(Connection.log_info(conn)) logger.info(f'Connection {conn.conn_id} is created') except Exception as e: logging.info(f"Exception occured while creating connection \n {e}")
def test_cloudsql_hook_delete_connection_on_exception( self, get_connections, run, get_connection, delete_connection): connection = Connection() connection.parse_from_uri( "gcpcloudsql://*****:*****@127.0.0.1:3200/testdb?database_type=mysql&" "project_id=example-project&location=europe-west1&instance=testdb&" "use_proxy=False") get_connection.return_value = connection db_connection = Connection() db_connection.host = "127.0.0.1" db_connection.set_extra(json.dumps({"project_id": "example-project", "location": "europe-west1", "instance": "testdb", "database_type": "mysql"})) get_connections.return_value = [db_connection] run.side_effect = Exception("Exception when running a query") operator = CloudSqlQueryOperator( sql=['SELECT * FROM TABLE'], task_id='task_id' ) with self.assertRaises(Exception) as cm: operator.execute(None) err = cm.exception self.assertEqual("Exception when running a query", str(err)) delete_connection.assert_called_once_with()
def create_connection(config): """Creates a Connection object for Airflow Args: config (Dictionary): A dictionary containing all information needed to create a Connection object """ print(f"Creating and adding connection {config['conn_id']}") # Create connection object conn = Connection( conn_id=config['conn_id'], conn_type=config['conn_type'], #host = config['host'], #schema = config['schema'], #login = config['login'], #password = config['password'], #port = config['port'], #extra = json.dumps(config['extra']) ) if config['login'] is not None: conn.login = config['login'] if config['password'] is not None: conn.password = config['password'] if config['host'] is not None: conn.host = config['host'] if config['schema'] is not None: conn.schema = config['schema'] if config['port'] is not None: conn.port = config['port'] if config['extra'] is not None: conn.extra = json.dumps(config['extra']) connection = Session.query(Connection).filter_by( conn_id=conn.conn_id).first() if connection is None: # Add connection object to session, and commit Session.add(conn) Session.commit() print(f"Connection {config['conn_id']} added and committed") else: print(f"Connection {config['conn_id']} already exists")
def create_airflow_conn(conf): conn = Connection() conn.conn_id = conf.get('conn_id') conn.conn_type = conf.get('conn_type') conn.host = conf.get('host') conn.port = conf.get('port') conn.login = conf.get('login') conn.password = conf.get('password') conn.schema = conf.get('schema') conn.extra = conf.get('extra') session = settings.Session() try: existing_conns = session.query(Connection).filter( Connection.conn_id == conn.conn_id).delete() finally: session.add(conn) session.commit() session.close()