def test_database_connection_test_mutator(self):
        database = Database(sqlalchemy_uri="snowflake://abc")
        SnowflakeEngineSpec.mutate_db_for_connection_test(database)
        engine_params = json.loads(database.extra or "{}")

        self.assertDictEqual(
            {"engine_params": {"connect_args": {"validate_default_parameters": True}}},
            engine_params,
        )
예제 #2
0
def test_database_connection_test_mutator() -> None:
    from superset.db_engine_specs.snowflake import SnowflakeEngineSpec
    from superset.models.core import Database

    database = Database(sqlalchemy_uri="snowflake://abc")
    SnowflakeEngineSpec.mutate_db_for_connection_test(database)
    engine_params = json.loads(database.extra or "{}")

    assert {
        "engine_params": {
            "connect_args": {
                "validate_default_parameters": True
            }
        }
    } == engine_params
예제 #3
0
    def test_convert_dttm(self):
        dttm = self.get_dttm()

        self.assertEqual(SnowflakeEngineSpec.convert_dttm("DATE", dttm),
                         "TO_DATE('2019-01-02')")

        self.assertEqual(
            SnowflakeEngineSpec.convert_dttm("DATETIME", dttm),
            "CAST('2019-01-02T03:04:05.678900' AS DATETIME)",
        )

        self.assertEqual(
            SnowflakeEngineSpec.convert_dttm("TIMESTAMP", dttm),
            "TO_TIMESTAMP('2019-01-02T03:04:05.678900')",
        )
예제 #4
0
def test_cancel_query_failed(engine_mock: mock.Mock) -> None:
    from superset.db_engine_specs.snowflake import SnowflakeEngineSpec
    from superset.models.sql_lab import Query

    query = Query()
    cursor_mock = engine_mock.raiseError.side_effect = Exception()
    assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, "123") is False
예제 #5
0
def test_cancel_query(engine_mock: mock.Mock) -> None:
    from superset.db_engine_specs.snowflake import SnowflakeEngineSpec
    from superset.models.sql_lab import Query

    query = Query()
    cursor_mock = engine_mock.return_value.__enter__.return_value
    assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, "123") is True
예제 #6
0
def test_get_cancel_query_id(engine_mock: mock.Mock) -> None:
    from superset.db_engine_specs.snowflake import SnowflakeEngineSpec
    from superset.models.sql_lab import Query

    query = Query()
    cursor_mock = engine_mock.return_value.__enter__.return_value
    cursor_mock.fetchone.return_value = [123]
    assert SnowflakeEngineSpec.get_cancel_query_id(cursor_mock, query) == 123
예제 #7
0
def test_extract_errors() -> None:
    from superset.db_engine_specs.snowflake import SnowflakeEngineSpec

    msg = "Object dumbBrick does not exist or not authorized."
    result = SnowflakeEngineSpec.extract_errors(Exception(msg))
    assert result == [
        SupersetError(
            message="dumbBrick does not exist in this database.",
            error_type=SupersetErrorType.OBJECT_DOES_NOT_EXIST_ERROR,
            level=ErrorLevel.ERROR,
            extra={
                "engine_name":
                "Snowflake",
                "issue_codes": [{
                    "code":
                    1029,
                    "message":
                    "Issue 1029 - The object does not exist in the given database.",
                }],
            },
        )
    ]

    msg = "syntax error line 1 at position 10 unexpected 'limmmited'."
    result = SnowflakeEngineSpec.extract_errors(Exception(msg))
    assert result == [
        SupersetError(
            message=
            'Please check your query for syntax errors at or near "limmmited". Then, try running your query again.',
            error_type=SupersetErrorType.SYNTAX_ERROR,
            level=ErrorLevel.ERROR,
            extra={
                "engine_name":
                "Snowflake",
                "issue_codes": [{
                    "code":
                    1030,
                    "message":
                    "Issue 1030 - The query has a syntax error.",
                }],
            },
        )
    ]
    def test_convert_dttm(self):
        dttm = self.get_dttm()

        test_cases = {
            "DATE": "TO_DATE('2019-01-02')",
            "DATETIME": "CAST('2019-01-02T03:04:05.678900' AS DATETIME)",
            "TIMESTAMP": "TO_TIMESTAMP('2019-01-02T03:04:05.678900')",
        }

        for type_, expected in test_cases.items():
            self.assertEqual(SnowflakeEngineSpec.convert_dttm(type_, dttm), expected)
 def test_cancel_query(self, engine_mock):
     query = Query()
     cursor_mock = engine_mock.return_value.__enter__.return_value
     assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, 123) is True
 def test_get_cancel_query_id(self, engine_mock):
     query = Query()
     cursor_mock = engine_mock.return_value.__enter__.return_value
     cursor_mock.fetchone.return_value = [123]
     assert SnowflakeEngineSpec.get_cancel_query_id(cursor_mock, query) == 123
 def test_cancel_query_failed(self, engine_mock):
     query = Query()
     cursor_mock = engine_mock.raiseError.side_effect = Exception()
     assert SnowflakeEngineSpec.cancel_query(cursor_mock, query, 123) is False
예제 #12
0
def test_convert_dttm(actual: str, expected: str, dttm: datetime) -> None:
    from superset.db_engine_specs.snowflake import SnowflakeEngineSpec

    assert SnowflakeEngineSpec.convert_dttm(actual, dttm) == expected