Skip to content

Commit 66d3ad5

Browse files
Add docstrings to aio specialized cursor methods
Add Google-style docstrings to close, executemany, cancel, fetchone, fetchmany, and fetchall methods in AioPandasCursor, AioArrowCursor, and AioPolarsCursor, matching the level of documentation in AioCursor. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent acd838a commit 66d3ad5

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

pyathena/aio/arrow/cursor.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ def rowcount(self) -> int:
118118
return self.result_set.rowcount if self.result_set else -1
119119

120120
def close(self) -> None:
121+
"""Close the cursor and release associated resources."""
121122
if self.result_set and not self.result_set.is_closed:
122123
self.result_set.close()
123124

@@ -207,18 +208,38 @@ async def executemany( # type: ignore[override]
207208
seq_of_parameters: List[Optional[Union[Dict[str, Any], List[str]]]],
208209
**kwargs,
209210
) -> None:
211+
"""Execute a SQL query multiple times with different parameters.
212+
213+
Args:
214+
operation: SQL query string to execute.
215+
seq_of_parameters: Sequence of parameter sets, one per execution.
216+
**kwargs: Additional keyword arguments passed to each ``execute()``.
217+
"""
210218
for parameters in seq_of_parameters:
211219
await self.execute(operation, parameters, **kwargs)
212220
self._reset_state()
213221

214222
async def cancel(self) -> None:
223+
"""Cancel the currently executing query.
224+
225+
Raises:
226+
ProgrammingError: If no query is currently executing.
227+
"""
215228
if not self.query_id:
216229
raise ProgrammingError("QueryExecutionId is none or empty.")
217230
await self._cancel(self.query_id)
218231

