@@ -178,9 +178,10 @@ def _create_client(conn_type: str, raw):
178178 factories = {
179179 "snowflake" : _create_snowflake ,
180180 "postgres" : _create_postgres ,
181- "redshift" : _create_postgres ,
181+ "redshift" : _create_redshift ,
182182 "mssql" : _create_mssql ,
183183 "synapse" : _create_mssql ,
184+ "fabric" : _create_mssql ,
184185 "mysql" : _create_mysql ,
185186 "duckdb" : _create_duckdb ,
186187 "databricks" : _create_databricks ,
@@ -189,6 +190,11 @@ def _create_client(conn_type: str, raw):
189190 "trino" : _create_trino ,
190191 "sqlite" : _create_sqlite ,
191192 "motherduck" : _create_motherduck ,
193+ "oracle" : _create_oracle ,
194+ "db2" : _create_db2 ,
195+ "hana" : _create_hana ,
196+ "spanner" : _create_spanner ,
197+ "vertica" : _create_vertica ,
192198 }
193199 factory = factories .get (conn_type )
194200 if factory is None :
@@ -249,7 +255,25 @@ def _create_postgres(raw: dict):
249255 dbname = raw .get ("database" , "" ),
250256 user = raw ["username" ],
251257 password = raw ["password" ],
252- sslmode = raw .get ("ssl_mode" , "disable" ),
258+ sslmode = raw .get ("ssl_mode" , "allow" ),
259+ )
260+
261+
262+ def _create_redshift (raw : dict ):
263+ try :
264+ import psycopg2
265+ except ImportError :
266+ raise ImportError (
267+ "Install bruin-sdk[redshift] to use Redshift connections: "
268+ "pip install 'bruin-sdk[redshift]'"
269+ )
270+ return psycopg2 .connect (
271+ host = raw ["host" ],
272+ port = raw .get ("port" , 5439 ),
273+ dbname = raw .get ("database" , "" ),
274+ user = raw ["username" ],
275+ password = raw ["password" ],
276+ sslmode = raw .get ("ssl_mode" , "allow" ),
253277 )
254278
255279
@@ -398,6 +422,107 @@ def _create_motherduck(raw: dict):
398422 return conn
399423
400424
425+ def _create_oracle (raw : dict ):
426+ try :
427+ import oracledb
428+ except ImportError :
429+ raise ImportError (
430+ "Install bruin-sdk[oracle] to use Oracle connections: "
431+ "pip install 'bruin-sdk[oracle]'"
432+ )
433+ kwargs = {
434+ "user" : raw ["username" ],
435+ "password" : raw ["password" ],
436+ "host" : raw ["host" ],
437+ "port" : int (raw .get ("port" , 1521 )),
438+ }
439+ if raw .get ("service_name" ):
440+ kwargs ["service_name" ] = raw ["service_name" ]
441+ elif raw .get ("sid" ):
442+ kwargs ["sid" ] = raw ["sid" ]
443+ return oracledb .connect (** kwargs )
444+
445+
446+ def _create_db2 (raw : dict ):
447+ try :
448+ import ibm_db_dbi
449+ except ImportError :
450+ raise ImportError (
451+ "Install bruin-sdk[db2] to use DB2 connections: "
452+ "pip install 'bruin-sdk[db2]'"
453+ )
454+ conn_str = (
455+ f"DATABASE={ raw .get ('database' , '' )} ;"
456+ f"HOSTNAME={ raw ['host' ]} ;"
457+ f"PORT={ raw .get ('port' , 50000 )} ;"
458+ f"PROTOCOL=TCPIP;"
459+ f"UID={ raw ['username' ]} ;"
460+ f"PWD={ raw ['password' ]} ;"
461+ )
462+ return ibm_db_dbi .connect (conn_str , "" , "" )
463+
464+
465+ def _create_hana (raw : dict ):
466+ try :
467+ from hdbcli import dbapi as hana_dbapi
468+ except ImportError :
469+ raise ImportError (
470+ "Install bruin-sdk[hana] to use SAP HANA connections: "
471+ "pip install 'bruin-sdk[hana]'"
472+ )
473+ return hana_dbapi .connect (
474+ address = raw ["host" ],
475+ port = int (raw .get ("port" , 30015 )),
476+ user = raw ["username" ],
477+ password = raw ["password" ],
478+ databaseName = raw .get ("database" , "" ),
479+ )
480+
481+
482+ def _create_spanner (raw : dict ):
483+ try :
484+ from google .cloud .spanner_dbapi import connect as spanner_connect
485+ except ImportError :
486+ raise ImportError (
487+ "Install bruin-sdk[spanner] to use Cloud Spanner connections: "
488+ "pip install 'bruin-sdk[spanner]'"
489+ )
490+ kwargs = {
491+ "instance_id" : raw .get ("instance_id" , "" ),
492+ "database_id" : raw .get ("database" , "" ),
493+ "project" : raw .get ("project_id" , "" ),
494+ }
495+ sa_json = raw .get ("service_account_json" , "" )
496+ if sa_json :
497+ try :
498+ from google .oauth2 import service_account
499+ except ImportError :
500+ raise ImportError (
501+ "Install bruin-sdk[spanner] to use Spanner credentials: "
502+ "pip install 'bruin-sdk[spanner]'"
503+ )
504+ sa_info = json .loads (sa_json )
505+ kwargs ["credentials" ] = service_account .Credentials .from_service_account_info (sa_info )
506+ return spanner_connect (** kwargs )
507+
508+
509+ def _create_vertica (raw : dict ):
510+ try :
511+ import vertica_python
512+ except ImportError :
513+ raise ImportError (
514+ "Install bruin-sdk[vertica] to use Vertica connections: "
515+ "pip install 'bruin-sdk[vertica]'"
516+ )
517+ return vertica_python .connect (
518+ host = raw ["host" ],
519+ port = int (raw .get ("port" , 5433 )),
520+ user = raw ["username" ],
521+ password = raw ["password" ],
522+ database = raw .get ("database" , "" ),
523+ )
524+
525+
401526def get_connection (name : str ) -> "Connection | GCPConnection" :
402527 """Look up a Bruin-managed connection by name and return a Connection object.
403528
0 commit comments