Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
diegomedina248 committed Jan 21, 2023
1 parent 8c7ba93 commit 7d13a30
Show file tree
Hide file tree
Showing 11 changed files with 1,452 additions and 258 deletions.
1,616 changes: 1,403 additions & 213 deletions docs/static/resources/openapi.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ describe('SqlLab query panel', () => {

cy.intercept({
method: 'POST',
url: '/superset/sql_json/',
url: '/api/v1/sqllab/execute/',
}).as('mockSQLResponse');

cy.get('.TableSelector .Select:eq(0)').click();
Expand Down Expand Up @@ -149,7 +149,7 @@ describe('SqlLab query panel', () => {
});

it('Create a chart from a query', () => {
cy.intercept('/superset/sql_json/').as('queryFinished');
cy.intercept('/api/v1/sqllab/execute/').as('queryFinished');
cy.intercept('**/api/v1/explore/**').as('explore');
cy.intercept('**/api/v1/chart/**').as('chart');

Expand Down
7 changes: 4 additions & 3 deletions superset-frontend/src/SqlLab/actions/sqlLab.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ describe('async actions', () => {

afterEach(fetchMock.resetHistory);

const fetchQueryEndpoint = 'glob:*/superset/results/*';
const fetchQueryEndpoint = 'glob:*/api/v1/sqllab/results/*';
fetchMock.get(
fetchQueryEndpoint,
JSON.stringify({ data: mockBigNumber, query: { sqlEditorId: 'dfsadfs' } }),
);

const runQueryEndpoint = 'glob:*/superset/sql_json/';
const runQueryEndpoint = 'glob:*/api/v1/sqllab/execute/';
fetchMock.post(runQueryEndpoint, `{ "data": ${mockBigNumber} }`);

describe('saveQuery', () => {
Expand Down Expand Up @@ -280,7 +280,8 @@ describe('async actions', () => {
};

it('makes the fetch request', async () => {
const runQueryEndpointWithParams = 'glob:*/superset/sql_json/?foo=bar';
const runQueryEndpointWithParams =
'glob:*/api/v1/sqllab/execute/?foo=bar';
fetchMock.post(
runQueryEndpointWithParams,
`{ "data": ${mockBigNumber} }`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ const MOCKED_SQL_EDITOR_HEIGHT = 500;

fetchMock.get('glob:*/api/v1/database/*', { result: [] });
fetchMock.get('glob:*/superset/tables/*', { options: [] });
fetchMock.post('glob:*/sql_json/*', { result: [] });
fetchMock.post('glob:*/sqllab/execute/*', { result: [] });

const middlewares = [thunk];
const mockStore = configureStore(middlewares);
Expand Down
41 changes: 19 additions & 22 deletions superset/sqllab/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,45 +21,42 @@
from flask_appbuilder.api import expose, protect, rison, safe
from flask_appbuilder.models.sqla.interface import SQLAInterface
from marshmallow import ValidationError
from superset.views.base import handle_api_exception
from superset.sqllab.sqllab_execution_context import SqlJsonExecutionContext

from superset import app, is_feature_enabled
from superset.constants import MODEL_API_RW_METHOD_PERMISSION_MAP
from superset.databases.dao import DatabaseDAO
from superset.extensions import event_logger
from superset.jinja_context import get_template_processor
from superset.models.sql_lab import Query
from superset.queries.dao import QueryDAO
from superset.sqllab.sql_json_executer import (
ASynchronousSqlJsonExecutor,
SqlJsonExecutor,
SynchronousSqlJsonExecutor,
)
from superset.sql_lab import get_sql_results
from superset.sqllab.command_status import SqlJsonExecutionStatus
from superset.sqllab.commands.execute import CommandResult, ExecuteSqlCommand
from superset.sqllab.commands.results import SqlExecutionResultsCommand
from superset.sqllab.exceptions import (
QueryIsForbiddenToAccessException,
SqlLabException,
)
from superset.sqllab.command_status import SqlJsonExecutionStatus
from superset.sql_lab import get_sql_results
from superset.sqllab.commands.execute import CommandResult, ExecuteSqlCommand
from superset.sqllab.execution_context_convertor import ExecutionContextConvertor
from superset.databases.dao import DatabaseDAO
from superset.sqllab.validators import CanAccessQueryValidatorImpl
from superset.sqllab.query_render import SqlQueryRenderImpl
from superset.jinja_context import get_template_processor

from superset.constants import MODEL_API_RW_METHOD_PERMISSION_MAP
from superset.extensions import event_logger
from superset.models.sql_lab import Query
from superset.sqllab.commands.results import SqlExecutionResultsCommand
from superset.sqllab.schemas import (
ExecutePayloadSchema,
QueryExecutionResponseSchema,
sql_lab_get_results_schema,
)
from superset.sqllab.sql_json_executer import (
ASynchronousSqlJsonExecutor,
SqlJsonExecutor,
SynchronousSqlJsonExecutor,
)
from superset.sqllab.sqllab_execution_context import SqlJsonExecutionContext
from superset.sqllab.validators import CanAccessQueryValidatorImpl
from superset.views.base import handle_api_exception
from superset.views.base_api import (
BaseSupersetModelRestApi,
requires_json,
statsd_metrics,
)
from superset import (
app,
is_feature_enabled,
)

config = app.config
logger = logging.getLogger(__name__)
Expand Down
23 changes: 10 additions & 13 deletions superset/sqllab/commands/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,13 @@

import logging
from typing import Any, cast, Dict, Optional

from flask_babel import gettext as __, lazy_gettext as _

from superset import (
app,
db,
results_backend,
results_backend_use_msgpack,
)
from superset import app, db, results_backend, results_backend_use_msgpack
from superset.commands.base import BaseCommand
from superset.errors import ErrorLevel, SupersetError, SupersetErrorType
from superset.exceptions import (
SerializationError,
SupersetErrorException,
)
from superset.exceptions import SerializationError, SupersetErrorException
from superset.models.sql_lab import Query
from superset.sqllab.utils import apply_display_max_row_configuration_if_require
from superset.utils import core as utils
Expand Down Expand Up @@ -90,7 +83,9 @@ def validate(self) -> None:
status=410,
)

self._query = db.session.query(Query).filter_by(results_key=self._key).one_or_none()
self._query = (
db.session.query(Query).filter_by(results_key=self._key).one_or_none()
)
if self._query is None:
raise SupersetErrorException(
SupersetError(
Expand All @@ -109,7 +104,9 @@ def run(
) -> Dict[str, Any]:
"""Runs arbitrary sql and returns data as json"""
self.validate()
payload = utils.zlib_decompress(self._blob, decode=not results_backend_use_msgpack)
payload = utils.zlib_decompress(
self._blob, decode=not results_backend_use_msgpack
)
try:
obj = _deserialize_results_payload(
payload, self._query, cast(bool, results_backend_use_msgpack)
Expand All @@ -130,5 +127,5 @@ def run(

if self._rows:
obj = apply_display_max_row_configuration_if_require(obj, self._rows)

return obj
2 changes: 1 addition & 1 deletion superset/sqllab/schemas.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class QueryResultSchema(Schema):
changedOn = fields.DateTime()
changed_on = fields.String()
dbId = fields.Integer()
db = fields.String()
db = fields.String() # pylint: disable=invalid-name
endDttm = fields.Float()
errorMessage = fields.String(allow_none=True)
executedSql = fields.String()
Expand Down
1 change: 1 addition & 0 deletions superset/views/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -2177,6 +2177,7 @@ def theme(self) -> FlaskResponse:
@has_access_api
@expose("/results/<key>/")
@event_logger.log_this
@deprecated()
def results(self, key: str) -> FlaskResponse:
return self.results_exec(key)

Expand Down
2 changes: 1 addition & 1 deletion tests/integration_tests/base_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,7 @@ def run_sql(
json_payload["schema"] = schema

resp = self.get_json_resp(
"/superset/sql_json/", raise_on_error=False, json_=json_payload
"/api/v1/sqllab/execute/", raise_on_error=False, json_=json_payload
)
if raise_on_error and "error" in resp:
raise Exception("run_sql failed")
Expand Down
2 changes: 1 addition & 1 deletion tests/integration_tests/celery_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def run_sql(
):
db_id = get_example_database().id
return test_client.post(
"/superset/sql_json/",
"/api/v1/sqllab/execute/",
json=dict(
database_id=db_id,
sql=sql,
Expand Down
10 changes: 9 additions & 1 deletion tests/integration_tests/sql_lab/api_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@


class TestSqlLabApi(SupersetTestCase):
@mock.patch("superset.sqllab.commands.results.results_backend_use_msgpack", False)
def test_execute_required_params(self):
self.login()
client_id = "{}".format(random.getrandbits(64))[:10]
Expand Down Expand Up @@ -78,12 +79,19 @@ def test_execute_required_params(self):
self.assertDictEqual(resp_data, failed_resp)
self.assertEqual(rv.status_code, 400)

from superset import sql_lab as core

core.results_backend = mock.Mock()
core.results_backend.get.return_value = {}

data = {"sql": "SELECT 1", "database_id": 1, "client_id": client_id}
rv = self.client.post(
"/api/v1/sqllab/execute/",
json=data,
)
resp_data = json.loads(rv.data.decode("utf-8"))
print("R:\n")
print(resp_data)
self.assertEqual(resp_data.get("status"), "success")
self.assertEqual(rv.status_code, 200)

Expand Down Expand Up @@ -113,7 +121,7 @@ def test_execute_custom_templated(self, sql_lab_mock, mock_dt) -> None:
self.delete_fake_db_for_macros()

@mock.patch("superset.sqllab.commands.results.results_backend_use_msgpack", False)
def test_display_limit(self):
def test_get_results_with_display_limit(self):
from superset.sqllab.commands import results as command

command.results_backend = mock.Mock()
Expand Down

0 comments on commit 7d13a30

Please sign in to comment.