#! /usr/bin/env python import sys, os if os.path.isdir('/tracker'): # for running in docker image. os.chdir('/tracker') sys.path.insert(0, ".") import random import datetime import argparse from gspread import WorksheetNotFound from tracker import db from tracker.bangers import create_banger_tab, BangerChartSettings from tracker.bangers.defined_tabs import DEFINED_FRUNCHES from tracker.sheet import Sheet db.setup_session() def rand_str(k=5): return "".join(random.choices("abcdefghijklmnopqrstuvwxyz", k=k)) if __name__ == '__main__': all_tabs = [s.id for s in DEFINED_FRUNCHES] parser = argparse.ArgumentParser(description='Create Bangers Sheet') parser.add_argument('-s', '--sheet-url', help='Url to existing sheet, otherwise a new one will be created') parser.add_argument('-d', '--dry-run', help='Create blank tabs', action='store_true', default=False) parser.add_argument('-t', '--tab', help=f'Specify tab to include, can be included multiple times. Current tabs: {all_tabs}', action='append') parser.add_argument('-p', '--include-previous', help=f'If true, the previous sheet info will be added', action='store_true', default=False) parser.add_argument('-r', '--store', help=f'If true, the charts will be stored in db', action='store_true', default=False) parser.add_argument('-a', '--alert', help=f'Share and alert to joel', action='store_true', default=False) parser.add_argument('--in-tsv', help=f'Specify csv file exclusively', action='store') args = parser.parse_args() if not args.tab: frunch_list = all_tabs else: bad_tabs = set(args.tab) - set(all_tabs) if bad_tabs: print(f"Unknown tab(s) specified: {bad_tabs}") print(f"Available tabs: {all_tabs}") sys.exit(3) frunch_list = args.tab try: print("\n==========================================\n") print(" |-o-| Starting Frunchspace! |-o-| ") print("\n==========================================\n") print(f"Tabs: {frunch_list}") sheet = Sheet() if args.sheet_url: print("Opening existing sheet", args.sheet_url) ss = sheet.client.open_by_url(args.sheet_url) else: ss_name = 'Bangers {} / {}'.format(datetime.date.today().strftime('%Y-%m-%d'), rand_str(k=4)) ss = sheet.client.create(ss_name) print(f"Created sheet: {ss_name} \nhttps://docs.google.com/spreadsheets/d/{ss.id}\n\n[pause for applause]") import time; time.sleep(3) if args.in_tsv: print("Creating a sheet from tsv {args.in_tsv}") create_banger_tab( ss, BangerChartSettings( id='tsvFile', prefix=args.in_tsv + ' ' + rand_str(4), tsv_file=args.in_tsv ) ) else: frunches_to_execute = [f for f in DEFINED_FRUNCHES if f.id in frunch_list] for frunch in frunches_to_execute: print("Creating", frunch.prefix) create_banger_tab(ss, frunch, args.dry_run, include_previous_appearances=args.include_previous, store_chart_in_db=args.store) try: sheet1 = ss.worksheet(title='Sheet1') ss.del_worksheet(sheet1) except WorksheetNotFound: pass if args.alert: ss.share('joel@whtlst.in', perm_type='user', role='writer', notify=True) if args.store and not args.sheet_url: ss.share('joel@whtlst.in', perm_type='user', role='writer', notify=True) ss.share('rob@whtlst.in', perm_type='user', role='writer', notify=True) ss.share('robert.winters.ronaldson@gmail.com', perm_type='user', role='writer', notify=True) # ss.share('davidgrainjr@gmail.com', perm_type='user', role='reader', notify=False) ss.share('miloanthonysaville@gmail.com', perm_type='user', role='writer', notify=True) ss.share('ldmtollemache@gmail.com', perm_type='user', role='writer', notify=True) except Exception as e: print("Something went wrong.", e) raise e