@@ -32,6 +32,8 @@ class SpannerEnv(Enum):
3232 CLOUD = auto ()
3333 INFRA = auto ()
3434 MOCK = auto ()
35+ EXPERIMENTAL_HOST = auto ()
36+
3537
3638@dataclass
3739class DatabaseSelector :
@@ -47,12 +49,22 @@ class DatabaseSelector:
4749 instance: The Spanner instance.
4850 database: The Spanner database.
4951 infra_db_path: The path for an internal infrastructure database.
52+ experimental_host: The Spanner experimental host endpoint.
53+ use_plain_text: Whether to use plain text for the experimental host endpoint.
54+ ca_certificate: CA certificate path for the experimental host endpoint.
55+ client_certificate: Client certificate path for the experimental host endpoint.
56+ client_key: Client key path for the experimental host endpoint.
5057 """
5158 env : SpannerEnv
5259 project : str | None = None
5360 instance : str | None = None
5461 database : str | None = None
5562 infra_db_path : str | None = None
63+ experimental_host : str | None = None
64+ use_plain_text : bool = False
65+ ca_certificate : str | None = None
66+ client_certificate : str | None = None
67+ client_key : str | None = None
5668
5769 @classmethod
5870 def cloud (cls , project : str , instance : str , database : str ) -> 'DatabaseSelector' :
@@ -73,13 +85,36 @@ def mock(cls) -> 'DatabaseSelector':
7385 """Creates a selector for a mock Spanner database."""
7486 return cls (env = SpannerEnv .MOCK )
7587
88+ @classmethod
89+ def experimental_host (
90+ cls , experimental_host : str , database : str , use_plain_text : bool = False , ca_certificate : str | None = None , client_certificate : str | None = None , client_key : str | None = None
91+ ) -> "DatabaseSelector" :
92+ """Creates a selector for a Google Experimental Host Spanner database."""
93+ if not database :
94+ raise ValueError (
95+ "database is required for Experimental Host Spanner Endpoint"
96+ )
97+ return cls (
98+ env = SpannerEnv .EXPERIMENTAL_HOST ,
99+ project = "default" ,
100+ instance = "default" ,
101+ database = database ,
102+ experimental_host = experimental_host ,
103+ use_plain_text = use_plain_text ,
104+ ca_certificate = ca_certificate ,
105+ client_certificate = client_certificate ,
106+ client_key = client_key ,
107+ )
108+
76109 def get_key (self ) -> str :
77110 if self .env == SpannerEnv .CLOUD :
78111 return f"cloud_{ self .project } _{ self .instance } _{ self .database } "
79112 elif self .env == SpannerEnv .INFRA :
80113 return f"infra_{ self .infra_db_path } "
81114 elif self .env == SpannerEnv .MOCK :
82115 return "mock"
116+ elif self .env == SpannerEnv .EXPERIMENTAL_HOST :
117+ return f"experimental_host_{ self .database } "
83118 else :
84119 raise ValueError ("Unknown Spanner environment" )
85120
0 commit comments