2323import socket
2424from threading import Thread
2525from types import TracebackType
26- from typing import Any , Callable , Optional , Union
26+ from typing import Any , Callable
2727
2828import google .auth
2929from google .auth .credentials import Credentials
3030from google .auth .credentials import with_scopes_if_required
3131
32- import google .cloud .sql .connector .asyncpg as asyncpg
32+ from google .cloud .sql .connector import asyncpg
33+ from google .cloud .sql .connector import pg8000
34+ from google .cloud .sql .connector import pymysql
35+ from google .cloud .sql .connector import pytds
3336from google .cloud .sql .connector .client import CloudSQLClient
3437from google .cloud .sql .connector .enums import DriverMapping
3538from google .cloud .sql .connector .enums import IPTypes
3942from google .cloud .sql .connector .instance import RefreshAheadCache
4043from google .cloud .sql .connector .lazy import LazyRefreshCache
4144from google .cloud .sql .connector .monitored_cache import MonitoredCache
42- import google .cloud .sql .connector .pg8000 as pg8000
43- import google .cloud .sql .connector .pymysql as pymysql
44- import google .cloud .sql .connector .pytds as pytds
4545from google .cloud .sql .connector .resolver import DefaultResolver
4646from google .cloud .sql .connector .resolver import DnsResolver
4747from google .cloud .sql .connector .utils import format_database_user
@@ -64,14 +64,14 @@ def __init__(
6464 ip_type : str | IPTypes = IPTypes .PUBLIC ,
6565 enable_iam_auth : bool = False ,
6666 timeout : int = 30 ,
67- credentials : Optional [ Credentials ] = None ,
68- loop : Optional [ asyncio .AbstractEventLoop ] = None ,
69- quota_project : Optional [ str ] = None ,
70- sqladmin_api_endpoint : Optional [ str ] = None ,
71- user_agent : Optional [ str ] = None ,
72- universe_domain : Optional [ str ] = None ,
67+ credentials : Credentials | None = None ,
68+ loop : asyncio .AbstractEventLoop | None = None ,
69+ quota_project : str | None = None ,
70+ sqladmin_api_endpoint : str | None = None ,
71+ user_agent : str | None = None ,
72+ universe_domain : str | None = None ,
7373 refresh_strategy : str | RefreshStrategy = RefreshStrategy .BACKGROUND ,
74- resolver : type [DefaultResolver ] | type [ DnsResolver ] = DefaultResolver ,
74+ resolver : type [DefaultResolver | DnsResolver ] = DefaultResolver ,
7575 failover_period : int = 30 ,
7676 ) -> None :
7777 """Initializes a Connector instance.
@@ -133,10 +133,10 @@ def __init__(
133133 # if event loop is given, use for background tasks
134134 if loop :
135135 self ._loop : asyncio .AbstractEventLoop = loop
136- self ._thread : Optional [ Thread ] = None
136+ self ._thread : Thread | None = None
137137 # if lazy refresh is specified we should lazy init keys
138138 if self ._refresh_strategy == RefreshStrategy .LAZY :
139- self ._keys : Optional [ asyncio .Future ] = None
139+ self ._keys : asyncio .Future | None = None
140140 else :
141141 self ._keys = loop .create_task (generate_keys ())
142142 # if no event loop is given, spin up new loop in background thread
@@ -155,7 +155,7 @@ def __init__(
155155 # initialize dict to store caches, key is a tuple consisting of instance
156156 # connection name string and enable_iam_auth boolean flag
157157 self ._cache : dict [tuple [str , bool ], MonitoredCache ] = {}
158- self ._client : Optional [ CloudSQLClient ] = None
158+ self ._client : CloudSQLClient | None = None
159159 self ._closed : bool = False
160160
161161 # initialize credentials
@@ -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 : DefaultResolver | DnsResolver | None = 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 )
@@ -331,7 +332,7 @@ async def connect_async(
331332 logger .debug (
332333 f"['{ conn_name } ']: Refresh strategy is set to lazy refresh"
333334 )
334- cache : Union [ LazyRefreshCache , RefreshAheadCache ] = LazyRefreshCache (
335+ cache : LazyRefreshCache | RefreshAheadCache = LazyRefreshCache (
335336 conn_name ,
336337 self ._client ,
337338 self ._keys ,
@@ -414,7 +415,7 @@ async def connect_async(
414415 f"entries, using '{ preferred_ips } ' from instance metadata"
415416 )
416417 targets .extend (preferred_ips )
417- except Exception as e :
418+ except Exception as e : # noqa: BLE001
418419 logger .debug (
419420 f"['{ instance_connection_string } ']: Custom DNS name "
420421 f"'{ conn_info .conn_name .domain_name } ' did not resolve to an IP "
@@ -476,7 +477,7 @@ async def connect_async(
476477 conn = await self ._loop .run_in_executor (None , connect_partial )
477478 last_ex = None
478479 return conn
479- except Exception as e :
480+ except Exception as e : # noqa: BLE001
480481 logger .debug (
481482 f"['{ conn_info .conn_name } ']: Connection to { target_ip } failed: { e } "
482483 )
@@ -509,9 +510,9 @@ def __enter__(self) -> Any:
509510
510511 def __exit__ (
511512 self ,
512- exc_type : Optional [ type [BaseException ]] ,
513- exc_val : Optional [ BaseException ] ,
514- exc_tb : Optional [ TracebackType ] ,
513+ exc_type : type [BaseException ] | None ,
514+ exc_val : BaseException | None ,
515+ exc_tb : TracebackType | None ,
515516 ) -> None :
516517 """Exit context manager by closing Connector"""
517518 self .close ()
@@ -522,9 +523,9 @@ async def __aenter__(self) -> Any:
522523
523524 async def __aexit__ (
524525 self ,
525- exc_type : Optional [ type [BaseException ]] ,
526- exc_val : Optional [ BaseException ] ,
527- exc_tb : Optional [ TracebackType ] ,
526+ exc_type : type [BaseException ] | None ,
527+ exc_val : BaseException | None ,
528+ exc_tb : TracebackType | None ,
528529 ) -> None :
529530 """Exit async context manager by closing Connector"""
530531 await self .close_async ()
@@ -558,14 +559,14 @@ async def create_async_connector(
558559 ip_type : str | IPTypes = IPTypes .PUBLIC ,
559560 enable_iam_auth : bool = False ,
560561 timeout : int = 30 ,
561- credentials : Optional [ Credentials ] = None ,
562- loop : Optional [ asyncio .AbstractEventLoop ] = None ,
563- quota_project : Optional [ str ] = None ,
564- sqladmin_api_endpoint : Optional [ str ] = None ,
565- user_agent : Optional [ str ] = None ,
566- universe_domain : Optional [ str ] = None ,
562+ credentials : Credentials | None = None ,
563+ loop : asyncio .AbstractEventLoop | None = None ,
564+ quota_project : str | None = None ,
565+ sqladmin_api_endpoint : str | None = None ,
566+ user_agent : str | None = None ,
567+ universe_domain : str | None = None ,
567568 refresh_strategy : str | RefreshStrategy = RefreshStrategy .BACKGROUND ,
568- resolver : type [DefaultResolver ] | type [ DnsResolver ] = DefaultResolver ,
569+ resolver : type [DefaultResolver | DnsResolver ] = DefaultResolver ,
569570 failover_period : int = 30 ,
570571) -> Connector :
571572 """Helper function to create Connector object for asyncio connections.
0 commit comments