Skip to content

Commit 0c1063d

Browse files
authored
Removing redundant method in connection service. (#169)
* Removing redundant method in connection service. * Updating mssqlcliclient to surface error messages to it's callers. * Removed copyright statement in test and flake8 format. * Converting output of stack trace to be logged instead.
1 parent 6374354 commit 0c1063d

File tree

6 files changed

+25
-57
lines changed

6 files changed

+25
-57
lines changed

mssqlcli/completion_refresher.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,12 @@ def _bg_refresh(self, mssqlcliclient, callbacks, history=None,
5151
completer = MssqlCompleter(smart_completion=True, settings=settings)
5252

5353
executor = mssqlcliclient
54-
if not executor.connect():
54+
owner_uri, error_messages = executor.connect()
55+
56+
if not owner_uri:
5557
# If we were unable to connect, do not break the experience for the user.
5658
# Return nothing, smart completion can maintain the keywords and functions completions.
57-
logger.error(u'Completion Refresher failed to connect to the target server.')
59+
logger.error(u'Completion refresher connection failure.'.join(error_messages))
5860
return
5961
# If callbacks is a single function then push it into a list.
6062
if callable(callbacks):

mssqlcli/jsonrpc/contracts/connectionservice.py

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from mssqlcli.jsonrpc.contracts import Request
22

3-
import sys
43
import logging
54

65
logger = logging.getLogger(u'mssqlcli.connectionservice')
@@ -42,7 +41,7 @@ def get_response(self):
4241
return decoded_response
4342

4443
except Exception as error:
45-
logger.debug(str(error))
44+
logger.info(str(error))
4645
self.finished = True
4746
self.json_rpc_client.request_finished(self.id)
4847
self.json_rpc_client.request_finished(self.owner_uri)
@@ -144,38 +143,3 @@ class ConnectionResponse(object):
144143
def __init__(self, params):
145144
self.result = params[u'result']
146145
self.id = params[u'id']
147-
148-
149-
#
150-
# Handle Connection Events.
151-
#
152-
153-
def handle_connection_response(response):
154-
# Handles complete notification and return ConnectionCompleteEvent object
155-
# if connection successful.
156-
def handle_connection_complete_notification(response):
157-
if not response.connection_id:
158-
sys.stderr.write(u'\nConnection did not succeed.')
159-
if response.error_message:
160-
sys.stderr.write(u'\nError message: ' + response.error_message)
161-
logger.error(response.error_message)
162-
if response.messages:
163-
logger.error(response.messages)
164-
165-
return response
166-
167-
def handle_connection_response_notification(response):
168-
if not response.result:
169-
sys.stderr.write(
170-
u'\nIncorrect json rpc request. Connection not successful.')
171-
return None
172-
173-
response_handlers = {
174-
u'ConnectionResponse': handle_connection_response_notification,
175-
u'ConnectionCompleteEvent': handle_connection_complete_notification
176-
}
177-
178-
response_name = type(response).__name__
179-
180-
if response_name in response_handlers:
181-
return response_handlers[response_name](response)

mssqlcli/jsonrpc/contracts/tests/test_json_rpc_contracts.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,6 @@ def verify_connection_service_response(self,
173173
elif isinstance(response, connectionservice.ConnectionCompleteEvent):
174174
if response.connection_id:
175175
complete_event += 1
176-
self.assertTrue(connectionservice.handle_connection_response(response).connection_id,
177-
response.connection_id)
178176

179177
self.assertEqual(response_event, expected_response_event)
180178
self.assertEqual(complete_event, expected_complete_event)

mssqlcli/main.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,11 +317,12 @@ def connect(self, database='', server='', user='', port='', passwd='',
317317
multi_subnet_failover=multi_subnet_failover,
318318
packet_size=packet_size, **kwargs)
319319

320-
if not self.mssqlcliclient_query_execution.connect():
320+
owner_uri, error_messages = self.mssqlcliclient_query_execution.connect()
321+
if not owner_uri:
321322
click.secho(
322-
'\nUnable to connect. Please try again',
323+
'\n'.join(error_messages),
323324
err=True,
324-
fg='red')
325+
fg='yellow')
325326
exit(1)
326327

327328
telemetry_session.set_server_information(

mssqlcli/mssqlcliclient.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,10 @@ def __init__(self, sql_tools_client, server_name, user_name, password,
6565
def connect(self):
6666
"""
6767
Connects to the SQL Server instance using specified credentials
68-
:return: OwnerUri if connection established else None
68+
:return: Tuple (OwnerURI, list of error messages)
6969
"""
7070
if self.is_connected:
71-
return self.owner_uri
71+
return self.owner_uri, []
7272

7373
# Required params
7474
connection_params = {u'ServerName': self.server_name,
@@ -99,11 +99,15 @@ def connect(self):
9999
u'connection_request', connection_params, self.owner_uri)
100100
connection_request.execute()
101101

102+
error_messages = []
102103
while not connection_request.completed():
103104
response = connection_request.get_response()
104-
if response:
105-
response = connectionservice.handle_connection_response(
106-
response)
105+
106+
if isinstance(response, connectionservice.ConnectionCompleteEvent):
107+
if response.error_message:
108+
error_messages.append(u'Error message: {}'.format(response.error_message))
109+
if response.messages:
110+
logger.error(response.messages)
107111
else:
108112
time.sleep(time_wait_if_no_response)
109113

@@ -119,7 +123,10 @@ def connect(self):
119123
logger.info(
120124
u'Connection Successful. Connection Id {0}'.format(
121125
response.connection_id))
122-
return self.owner_uri
126+
127+
return self.owner_uri, []
128+
129+
return None, error_messages
123130

124131
def execute_multi_statement_single_batch(self, query):
125132
# Try to run first as special command
@@ -158,9 +165,8 @@ def execute_single_batch_query(self, query):
158165
query_messages = []
159166
while not query_request.completed():
160167
query_response = query_request.get_response()
161-
if query_response:
162-
if isinstance(query_response, queryservice.QueryMessageEvent):
163-
query_messages.append(query_response)
168+
if isinstance(query_response, queryservice.QueryMessageEvent):
169+
query_messages.append(query_response)
164170
else:
165171
sleep(time_wait_if_no_response)
166172

tests/test_mssqlcliclient.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
# coding=utf-8
2-
# --------------------------------------------------------------------------------------------
3-
# Copyright (c) Microsoft Corporation. All rights reserved.
4-
# Licensed under the MIT License. See License.txt in the project root for license information.
5-
# --------------------------------------------------------------------------------------------
62
import os
73
import io
84
import unittest
@@ -205,5 +201,6 @@ def test_stored_proc_multiple_result_sets(self):
205201
finally:
206202
shutdown(client)
207203

204+
208205
if __name__ == u'__main__':
209206
unittest.main()

0 commit comments

Comments
 (0)