@@ -38,19 +38,44 @@ def __init__(self, status_code, std_out, std_err):
3838 self .std_err = std_err
3939
4040
41- def run_cmd (* args ):
42- r = subprocess .Popen (args , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
41+ def run_cmd (* args , env = None ):
42+ r = subprocess .Popen (
43+ args ,
44+ stdout = subprocess .PIPE ,
45+ stderr = subprocess .PIPE ,
46+ env = {** os .environ , ** (env or {})},
47+ )
4348 stdoutdata , stderrdata = r .communicate ()
4449 ret = r .wait ()
4550 return CmdResult (ret , stdoutdata , stderrdata )
4651
4752
53+ def run_psql (* args ):
54+ env = {}
55+ user = _settings .get ("USER" )
56+ if user : # pragma: no branch
57+ args = ("-U" , user , * args )
58+ password = _settings .get ("PASSWORD" )
59+ if password : # pragma: no branch
60+ env ["PGPASSWORD" ] = password
61+ host = _settings .get ("HOST" )
62+ if host : # pragma: no branch
63+ args = ("-h" , host , * args )
64+ return run_cmd ("psql" , * args , env = env )
65+
66+
4867def run_mysql (* args ):
49- user = _settings .get ("USER" , None )
68+ user = _settings .get ("USER" )
5069 if user : # pragma: no branch
51- args = ("-u" , user ) + tuple (args )
52- args = ("mysql" ,) + tuple (args )
53- return run_cmd (* args )
70+ args = ("-u" , user , * args )
71+ password = _settings .get ("PASSWORD" )
72+ if password : # pragma: no branch
73+ # Note: "-ppassword" must be a single argument.
74+ args = ("-p" + password , * args )
75+ host = _settings .get ("HOST" )
76+ if host : # pragma: no branch
77+ args = ("-h" , host , * args )
78+ return run_cmd ("mysql" , * args )
5479
5580
5681def skip_if_sqlite_in_memory ():
@@ -73,7 +98,7 @@ def drop_database(db_suffix=None):
7398 db_engine = get_db_engine ()
7499
75100 if db_engine == "postgresql" :
76- r = run_cmd ( "psql" , "postgres" , "-c" , "DROP DATABASE %s" % name )
101+ r = run_psql ( "postgres" , "-c" , "DROP DATABASE %s" % name )
77102 assert "DROP DATABASE" in force_str (
78103 r .std_out
79104 ) or "does not exist" in force_str (r .std_err )
@@ -95,7 +120,7 @@ def db_exists(db_suffix=None):
95120 db_engine = get_db_engine ()
96121
97122 if db_engine == "postgresql" :
98- r = run_cmd ( "psql" , name , "-c" , "SELECT 1" )
123+ r = run_psql ( name , "-c" , "SELECT 1" )
99124 return r .status_code == 0
100125
101126 if db_engine == "mysql" :
@@ -112,7 +137,7 @@ def mark_database():
112137 db_engine = get_db_engine ()
113138
114139 if db_engine == "postgresql" :
115- r = run_cmd ( "psql" , TEST_DB_NAME , "-c" , "CREATE TABLE mark_table();" )
140+ r = run_psql ( TEST_DB_NAME , "-c" , "CREATE TABLE mark_table();" )
116141 assert r .status_code == 0
117142 return
118143
@@ -137,7 +162,7 @@ def mark_exists():
137162 db_engine = get_db_engine ()
138163
139164 if db_engine == "postgresql" :
140- r = run_cmd ( "psql" , TEST_DB_NAME , "-c" , "SELECT 1 FROM mark_table" )
165+ r = run_psql ( TEST_DB_NAME , "-c" , "SELECT 1 FROM mark_table" )
141166
142167 # When something pops out on std_out, we are good
143168 return bool (r .std_out )
0 commit comments