@@ -5716,7 +5716,54 @@ def test_rowiterator_to_geodataframe_delegation(self, to_dataframe):
57165716
57175717 self .assertEqual ([v .__class__ .__name__ for v in df .g ], ["Point" ])
57185718
5719- def test_to_dataframe_delegated_when_supported (self ):
5719+ def test_to_dataframe_delegated_when_supported_no_range_types (self ):
5720+ import sys
5721+
5722+ import db_dtypes
5723+ pandas = pytest .importorskip ("pandas" )
5724+ mock_pandas_gbq = mock .Mock ()
5725+ mock_pandas_gbq .pandas .from_row_iterator .return_value = mock .sentinel .dataframe
5726+ mock_pandas_gbq .__version__ = "1.0.0"
5727+
5728+ with mock .patch (
5729+ "google.cloud.bigquery._versions_helpers.PandasGBQVersions.is_delegation_supported" ,
5730+ new_callable = mock .PropertyMock ,
5731+ return_value = True ,
5732+ ):
5733+ with mock .patch (
5734+ "google.cloud.bigquery._versions_helpers.SUPPORTS_RANGE_PYARROW" ,
5735+ False ,
5736+ ):
5737+ with mock .patch .dict (sys .modules , {"pandas_gbq" : mock_pandas_gbq }):
5738+ row_iterator = self ._make_one_from_data (
5739+ (("name" , "STRING" ),),
5740+ (("foo" ,),)
5741+ )
5742+ df = row_iterator .to_dataframe (progress_bar_type = "tqdm" , timeout = 5.0 )
5743+
5744+ mock_pandas_gbq .pandas .from_row_iterator .assert_called_once_with (
5745+ row_iterator ,
5746+ bqstorage_client = None ,
5747+ dtypes = {},
5748+ progress_bar_type = "tqdm" ,
5749+ create_bqstorage_client = True ,
5750+ geography_as_object = False ,
5751+ bool_dtype = pandas .BooleanDtype (),
5752+ int_dtype = pandas .Int64Dtype (),
5753+ float_dtype = None ,
5754+ string_dtype = None ,
5755+ date_dtype = DefaultPandasDTypes .DATE_DTYPE ,
5756+ datetime_dtype = None ,
5757+ time_dtype = db_dtypes .TimeDtype (),
5758+ timestamp_dtype = None ,
5759+ range_date_dtype = None ,
5760+ range_datetime_dtype = None ,
5761+ range_timestamp_dtype = None ,
5762+ timeout = 5.0 ,
5763+ )
5764+ self .assertEqual (df , mock .sentinel .dataframe )
5765+
5766+ def test_to_dataframe_delegated_when_supported_with_range_types (self ):
57205767 import sys
57215768
57225769 import db_dtypes
@@ -5731,22 +5778,17 @@ def test_to_dataframe_delegated_when_supported(self):
57315778 new_callable = mock .PropertyMock ,
57325779 return_value = True ,
57335780 ):
5734- with mock .patch .dict (sys .modules , {"pandas_gbq" : mock_pandas_gbq }):
5735- row_iterator = self ._make_one_from_data (
5736- (("name" , "STRING" ),),
5737- (("foo" ,),)
5738- )
5739- df = row_iterator .to_dataframe (progress_bar_type = "tqdm" , timeout = 5.0 )
5740-
5741- # Check resolved dtypes matching the environment capabilities
5742- import packaging .version
5743- _pandas_version = packaging .version .parse (pandas .__version__ )
5744- _pyarrow_version = packaging .version .parse (pyarrow .__version__ )
5745- supports_range_pyarrow = (
5746- _pandas_version >= packaging .version .Version ("1.5.0" )
5747- and _pyarrow_version >= packaging .version .Version ("10.0.1" )
5748- )
5749- if supports_range_pyarrow :
5781+ with mock .patch (
5782+ "google.cloud.bigquery._versions_helpers.SUPPORTS_RANGE_PYARROW" ,
5783+ True ,
5784+ ):
5785+ with mock .patch .dict (sys .modules , {"pandas_gbq" : mock_pandas_gbq }):
5786+ row_iterator = self ._make_one_from_data (
5787+ (("name" , "STRING" ),),
5788+ (("foo" ,),)
5789+ )
5790+ df = row_iterator .to_dataframe (progress_bar_type = "tqdm" , timeout = 5.0 )
5791+
57505792 expected_range_date = pandas .ArrowDtype (
57515793 pyarrow .struct ([("start" , pyarrow .date32 ()), ("end" , pyarrow .date32 ())])
57525794 )
@@ -5756,32 +5798,28 @@ def test_to_dataframe_delegated_when_supported(self):
57565798 expected_range_timestamp = pandas .ArrowDtype (
57575799 pyarrow .struct ([("start" , pyarrow .timestamp ("us" , tz = "UTC" )), ("end" , pyarrow .timestamp ("us" , tz = "UTC" ))])
57585800 )
5759- else :
5760- expected_range_date = None
5761- expected_range_datetime = None
5762- expected_range_timestamp = None
5763-
5764- mock_pandas_gbq .pandas .from_row_iterator .assert_called_once_with (
5765- row_iterator ,
5766- bqstorage_client = None ,
5767- dtypes = {},
5768- progress_bar_type = "tqdm" ,
5769- create_bqstorage_client = True ,
5770- geography_as_object = False ,
5771- bool_dtype = pandas .BooleanDtype (),
5772- int_dtype = pandas .Int64Dtype (),
5773- float_dtype = None ,
5774- string_dtype = None ,
5775- date_dtype = DefaultPandasDTypes .DATE_DTYPE ,
5776- datetime_dtype = None ,
5777- time_dtype = db_dtypes .TimeDtype (),
5778- timestamp_dtype = None ,
5779- range_date_dtype = expected_range_date ,
5780- range_datetime_dtype = expected_range_datetime ,
5781- range_timestamp_dtype = expected_range_timestamp ,
5782- timeout = 5.0 ,
5783- )
5784- self .assertEqual (df , mock .sentinel .dataframe )
5801+
5802+ mock_pandas_gbq .pandas .from_row_iterator .assert_called_once_with (
5803+ row_iterator ,
5804+ bqstorage_client = None ,
5805+ dtypes = {},
5806+ progress_bar_type = "tqdm" ,
5807+ create_bqstorage_client = True ,
5808+ geography_as_object = False ,
5809+ bool_dtype = pandas .BooleanDtype (),
5810+ int_dtype = pandas .Int64Dtype (),
5811+ float_dtype = None ,
5812+ string_dtype = None ,
5813+ date_dtype = DefaultPandasDTypes .DATE_DTYPE ,
5814+ datetime_dtype = None ,
5815+ time_dtype = db_dtypes .TimeDtype (),
5816+ timestamp_dtype = None ,
5817+ range_date_dtype = expected_range_date ,
5818+ range_datetime_dtype = expected_range_datetime ,
5819+ range_timestamp_dtype = expected_range_timestamp ,
5820+ timeout = 5.0 ,
5821+ )
5822+ self .assertEqual (df , mock .sentinel .dataframe )
57855823
57865824 def test_to_dataframe_not_delegated_when_unsupported (self ):
57875825 import sys
0 commit comments