|
24 | 24 | except ImportError: # pragma: NO COVER
|
25 | 25 | bigquery_storage = None
|
26 | 26 |
|
| 27 | +try: |
| 28 | + import pyarrow |
| 29 | +except ImportError: # pragma: NO COVER |
| 30 | + pyarrow = None |
| 31 | + |
27 | 32 |
|
28 | 33 | @unittest.skipIf(bigquery_storage is None, "Requires `google-cloud-bigquery-storage`")
|
29 | 34 | class TestBQStorageVersions(unittest.TestCase):
|
| 35 | + def tearDown(self): |
| 36 | + from google.cloud.bigquery import _helpers |
| 37 | + |
| 38 | + # Reset any cached versions since it may not match reality. |
| 39 | + _helpers.BQ_STORAGE_VERSIONS._installed_version = None |
| 40 | + |
30 | 41 | def _object_under_test(self):
|
31 | 42 | from google.cloud.bigquery import _helpers
|
32 | 43 |
|
@@ -89,6 +100,63 @@ def test_is_read_session_optional_false(self):
|
89 | 100 | assert not versions.is_read_session_optional
|
90 | 101 |
|
91 | 102 |
|
| 103 | +@unittest.skipIf(pyarrow is None, "Requires `pyarrow`") |
| 104 | +class TestPyarrowVersions(unittest.TestCase): |
| 105 | + def tearDown(self): |
| 106 | + from google.cloud.bigquery import _helpers |
| 107 | + |
| 108 | + # Reset any cached versions since it may not match reality. |
| 109 | + _helpers.PYARROW_VERSIONS._installed_version = None |
| 110 | + |
| 111 | + def _object_under_test(self): |
| 112 | + from google.cloud.bigquery import _helpers |
| 113 | + |
| 114 | + return _helpers.PyarrowVersions() |
| 115 | + |
| 116 | + def _call_try_import(self, **kwargs): |
| 117 | + from google.cloud.bigquery import _helpers |
| 118 | + |
| 119 | + _helpers.PYARROW_VERSIONS._installed_version = None |
| 120 | + return _helpers.PYARROW_VERSIONS.try_import(**kwargs) |
| 121 | + |
| 122 | + def test_try_import_raises_no_error_w_recent_pyarrow(self): |
| 123 | + from google.cloud.bigquery.exceptions import LegacyPyarrowError |
| 124 | + |
| 125 | + with mock.patch("pyarrow.__version__", new="5.0.0"): |
| 126 | + try: |
| 127 | + pyarrow = self._call_try_import(raise_if_error=True) |
| 128 | + self.assertIsNotNone(pyarrow) |
| 129 | + except LegacyPyarrowError: # pragma: NO COVER |
| 130 | + self.fail("Legacy error raised with a non-legacy dependency version.") |
| 131 | + |
| 132 | + def test_try_import_returns_none_w_legacy_pyarrow(self): |
| 133 | + with mock.patch("pyarrow.__version__", new="2.0.0"): |
| 134 | + pyarrow = self._call_try_import() |
| 135 | + self.assertIsNone(pyarrow) |
| 136 | + |
| 137 | + def test_try_import_raises_error_w_legacy_pyarrow(self): |
| 138 | + from google.cloud.bigquery.exceptions import LegacyPyarrowError |
| 139 | + |
| 140 | + with mock.patch("pyarrow.__version__", new="2.0.0"): |
| 141 | + with self.assertRaises(LegacyPyarrowError): |
| 142 | + self._call_try_import(raise_if_error=True) |
| 143 | + |
| 144 | + def test_installed_version_returns_cached(self): |
| 145 | + versions = self._object_under_test() |
| 146 | + versions._installed_version = object() |
| 147 | + assert versions.installed_version is versions._installed_version |
| 148 | + |
| 149 | + def test_installed_version_returns_parsed_version(self): |
| 150 | + versions = self._object_under_test() |
| 151 | + |
| 152 | + with mock.patch("pyarrow.__version__", new="1.2.3"): |
| 153 | + version = versions.installed_version |
| 154 | + |
| 155 | + assert version.major == 1 |
| 156 | + assert version.minor == 2 |
| 157 | + assert version.micro == 3 |
| 158 | + |
| 159 | + |
92 | 160 | class Test_not_null(unittest.TestCase):
|
93 | 161 | def _call_fut(self, value, field):
|
94 | 162 | from google.cloud.bigquery._helpers import _not_null
|
|
0 commit comments