Skip to content

Commit 7e77f7f

Browse files
[SNOW-812398] Add ability to return raw response json from python-connector (#1556)
* [SNOW-812398] Add ability to return raw response json from python-connector.
1 parent fda642f commit 7e77f7f

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

src/snowflake/connector/cursor.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ def __init__(
264264
self._inner_cursor: SnowflakeCursor | None = None
265265
self._prefetch_hook = None
266266
self._rownumber: int | None = None
267+
self._cached_last_result: dict | None = None
267268

268269
self.reset()
269270

@@ -542,6 +543,8 @@ def interrupt_handler(*_): # pragma: no cover
542543
self._timebomb.cancel()
543544
logger.debug("cancelled timebomb in finally")
544545

546+
self._cached_last_result = ret
547+
545548
if "data" in ret and "parameters" in ret["data"]:
546549
parameters = ret["data"]["parameters"]
547550
# Set session parameters for cursor object
@@ -1073,6 +1076,7 @@ def query_result(self, qid: str) -> SnowflakeCursor:
10731076
Error.errorhandler_wrapper(
10741077
self.connection, self, ProgrammingError, errvalue
10751078
)
1079+
self._cached_last_result = ret
10761080
return self
10771081

10781082
def fetch_arrow_batches(self) -> Iterator[Table]:
@@ -1122,6 +1126,7 @@ def fetch_pandas_all(self, **kwargs: Any) -> DataFrame:
11221126
def abort_query(self, qid: str) -> bool:
11231127
url = f"/queries/{qid}/abort-request"
11241128
ret = self._connection.rest.request(url=url, method="post")
1129+
self._cached_last_result = ret
11251130
return ret.get("success")
11261131

11271132
def executemany(
@@ -1457,6 +1462,7 @@ def wait_until_ready() -> None:
14571462
):
14581463
url = f"/queries/{sfqid}/result"
14591464
ret = self._connection.rest.request(url=url, method="get")
1465+
self._cached_last_result = ret
14601466
if "data" in ret and "resultIds" in ret["data"]:
14611467
self._init_multi_statement_results(ret["data"])
14621468

test/integ/test_cursor.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,34 @@ def test_rownumber(conn):
10881088
assert cur.rownumber == 1
10891089

10901090

1091+
def test_last_result(conn):
1092+
"""Checks whether get_last_request_json is returned as expected."""
1093+
with conn() as cnx:
1094+
with cnx.cursor() as cur:
1095+
assert cur.execute("select * from values (1), (2)")
1096+
assert cur.rownumber is None
1097+
return_val = cur._cached_last_result
1098+
1099+
assert "data" in return_val
1100+
assert "code" in return_val
1101+
assert return_val["success"] is True
1102+
assert "message" in return_val
1103+
1104+
1105+
def test_last_result_for_get_results_api(conn):
1106+
"""Checks whether get_last_request_json for get_results_from_sfqid is returned as expected."""
1107+
with conn() as cnx:
1108+
with cnx.cursor() as cur:
1109+
assert cur.execute("select * from values (4), (5)")
1110+
cur.get_results_from_sfqid(cur.sfqid)
1111+
return_val = cur._cached_last_result
1112+
1113+
assert "data" in return_val
1114+
assert "code" in return_val
1115+
assert return_val["success"] is True
1116+
assert "message" in return_val
1117+
1118+
10911119
def test_values_set(conn):
10921120
"""Checks whether a bunch of properties start as Nones, but get set to something else when a query was executed."""
10931121
properties = [

0 commit comments

Comments
 (0)