2626from data_diff .databases .mssql import MsSQL
2727
2828
29- @attrs .define ( frozen = True )
29+ @attrs .frozen
3030class MatchUriPath :
3131 database_cls : Type [Database ]
3232
@@ -98,13 +98,11 @@ class Connect:
9898 """Provides methods for connecting to a supported database using a URL or connection dict."""
9999
100100 database_by_scheme : Dict [str , Database ]
101- match_uri_path : Dict [str , MatchUriPath ]
102101 conn_cache : MutableMapping [Hashable , Database ]
103102
104103 def __init__ (self , database_by_scheme : Dict [str , Database ] = DATABASE_BY_SCHEME ):
105104 super ().__init__ ()
106105 self .database_by_scheme = database_by_scheme
107- self .match_uri_path = {name : MatchUriPath (cls ) for name , cls in database_by_scheme .items ()}
108106 self .conn_cache = weakref .WeakValueDictionary ()
109107
110108 def for_databases (self , * dbs ) -> Self :
@@ -157,12 +155,10 @@ def connect_to_uri(self, db_uri: str, thread_count: Optional[int] = 1, **kwargs)
157155 return self .connect_with_dict (conn_dict , thread_count , ** kwargs )
158156
159157 try :
160- matcher = self .match_uri_path [scheme ]
158+ cls = self .database_by_scheme [scheme ]
161159 except KeyError :
162160 raise NotImplementedError (f"Scheme '{ scheme } ' currently not supported" )
163161
164- cls = matcher .database_cls
165-
166162 if scheme == "databricks" :
167163 assert not dsn .user
168164 kw = {}
@@ -175,6 +171,7 @@ def connect_to_uri(self, db_uri: str, thread_count: Optional[int] = 1, **kwargs)
175171 kw ["filepath" ] = dsn .dbname
176172 kw ["dbname" ] = dsn .user
177173 else :
174+ matcher = MatchUriPath (cls )
178175 kw = matcher .match_path (dsn )
179176
180177 if scheme == "bigquery" :
@@ -198,7 +195,7 @@ def connect_to_uri(self, db_uri: str, thread_count: Optional[int] = 1, **kwargs)
198195
199196 kw = {k : v for k , v in kw .items () if v is not None }
200197
201- if issubclass (cls , ThreadedDatabase ):
198+ if isinstance ( cls , type ) and issubclass (cls , ThreadedDatabase ):
202199 db = cls (thread_count = thread_count , ** kw , ** kwargs )
203200 else :
204201 db = cls (** kw , ** kwargs )
@@ -209,11 +206,10 @@ def connect_with_dict(self, d, thread_count, **kwargs):
209206 d = dict (d )
210207 driver = d .pop ("driver" )
211208 try :
212- matcher = self .match_uri_path [driver ]
209+ cls = self .database_by_scheme [driver ]
213210 except KeyError :
214211 raise NotImplementedError (f"Driver '{ driver } ' currently not supported" )
215212
216- cls = matcher .database_cls
217213 if issubclass (cls , ThreadedDatabase ):
218214 db = cls (thread_count = thread_count , ** d , ** kwargs )
219215 else :
0 commit comments