From 1624e7de7dd50f1c4f5fdd9153adac4ba5b983d2 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Fri, 18 Nov 2016 20:14:26 -0500 Subject: [PATCH] Add all_tables endpoint to allow airpal / superset perm sync. (#1614) --- superset/views.py | 25 +++++++++++++++++++++++++ tests/core_tests.py | 11 ++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/superset/views.py b/superset/views.py index 6e66b9017e..d7d6417dd4 100755 --- a/superset/views.py +++ b/superset/views.py @@ -1575,6 +1575,31 @@ class Superset(BaseSupersetView): ccount for dt, ccount in qry if dt} return Response(json.dumps(payload), mimetype="application/json") + @api + @has_access_api + @expose("/all_tables/") + def all_tables(self, db_id): + """Endpoint that returns all tables and views from the database""" + database = ( + db.session + .query(models.Database) + .filter_by(id=db_id) + .one() + ) + all_tables = [] + all_views = [] + schemas = database.all_schema_names() + for schema in schemas: + all_tables.extend(database.all_table_names(schema=schema)) + all_views.extend(database.all_view_names(schema=schema)) + if not schemas: + all_tables.extend(database.all_table_names()) + all_views.extend(database.all_view_names()) + + return Response( + json.dumps({"tables": all_tables, "views": all_views}), + mimetype="application/json") + @api @has_access_api @expose("/tables//") diff --git a/tests/core_tests.py b/tests/core_tests.py index 82093bec44..cd4ab62dfe 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -427,10 +427,19 @@ class CoreTests(SupersetTestCase): def test_fetch_datasource_metadata(self): self.login(username='admin') - url = '/superset/fetch_datasource_metadata?datasource_type=table&datasource_id=1'; + url = '/superset/fetch_datasource_metadata?datasource_type=table&' \ + 'datasource_id=1' resp = json.loads(self.get_resp(url)) self.assertEqual(len(resp['field_options']), 20) + def test_fetch_all_tables(self): + self.login(username='admin') + database = self.get_main_database(db.session) + url = '/superset/all_tables/{}'.format(database.id) + resp = json.loads(self.get_resp(url)) + self.assertIn('tables', resp) + self.assertIn('views', resp) + if __name__ == '__main__': unittest.main()