You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2018/08/03 19:46:51 UTC
[incubator-superset] branch master updated: Improve URLs for Chart
and Dashboard ModelViews (#5544)
This is an automated email from the ASF dual-hosted git repository.
maximebeauchemin 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 51bd17d Improve URLs for Chart and Dashboard ModelViews (#5544)
51bd17d is described below
commit 51bd17d6f6820adc08ab57a2f77e9354f9b0a99b
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Fri Aug 3 12:46:48 2018 -0700
Improve URLs for Chart and Dashboard ModelViews (#5544)
* Improve URLs for Chart and Dashboard ModelViews
Prior to this, the ModelView for Chart and Dashboard would be
at `/slicemodelview/list/` and `/dashboardmodelview/list/`.
Now we have cleaner URLs at `/chart/list/` and `/dashboard/list/`
* Fix unrelated js lint
* addressing comments
---
.../javascripts/components/AsyncSelect_spec.jsx | 2 +-
.../dashboard/fixtures/mockSliceEntities.js | 22 ++--
.../explore/components/SaveModal_spec.jsx | 2 +-
.../dashboard/components/HeaderActionsDropdown.jsx | 5 +-
.../assets/src/explore/actions/saveModalActions.js | 2 +-
.../src/explore/components/ExploreChartHeader.jsx | 2 +-
superset/assets/src/welcome/DashboardTable.jsx | 2 +-
superset/models/core.py | 2 +-
superset/templates/index.html | 116 ---------------------
.../superset/partials/_explore_title.html | 30 ------
superset/templates/superset/request_access.html | 2 +-
superset/views/core.py | 14 ++-
tests/core_tests.py | 8 +-
tests/dashboard_tests.py | 16 +--
tests/import_export_tests.py | 4 +-
15 files changed, 43 insertions(+), 186 deletions(-)
diff --git a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx
index a672716..bde4610 100644
--- a/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx
+++ b/superset/assets/spec/javascripts/components/AsyncSelect_spec.jsx
@@ -9,7 +9,7 @@ import AsyncSelect from '../../../src/components/AsyncSelect';
describe('AsyncSelect', () => {
const mockedProps = {
- dataEndpoint: '/slicemodelview/api/read',
+ dataEndpoint: '/chart/api/read',
onChange: sinon.spy(),
placeholder: 'Select...',
mutator: () => [
diff --git a/superset/assets/spec/javascripts/dashboard/fixtures/mockSliceEntities.js b/superset/assets/spec/javascripts/dashboard/fixtures/mockSliceEntities.js
index 3644c10..03d8e30 100644
--- a/superset/assets/spec/javascripts/dashboard/fixtures/mockSliceEntities.js
+++ b/superset/assets/spec/javascripts/dashboard/fixtures/mockSliceEntities.js
@@ -26,7 +26,7 @@ export const sliceEntitiesForChart = {
compare_suffix: 'o10Y',
datasource: datasourceId,
},
- edit_url: `/slicemodelview/edit/${sliceId}`,
+ edit_url: `/chart/edit/${sliceId}`,
viz_type: 'pie',
datasource: datasourceId,
description: null,
@@ -45,7 +45,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20127%7D',
slice_name: 'Region Filter',
form_data: {},
- edit_url: '/slicemodelview/edit/127',
+ edit_url: '/chart/edit/127',
viz_type: 'filter_box',
datasource: '2__table',
description: null,
@@ -58,7 +58,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20128%7D',
slice_name: "World's Population",
form_data: {},
- edit_url: '/slicemodelview/edit/128',
+ edit_url: '/chart/edit/128',
viz_type: 'big_number',
datasource: '2__table',
description: null,
@@ -71,7 +71,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20129%7D',
slice_name: 'Most Populated Countries',
form_data: {},
- edit_url: '/slicemodelview/edit/129',
+ edit_url: '/chart/edit/129',
viz_type: 'table',
datasource: '2__table',
description: null,
@@ -84,7 +84,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20130%7D',
slice_name: 'Growth Rate',
form_data: {},
- edit_url: '/slicemodelview/edit/130',
+ edit_url: '/chart/edit/130',
viz_type: 'line',
datasource: '2__table',
description: null,
@@ -97,7 +97,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20131%7D',
slice_name: '% Rural',
form_data: {},
- edit_url: '/slicemodelview/edit/131',
+ edit_url: '/chart/edit/131',
viz_type: 'world_map',
datasource: '2__table',
description: null,
@@ -110,7 +110,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20132%7D',
slice_name: 'Life Expectancy VS Rural %',
form_data: {},
- edit_url: '/slicemodelview/edit/132',
+ edit_url: '/chart/edit/132',
viz_type: 'bubble',
datasource: '2__table',
description: null,
@@ -123,7 +123,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20133%7D',
slice_name: 'Rural Breakdown',
form_data: {},
- edit_url: '/slicemodelview/edit/133',
+ edit_url: '/chart/edit/133',
viz_type: 'sunburst',
datasource: '2__table',
description: null,
@@ -136,7 +136,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20134%7D',
slice_name: "World's Pop Growth",
form_data: {},
- edit_url: '/slicemodelview/edit/134',
+ edit_url: '/chart/edit/134',
viz_type: 'area',
datasource: '2__table',
description: null,
@@ -149,7 +149,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20135%7D',
slice_name: 'Box plot',
form_data: {},
- edit_url: '/slicemodelview/edit/135',
+ edit_url: '/chart/edit/135',
viz_type: 'box_plot',
datasource: '2__table',
description: null,
@@ -162,7 +162,7 @@ export const sliceEntitiesForDashboard = {
slice_url: '/superset/explore/?form_data=%7B%22slice_id%22%3A%20136%7D',
slice_name: 'Treemap',
form_data: {},
- edit_url: '/slicemodelview/edit/136',
+ edit_url: '/chart/edit/136',
viz_type: 'treemap',
datasource: '2__table',
description: null,
diff --git a/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx b/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx
index 6f452b3..5e1e4b8 100644
--- a/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx
+++ b/superset/assets/spec/javascripts/explore/components/SaveModal_spec.jsx
@@ -192,7 +192,7 @@ describe('SaveModal', () => {
});
it('calls correct url', () => {
- const url = '/dashboardmodelviewasync/api/read?_flt_0_owners=' + userID;
+ const url = '/dashboardasync/api/read?_flt_0_owners=' + userID;
makeRequest();
expect(ajaxStub.getCall(0).args[0].url).to.be.equal(url);
});
diff --git a/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx b/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx
index b5e5d02..4c25399 100644
--- a/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx
+++ b/superset/assets/src/dashboard/components/HeaderActionsDropdown.jsx
@@ -142,10 +142,7 @@ class HeaderActionsDropdown extends React.PureComponent {
triggerNode={<span>{t('Set auto-refresh interval')}</span>}
/>
{editMode && (
- <MenuItem
- target="_blank"
- href={`/dashboardmodelview/edit/${dashboardId}`}
- >
+ <MenuItem target="_blank" href={`/dashboard/edit/${dashboardId}`}>
{t('Edit dashboard metadata')}
</MenuItem>
)}
diff --git a/superset/assets/src/explore/actions/saveModalActions.js b/superset/assets/src/explore/actions/saveModalActions.js
index 096ff3b..fab5f49 100644
--- a/superset/assets/src/explore/actions/saveModalActions.js
+++ b/superset/assets/src/explore/actions/saveModalActions.js
@@ -14,7 +14,7 @@ export function fetchDashboardsFailed(userId) {
export function fetchDashboards(userId) {
return function (dispatch) {
- const url = '/dashboardmodelviewasync/api/read?_flt_0_owners=' + userId;
+ const url = '/dashboardasync/api/read?_flt_0_owners=' + userId;
return $.ajax({
type: 'GET',
url,
diff --git a/superset/assets/src/explore/components/ExploreChartHeader.jsx b/superset/assets/src/explore/components/ExploreChartHeader.jsx
index e211ca9..8c9ea91 100644
--- a/superset/assets/src/explore/components/ExploreChartHeader.jsx
+++ b/superset/assets/src/explore/components/ExploreChartHeader.jsx
@@ -101,7 +101,7 @@ class ExploreChartHeader extends React.PureComponent {
>
<a
className="edit-desc-icon"
- href={`/slicemodelview/edit/${this.props.slice.slice_id}`}
+ href={`/chart/edit/${this.props.slice.slice_id}`}
>
<i className="fa fa-edit" />
</a>
diff --git a/superset/assets/src/welcome/DashboardTable.jsx b/superset/assets/src/welcome/DashboardTable.jsx
index f7f3007..6b6b710 100644
--- a/superset/assets/src/welcome/DashboardTable.jsx
+++ b/superset/assets/src/welcome/DashboardTable.jsx
@@ -22,7 +22,7 @@ export default class DashboardTable extends React.PureComponent {
}
componentDidMount() {
const url = (
- '/dashboardmodelviewasync/api/read' +
+ '/dashboardasync/api/read' +
'?_oc_DashboardModelViewAsync=changed_on' +
'&_od_DashboardModelViewAsync=desc');
$.getJSON(url, (data) => {
diff --git a/superset/models/core.py b/superset/models/core.py
index 2a11545..a02be60 100644
--- a/superset/models/core.py
+++ b/superset/models/core.py
@@ -240,7 +240,7 @@ class Slice(Model, AuditMixinNullable, ImportMixin):
@property
def edit_url(self):
- return '/slicemodelview/edit/{}'.format(self.id)
+ return '/chart/edit/{}'.format(self.id)
@property
def slice_link(self):
diff --git a/superset/templates/index.html b/superset/templates/index.html
deleted file mode 100644
index 8e4ca7c..0000000
--- a/superset/templates/index.html
+++ /dev/null
@@ -1,116 +0,0 @@
-{% extends "appbuilder/base.html" %}
-
-{% block uncontained %}
-<div class="index">
-<div id="carousel" class="carousel slide" data-ride="carousel">
- <!-- Indicators -->
- <ol class="carousel-indicators">
- <li data-target="#carousel" data-slide-to="0" class="active"></li>
- <li data-target="#carousel" data-slide-to="1"></li>
- <li data-target="#carousel" data-slide-to="2"></li>
- <li data-target="#carousel" data-slide-to="3"></li>
- <li data-target="#carousel" data-slide-to="4"></li>
- </ol>
-
- <!-- Wrapper for slides -->
- <div class="carousel-inner" role="listbox">
- <div class="item active text-center">
- <img src="{{ url_for("static", filename="img/dash.png") }}">
- <div class="carousel-caption">
- <div>
- <h1>Superset</h1>
- <p>
- an open source data visualization platform
- </p>
- </div>
- </div>
- </div>
- <div class="item">
- <img src="{{ url_for("static", filename="img/bubble.png") }}">
- <div class="carousel-caption">
- <h2>Explore your data
- </h2>
- <p>
- Intuitively navigate your data while slicing, dicing, and
- visualizing through a rich set of widgets
- </p>
- </div>
- </div>
- <div class="item">
- <img src="{{ url_for("static", filename="img/dash.png") }}">
- <div class="carousel-caption">
- <h2>Create and share dashboards</h2>
- <p>Assemble many data visualization "slices" into a rich collection</p>
- </div>
- </div>
- <div class="item">
- <img src="{{ url_for("static", filename="img/cloud.png") }}">
- <div class="carousel-caption">
- <h2>Extend</h2>
- <p>Join the community and take part in extending the widget library</p>
- </div>
- </div>
- <div class="item">
- <img src="{{ url_for("static", filename="img/servers.jpg") }}">
- <div class="carousel-caption">
- <h2>Connect</h2>
- <p>
- Access data from MySql, Presto.db, Postgres, RedShift, Oracle, MsSql,
- SQLite, and more through the SqlAlchemy integration. You can also
- query realtime data blazingly fast out of Druid.io
- </p>
- </div>
- </div>
- </div>
- <!-- Controls -->
- <div>
- <a class="left carousel-control" href="#carousel" role="button" data-slide="prev">
- <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
- <span class="sr-only">Previous</span>
- </a>
- <a class="right carousel-control" href="#carousel" role="button" data-slide="next">
- <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
- <span class="sr-only">Next</span>
- </a>
- </div>
-</div>
-<hr/>
-<div class="container">
- <div class="row text-center">
- <div class="col-lg-4">
- <img class="img-circle" src="{{ url_for('static', filename='img/cardash.jpg') }}" width="140" height="140">
- <h2>Dashboards</h2>
- <p>Browse the dashboards list</p>
- <p><a class="btn btn-default" href="/dashboardmodelview/list/" role="button">
- <i class="fa fa-dashboard"></i>
- </a></p>
- </div><!-- /.col-lg-4 -->
- <div class="col-lg-4">
- <img class="img-circle" src="{{ url_for('static', filename='img/slice.jpg') }}" width="140" height="140">
- <h2>Slices</h2>
- <p>"Slices" are individual views into a single dataset</p>
- <p><a class="btn btn-default" href="/slicemodelview/list/" role="button">
- <i class="fa fa-line-chart"></i>
- </a></p>
- </div><!-- /.col-lg-4 -->
- <div class="col-lg-4">
- <img class="img-circle" src="{{ url_for('static', filename='img/gallery.jpg') }}" alt="Generic placeholder image" width="140" height="140">
- <h2>Gallery</h2>
- <p>Navigate through the growing set of visualizations</p>
- <p><a class="btn btn-default" href="#" onclick="alert('Not ready yet!');" role="button">
- <i class="fa fa-picture-o"></i>
- </a></p>
- </div><!-- /.col-lg-4 -->
- </div>
-</div>
-</div>
-{% endblock %}
-
-{% block tail_js %}
-{{ super() }}
-<script>
-$(document).ready(function() {
- $('#carousel').carousel();
-});
-</script>
-{% endblock %}
diff --git a/superset/templates/superset/partials/_explore_title.html b/superset/templates/superset/partials/_explore_title.html
deleted file mode 100644
index 88d9e6d..0000000
--- a/superset/templates/superset/partials/_explore_title.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% if slice %}
- {% if slice.slice_name %}
- <h2>
- {{ slice.slice_name }}
- <small class="star-edit-icons">
- <span class="favstar" class_name="Slice" obj_id="{{ slice.id }}"></span>
- <span>
- <a
- href="/slicemodelview/edit/{{ slice.id }}"
- data-toggle="tooltip"
- title="Edit Description"
- class="edit-slice-description-icon"
- >
- {% if slice.description %}
- <i
- class="fa fa-question-circle-o"
- data-toggle="tooltip"
- data-placement="bottom"
- title="{{ slice.description }}">
- </i>
- {% endif %}
- <i class="fa fa-edit"></i>
- </a>
- </span>
- </small>
- </h2>
- {% endif %}
-{% else %}
- <h3>[{{ viz.datasource.table_name }}] - untitled</h3>
-{% endif %}
diff --git a/superset/templates/superset/request_access.html b/superset/templates/superset/request_access.html
index 6c42eb0..21ce744 100644
--- a/superset/templates/superset/request_access.html
+++ b/superset/templates/superset/request_access.html
@@ -12,7 +12,7 @@
<button onclick="window.location += '&action=go';">
{{ _("Request Permissions") }}
</button>
- <button onclick="window.location.href = '/slicemodelview/list/';">
+ <button onclick="window.location.href = '/chart/list/';">
{{ _("Cancel") }}
</button>
</div>
diff --git a/superset/views/core.py b/superset/views/core.py
index ca7746c..09904f7 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -415,6 +415,7 @@ if config.get('ENABLE_ACCESS_REQUEST'):
class SliceModelView(SupersetModelView, DeleteMixin): # noqa
+ route_base = '/chart'
datamodel = SQLAInterface(models.Slice)
list_title = _('List Charts')
@@ -504,6 +505,7 @@ appbuilder.add_view(
class SliceAsync(SliceModelView): # noqa
+ route_base = '/sliceasync'
list_columns = [
'id', 'slice_link', 'viz_type', 'slice_name',
'creator', 'modified', 'icons']
@@ -517,6 +519,7 @@ appbuilder.add_view_no_menu(SliceAsync)
class SliceAddView(SliceModelView): # noqa
+ route_base = '/sliceaddview'
list_columns = [
'id', 'slice_name', 'slice_url', 'edit_url', 'viz_type', 'params',
'description', 'description_markeddown', 'datasource_id', 'datasource_type',
@@ -528,6 +531,7 @@ appbuilder.add_view_no_menu(SliceAddView)
class DashboardModelView(SupersetModelView, DeleteMixin): # noqa
+ route_base = '/dashboard'
datamodel = SQLAInterface(models.Dashboard)
list_title = _('List Dashboards')
@@ -603,7 +607,7 @@ class DashboardModelView(SupersetModelView, DeleteMixin): # noqa
items = [items]
ids = ''.join('&id={}'.format(d.id) for d in items)
return redirect(
- '/dashboardmodelview/export_dashboards_form?{}'.format(ids[1:]))
+ '/dashboard/export_dashboards_form?{}'.format(ids[1:]))
@expose('/export_dashboards_form')
def download_dashboards(self):
@@ -615,7 +619,7 @@ class DashboardModelView(SupersetModelView, DeleteMixin): # noqa
mimetype='application/text')
return self.render_template(
'superset/export_dashboards.html',
- dashboards_url='/dashboardmodelview/list',
+ dashboards_url='/dashboard/list',
)
@@ -629,6 +633,7 @@ appbuilder.add_view(
class DashboardModelViewAsync(DashboardModelView): # noqa
+ route_base = '/dashboardasync'
list_columns = [
'id', 'dashboard_link', 'creator', 'modified', 'dashboard_title',
'changed_on', 'url', 'changed_by_name',
@@ -645,6 +650,7 @@ appbuilder.add_view_no_menu(DashboardModelViewAsync)
class DashboardAddView(DashboardModelView): # noqa
+ route_base = '/dashboardaddview'
list_columns = [
'id', 'dashboard_link', 'creator', 'modified', 'dashboard_title',
'changed_on', 'url', 'changed_by_name',
@@ -1207,7 +1213,7 @@ class Superset(BaseSupersetView):
models.Dashboard.import_obj(
dashboard, import_time=current_tt)
db.session.commit()
- return redirect('/dashboardmodelview/list/')
+ return redirect('/dashboard/list/')
return self.render_template('superset/import_dashboards.html')
@log_this
@@ -1251,7 +1257,7 @@ class Superset(BaseSupersetView):
datasource_id, datasource_type = self.datasource_info(
datasource_id, datasource_type, form_data)
- error_redirect = '/slicemodelview/list/'
+ error_redirect = '/chart/list/'
datasource = ConnectorRegistry.get_datasource(
datasource_type, datasource_id, db.session)
if not datasource:
diff --git a/tests/core_tests.py b/tests/core_tests.py
index eb95f1f..ed66af7 100644
--- a/tests/core_tests.py
+++ b/tests/core_tests.py
@@ -263,8 +263,8 @@ class CoreTests(SupersetTestCase):
def test_add_slice(self):
self.login(username='admin')
- # assert that /slicemodelview/add responds with 200
- url = '/slicemodelview/add'
+ # assert that /chart/add responds with 200
+ url = '/chart/add'
resp = self.client.get(url)
self.assertEqual(resp.status_code, 200)
@@ -418,8 +418,8 @@ class CoreTests(SupersetTestCase):
def test_gamma(self):
self.login(username='gamma')
- assert 'List Charts' in self.get_resp('/slicemodelview/list/')
- assert 'List Dashboard' in self.get_resp('/dashboardmodelview/list/')
+ assert 'List Charts' in self.get_resp('/chart/list/')
+ assert 'List Dashboard' in self.get_resp('/dashboard/list/')
def test_csv_endpoint(self):
self.login('admin')
diff --git a/tests/dashboard_tests.py b/tests/dashboard_tests.py
index 1ab3727..bc6c61f 100644
--- a/tests/dashboard_tests.py
+++ b/tests/dashboard_tests.py
@@ -279,27 +279,27 @@ class DashboardTests(SupersetTestCase):
self.revoke_public_access_to_table(table)
self.logout()
- resp = self.get_resp('/slicemodelview/list/')
+ resp = self.get_resp('/chart/list/')
self.assertNotIn('birth_names</a>', resp)
- resp = self.get_resp('/dashboardmodelview/list/')
+ resp = self.get_resp('/dashboard/list/')
self.assertNotIn('/superset/dashboard/births/', resp)
self.grant_public_access_to_table(table)
# Try access after adding appropriate permissions.
- self.assertIn('birth_names', self.get_resp('/slicemodelview/list/'))
+ self.assertIn('birth_names', self.get_resp('/chart/list/'))
- resp = self.get_resp('/dashboardmodelview/list/')
+ resp = self.get_resp('/dashboard/list/')
self.assertIn('/superset/dashboard/births/', resp)
self.assertIn('Births', self.get_resp('/superset/dashboard/births/'))
# Confirm that public doesn't have access to other datasets.
- resp = self.get_resp('/slicemodelview/list/')
+ resp = self.get_resp('/chart/list/')
self.assertNotIn('wb_health_population</a>', resp)
- resp = self.get_resp('/dashboardmodelview/list/')
+ resp = self.get_resp('/dashboard/list/')
self.assertNotIn('/superset/dashboard/world_health/', resp)
def test_dashboard_with_created_by_can_be_accessed_by_public_users(self):
@@ -370,7 +370,7 @@ class DashboardTests(SupersetTestCase):
gamma_user = security_manager.find_user('gamma')
self.login(gamma_user.username)
- resp = self.get_resp('/dashboardmodelview/list/')
+ resp = self.get_resp('/dashboard/list/')
self.assertNotIn('/superset/dashboard/empty_dashboard/', resp)
dash = (
@@ -383,7 +383,7 @@ class DashboardTests(SupersetTestCase):
db.session.merge(dash)
db.session.commit()
- resp = self.get_resp('/dashboardmodelview/list/')
+ resp = self.get_resp('/dashboard/list/')
self.assertIn('/superset/dashboard/empty_dashboard/', resp)
diff --git a/tests/import_export_tests.py b/tests/import_export_tests.py
index 4b2ba74..3a3d5f9 100644
--- a/tests/import_export_tests.py
+++ b/tests/import_export_tests.py
@@ -206,7 +206,7 @@ class ImportExportTests(SupersetTestCase):
def test_export_1_dashboard(self):
birth_dash = self.get_dash_by_slug('births')
export_dash_url = (
- '/dashboardmodelview/export_dashboards_form?id={}&action=go'
+ '/dashboard/export_dashboards_form?id={}&action=go'
.format(birth_dash.id)
)
resp = self.client.get(export_dash_url)
@@ -235,7 +235,7 @@ class ImportExportTests(SupersetTestCase):
birth_dash = self.get_dash_by_slug('births')
world_health_dash = self.get_dash_by_slug('world_health')
export_dash_url = (
- '/dashboardmodelview/export_dashboards_form?id={}&id={}&action=go'
+ '/dashboard/export_dashboards_form?id={}&id={}&action=go'
.format(birth_dash.id, world_health_dash.id))
resp = self.client.get(export_dash_url)
exported_dashboards = sorted(