def test_get_dashboard_changed_on(self): self.login(username="******") session = db.session() dashboard = session.query(Dashboard).filter_by(slug="world_health").first() changed_on = dashboard.changed_on.replace(microsecond=0) assert changed_on == DashboardDAO.get_dashboard_changed_on(dashboard) assert changed_on == DashboardDAO.get_dashboard_changed_on("world_health") old_changed_on = dashboard.changed_on # freezegun doesn't work for some reason, so we need to sleep here :( time.sleep(1) data = dashboard.data positions = data["position_json"] data.update({"positions": positions}) original_data = copy.deepcopy(data) data.update({"foo": "bar"}) DashboardDAO.set_dash_metadata(dashboard, data) session.merge(dashboard) session.commit() new_changed_on = DashboardDAO.get_dashboard_changed_on(dashboard) assert old_changed_on.replace(microsecond=0) < new_changed_on assert new_changed_on == DashboardDAO.get_dashboard_and_datasets_changed_on( dashboard ) assert new_changed_on == DashboardDAO.get_dashboard_and_slices_changed_on( dashboard ) DashboardDAO.set_dash_metadata(dashboard, original_data) session.merge(dashboard) session.commit()
def test_get_dashboard_changed_on(self): session = db.session() dashboard = session.query(Dashboard).filter_by( slug="world_health").first() assert dashboard.changed_on == DashboardDAO.get_dashboard_changed_on( dashboard) assert dashboard.changed_on == DashboardDAO.get_dashboard_changed_on( "world_health") old_changed_on = dashboard.changed_on # freezegun doesn't work for some reason, so we need to sleep here :( time.sleep(1) data = dashboard.data positions = data["position_json"] data.update({"positions": positions}) original_data = copy.deepcopy(data) data.update({"foo": "bar"}) DashboardDAO.set_dash_metadata(dashboard, data) session.merge(dashboard) session.commit() assert old_changed_on < DashboardDAO.get_dashboard_changed_on( dashboard) DashboardDAO.set_dash_metadata(dashboard, original_data) session.merge(dashboard) session.commit()
def run(self) -> Model: self.validate() try: dashboard = DashboardDAO.update(self._model, self._properties, commit=False) dashboard = DashboardDAO.update_charts_owners(dashboard, commit=False) if self._properties.get("json_metadata"): dashboard = DashboardDAO.set_dash_metadata( dashboard, data=json.loads(self._properties.get("json_metadata", "{}")), commit=False, ) db.session.commit() except DAOUpdateFailedError as ex: logger.exception(ex.exception) raise DashboardUpdateFailedError() from ex return dashboard
def test_set_dash_metadata(self): dash: Dashboard = ( db.session.query(Dashboard).filter_by(slug="world_health").first() ) data = dash.data positions = data["position_json"] data.update({"positions": positions}) original_data = copy.deepcopy(data) # add filter scopes filter_slice = next(slc for slc in dash.slices if slc.viz_type == "filter_box") immune_slices = [slc for slc in dash.slices if slc != filter_slice] filter_scopes = { str(filter_slice.id): { "region": { "scope": ["ROOT_ID"], "immune": [slc.id for slc in immune_slices], } } } data.update({"filter_scopes": json.dumps(filter_scopes)}) DashboardDAO.set_dash_metadata(dash, data) updated_metadata = json.loads(dash.json_metadata) self.assertEqual(updated_metadata["filter_scopes"], filter_scopes) # remove a slice and change slice ids (as copy slices) removed_slice = immune_slices.pop() removed_components = [ key for (key, value) in positions.items() if isinstance(value, dict) and value.get("type") == "CHART" and value["meta"]["chartId"] == removed_slice.id ] for component_id in removed_components: del positions[component_id] data.update({"positions": positions}) DashboardDAO.set_dash_metadata(dash, data) updated_metadata = json.loads(dash.json_metadata) expected_filter_scopes = { str(filter_slice.id): { "region": { "scope": ["ROOT_ID"], "immune": [slc.id for slc in immune_slices], } } } self.assertEqual(updated_metadata["filter_scopes"], expected_filter_scopes) # reset dash to original data DashboardDAO.set_dash_metadata(dash, original_data)