mirror of https://github.com/apache/superset.git
feat: Creating dataset/add route (#20869)
* beginning of routing * elizabeth review * changed folder layout * Update superset-frontend/src/views/CRUD/data/dataset/DatasetPage/index.tsx Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com> * Update superset-frontend/src/views/CRUD/data/dataset/DatasetPage/RightPanel/index.tsx Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com> Co-authored-by: Lyndsi Kay Williams <55605634+lyndsiWilliams@users.noreply.github.com>
This commit is contained in:
parent
8a04536f9d
commit
460b213057
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export default function DatasetPanel() {
|
||||||
|
return <div>Dataset Panel</div>;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export default function Footer() {
|
||||||
|
return <div>Footer</div>;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export default function Header() {
|
||||||
|
return <div>Header</div>;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export default function LeftPanel() {
|
||||||
|
return <div>Left Panel</div>;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
export default function RightPanel() {
|
||||||
|
return <div>Right Panel</div>;
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
import React from 'react';
|
||||||
|
import Header from './Header';
|
||||||
|
import DatasetPanel from './DatasetPanel';
|
||||||
|
import LeftPanel from './LeftPanel';
|
||||||
|
import RightPanel from './RightPanel';
|
||||||
|
import Footer from './Footer';
|
||||||
|
|
||||||
|
export default function DatasetPage() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<Header />
|
||||||
|
<LeftPanel />
|
||||||
|
<div css={{ display: 'flex' }}>
|
||||||
|
<DatasetPanel />
|
||||||
|
<Footer />
|
||||||
|
</div>
|
||||||
|
<RightPanel />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
|
@ -81,6 +81,14 @@ const DatasetList = lazy(
|
||||||
/* webpackChunkName: "DatasetList" */ 'src/views/CRUD/data/dataset/DatasetList'
|
/* webpackChunkName: "DatasetList" */ 'src/views/CRUD/data/dataset/DatasetList'
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const DatasetPage = lazy(
|
||||||
|
() =>
|
||||||
|
import(
|
||||||
|
/* webpackChunkName: "DatasetEditor" */ 'src/views/CRUD/data/dataset/DatasetPage/index'
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
const ExecutionLog = lazy(
|
const ExecutionLog = lazy(
|
||||||
() =>
|
() =>
|
||||||
import(
|
import(
|
||||||
|
@ -189,6 +197,14 @@ export const routes: Routes = [
|
||||||
path: '/superset/explore/p',
|
path: '/superset/explore/p',
|
||||||
Component: ExplorePage,
|
Component: ExplorePage,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/dataset/add/',
|
||||||
|
Component: DatasetPage,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dataset/:datasetId',
|
||||||
|
Component: DatasetPage,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const frontEndRoutes = routes
|
const frontEndRoutes = routes
|
||||||
|
|
|
@ -169,7 +169,7 @@ class SupersetAppInitializer: # pylint: disable=too-many-public-methods
|
||||||
DatabaseView,
|
DatabaseView,
|
||||||
ExcelToDatabaseView,
|
ExcelToDatabaseView,
|
||||||
)
|
)
|
||||||
from superset.views.datasource.views import Datasource
|
from superset.views.datasource.views import DatasetEditor, Datasource
|
||||||
from superset.views.dynamic_plugins import DynamicPluginsView
|
from superset.views.dynamic_plugins import DynamicPluginsView
|
||||||
from superset.views.explore import ExplorePermalinkView, ExploreView
|
from superset.views.explore import ExplorePermalinkView, ExploreView
|
||||||
from superset.views.key_value import KV
|
from superset.views.key_value import KV
|
||||||
|
@ -289,6 +289,7 @@ class SupersetAppInitializer: # pylint: disable=too-many-public-methods
|
||||||
appbuilder.add_view_no_menu(Dashboard)
|
appbuilder.add_view_no_menu(Dashboard)
|
||||||
appbuilder.add_view_no_menu(DashboardModelViewAsync)
|
appbuilder.add_view_no_menu(DashboardModelViewAsync)
|
||||||
appbuilder.add_view_no_menu(Datasource)
|
appbuilder.add_view_no_menu(Datasource)
|
||||||
|
appbuilder.add_view_no_menu(DatasetEditor)
|
||||||
appbuilder.add_view_no_menu(EmbeddedView)
|
appbuilder.add_view_no_menu(EmbeddedView)
|
||||||
appbuilder.add_view_no_menu(ExploreView)
|
appbuilder.add_view_no_menu(ExploreView)
|
||||||
appbuilder.add_view_no_menu(ExplorePermalinkView)
|
appbuilder.add_view_no_menu(ExplorePermalinkView)
|
||||||
|
|
|
@ -18,10 +18,10 @@ import json
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from flask import request
|
from flask import redirect, request
|
||||||
from flask_appbuilder import expose
|
from flask_appbuilder import expose, permission_name
|
||||||
from flask_appbuilder.api import rison
|
from flask_appbuilder.api import rison
|
||||||
from flask_appbuilder.security.decorators import has_access_api
|
from flask_appbuilder.security.decorators import has_access, has_access_api
|
||||||
from flask_babel import _
|
from flask_babel import _
|
||||||
from marshmallow import ValidationError
|
from marshmallow import ValidationError
|
||||||
from sqlalchemy.exc import NoSuchTableError
|
from sqlalchemy.exc import NoSuchTableError
|
||||||
|
@ -203,3 +203,27 @@ class Datasource(BaseSupersetView):
|
||||||
payload=payload,
|
payload=payload,
|
||||||
)
|
)
|
||||||
return self.json_response({"result": rv})
|
return self.json_response({"result": rv})
|
||||||
|
|
||||||
|
|
||||||
|
class DatasetEditor(BaseSupersetView):
|
||||||
|
route_base = "/dataset"
|
||||||
|
class_permission_name = "Dataset"
|
||||||
|
|
||||||
|
@expose("/add/")
|
||||||
|
@has_access
|
||||||
|
@permission_name("read")
|
||||||
|
def root(self) -> FlaskResponse:
|
||||||
|
dev = request.args.get("testing")
|
||||||
|
if dev is not None:
|
||||||
|
return super().render_app_template()
|
||||||
|
return redirect("/")
|
||||||
|
|
||||||
|
@expose("/<pk>", methods=["GET"])
|
||||||
|
@has_access
|
||||||
|
@permission_name("read")
|
||||||
|
# pylint: disable=unused-argument
|
||||||
|
def show(self, pk: int) -> FlaskResponse:
|
||||||
|
dev = request.args.get("testing")
|
||||||
|
if dev is not None:
|
||||||
|
return super().render_app_template()
|
||||||
|
return redirect("/")
|
||||||
|
|
Loading…
Reference in New Issue