# 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 json import textwrap from superset import db from superset.models.dashboard import Dashboard from superset.models.slice import Slice from .helpers import misc_dash_slices, update_slice_ids DASH_SLUG = "misc_charts" def load_misc_dashboard() -> None: """Loading a dashboard featuring misc charts""" print("Creating the dashboard") db.session.expunge_all() dash = db.session.query(Dashboard).filter_by(slug=DASH_SLUG).first() if not dash: dash = Dashboard() js = textwrap.dedent( """\ { "CHART-BkeVbh8ANQ": { "children": [], "id": "CHART-BkeVbh8ANQ", "meta": { "chartId": 4004, "height": 34, "sliceName": "Multi Line", "width": 8 }, "type": "CHART" }, "CHART-H1HYNzEANX": { "children": [], "id": "CHART-H1HYNzEANX", "meta": { "chartId": 3940, "height": 50, "sliceName": "Energy Sankey", "width": 6 }, "type": "CHART" }, "CHART-HJOYVMV0E7": { "children": [], "id": "CHART-HJOYVMV0E7", "meta": { "chartId": 3969, "height": 63, "sliceName": "Mapbox Long/Lat", "width": 6 }, "type": "CHART" }, "CHART-S1WYNz4AVX": { "children": [], "id": "CHART-S1WYNz4AVX", "meta": { "chartId": 3989, "height": 25, "sliceName": "Parallel Coordinates", "width": 4 }, "type": "CHART" }, "CHART-r19KVMNCE7": { "children": [], "id": "CHART-r19KVMNCE7", "meta": { "chartId": 3971, "height": 34, "sliceName": "Calendar Heatmap multiformat 0", "width": 4 }, "type": "CHART" }, "CHART-rJ4K4GV04Q": { "children": [], "id": "CHART-rJ4K4GV04Q", "meta": { "chartId": 3941, "height": 63, "sliceName": "Energy Force Layout", "width": 6 }, "type": "CHART" }, "CHART-rkgF4G4A4X": { "children": [], "id": "CHART-rkgF4G4A4X", "meta": { "chartId": 3970, "height": 25, "sliceName": "Birth in France by department in 2016", "width": 8 }, "type": "CHART" }, "CHART-rywK4GVR4X": { "children": [], "id": "CHART-rywK4GVR4X", "meta": { "chartId": 3942, "height": 50, "sliceName": "Heatmap", "width": 6 }, "type": "CHART" }, "COLUMN-ByUFVf40EQ": { "children": [ "CHART-rywK4GVR4X", "CHART-HJOYVMV0E7" ], "id": "COLUMN-ByUFVf40EQ", "meta": { "background": "BACKGROUND_TRANSPARENT", "width": 6 }, "type": "COLUMN" }, "COLUMN-rkmYVGN04Q": { "children": [ "CHART-rJ4K4GV04Q", "CHART-H1HYNzEANX" ], "id": "COLUMN-rkmYVGN04Q", "meta": { "background": "BACKGROUND_TRANSPARENT", "width": 6 }, "type": "COLUMN" }, "GRID_ID": { "children": [ "ROW-SytNzNA4X", "ROW-S1MK4M4A4X", "ROW-HkFFEzVRVm" ], "id": "GRID_ID", "type": "GRID" }, "HEADER_ID": { "id": "HEADER_ID", "meta": { "text": "Misc Charts" }, "type": "HEADER" }, "ROOT_ID": { "children": [ "GRID_ID" ], "id": "ROOT_ID", "type": "ROOT" }, "ROW-HkFFEzVRVm": { "children": [ "CHART-r19KVMNCE7", "CHART-BkeVbh8ANQ" ], "id": "ROW-HkFFEzVRVm", "meta": { "background": "BACKGROUND_TRANSPARENT" }, "type": "ROW" }, "ROW-S1MK4M4A4X": { "children": [ "COLUMN-rkmYVGN04Q", "COLUMN-ByUFVf40EQ" ], "id": "ROW-S1MK4M4A4X", "meta": { "background": "BACKGROUND_TRANSPARENT" }, "type": "ROW" }, "ROW-SytNzNA4X": { "children": [ "CHART-rkgF4G4A4X", "CHART-S1WYNz4AVX" ], "id": "ROW-SytNzNA4X", "meta": { "background": "BACKGROUND_TRANSPARENT" }, "type": "ROW" }, "DASHBOARD_VERSION_KEY": "v2" } """ ) pos = json.loads(js) slices = ( db.session.query(Slice).filter(Slice.slice_name.in_(misc_dash_slices)).all() ) slices = sorted(slices, key=lambda x: x.id) update_slice_ids(pos, slices) dash.dashboard_title = "Misc Charts" dash.position_json = json.dumps(pos, indent=4) dash.slug = DASH_SLUG dash.slices = slices db.session.merge(dash) db.session.commit()