Exemplo n.º 1
0
    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}")
Exemplo n.º 3
0
    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")
Exemplo n.º 5
0
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()