Skip to content
Permalink
Browse files
fix(db_api): emit warning instead of an exception for rowcount prop…
…erty (#628)

See for more context: googleapis/python-spanner-sqlalchemy#134
  • Loading branch information
IlyaFaer committed Oct 26, 2021
1 parent 134a6e4 commit 62ff9ae80a9972b0062aca0e9bb3affafb8ec490
Showing with 18 additions and 7 deletions.
  1. +7 −4 google/cloud/spanner_dbapi/cursor.py
  2. +11 −3 tests/unit/spanner_dbapi/test_cursor.py
@@ -14,6 +14,9 @@

"""Database cursor for Google Cloud Spanner DB-API."""

import warnings
from collections import namedtuple

import sqlparse

from google.api_core.exceptions import Aborted
@@ -23,8 +26,6 @@
from google.api_core.exceptions import InvalidArgument
from google.api_core.exceptions import OutOfRange

from collections import namedtuple

from google.cloud import spanner_v1 as spanner
from google.cloud.spanner_dbapi.checksum import ResultsChecksum
from google.cloud.spanner_dbapi.exceptions import IntegrityError
@@ -120,10 +121,12 @@ def rowcount(self):
:raises: :class:`NotImplemented`.
"""
raise NotImplementedError(
warnings.warn(
"The `rowcount` property is non-operational. Request "
"resulting rows are streamed by the `fetch*()` methods "
"and can't be counted before they are all streamed."
"and can't be counted before they are all streamed.",
UserWarning,
stacklevel=2,
)

def _raise_if_closed(self):
@@ -61,11 +61,19 @@ def test_property_description(self):
self.assertIsNotNone(cursor.description)
self.assertIsInstance(cursor.description[0], ColumnInfo)

def test_property_rowcount(self):
@mock.patch("warnings.warn")
def test_property_rowcount(self, warn_mock):
connection = self._make_connection(self.INSTANCE, self.DATABASE)
cursor = self._make_one(connection)
with self.assertRaises(NotImplementedError):
cursor.rowcount

cursor.rowcount
warn_mock.assert_called_once_with(
"The `rowcount` property is non-operational. Request "
"resulting rows are streamed by the `fetch*()` methods "
"and can't be counted before they are all streamed.",
UserWarning,
stacklevel=2,
)

def test_callproc(self):
from google.cloud.spanner_dbapi.exceptions import InterfaceError

0 comments on commit 62ff9ae

Please sign in to comment.