[select-star] Adding optional schema to view (#6051)

This commit is contained in:
John Bodley 2018-10-08 10:32:40 -07:00 committed by GitHub
parent 9dcf8e101a
commit 1ee08fc216
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 9 deletions

View File

@ -32,7 +32,7 @@ from flask_babel import lazy_gettext as _
import pandas
from past.builtins import basestring
import sqlalchemy as sqla
from sqlalchemy import select
from sqlalchemy import Column, select
from sqlalchemy.engine import create_engine
from sqlalchemy.engine.url import make_url
from sqlalchemy.sql import quoted_name, text
@ -852,6 +852,20 @@ class PrestoEngineSpec(BaseEngineSpec):
""").format(**locals())
return sql
@classmethod
def where_latest_partition(
cls, table_name, schema, database, qry, columns=None):
try:
col_name, value = cls.latest_partition(
table_name, schema, database, show_first=True)
except Exception:
# table is not partitioned
return False
for c in columns:
if c.get('name') == col_name:
return qry.where(Column(col_name) == value)
return False
@classmethod
def _latest_partition_from_df(cls, df):
recs = df.to_records(index=False)
@ -1180,7 +1194,7 @@ class HiveEngineSpec(PrestoEngineSpec):
cls, table_name, schema, database, qry, columns=None):
try:
col_name, value = cls.latest_partition(
table_name, schema, database)
table_name, schema, database, show_first=True)
except Exception:
# table is not partitioned
return False

View File

@ -1 +0,0 @@
{{ content |safe }}

View File

@ -2332,7 +2332,7 @@ class Superset(BaseSupersetView):
'columns': payload_columns,
'selectStar': mydb.select_star(
table_name, schema=schema, show_cols=True, indent=True,
cols=columns, latest_partition=False),
cols=columns, latest_partition=True),
'primaryKey': primary_key,
'foreignKeys': foreign_keys,
'indexes': keys,
@ -2350,14 +2350,19 @@ class Superset(BaseSupersetView):
return json_success(json.dumps(payload))
@has_access
@expose('/select_star/<database_id>/<table_name>/')
@expose('/select_star/<database_id>/<table_name>')
@expose('/select_star/<database_id>/<table_name>/<schema>')
@log_this
def select_star(self, database_id, table_name):
def select_star(self, database_id, table_name, schema=None):
mydb = db.session.query(
models.Database).filter_by(id=database_id).first()
return self.render_template(
'superset/ajah.html',
content=mydb.select_star(table_name, show_cols=True),
return json_success(
mydb.select_star(
table_name,
schema,
latest_partition=True,
show_cols=True,
),
)
@expose('/theme/')

View File

@ -727,6 +727,11 @@ class CoreTests(SupersetTestCase):
.format(db_id=dbobj.id))
assert data == ['this_schema_is_allowed_too']
def test_select_star(self):
self.login(username='admin')
resp = self.get_resp('/superset/select_star/1/birth_names')
self.assertIn('gender', resp)
if __name__ == '__main__':
unittest.main()