def get_datasource_info(datasource_id: Optional[int], datasource_type: Optional[str], form_data: FormData) -> Tuple[int, Optional[str]]: """ Compatibility layer for handling of datasource info datasource_id & datasource_type used to be passed in the URL directory, now they should come as part of the form_data, This function allows supporting both without duplicating code :param datasource_id: The datasource ID :param datasource_type: The datasource type, i.e., 'druid' or 'table' :param form_data: The URL form data :returns: The datasource ID and type :raises SupersetException: If the datasource no longer exists """ datasource = form_data.get("datasource", "") if "__" in datasource: datasource_id, datasource_type = datasource.split("__") # The case where the datasource has been deleted if datasource_id == "None": datasource_id = None if not datasource_id: raise SupersetException( _("The dataset associated with this chart no longer exists")) datasource_id = int(datasource_id) return datasource_id, datasource_type
def get_viz( form_data: FormData, datasource_type: str, datasource_id: int, force: bool = False, force_cached: bool = False, ) -> BaseViz: viz_type = form_data.get("viz_type", "table") datasource = ConnectorRegistry.get_datasource(datasource_type, datasource_id, db.session) viz_obj = viz.viz_types[viz_type](datasource, form_data=form_data, force=force, force_cached=force_cached) return viz_obj
def get_viz( form_data: FormData, datasource_type: str, datasource_id: int, force: bool = False, force_cached: bool = False, ) -> BaseViz: viz_type = form_data.get("viz_type", "table") datasource = DatasourceDAO.get_datasource( db.session, DatasourceType(datasource_type), datasource_id, ) viz_obj = viz.viz_types[viz_type]( datasource, form_data=form_data, force=force, force_cached=force_cached ) return viz_obj