[SQLLab] Fix, database api unlimited page size v2 (#8002)

* [database] Fix, Removes the limit for the page size, Bump FAB to 2.1.8

Old FAB API had no limits by default, this will keep this behaviour
but only for this endpoint

* [sqllab] Add test for database API

* [sqllab] Add test for database API

* [sqllab] Include page zero on request

* [sqllab] Fix, Black and requirements

* [sqllab] Make database API return unlimited results

* [sqllab] just a test

* [sqllab] Bump FAB to 2.1.9

* [sqllab] Remove unused import
This commit is contained in:
Daniel Vaz Gaspar 2019-08-08 19:37:00 +01:00 committed by Maxime Beauchemin
parent 2f2a3b79b4
commit 73cdad2375
5 changed files with 25 additions and 10 deletions

View File

@ -13,9 +13,7 @@ babel==2.7.0 # via flask-babel
billiard==3.6.0.0 # via celery
bleach==3.1.0
celery==4.3.0
certifi==2019.6.16 # via requests
cffi==1.12.3 # via cryptography
chardet==3.0.4 # via requests
click==6.7
colorama==0.4.1
contextlib2==0.5.5
@ -23,7 +21,7 @@ croniter==0.3.30
cryptography==2.7
decorator==4.4.0 # via retry
defusedxml==0.6.0 # via python3-openid
flask-appbuilder==2.1.7
flask-appbuilder==2.1.9
flask-babel==0.12.2 # via flask-appbuilder
flask-caching==1.7.2
flask-compress==1.4.0
@ -72,16 +70,13 @@ pyyaml==5.1.2
retry==0.9.2
selenium==3.141.0
simplejson==3.16.0
six==1.12.0 # via bleach, cryptography, flask-jwt-extended, flask-talisman, isodate, jsonschema, pathlib2, polyline, prison, pydruid, pyrsistent, python-dateutil, sqlalchemy-utils, wtforms-json
six==1.12.0 # via bleach, cryptography, flask-jwt-extended, flask-talisman, isodate, jsonschema, pathlib2, polyline, prison, pyrsistent, python-dateutil, sqlalchemy-utils, wtforms-json
sqlalchemy-utils==0.34.1
sqlalchemy==1.3.6
sqlparse==0.3.0
urllib3==1.25.3 # via requests, selenium
urllib3==1.25.3 # via selenium
vine==1.3.0 # via amqp, celery
webencodings==0.5.1 # via bleach
werkzeug==0.15.5 # via flask, flask-jwt-extended
wtforms-json==0.3.3
wtforms==2.2.1 # via flask-wtf, wtforms-json
# The following packages are considered to be unsafe in a requirements file:
# setuptools==41.0.1 # via jsonschema, markdown

View File

@ -73,7 +73,7 @@ setup(
"croniter>=0.3.28",
"cryptography>=2.4.2",
"flask>=1.0.0, <2.0.0",
"flask-appbuilder>=2.1.6, <2.3.0",
"flask-appbuilder>=2.1.9, <2.3.0",
"flask-caching",
"flask-compress",
"flask-talisman",

View File

@ -218,7 +218,7 @@ export default class TableSelector extends React.PureComponent {
'/api/v1/database/?q=' +
'(keys:!(none),' +
'filters:!((col:expose_in_sqllab,opr:eq,value:!t)),' +
'order_columns:database_name,order_direction:asc)'
'order_columns:database_name,order_direction:asc,page:0,page_size:-1)'
}
onChange={this.onDatabaseChange}
onAsyncError={() => this.props.handleError(t('Error while fetching database list'))}

View File

@ -50,6 +50,8 @@ class DatabaseRestApi(DatabaseMixin, ModelRestApi):
"allows_subquery",
"backend",
]
# Removes the local limit for the page size
max_page_size = -1
appbuilder.add_api(DatabaseRestApi)

View File

@ -20,6 +20,7 @@ import json
import unittest
from flask_appbuilder.security.sqla import models as ab_models
import prison
from superset import db, security_manager
from superset.dataframe import SupersetDataFrame
@ -403,6 +404,23 @@ class SqlLabTests(SupersetTestCase):
session.commit()
def test_api_database(self):
self.login("admin")
arguments = {
"keys": [],
"filters": [{"col": "expose_in_sqllab", "opr": "eq", "value": True}],
"order_column": "database_name",
"order_direction": "asc",
"page": 0,
"page_size": -1,
}
expected_results = ["examples", "fake_db_100", "main"]
url = "api/v1/database/?{}={}".format("q", prison.dumps(arguments))
data = self.get_json_resp(url)
for i, expected_result in enumerate(expected_results):
self.assertEquals(expected_result, data["result"][i]["database_name"])
if __name__ == "__main__":
unittest.main()