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