def save_pandas_table()

in heyhi/gsheets.py [0:0]


def save_pandas_table(dataframes, project_name, table_name, offset=0, start=10, viz_port=None):
    """Saves/updates a sheet with the dataframe."""
    if pygsheets is None:
        warnings.warn("Failed to import 'pygsheets'. save_pandas_table will do nothing")
        return
    try:
        client = pygsheets.authorize()
    except:
        logging.exception("Failed to authorize in google drive")
        return
    if project_name not in client.spreadsheet_titles():
        client.create(project_name)
    sheet = client.open(project_name)
    if table_name not in (wsh.title for wsh in sheet.worksheets()):
        created = True
        sheet.add_worksheet(table_name)
    else:
        created = False
    worksheet = sheet.worksheet_by_title(table_name)
    worksheet.update_value((1, 1), f"Last update:")
    update_cell = "$B$1"
    now_date = datetime.datetime.now().isoformat().replace("T", " ")
    worksheet.update_value((1, 2), now_date)
    if created:
        offset_hours = get_timezone_offset_hours()
        hours_passed = f"((TO_PURE_NUMBER(NOW()) - TO_PURE_NUMBER($B$1)) * 24 + ({offset_hours}))"
        worksheet.update_value((1, 3), f"={hours_passed} * 60")
        worksheet.update_value((1, 4), "mins ago")
    if not isinstance(dataframes, (tuple, list)):
        dataframes = [dataframes]
    for dataframe in dataframes:
        if "folder" in dataframe.columns:
            dataframe = dataframe.copy()
            dataframe["logs"] = [
                f'=HYPERLINK("http://{NOTEBOOK_ADDRESS}/tree/root{folder}", "folder")'
                for folder in dataframe.folder
            ]
            if "job_id" in dataframe.columns:
                dataframe["err_logs"] = [
                    f'=HYPERLINK("http://{NOTEBOOK_ADDRESS}/edit/root{folder}/slurm/{job_id}_0_log.err", "log")'
                    for folder, job_id in zip(dataframe.folder, dataframe.job_id)
                ]
            if viz_port:
                dataframe["viz"] = [
                    f'=HYPERLINK("http://localhost:{viz_port}/?game={folder}", "Open Viz")'
                    for folder in dataframe.folder
                ]
            dataframe["tb"] = [
                f'=HYPERLINK("http://{TB_ADDRESS}/?logs={folder}", "Open TB")'
                for folder in dataframe.folder
            ]
        worksheet.set_dataframe(dataframe, (start, 1 + offset))
        if "status" in dataframe.columns and created:
            _add_status_conditional_coloring(
                sheet,
                worksheet,
                list(dataframe.columns).index("status") + offset,
                start,
                len(dataframe.index) + 100,
            )
        if "status" in dataframe.columns and "last" in dataframe.columns and created:
            _add_last_conditional_coloring(
                sheet,
                worksheet,
                list(dataframe.columns).index("status") + offset,
                list(dataframe.columns).index("last") + offset,
                update_cell,
                start,
                len(dataframe.index) + 100,
            )
        start += len(dataframe.index) + 5