Example #1
0
    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)
Example #2
0
    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")
Example #3
0
 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')
Example #4
0
 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')
Example #5
0
 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')
Example #6
0
    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')
Example #7
0
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()
Example #8
0
 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)
Example #9
0
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),
        ],
    )
Example #10
0
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),
        ],
    )
Example #11
0
def test_connector_status():
    """
    It should be exported as dict
    """
    assert ConnectorStatus(status=True).to_dict() == {
        'status': True,
        'message': None,
        'error': None,
        'details': [],
    }
Example #12
0
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()
Example #13
0
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()
Example #14
0
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()
Example #15
0
    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")
Example #16
0
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)",
    )
Example #17
0
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()
Example #18
0
    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)
Example #19
0
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',
    )
Example #20
0
    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")
Example #21
0
 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}')
Example #22
0
 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()
Example #23
0
    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)
Example #24
0
def test_get_status():
    assert DataConnector(name='my_name').get_status() == ConnectorStatus()