219232
def fetchone(
220233
self,
221234
) -> Optional[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
235+
"""Fetch the next row of the result set.
236+
237+
Returns:
238+
A tuple representing the next row, or None if no more rows.
239+
240+
Raises:
241+
ProgrammingError: If no result set is available.
242+
"""
222243
if not self.has_result_set:
223244
raise ProgrammingError("No result set.")
224245
result_set = cast(AthenaArrowResultSet, self.result_set)
@@ -227,6 +248,17 @@ def fetchone(
227248
def fetchmany(
228249
self, size: Optional[int] = None
229250
) -> List[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
251+
"""Fetch multiple rows from the result set.
252+
253+
Args:
254+
size: Maximum number of rows to fetch. Defaults to arraysize.
255+
256+
Returns:
257+
List of tuples representing the fetched rows.
258+
259+
Raises:
260+
ProgrammingError: If no result set is available.
261+
"""
230262
if not self.has_result_set:
231263
raise ProgrammingError("No result set.")
232264
result_set = cast(AthenaArrowResultSet, self.result_set)
@@ -235,6 +267,14 @@ def fetchmany(
235267
def fetchall(
236268
self,
237269
) -> List[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
270+
"""Fetch all remaining rows from the result set.
271+
272+
Returns:
273+
List of tuples representing all remaining rows.
274+
275+
Raises:
276+
ProgrammingError: If no result set is available.
277+
"""
238278
if not self.has_result_set:
239279
raise ProgrammingError("No result set.")
240280
result_set = cast(AthenaArrowResultSet, self.result_set)

pyathena/aio/pandas/cursor.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ def rowcount(self) -> int:
137137
return self.result_set.rowcount if self.result_set else -1
138138

139139
def close(self) -> None:
140+
"""Close the cursor and release associated resources."""
140141
if self.result_set and not self.result_set.is_closed:
141142
self.result_set.close()
142143

@@ -239,18 +240,38 @@ async def executemany( # type: ignore[override]
239240
seq_of_parameters: List[Optional[Union[Dict[str, Any], List[str]]]],
240241
**kwargs,
241242
) -> None:
243+
"""Execute a SQL query multiple times with different parameters.
244+
245+
Args:
246+
operation: SQL query string to execute.
247+
seq_of_parameters: Sequence of parameter sets, one per execution.
248+
**kwargs: Additional keyword arguments passed to each ``execute()``.
249+
"""
242250
for parameters in seq_of_parameters:
243251
await self.execute(operation, parameters, **kwargs)
244252
self._reset_state()
245253

246254
async def cancel(self) -> None:
255+
"""Cancel the currently executing query.
256+
257+
Raises:
258+
ProgrammingError: If no query is currently executing.
259+
"""
247260
if not self.query_id:
248261
raise ProgrammingError("QueryExecutionId is none or empty.")
249262
await self._cancel(self.query_id)
250263

251264
def fetchone(
252265
self,
253266
) -> Optional[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
267+
"""Fetch the next row of the result set.
268+
269+
Returns:
270+
A tuple representing the next row, or None if no more rows.
271+
272+
Raises:
273+
ProgrammingError: If no result set is available.
274+
"""
254275
if not self.has_result_set:
255276
raise ProgrammingError("No result set.")
256277
result_set = cast(AthenaPandasResultSet, self.result_set)
@@ -259,6 +280,17 @@ def fetchone(
259280
def fetchmany(
260281
self, size: Optional[int] = None
261282
) -> List[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
283+
"""Fetch multiple rows from the result set.
284+
285+
Args:
286+
size: Maximum number of rows to fetch. Defaults to arraysize.
287+
288+
Returns:
289+
List of tuples representing the fetched rows.
290+
291+
Raises:
292+
ProgrammingError: If no result set is available.
293+
"""
262294
if not self.has_result_set:
263295
raise ProgrammingError("No result set.")
264296
result_set = cast(AthenaPandasResultSet, self.result_set)
@@ -267,6 +299,14 @@ def fetchmany(
267299
def fetchall(
268300
self,
269301
) -> List[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
302+
"""Fetch all remaining rows from the result set.
303+
304+
Returns:
305+
List of tuples representing all remaining rows.
306+
307+
Raises:
308+
ProgrammingError: If no result set is available.
309+
"""
270310
if not self.has_result_set:
271311
raise ProgrammingError("No result set.")
272312
result_set = cast(AthenaPandasResultSet, self.result_set)

pyathena/aio/polars/cursor.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ def rowcount(self) -> int:
123123
return self.result_set.rowcount if self.result_set else -1
124124

125125
def close(self) -> None:
126+
"""Close the cursor and release associated resources."""
126127
if self.result_set and not self.result_set.is_closed:
127128
self.result_set.close()
128129

@@ -214,18 +215,38 @@ async def executemany( # type: ignore[override]
214215
seq_of_parameters: List[Optional[Union[Dict[str, Any], List[str]]]],
215216
**kwargs,
216217
) -> None:
218+
"""Execute a SQL query multiple times with different parameters.
219+
220+
Args:
221+
operation: SQL query string to execute.
222+
seq_of_parameters: Sequence of parameter sets, one per execution.
223+
**kwargs: Additional keyword arguments passed to each ``execute()``.
224+
"""
217225
for parameters in seq_of_parameters:
218226
await self.execute(operation, parameters, **kwargs)
219227
self._reset_state()
220228

221229
async def cancel(self) -> None:
230+
"""Cancel the currently executing query.
231+
232+
Raises:
233+
ProgrammingError: If no query is currently executing.
234+
"""
222235
if not self.query_id:
223236
raise ProgrammingError("QueryExecutionId is none or empty.")
224237
await self._cancel(self.query_id)
225238

226239
def fetchone(
227240
self,
228241
) -> Optional[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
242+
"""Fetch the next row of the result set.
243+
244+
Returns:
245+
A tuple representing the next row, or None if no more rows.
246+
247+
Raises:
248+
ProgrammingError: If no result set is available.
249+
"""
229250
if not self.has_result_set:
230251
raise ProgrammingError("No result set.")
231252
result_set = cast(AthenaPolarsResultSet, self.result_set)
@@ -234,6 +255,17 @@ def fetchone(
234255
def fetchmany(
235256
self, size: Optional[int] = None
236257
) -> List[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
258+
"""Fetch multiple rows from the result set.
259+
260+
Args:
261+
size: Maximum number of rows to fetch. Defaults to arraysize.
262+
263+
Returns:
264+
List of tuples representing the fetched rows.
265+
266+
Raises:
267+
ProgrammingError: If no result set is available.
268+
"""
237269
if not self.has_result_set:
238270
raise ProgrammingError("No result set.")
239271
result_set = cast(AthenaPolarsResultSet, self.result_set)
@@ -242,6 +274,14 @@ def fetchmany(
242274
def fetchall(
243275
self,
244276
) -> List[Union[Tuple[Optional[Any], ...], Dict[Any, Optional[Any]]]]:
277+
"""Fetch all remaining rows from the result set.
278+
279+
Returns:
280+
List of tuples representing all remaining rows.
281+
282+
Raises:
283+
ProgrammingError: If no result set is available.
284+
"""
245285
if not self.has_result_set:
246286
raise ProgrammingError("No result set.")
247287
result_set = cast(AthenaPolarsResultSet, self.result_set)

0 commit comments

Comments
 (0)