You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2018/12/10 21:12:00 UTC
[incubator-superset] branch master updated: Google spreadsheets
(#5915)
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new f366bbe Google spreadsheets (#5915)
f366bbe is described below
commit f366bbe7356106d15c6cfe481f64afbd8091ffb7
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Mon Dec 10 13:11:54 2018 -0800
Google spreadsheets (#5915)
* Google spreadsheets
* Fetch table metadata in SQL Lab
* Show full URL for spreadsheet
* Fix version
* Remove sqllab changes
---
setup.py | 1 +
superset/assets/src/SqlLab/components/ExploreResultsButton.jsx | 3 ++-
superset/assets/src/SqlLab/components/SouthPane.jsx | 2 +-
superset/db_engine_specs.py | 7 +++++++
superset/views/core.py | 6 ++++--
5 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/setup.py b/setup.py
index 6985dba..542ca3f 100644
--- a/setup.py
+++ b/setup.py
@@ -69,6 +69,7 @@ setup(
'flask-wtf',
'flower', # deprecated
'geopy',
+ 'gsheetsdb>=0.1.8',
'gunicorn', # deprecated
'humanize',
'idna',
diff --git a/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx b/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
index 26a246c..2c22b93 100644
--- a/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
+++ b/superset/assets/src/SqlLab/components/ExploreResultsButton.jsx
@@ -164,11 +164,12 @@ class ExploreResultsButton extends React.PureComponent {
);
}
render() {
+ const allowsSubquery = this.props.database && this.props.database.allows_subquery;
return (
<Button
bsSize="small"
onClick={this.onClick}
- disabled={!this.props.database.allows_subquery}
+ disabled={!allowsSubquery}
tooltip={t('Explore the result set in the data exploration view')}
>
<Dialog
diff --git a/superset/assets/src/SqlLab/components/SouthPane.jsx b/superset/assets/src/SqlLab/components/SouthPane.jsx
index 3f6fb42..f93947d 100644
--- a/superset/assets/src/SqlLab/components/SouthPane.jsx
+++ b/superset/assets/src/SqlLab/components/SouthPane.jsx
@@ -64,7 +64,7 @@ class SouthPane extends React.PureComponent {
}
const dataPreviewTabs = props.dataPreviewQueries.map(query => (
<Tab
- title={t('Preview: `%s`', query.tableName)}
+ title={t('Preview: `%s`', decodeURIComponent(query.tableName))}
eventKey={query.id}
key={query.id}
>
diff --git a/superset/db_engine_specs.py b/superset/db_engine_specs.py
index d409c87..edbd1b2 100644
--- a/superset/db_engine_specs.py
+++ b/superset/db_engine_specs.py
@@ -1499,6 +1499,13 @@ class DruidEngineSpec(BaseEngineSpec):
}
+class GSheetsEngineSpec(SqliteEngineSpec):
+ """Engine for Google spreadsheets"""
+ engine = 'gsheets'
+ inner_joins = False
+ allows_subquery = False
+
+
class KylinEngineSpec(BaseEngineSpec):
"""Dialect for Apache Kylin"""
diff --git a/superset/views/core.py b/superset/views/core.py
index 7faa1e2..c565e3a 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -2267,10 +2267,11 @@ class Superset(BaseSupersetView):
}))
@has_access
- @expose('/table/<database_id>/<table_name>/<schema>/')
+ @expose('/table/<database_id>/<path:table_name>/<schema>/')
@log_this
def table(self, database_id, table_name, schema):
schema = utils.js_string_to_python(schema)
+ table_name = parse.unquote_plus(table_name)
mydb = db.session.query(models.Database).filter_by(id=database_id).one()
payload_columns = []
indexes = []
@@ -2326,10 +2327,11 @@ class Superset(BaseSupersetView):
return json_success(json.dumps(tbl))
@has_access
- @expose('/extra_table_metadata/<database_id>/<table_name>/<schema>/')
+ @expose('/extra_table_metadata/<database_id>/<path:table_name>/<schema>/')
@log_this
def extra_table_metadata(self, database_id, table_name, schema):
schema = utils.js_string_to_python(schema)
+ table_name = parse.unquote_plus(table_name)
mydb = db.session.query(models.Database).filter_by(id=database_id).one()
payload = mydb.db_engine_spec.extra_table_metadata(
mydb, table_name, schema)