def get_status(self) -> ConnectorStatus: if self.port: # Check hostname try: self.check_hostname(self.host) except Exception as e: return ConnectorStatus( status=False, details=self._get_details(0, False), error=str(e) ) # Check port try: self.check_port(self.host, self.port) except Exception as e: return ConnectorStatus( status=False, details=self._get_details(1, False), error=str(e) ) # Check databases access mongo_client_kwargs = self._get_mongo_client_kwargs() mongo_client_kwargs['serverSelectionTimeoutMS'] = 500 client = pymongo.MongoClient(**mongo_client_kwargs) try: client.server_info() except pymongo.errors.ServerSelectionTimeoutError as e: return ConnectorStatus(status=False, details=self._get_details(2, False), error=str(e)) except pymongo.errors.OperationFailure as e: return ConnectorStatus(status=False, details=self._get_details(3, False), error=str(e)) return ConnectorStatus(status=True, details=self._get_details(3, True), error=None)
def get_status(self) -> ConnectorStatus: """ Test the Google Sheets connexion. If successful, returns a message with the email of the connected user account. """ try: access_token = self._retrieve_token( self._managed_oauth_service_id, self.auth_id.get_secret_value()) except Exception: return ConnectorStatus(status=False, error='Credentials are missing') if not access_token: return ConnectorStatus(status=False, error='Credentials are missing') try: with self.build_oauth2() as oauth2_api: user_info = (oauth2_api.userinfo().get().execute( **self._google_client_request_kwargs())) return ConnectorStatus( status=True, message=f"Connected as {user_info.get('email')}") except GoogleApiClientError: return ConnectorStatus(status=False, error="Couldn't retrieve user infos")
def get_status(self) -> ConnectorStatus: """ Test the Net Explorer's connexion. :return: a ConnectorStatus with the current status """ try: self._retrieve_token() return ConnectorStatus(status=True) except Exception: return ConnectorStatus(status=False, error='Unable to connect')
def get_status(self) -> ConnectorStatus: """ Test the Aircall connexion. """ try: access_token = self.get_access_token() if access_token: return ConnectorStatus(status=True) except Exception: return ConnectorStatus(status=False, error='Credentials are missing') if not access_token: return ConnectorStatus(status=False, error='Credentials are missing')
def get_status(self) -> ConnectorStatus: """ Test the Salesforce's connexion. :return: a ConnectorStatus with the current status """ try: access_token = self.get_access_token() if access_token: c = ConnectorStatus(status=True) return c else: return ConnectorStatus(status=False) except Exception: return ConnectorStatus(status=False, error='Credentials are missing')
def get_status(self) -> ConnectorStatus: """ Test the Linkedin Ads connexion. If successful, returns a message with the email of the connected user account. """ try: access_token = self.get_access_token() except Exception: return ConnectorStatus(status=False, error='Credentials are missing') if not access_token: return ConnectorStatus(status=False, error='Credentials are missing') return ConnectorStatus(status=True, message='Connector status OK')
def test_get_status_all_good(gw, is_closed, close, connect, snowflake_connector): result = snowflake_connector.get_status() assert result == ConnectorStatus(status=True, details=[ ('Connection to Snowflake', True), ('Default warehouse exists', True) ]) SnowflakeConnector.get_snowflake_connection_manager().force_clean()
def get_status(self) -> ConnectorStatus: # Check hostname try: self.check_hostname(self.host) except Exception as e: return ConnectorStatus(status=False, details=self._get_details(0, False), error=str(e)) # Check port try: self.check_port(self.host, self.port) except Exception as e: return ConnectorStatus(status=False, details=self._get_details(1, False), error=str(e)) return ConnectorStatus(status=True, details=self._get_details(2, True), error=None)
def test_get_status_all_good(postgres_connector): assert postgres_connector.get_status() == ConnectorStatus( status=True, details=[ ('Host resolved', True), ('Port opened', True), ('Connected to PostgreSQL', True), ('Authenticated', True), ], )
def test_get_status_all_good(mysql_connector): assert mysql_connector.get_status() == ConnectorStatus( status=True, details=[ ('Hostname resolved', True), ('Port opened', True), ('Host connection', True), ('Authenticated', True), ], )
def test_connector_status(): """ It should be exported as dict """ assert ConnectorStatus(status=True).to_dict() == { 'status': True, 'message': None, 'error': None, 'details': [], }
def test_account_forbidden(is_closed, close, connect, gw, snowflake_connector): cm = SnowflakeConnector.get_snowflake_connection_manager() gw.side_effect = snowflake.connector.errors.ForbiddenError() result = snowflake_connector.get_status() assert result == ConnectorStatus( status=False, error= f"Access forbidden, please check that you have access to the '{snowflake_connector.account}' account or try again later.", details=[('Connection to Snowflake', False), ('Default warehouse exists', None)], ) cm.force_clean()
def test_get_status_account_nok(is_closed, close, connect, gw, snowflake_connector): cm = SnowflakeConnector.get_snowflake_connection_manager() gw.side_effect = snowflake.connector.errors.ProgrammingError('Account nok') result = snowflake_connector.get_status() assert result == ConnectorStatus( status=False, error='Account nok', details=[('Connection to Snowflake', False), ('Default warehouse exists', None)], ) cm.force_clean()
def test_account_does_not_exists(is_closed, close, connect, gw, snowflake_connector): cm = SnowflakeConnector.get_snowflake_connection_manager() gw.side_effect = snowflake.connector.errors.OperationalError() result = snowflake_connector.get_status() assert result == ConnectorStatus( status=False, error= f"Connection failed for the account '{snowflake_connector.account}', please check the Account field", details=[('Connection to Snowflake', False), ('Default warehouse exists', None)], ) cm.force_clean()
def get_status(self) -> ConnectorStatus: """ Test the Google Ads connexion. If successful, returns a message with the email of the connected user account. """ try: access_token = self.get_access_token() except Exception: return ConnectorStatus(status=False, error='Credentials are missing') if not access_token: return ConnectorStatus(status=False, error='Credentials are missing') try: user_info = requests.get( url='https://www.googleapis.com/oauth2/v2/userinfo?alt=json', headers={'Authorization': f'Bearer {access_token}'}, ).json() return ConnectorStatus(status=True, message=f"Connected as {user_info.get('email')}") except HttpError: return ConnectorStatus(status=False, error="Couldn't retrieve user infos")
def test_get_status_bad_authentication(mysql_connector): mysql_connector.user = '******' assert mysql_connector.get_status() == ConnectorStatus( status=False, details=[ ('Hostname resolved', True), ('Port opened', True), ('Host connection', True), ('Authenticated', False), ], error= "Access denied for user 'pika'@'172.17.0.1' (using password: YES)", )
def test_account_failed_for_user(is_closed, close, connect, gw, snowflake_connector): cm = SnowflakeConnector.get_snowflake_connection_manager() gw.side_effect = snowflake.connector.errors.DatabaseError() result = snowflake_connector.get_status() assert result == ConnectorStatus( status=False, error= f"Connection failed for the user '{snowflake_connector.user}', please check your credentials", details=[('Connection to Snowflake', False), ('Default warehouse exists', None)], ) cm.force_clean()
def get_status(self) -> ConnectorStatus: # Check hostname try: self.check_hostname(self.host) except Exception as e: return ConnectorStatus(status=False, details=self._get_details(0, False), error=str(e)) # Check port try: self.check_port(self.host, self.port) except Exception as e: return ConnectorStatus(status=False, details=self._get_details(1, False), error=str(e)) # Check basic access try: pymysql.connect(**self.get_connection_params()) except pymysql.err.OperationalError as e: error_code = e.args[0] # Can't connect to full URI if error_code == CR.CR_CONN_HOST_ERROR: return ConnectorStatus(status=False, details=self._get_details(2, False), error=e.args[1]) # Wrong user/password if error_code == ER.ACCESS_DENIED_ERROR: return ConnectorStatus(status=False, details=self._get_details(3, False), error=e.args[1]) return ConnectorStatus(status=True, details=self._get_details(3, True), error=None)
def test_status_unreachable(mongo_connector, mocker): mocker.patch( 'pymongo.MongoClient.server_info', side_effect=pymongo.errors.ServerSelectionTimeoutError('qwe'), ) assert mongo_connector.get_status() == ConnectorStatus( status=False, details=[ ('Hostname resolved', True), ('Port opened', True), ('Host connection', False), ('Authenticated', None), ], error='qwe', )
def get_status(self) -> ConnectorStatus: """ Test the Google Sheets connexion. If successful, returns a message with the email of the connected user account. """ try: access_token = self.get_access_token() except Exception: return ConnectorStatus(status=False, error='Credentials are missing') if not access_token: return ConnectorStatus(status=False, error='Credentials are missing') try: user_info = self._run_fetch( 'https://www.googleapis.com/oauth2/v2/userinfo?alt=json') return ConnectorStatus( status=True, message=f"Connected as {user_info.get('email')}") except HttpError: return ConnectorStatus(status=False, error="Couldn't retrieve user infos")
def get_status(self) -> ConnectorStatus: """ Test the Salesforce's connexion. :return: a ConnectorStatus with the current status """ try: access_data = self.get_access_data() if access_data: return ConnectorStatus(status=True, message='Connection successful') else: return ConnectorStatus( status=False, error='Impossible to retrieve access_token') except OAuthError as ex: return ConnectorStatus(status=False, error=f'Error to get status - {ex.error}') except NoOAuth2RefreshToken: return ConnectorStatus( status=False, error='Error to get status - no refresh token found') except Exception as ex: return ConnectorStatus( status=False, error=f'Error to get status - unknown exception - {ex}')
def get_status(self) -> ConnectorStatus: """ Check if connection can be made. Returns { 'status': True/False/None # the status of the connection (None if no check has been made) 'details': [(< type of check >, True/False/None), (...), ...] 'error': < error message > # if a check raised an error, return it 'message': < status message > # optionally provides some additional info, such as the user account connected } e.g. { 'status': False, 'details': [ ('hostname resolved', True), ('port opened', False,), ('db validation', None), ... ], 'error': 'port must be 0-65535' } """ return ConnectorStatus()
def get_status(self) -> ConnectorStatus: try: res = self._get_warehouses(self.default_warehouse) if len(res) == 0: raise SnowflakeConnectorWarehouseDoesNotExists( f"The warehouse '{self.default_warehouse}' does not exist." ) except SnowflakeConnectorWarehouseDoesNotExists as e: return ConnectorStatus(status=False, details=self._get_status_details(1, False), error=str(e)) except snowflake.connector.errors.OperationalError: # Raised when the provided account does not exists or when the # provided User does not have access to the provided account return ConnectorStatus( status=False, details=self._get_status_details(0, False), error= f"Connection failed for the account '{self.account}', please check the Account field", ) except snowflake.connector.errors.ForbiddenError: return ConnectorStatus( status=False, details=self._get_status_details(0, False), error= f"Access forbidden, please check that you have access to the '{self.account}' account or try again later.", ) except snowflake.connector.errors.ProgrammingError as e: return ConnectorStatus(status=False, details=self._get_status_details(0, False), error=str(e)) except snowflake.connector.errors.DatabaseError: # Raised when the provided User/Password aren't correct return ConnectorStatus( status=False, details=self._get_status_details(0, False), error= f"Connection failed for the user '{self.user}', please check your credentials", ) return ConnectorStatus(status=True, details=self._get_status_details(1, True), error=None)
def test_get_status(): assert DataConnector(name='my_name').get_status() == ConnectorStatus()