mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
feat: Embedded dashboard configuration (#19364)
* embedded dashboard model
* embedded dashboard endpoints
* DRY up using the with_dashboard decorator elsewhere
* wip
* check feature flags and permissions
* wip
* sdk
* urls
* dao option for id column
* got it working
* Update superset/embedded/view.py
* use the curator check
* put back old endpoint, for now
* allow access by either embedded.uuid or dashboard.id
* keep the old endpoint around, for the time being
* openapi
* lint
* lint
* lint
* test stuff
* lint, test
* typo
* Update superset-frontend/src/embedded/index.tsx
* Update superset-frontend/src/embedded/index.tsx
* fix tests
* bump sdk
(cherry picked from commit 8e29ec5a66)
This commit is contained in:
committed by
Ville Brofeldt
parent
a7ee677154
commit
795ed3c719
57
superset/models/embedded_dashboard.py
Normal file
57
superset/models/embedded_dashboard.py
Normal file
@@ -0,0 +1,57 @@
|
||||
# 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 uuid
|
||||
from typing import List
|
||||
|
||||
from flask_appbuilder import Model
|
||||
from sqlalchemy import Column, ForeignKey, Integer, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy_utils import UUIDType
|
||||
|
||||
from superset.models.helpers import AuditMixinNullable
|
||||
|
||||
|
||||
class EmbeddedDashboard(Model, AuditMixinNullable):
|
||||
"""
|
||||
A configuration of embedding for a dashboard.
|
||||
Currently, the only embeddable resource is the Dashboard.
|
||||
If we add new embeddable resource types, this model should probably be renamed.
|
||||
|
||||
References the dashboard, and contains a config for embedding that dashboard.
|
||||
|
||||
This data model allows multiple configurations for a given dashboard,
|
||||
but at this time the API only allows setting one.
|
||||
"""
|
||||
|
||||
__tablename__ = "embedded_dashboards"
|
||||
|
||||
uuid = Column(UUIDType(binary=True), default=uuid.uuid4, primary_key=True)
|
||||
allow_domain_list = Column(Text) # reference the `allowed_domains` property instead
|
||||
dashboard_id = Column(Integer, ForeignKey("dashboards.id"), nullable=False)
|
||||
dashboard = relationship(
|
||||
"Dashboard",
|
||||
back_populates="embedded",
|
||||
foreign_keys=[dashboard_id],
|
||||
)
|
||||
|
||||
@property
|
||||
def allowed_domains(self) -> List[str]:
|
||||
"""
|
||||
A list of domains which are allowed to embed the dashboard.
|
||||
An empty list means any domain can embed.
|
||||
"""
|
||||
return self.allow_domain_list.split(",") if self.allow_domain_list else []
|
||||
Reference in New Issue
Block a user