@@ -101,14 +101,15 @@ def panel(trans_id):
101101 s = Server .query .filter_by (id = int (params ['sid' ])).first ()
102102 if s :
103103 data = _get_database_role (params ['sid' ], params ['did' ])
104- params ['db' ] = underscore_escape (data ['db_name' ]) \
105- if 'db_name' in data else 'postgres'
106- params ['role' ] = underscore_escape (data ['role' ])
104+ if data :
105+ params ['db' ] = underscore_escape (data ['db_name' ]) \
106+ if 'db_name' in data else 'postgres'
107+ params ['role' ] = underscore_escape (data ['role' ])
107108 set_env_variables (is_win = _platform == 'win32' )
108109 return render_template ("psql/index.html" ,
109110 params = json .dumps (params ))
110111 else :
111- params ['error' ] = 'Server did not find .'
112+ params ['error' ] = 'The server was not found .'
112113 return render_template (
113114 "psql/index.html" ,
114115 params = json .dumps (params ))
@@ -303,6 +304,7 @@ def read_and_forward_pty_output(sid, data):
303304 # Check user is authenticated and PSQL is enabled in config.
304305 if current_user .is_authenticated and config .ENABLE_PSQL :
305306 connection_data = []
307+ connection_successful = False
306308 try :
307309 db = ''
308310 if data ['db' ]:
@@ -326,33 +328,39 @@ def read_and_forward_pty_output(sid, data):
326328 return
327329 connection_data = get_connection_str (psql_utility , db ,
328330 manager )
331+ connection_successful = True
329332 except Exception as e :
330333 # If any error raised during the start the PSQL emit error to UI.
331334 # request.sid: This sid is socket id.
332- sio .emit (
333- 'conn_error' ,
334- {
335- 'error' : 'Error while running psql command: {0}' .format (e ),
336- }, namespace = '/pty' , room = request .sid )
335+ error_msg = 'Error while running psql command: {0}' .format (e )
336+ if str (e ) == 'Server is not connected.' :
337+ error_msg = 'Error while opening psql tool: {0}' .format (e )
337338
338- try :
339- if str (data ['sid' ]) not in app .config ['sid_soid_mapping' ]:
340- # request.sid: refer request.sid as socket id.
341- app .config ['sid_soid_mapping' ][str (data ['sid' ])] = list ()
342- app .config ['sid_soid_mapping' ][str (data ['sid' ])].append (
343- request .sid )
344- else :
345- app .config ['sid_soid_mapping' ][str (data ['sid' ])].append (
346- request .sid )
339+ sio .emit ('conn_error' ,
340+ {'error' : error_msg },
341+ namespace = '/pty' ,
342+ room = request .sid )
347343
348- sio .start_background_task (read_and_forward_pty_output ,
349- request .sid , data )
350- except Exception as e :
351- sio .emit (
352- 'conn_error' ,
353- {
354- 'error' : 'Error while running psql command: {0}' .format (e ),
355- }, namespace = '/pty' , room = request .sid )
344+ if connection_successful :
345+ try :
346+ if str (data ['sid' ]) not in app .config ['sid_soid_mapping' ]:
347+ # request.sid: refer request.sid as socket id.
348+ app .config ['sid_soid_mapping' ][str (data ['sid' ])] = list ()
349+ app .config ['sid_soid_mapping' ][str (data ['sid' ])].append (
350+ request .sid )
351+ else :
352+ app .config ['sid_soid_mapping' ][str (data ['sid' ])].append (
353+ request .sid )
354+
355+ sio .start_background_task (read_and_forward_pty_output ,
356+ request .sid , data )
357+ except Exception as e :
358+ sio .emit (
359+ 'conn_error' ,
360+ {'error' :'Error while running psql command: {0}' .
361+ format (e )},
362+ namespace = '/pty' ,
363+ room = request .sid )
356364 else :
357365 # Show error if user is not authenticated.
358366 sio .emit ('conn_not_allow' , {'sid' : request .sid }, namespace = '/pty' ,
@@ -368,6 +376,10 @@ def _get_connection(sid, data):
368376 :return:
369377 """
370378 manager = get_driver (PG_DEFAULT_DRIVER ).connection_manager (sid )
379+ if not manager :
380+ msg = 'Server is not connected.'
381+ app .logger .error (msg )
382+ raise RuntimeError (msg )
371383 try :
372384 conn = manager .connection ()
373385 # This is added for unit test only, no use in normal execution.
@@ -378,12 +390,6 @@ def _get_connection(sid, data):
378390 status , msg = conn .connect ()
379391 if not status :
380392 app .logger .error (msg )
381- sio .emit (sio .emit (
382- 'conn_error' ,
383- {
384- 'error' : 'Error while running psql command: {0}'
385- '' .format ('Server connection not present.' ),
386- }, namespace = '/pty' , room = request .sid ))
387393 raise RuntimeError ('Server is not connected.' )
388394
389395 return conn , manager
0 commit comments