22import json
33from datetime import date
44from enum import Enum
5-
6- import dsnparse
5+ from urllib .parse import urlparse
76
87from diffa .utils import Logger
98
@@ -51,12 +50,15 @@ def update(self, **kwargs):
5150
5251 def _parse_db_info (self ):
5352 try :
54- dns = dsnparse .parse (self .db_uri )
53+ # Users can ref an env var in the DB_URI in the command
54+ if self .db_uri .startswith ("$" ):
55+ self .db_uri = os .getenv (self .db_uri [1 :], "" )
56+ dns = urlparse (self .db_uri )
5557 parsed_db_info = self ._extract_db_details (dns )
5658 self ._validate_parsed_db_info (parsed_db_info )
5759 return parsed_db_info
58- except TypeError :
59- logger .error ("Invalid db info" , exc_info = True )
60+ except Exception as e :
61+ logger .error (f"Error parsing DB info: { e } " )
6062 raise
6163
6264 def _validate_parsed_db_info (self , parsed_db_info : dict ):
@@ -67,17 +69,17 @@ def _validate_parsed_db_info(self, parsed_db_info: dict):
6769 )
6870
6971 def _extract_db_details (self , dns ):
70- db_database = self .db_name or dns .database
72+ db_database = self .db_name or dns .path . lstrip ( "/" )
7173 return {
72- "host" : dns .host ,
74+ "host" : dns .hostname ,
7375 "scheme" : dns .scheme ,
7476 "port" : dns .port ,
7577 "database" : db_database ,
7678 "user" : dns .username ,
7779 "password" : dns .password ,
7880 "schema" : self .db_schema ,
7981 "table" : self .db_table ,
80- "db_uri" : f"{ dns .scheme } ://{ dns .username } :{ dns .password } @{ dns .host } :{ dns .port } /{ db_database } " ,
82+ "db_uri" : f"{ dns .scheme } ://{ dns .username } :{ dns .password } @{ dns .hostname } :{ dns .port } /{ db_database } " ,
8183 }
8284
8385 def get_db_config (self ):
0 commit comments