Example #1
0
def _get_records(
    spreadsheet: gspread.models.Spreadsheet,
    spreadsheet_name: str,
    sheet_index: int = None,
) -> pd.DataFrame or None:
    """
    Collect data from specified spreadsheet and return a sheet as
    pandas DataFrame object.

    Args:
        spreadsheet (:class:`~gspread.models.Spreadsheet`):
            Opened spreadsheet.
        spreadsheet_name (str):
            Spreadsheet name from spreadsheets.json file.
        sheet_index (int):
            Sheet index. Optional.
            If None - function returns data from the last sheet.

    Returns:
        A :class:`~pandas.frame.DataFrame` instance.
    """
    if sheet_index is None:
        sheet_index = len(spreadsheet.worksheets()) - 1
    try:
        df = pd.DataFrame(
            spreadsheet.get_worksheet(sheet_index).get_all_records())
    except IndexError:
        return None
    df_id = _cfg[spreadsheet_name]['id-col']
    if df_id is not None:
        df.set_index(df_id, inplace=True)
    return df.drop(columns='', errors='ignore')
Example #2
0
def update_voting_results_sheet(sheet: gspread.models.Spreadsheet, votes: VotingSummaryPerYear, years: List[str]):
    data = votes_to_sheets_format(votes, years)
    sheet.sheet1.clear()
    sheet.values_update(
        range='A:' + gspread.utils.rowcol_to_a1(1, 3 + 5 * len(years))[:-1],
        params={
            'valueInputOption': 'USER_ENTERED'
        },
        body={
            'values': data
        }
    )
Example #3
0
def update_plan_proposal_sheet(sheet: gspread.models.Spreadsheet, proposal: ProposalSummary):
    data = proposal_to_sheets_format(proposal)
    sheet.sheet1.clear()
    sheet.values_update(
        range='A:N',
        params={
            'valueInputOption': 'USER_ENTERED'
        },
        body={
            'values': data
        }
    )
Example #4
0
def get_client_list(sheet: gspread.models.Spreadsheet, tab: str) -> Set[str]:
    """
    Retrieve a list of Client IDs to query Snowflake with

    Parameters
    ----------
    sheet : gspread.models.Spreadsheet
    tab : str
        The name of the tab to open on the Needs Review Tracker spreadsheet

    Returns
    -------
    client_list: Set[str]
        A set of all Client IDs labeled 'Active' or 'Active - OCR to Send to
        Client First' found in the 'Client List' tab of the Needs Review
        Tracker. These are returned as integers converted to strings with a
        comma after each ID. This is done to provide an easily readable string
        of Client IDs to query Snowflake with.
        Ex. {'294,', '305,', '442,'}

    """
    cursheet = sheet.worksheet(tab)
    curclients = cursheet.get_all_records()
    curclients = pd.DataFrame(curclients)
    active_clients = curclients[(curclients.Status == 'Active') |
                                (curclients.Status ==
                                 'Active - OCR to Send to Client First')]
    client_list = active_clients['Client ID']
    client_list = {str(x)+',' for x in client_list}
    print('Found ' + str(len(client_list)) + ' active clients in Client List')
    return client_list
def overwrite_sheet(df_to_write: pd.DataFrame, google_sheet: gspread.models.Spreadsheet, worksheet_index: int):
    """
    :param df_to_write: whcih df should be written to google sheets
    :param google_sheet: the sheet to write to
    :param worksheet_index: the index of the worksheet e {0,1,2,...,n}
    """
    worksheet = google_sheet.get_worksheet(worksheet_index)
    worksheet.clear()
    set_with_dataframe(worksheet, df_to_write)
Example #6
0
 def get_worksheet(workbook: gspread.models.Spreadsheet,
                   sheet_name: str) -> gspread.models.Worksheet:
     """
     指定した名前のワークシートを取得
     @param workbook: ワークブック
     @param sheet_name: ワークシート名
     @return worksheet: ワークシートオブジェクト
     """
     worksheet = workbook.worksheet(sheet_name)
     return worksheet
Example #7
0
 def getmetadata(cls, spreadsheet: gspread.models.Spreadsheet):
     metadata = None
     try:
         metadata = spreadsheet.fetch_sheet_metadata()
     except PermissionError:
         flash(
             "Erreur : Accès refusé (absence du mail du credential dans les destinataires du partage ?)"
         )
     except Exception as ex:
         flash(f"Erreur : {ex}")
     return metadata
Example #8
0
def get_unreviewed_posts(sheet: gspread.models.Spreadsheet):
    """Get all unreviewed posts.

    :param sheet: Google spreadsheet
    :return: generator object of not yet reviewed posts
    """
    week = get_review_week_start_end(date.today())
    title = f"Unreviewed - {week[0]:%b} {week[0].day} - {week[1]:%b} {week[1].day}"
    unreviewed = sheet.worksheet(title)
    return (contribution(row) for row in unreviewed.get_all_values()[1:]
            if row)
Example #9
0
def get_watched_users(sheet: gspread.models.Spreadsheet, bannedOnly=True):
    """Get all banned users from Banned users worksheet.

    :param bannedOnly:
    :param sheet: utopian review sheet
    :return: generator object of watched users
    """
    banned_sheet = sheet.worksheet('Banned users')
    return (user(row) for row in banned_sheet.get_all_values()[1:]
            if row and row[0] and (
                row[3].lower() == 'yes' if bannedOnly else True))
Example #10
0
def get_reviewed_posts_in_week(sheet: gspread.models.Spreadsheet,
                               week_date: date):
    """Get reviewed contributions in one week.
    The week is decided by the given date.
    Review week starts on Thursday.

    :param sheet: Google spreadsheet
    :param week_date: date of the week
    :return: generator object of the contributions
    """
    week = get_review_week_start_end(week_date)
    title = f"Reviewed - {week[0]:%b} {week[0].day} - {week[1]:%b} {week[1].day}"
    reviewed = sheet.worksheet(title)
    return (contribution(row) for row in reviewed.get_all_values()[1:] if row)