예제 #1
0
def test_to_frame_via_hdfs_and_no_hdfs_client_fails():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        q = "SELECT *"
        with pytest.raises(ValueError, match=r".*hdfs\Wclient.*"):
            ibis_cli.to_frame(q, via_hdfs=True)
        impala.connect.assert_called_once()
예제 #2
0
def test_execute_returns_cursor():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        client = MagicMock()
        q = "SELECT *"
        ret = ibis_cli.execute(q, client=client, return_cursor=True)
        client.raw_sql.assert_called_once_with(q, results=True)
예제 #3
0
def test_execute_with_client():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        client = MagicMock()
        q = "SELECT *"
        ibis_cli.execute(q, client=client, return_cursor=False)
        impala.connect.assert_not_called()
        client.raw_sql.assert_called_once_with(q, results=False)
예제 #4
0
def test_execute_with_no_client():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        q = "SELECT *"
        ibis_cli.execute(q, return_cursor=False)
        impala.connect.assert_called_once()
        impala.connect.return_value.raw_sql.assert_called_once_with(
            q, results=False)
예제 #5
0
def test_to_frame_via_hdfs_and_no_cache_dir_fails():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient(
            "host",
            hdfs_host="",
            hdfs_port="",
            hdfs_username="",
        )
        q = "SELECT *"
        with pytest.raises(ValueError, match=r".*dir.*"):
            ibis_cli.to_frame(q, via_hdfs=True)
        impala.connect.assert_called_once()
예제 #6
0
def test_to_frame_no_hdfs_returns_empty_df():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        q = "example query"
        impala.connect.return_value.raw_sql.return_value.fetchall.return_value = None
        df = ibis_cli.to_frame(q)
        assert df.empty
        impala.connect.return_value.raw_sql.assert_called_once_with(
            q, results=True)
        impala.connect.return_value.raw_sql.return_value.fetchall.assert_called_once(
        )
        impala.connect.return_value.raw_sql.return_value.release.assert_called_once(
        )
        impala.connect.return_value.close.assert_called_once()
예제 #7
0
def test_to_frame_no_hdfs_fails_and_closes_connection():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        q = "example query"
        impala.connect.return_value.raw_sql.side_effect = ValueError(
            "test error")
        with pytest.raises(ValueError, match=r"test error"):
            df = ibis_cli.to_frame(q)
            impala.connect.return_value.raw_sql.assert_called_once_with(
                q, results=True)
            impala.connect.return_value.raw_sql.return_value.fetchall.assert_not_called(
            )
            impala.connect.return_value.raw_sql.return_value.release.assert_not_called(
            )
            impala.connect.return_value.close.assert_called_once()
예제 #8
0
def test_to_frame_no_hdfs_returns_non_empty_df():
    with patch("ibis.backends.impala") as impala:
        ibis_cli = IbisClient("host")
        q = "example query"
        values = [[1, 2], [3, 4]]
        columns = [["column1"], ["column2"]]
        test_df = pd.DataFrame(values, columns=[c[0] for c in columns])
        impala.connect.return_value.raw_sql.return_value.description = columns
        impala.connect.return_value.raw_sql.return_value.fetchall.return_value = values
        df = ibis_cli.to_frame(q)
        assert df.equals(test_df)
        impala.connect.return_value.raw_sql.assert_called_once_with(
            q, results=True)
        impala.connect.return_value.raw_sql.return_value.fetchall.assert_called_once(
        )
        impala.connect.return_value.raw_sql.return_value.release.assert_called_once(
        )
        impala.connect.return_value.close.assert_called_once()
예제 #9
0
def call_to_frame_with_cache_dir(
    q,
    local_tmp_table_dir,
    hash_str_return_value="123",
    to_frame_kwargs={},
    client_kwargs={},
):
    with patch("muttlib.utils.hash_str",
               return_value=hash_str_return_value) as hashed_q:
        cache_dir = MagicMock()
        cache_dir.__truediv__.return_value = local_tmp_table_dir
        ibis_cli = IbisClient("host",
                              hdfs_host="",
                              hdfs_port="",
                              hdfs_username="",
                              **client_kwargs)
        ibis_cli.to_frame(q,
                          via_hdfs=True,
                          cache_dir=cache_dir,
                          **to_frame_kwargs)
        cache_dir.__truediv__.assert_called_once_with(
            f"ibis_tmp_{hashed_q.return_value}")
예제 #10
0
def test_to_frame_via_hdfs_and_refresh_cache():
    with patch("ibis.backends.impala") as impala, patch(
            "shutil.rmtree") as rm, patch("pyarrow.parquet.read_table") as pq:
        ibis_cli = IbisClient("host",
                              hdfs_host="",
                              hdfs_port="",
                              hdfs_username="")
        q = "SELECT *"
        call_to_frame_with_cache_dir(q,
                                     local_tmp_table_dir=MagicMock(),
                                     to_frame_kwargs={"refresh_cache": True})
        impala.connect.assert_called_once()
        rm.assert_called_once()
예제 #11
0
def test_temp_hdfs_path_changes_config():
    with patch("ibis.config") as config:
        temp_hdfs_path = MagicMock()
        ibis_cli = IbisClient("host", temp_hdfs_path=temp_hdfs_path)
        config.set_option.assert_called_once_with("temp_hdfs_path",
                                                  temp_hdfs_path)
예제 #12
0
def test_init_without_host_fails():
    with pytest.raises(TypeError):
        IbisClient()