Skip to content

Commit 8cfaae8

Browse files
authored
fix: raise if trying to change ordering_mode after session has started (#1252)
* fix: raise if trying to change `ordering_mode` after session has started * fix lint and add unit tests * fix mypy
1 parent 10f08da commit 8cfaae8

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
lines changed

bigframes/_config/bigquery_options.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -317,8 +317,11 @@ def ordering_mode(self) -> Literal["strict", "partial"]:
317317
return self._ordering_mode.value
318318

319319
@ordering_mode.setter
320-
def ordering_mode(self, ordering_mode: Literal["strict", "partial"]) -> None:
321-
self._ordering_mode = _validate_ordering_mode(ordering_mode)
320+
def ordering_mode(self, value: Literal["strict", "partial"]) -> None:
321+
ordering_mode = _validate_ordering_mode(value)
322+
if self._session_started and self._ordering_mode != ordering_mode:
323+
raise ValueError(SESSION_STARTED_MESSAGE.format(attribute="ordering_mode"))
324+
self._ordering_mode = ordering_mode
322325

323326
@property
324327
def client_endpoints_override(self) -> dict:

tests/unit/_config/test_bigquery_options.py

+34-17
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
# limitations under the License.
1414

1515
import re
16+
from unittest import mock
1617
import warnings
1718

19+
import google.auth.credentials
1820
import pytest
1921

2022
import bigframes
@@ -35,6 +37,7 @@
3537
("kms_key_name", "kms/key/name/1", "kms/key/name/2"),
3638
("skip_bq_connection_check", False, True),
3739
("client_endpoints_override", {}, {"bqclient": "endpoint_address"}),
40+
("ordering_mode", "strict", "partial"),
3841
],
3942
)
4043
def test_setter_raises_if_session_started(attribute, original_value, new_value):
@@ -57,32 +60,46 @@ def test_setter_raises_if_session_started(attribute, original_value, new_value):
5760
@pytest.mark.parametrize(
5861
[
5962
"attribute",
63+
"original_value",
6064
],
6165
[
62-
(attribute,)
63-
for attribute in [
64-
"application_name",
65-
"credentials",
66-
"location",
67-
"project",
68-
"bq_connection",
69-
"use_regional_endpoints",
70-
"bq_kms_key_name",
71-
"client_endpoints_override",
72-
]
66+
("application_name", "test-partner"),
67+
("location", "us-east1"),
68+
("project", "my-project"),
69+
("bq_connection", "path/to/connection/1"),
70+
("use_regional_endpoints", True),
71+
("kms_key_name", "kms/key/name/1"),
72+
("skip_bq_connection_check", True),
73+
("client_endpoints_override", {"bqclient": "endpoint_address"}),
74+
("ordering_mode", "partial"),
7375
],
7476
)
75-
def test_setter_if_session_started_but_setting_the_same_value(attribute):
77+
def test_setter_if_session_started_but_setting_the_same_value(
78+
attribute, original_value
79+
):
7680
options = bigquery_options.BigQueryOptions()
77-
original_object = object()
78-
setattr(options, attribute, original_object)
79-
assert getattr(options, attribute) is original_object
81+
setattr(options, attribute, original_value)
82+
assert getattr(options, attribute) == original_value
8083

8184
# This should work fine since we're setting the same value as before.
8285
options._session_started = True
83-
setattr(options, attribute, original_object)
86+
setattr(options, attribute, original_value)
87+
88+
assert getattr(options, attribute) == original_value
8489

85-
assert getattr(options, attribute) is original_object
90+
91+
def test_setter_if_session_started_but_setting_the_same_credentials_object():
92+
options = bigquery_options.BigQueryOptions()
93+
original_object = mock.create_autospec(
94+
google.auth.credentials.Credentials, instance=True
95+
)
96+
options.credentials = original_object
97+
assert options.credentials is original_object
98+
99+
# This should work fine since we're setting the same value as before.
100+
options._session_started = True
101+
options.credentials = original_object
102+
assert options.credentials is original_object
86103

87104

88105
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)