def get_data(self, df: pd.DataFrame,) -> Union[str, List[Dict[str, Any]]]: if self.result_format == ChartDataResultFormat.CSV: include_index = not isinstance(df.index, pd.RangeIndex) result = csv.df_to_escaped_csv( df, index=include_index, **config["CSV_EXPORT"] ) return result or "" return df.to_dict(orient="records")
def get_data(self, df: pd.DataFrame) -> Union[str, List[Dict[str, Any]]]: if self._query_context.result_format == ChartDataResultFormat.CSV: include_index = not isinstance(df.index, pd.RangeIndex) columns = list(df.columns) verbose_map = self._qc_datasource.data.get("verbose_map", {}) if verbose_map: df.columns = [verbose_map.get(column, column) for column in columns] result = csv.df_to_escaped_csv( df, index=include_index, **config["CSV_EXPORT"] ) return result or "" return df.to_dict(orient="records")
def test_df_to_escaped_csv(): csv_rows = [ ["col_a", "=func()"], ["-10", "=cmd|' /C calc'!A0"], ["a", '""=b'], [" =a", "b"], ] csv_str = "\n".join([",".join(row) for row in csv_rows]) df = pd.read_csv(io.StringIO(csv_str)) escaped_csv_str = csv.df_to_escaped_csv(df, encoding="utf8", index=False) escaped_csv_rows = [row.split(",") for row in escaped_csv_str.strip().split("\n")] assert escaped_csv_rows == [ ["col_a", "'=func()"], ["-10", "'=cmd\|' /C calc'!A0"], ["a", "'=b"], # pandas seems to be removing the leading "" ["' =a", "b"], ] df = pa.array([1, None]).to_pandas(integer_object_nulls=True).to_frame() assert csv.df_to_escaped_csv(df, encoding="utf8", index=False) == '0\n1\n""\n'
def test_df_to_escaped_csv(): csv_rows = [ ["col_a", "=func()"], ["-10", "=cmd|' /C calc'!A0"], ["a", '""=b'], [" =a", "b"], ] csv_str = "\n".join([",".join(row) for row in csv_rows]) df = pd.read_csv(io.StringIO(csv_str)) escaped_csv_str = csv.df_to_escaped_csv(df, encoding="utf8", index=False) escaped_csv_rows = [row.split(",") for row in escaped_csv_str.strip().split("\n")] assert escaped_csv_rows == [ ["col_a", "'=func()"], ["-10", "'=cmd\|' /C calc'!A0"], ["a", "'=b"], # pandas seems to be removing the leading "" ["' =a", "b"], ]