2222import  sqlalchemy 
2323
2424from  google .cloud .sql .connector  import  Connector 
25+ from  google .cloud .sql .connector  import  DefaultResolver 
26+ from  google .cloud .sql .connector  import  DnsResolver 
2527
2628
2729def  create_sqlalchemy_engine (
@@ -30,6 +32,7 @@ def create_sqlalchemy_engine(
3032    password : str ,
3133    db : str ,
3234    refresh_strategy : str  =  "background" ,
35+     resolver : type [DefaultResolver ] |  type [DnsResolver ] =  DefaultResolver ,
3336) ->  tuple [sqlalchemy .engine .Engine , Connector ]:
3437    """Creates a connection pool for a Cloud SQL instance and returns the pool 
3538    and the connector. Callers are responsible for closing the pool and the 
@@ -64,8 +67,13 @@ def create_sqlalchemy_engine(
6467            Refresh strategy for the Cloud SQL Connector. Can be one of "lazy" 
6568            or "background". For serverless environments use "lazy" to avoid 
6669            errors resulting from CPU being throttled. 
70+         resolver (Optional[google.cloud.sql.connector.DefaultResolver]): 
71+             Resolver class for resolving instance connection name. Use 
72+             google.cloud.sql.connector.DnsResolver when resolving DNS domain 
73+             names or google.cloud.sql.connector.DefaultResolver for regular 
74+             instance connection names ("my-project:my-region:my-instance"). 
6775    """ 
68-     connector  =  Connector (refresh_strategy = refresh_strategy )
76+     connector  =  Connector (refresh_strategy = refresh_strategy ,  resolver = resolver )
6977
7078    def  getconn () ->  pg8000 .dbapi .Connection :
7179        conn : pg8000 .dbapi .Connection  =  connector .connect (
@@ -153,3 +161,21 @@ def test_customer_managed_CAS_pg8000_connection() -> None:
153161        curr_time  =  time [0 ]
154162        assert  type (curr_time ) is  datetime 
155163    connector .close ()
164+ 
165+ 
166+ def  test_custom_SAN_with_dns_pg8000_connection () ->  None :
167+     """Basic test to get time from database.""" 
168+     inst_conn_name  =  os .environ ["POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME" ]
169+     user  =  os .environ ["POSTGRES_USER" ]
170+     password  =  os .environ ["POSTGRES_CUSTOMER_CAS_PASS" ]
171+     db  =  os .environ ["POSTGRES_DB" ]
172+ 
173+     engine , connector  =  create_sqlalchemy_engine (
174+         inst_conn_name , user , password , db , resolver = DnsResolver 
175+     )
176+     with  engine .connect () as  conn :
177+         time  =  conn .execute (sqlalchemy .text ("SELECT NOW()" )).fetchone ()
178+         conn .commit ()
179+         curr_time  =  time [0 ]
180+         assert  type (curr_time ) is  datetime 
181+     connector .close ()
0 commit comments