diff --git a/caravel/templates/caravel/add_slice.html b/caravel/templates/caravel/add_slice.html deleted file mode 100644 index 6d74fca5bcbf8..0000000000000 --- a/caravel/templates/caravel/add_slice.html +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/caravel/views.py b/caravel/views.py index fe1984254d165..9851ba8fbcf4f 100755 --- a/caravel/views.py +++ b/caravel/views.py @@ -520,7 +520,6 @@ class DruidClusterModelView(CaravelModelView, DeleteMixin): # noqa class SliceModelView(CaravelModelView, DeleteMixin): # noqa datamodel = SQLAInterface(models.Slice) - add_template = "caravel/add_slice.html" can_add = False label_columns = { 'datasource_link': 'Datasource', @@ -568,6 +567,28 @@ def pre_update(self, obj): def pre_delete(self, obj): check_ownership(obj) + @expose('/add', methods=['GET', 'POST']) + @has_access + def add(self): + widget = self._add() + if not widget: + return redirect(self.get_redirect()) + + a_druid_datasource = db.session.query(models.DruidDatasource).first() + if a_druid_datasource is not None: + url = "/druiddatasourcemodelview/list/" + msg = _( + "Click on a datasource link to create a Slice, " + "or click on a table link here " + "to create a Slice for a table" + ) + else: + url = "/tablemodelview/list/" + msg = _("Click on a table link to create a Slice") + + redirect_url = "/r/msg/?url={}&msg={}".format(url, msg) + return redirect(redirect_url) + appbuilder.add_view( SliceModelView, "Slices", diff --git a/tests/core_tests.py b/tests/core_tests.py index b6f9154b38833..40e206c237972 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -17,7 +17,7 @@ import caravel from caravel import app, db, models, utils, appbuilder -from caravel.models import DruidCluster +from caravel.models import DruidCluster, DruidDatasource os.environ['CARAVEL_CONFIG'] = 'tests.caravel_test_config' @@ -218,6 +218,27 @@ def test_add_slices(self, username='admin'): assert new_slice in dash.slices assert len(set(dash.slices)) == len(dash.slices) + def test_add_slice_redirect_to_sqla(self, username='admin'): + self.login(username=username) + url = '/slicemodelview/add' + resp = self.client.get(url, follow_redirects=True) + assert "Click on a table link to create a Slice" in resp.data.decode('utf-8') + + def test_add_slice_redirect_to_druid(self, username='admin'): + datasource = DruidDatasource( + datasource_name="datasource_name", + ) + db.session.add(datasource) + db.session.commit() + + self.login(username=username) + url = '/slicemodelview/add' + resp = self.client.get(url, follow_redirects=True) + assert "Click on a datasource link to create a Slice" in resp.data.decode('utf-8') + + db.session.delete(datasource) + db.session.commit() + def test_gamma(self): self.login(username='gamma') resp = self.client.get('/slicemodelview/list/') @@ -409,7 +430,7 @@ def test_client(self, PyDruid): instance.export_pandas.return_value = df instance.query_dict = {} instance.query_builder.last_query.query_dict = {} - resp = self.client.get('/caravel/explore/druid/1/?viz_type=table&granularity=one+day&druid_time_origin=&since=7+days+ago&until=now&row_limit=5000&include_search=false&metrics=count&groupby=name&flt_col_0=dim1&flt_op_0=in&flt_eq_0=&slice_id=&slice_name=&collapsed_fieldsets=&action=&datasource_name=test_datasource&datasource_id=1&datasource_type=druid&previous_viz_type=table&json=true&force=true') + resp = self.client.get('/caravel/explore/druid/{}/?viz_type=table&granularity=one+day&druid_time_origin=&since=7+days+ago&until=now&row_limit=5000&include_search=false&metrics=count&groupby=name&flt_col_0=dim1&flt_op_0=in&flt_eq_0=&slice_id=&slice_name=&collapsed_fieldsets=&action=&datasource_name=test_datasource&datasource_id={}&datasource_type=druid&previous_viz_type=table&json=true&force=true'.format(datasource_id, datasource_id)) assert "Canada" in resp.data.decode('utf-8')