Skip to content

Commit fcd2207

Browse files
committed
refactor(api-core): move universe routing helpers to universe.py
1 parent 904da6b commit fcd2207

4 files changed

Lines changed: 86 additions & 81 deletions

File tree

packages/google-api-core/google/api_core/gapic_v1/client_utils.py

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@
1818

1919
from google.auth.exceptions import MutualTLSChannelError # type: ignore
2020

21+
from google.api_core.universe import get_universe_domain
22+
23+
__all__ = [
24+
"get_default_mtls_endpoint",
25+
"get_api_endpoint",
26+
"get_universe_domain",
27+
]
28+
2129

2230
def get_default_mtls_endpoint(api_endpoint: Optional[str]) -> Optional[str]:
2331
"""Converts api endpoint to mTLS endpoint.
@@ -106,31 +114,3 @@ def get_api_endpoint(
106114
return default_mtls_endpoint
107115
else:
108116
return default_endpoint_template.format(UNIVERSE_DOMAIN=universe_domain)
109-
110-
111-
def get_universe_domain(
112-
*potential_universes: Optional[str],
113-
default_universe: str = "googleapis.com",
114-
) -> str:
115-
"""Return the universe domain used by the client.
116-
117-
Args:
118-
*potential_universes (Optional[str]): Potential universe domains in order of preference.
119-
default_universe (str): The default universe domain.
120-
121-
Returns:
122-
str: The universe domain to be used by the client.
123-
124-
Raises:
125-
ValueError: If the resolved universe domain is an empty string.
126-
"""
127-
resolved = next(
128-
(x.strip() for x in potential_universes if x is not None),
129-
default_universe,
130-
)
131-
132-
if not resolved:
133-
raise ValueError("Universe Domain cannot be an empty string.")
134-
return resolved
135-
136-

packages/google-api-core/google/api_core/universe.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,32 @@ def __init__(self, client_universe, credentials_universe):
3636
super().__init__(message)
3737

3838

39+
def get_universe_domain(
40+
*potential_universes: Optional[str],
41+
default_universe: str,
42+
) -> str:
43+
"""Return the universe domain used by the client.
44+
45+
Args:
46+
*potential_universes (Optional[str]): Potential universe domains in order of preference.
47+
default_universe (str): The default universe domain.
48+
49+
Returns:
50+
str: The universe domain to be used by the client.
51+
52+
Raises:
53+
EmptyUniverseError: If the resolved universe domain is an empty string.
54+
"""
55+
resolved = next(
56+
(x.strip() for x in potential_universes if x is not None),
57+
default_universe,
58+
)
59+
60+
if not resolved:
61+
raise EmptyUniverseError()
62+
return resolved
63+
64+
3965
def determine_domain(
4066
client_universe_domain: Optional[str], universe_domain_env: Optional[str]
4167
) -> str:
@@ -52,14 +78,11 @@ def determine_domain(
5278
Raises:
5379
ValueError: If the universe domain is an empty string.
5480
"""
55-
universe_domain = DEFAULT_UNIVERSE
56-
if client_universe_domain is not None:
57-
universe_domain = client_universe_domain
58-
elif universe_domain_env is not None:
59-
universe_domain = universe_domain_env
60-
if len(universe_domain.strip()) == 0:
61-
raise EmptyUniverseError
62-
return universe_domain
81+
return get_universe_domain(
82+
client_universe_domain,
83+
universe_domain_env,
84+
default_universe=DEFAULT_UNIVERSE,
85+
)
6386

6487

6588
def compare_domains(client_universe: str, credentials: Any) -> bool:

packages/google-api-core/tests/unit/gapic/test_client_utils.py

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,13 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
import os
16-
from unittest import mock
1715
import pytest
1816
from google.auth.exceptions import MutualTLSChannelError
19-
from google.auth.transport import mtls
2017

2118
from google.api_core.gapic_v1.client_utils import (
2219
get_api_endpoint,
2320
get_default_mtls_endpoint,
24-
get_universe_domain,
2521
)
26-
from google.auth.exceptions import MutualTLSChannelError
2722

