Skip to content

Commit f42df6b

Browse files
author
Kokoro Connector Build
committed
refactor: Instantiate resolver with API client in Python connector
- Add __init__ to DefaultResolver and DnsResolver to accept client in constructor. - Remove set_client method from DnsResolver. - Lazy-initialize self._resolver in Connector.connect_async passing the initialized self._client. - Update tests to use constructor injection instead of set_client.
1 parent fb08cce commit f42df6b

3 files changed

Lines changed: 13 additions & 16 deletions

File tree

‎google/cloud/sql/connector/connector.py‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,8 @@ def __init__(
176176
self._timeout = timeout
177177
self._enable_iam_auth = enable_iam_auth
178178
self._user_agent = user_agent
179-
self._resolver = resolver()
179+
self._resolver_cls = resolver
180+
self._resolver = None
180181
self._failover_period = failover_period
181182
# if ip_type is str, convert to IPTypes enum
182183
if isinstance(ip_type, str):
@@ -316,8 +317,8 @@ async def connect_async(
316317
user_agent=self._user_agent,
317318
driver=driver,
318319
)
319-
if hasattr(self._resolver, "set_client"):
320-
self._resolver.set_client(self._client)
320+
if self._resolver is None:
321+
self._resolver = self._resolver_cls(client=self._client)
321322
enable_iam_auth = kwargs.pop("enable_iam_auth", self._enable_iam_auth)
322323

323324
conn_name = await self._resolver.resolve(instance_connection_string)

‎google/cloud/sql/connector/resolver.py‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
import re
16-
from typing import Any, List
16+
from typing import Any, List, Optional
1717

1818
import dns.asyncresolver
1919

@@ -33,6 +33,9 @@
3333
class DefaultResolver:
3434
"""DefaultResolver simply validates and parses instance connection name."""
3535

36+
def __init__(self, *args: Any, client: Optional[Any] = None, **kwargs: Any) -> None:
37+
pass
38+
3639
async def resolve(self, connection_name: str) -> ConnectionName:
3740
return _parse_connection_name(connection_name)
3841

@@ -43,11 +46,8 @@ class DnsResolver(dns.asyncresolver.Resolver):
4346
TXT records in DNS.
4447
"""
4548

46-
def __init__(self, *args: Any, **kwargs: Any) -> None:
49+
def __init__(self, *args: Any, client: Optional[Any] = None, **kwargs: Any) -> None:
4750
super().__init__(*args, **kwargs)
48-
self._client: Any = None
49-
50-
def set_client(self, client: Any) -> None:
5151
self._client = client
5252

5353
async def resolve(self, dns: str) -> ConnectionName: # type: ignore

‎tests/unit/test_resolver.py‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,7 @@ async def test_DnsResolver_with_direct_psc_dns_name() -> None:
183183
"connectionName": "my-project:europe-north2:my-instance"
184184
}
185185

186-
resolver = DnsResolver()
187-
resolver.set_client(mock_client)
186+
resolver = DnsResolver(client=mock_client)
188187

189188
result = await resolver.resolve(dns_name)
190189

@@ -208,8 +207,7 @@ async def test_DnsResolver_with_cname_resolving_to_psc_dns_name() -> None:
208207
"connectionName": "my-project:europe-north2:my-instance"
209208
}
210209

211-
resolver = DnsResolver()
212-
resolver.set_client(mock_client)
210+
resolver = DnsResolver(client=mock_client)
213211

214212
# Patch resolver CNAME and TXT methods
215213
with patch.object(
@@ -240,8 +238,7 @@ async def test_DnsResolver_with_recursive_cnames_to_psc_dns_name() -> None:
240238
"connectionName": "my-project:europe-north2:my-instance"
241239
}
242240

243-
resolver = DnsResolver()
244-
resolver.set_client(mock_client)
241+
resolver = DnsResolver(client=mock_client)
245242

246243
# Mock Lookup CNAME sequence
247244
cname_mock = AsyncMock(
@@ -285,8 +282,7 @@ async def test_DnsResolver_global_region_skips_direct_resolution() -> None:
285282
dns_name = "0123456789ab.fedcba9876543.global.sql-psc.goog"
286283

287284
mock_client = AsyncMock()
288-
resolver = DnsResolver()
289-
resolver.set_client(mock_client)
285+
resolver = DnsResolver(client=mock_client)
290286

291287
# Patch CNAME and TXT to fail, so it eventually raises DnsResolutionError
292288
with patch.object(

0 commit comments

Comments
 (0)