2823

2924
def test_get_default_mtls_endpoint():
@@ -164,43 +159,3 @@ def test_get_api_endpoint(
164159
)
165160
== expected
166161
)
167-
168-
169-
def test_get_universe_domain():
170-
# When universe_domain is provided
171-
assert get_universe_domain("foo.com", default_universe="default.com") == "foo.com"
172-
assert (
173-
get_universe_domain(" foo.com ", default_universe="default.com") == "foo.com"
174-
)
175-
176-
# When universe_domain is None, falls back to default_universe
177-
assert get_universe_domain(None, default_universe="default.com") == "default.com"
178-
179-
# When multiple potential universes are provided, resolves in order of preference
180-
assert (
181-
get_universe_domain("foo.com", "bar.com", default_universe="default.com")
182-
== "foo.com"
183-
)
184-
assert (
185-
get_universe_domain(None, "bar.com", default_universe="default.com")
186-
== "bar.com"
187-
)
188-
assert (
189-
get_universe_domain(None, None, default_universe="default.com") == "default.com"
190-
)
191-
192-
# ValueError raised when resolved value is empty string
193-
with pytest.raises(ValueError) as excinfo:
194-
get_universe_domain("", default_universe="default.com")
195-
assert str(excinfo.value) == "Universe Domain cannot be an empty string."
196-
197-
with pytest.raises(ValueError) as excinfo:
198-
get_universe_domain(" ", default_universe="default.com")
199-
assert str(excinfo.value) == "Universe Domain cannot be an empty string."
200-
201-
with pytest.raises(ValueError) as excinfo:
202-
get_universe_domain(None, "", default_universe="default.com")
203-
assert str(excinfo.value) == "Universe Domain cannot be an empty string."
204-
205-
206-

packages/google-api-core/tests/unit/test_universe.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,50 @@ def test_compare_domains():
6262
universe.compare_domains(fake_domain, _Fake_Credentials(another_fake_domain))
6363
assert str(excinfo.value).find(fake_domain) >= 0
6464
assert str(excinfo.value).find(another_fake_domain) >= 0
65+
66+
67+
def test_get_universe_domain():
68+
# When universe_domain is provided
69+
assert (
70+
universe.get_universe_domain("foo.com", default_universe="default.com")
71+
== "foo.com"
72+
)
73+
assert (
74+
universe.get_universe_domain(" foo.com ", default_universe="default.com")
75+
== "foo.com"
76+
)
77+
78+
# When universe_domain is None, falls back to default_universe
79+
assert (
80+
universe.get_universe_domain(None, default_universe="default.com")
81+
== "default.com"
82+
)
83+
84+
# When multiple potential universes are provided, resolves in order of preference
85+
assert (
86+
universe.get_universe_domain(
87+
"foo.com", "bar.com", default_universe="default.com"
88+
)
89+
== "foo.com"
90+
)
91+
assert (
92+
universe.get_universe_domain(None, "bar.com", default_universe="default.com")
93+
== "bar.com"
94+
)
95+
assert (
96+
universe.get_universe_domain(None, None, default_universe="default.com")
97+
== "default.com"
98+
)
99+
100+
# EmptyUniverseError raised when resolved value is empty string
101+
with pytest.raises(universe.EmptyUniverseError) as excinfo:
102+
universe.get_universe_domain("", default_universe="default.com")
103+
assert str(excinfo.value) == "Universe Domain cannot be an empty string."
104+
105+
with pytest.raises(universe.EmptyUniverseError) as excinfo:
106+
universe.get_universe_domain(" ", default_universe="default.com")
107+
assert str(excinfo.value) == "Universe Domain cannot be an empty string."
108+
109+
with pytest.raises(universe.EmptyUniverseError) as excinfo:
110+
universe.get_universe_domain(None, "", default_universe="default.com")
111+
assert str(excinfo.value) == "Universe Domain cannot be an empty string."

0 commit comments

Comments
 (0)