From 9f61188901df63aff86abe1fb0d3727fd8b025be Mon Sep 17 00:00:00 2001 From: Brad Brown Date: Tue, 31 May 2022 08:23:40 -0500 Subject: [PATCH] Update start date and add user check --- pyproject.toml | 1 + wordlinator/app/__init__.py | 52 +++++++++++++++++++++------------- wordlinator/sheets/__init__.py | 24 +++++++++++++++- wordlinator/utils.py | 2 +- 4 files changed, 58 insertions(+), 21 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 0fc53be..ff8f1c1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,7 @@ ipython = "^8.4.0" [tool.poetry.scripts] wordlinator = "wordlinator.app:sync_main" update = "wordlinator.app:sync_update" +show-user = "wordlinator.app:sync_show_user" [tool.mypy] ignore_missing_imports = true diff --git a/wordlinator/app/__init__.py b/wordlinator/app/__init__.py index 635c9e1..bc3f491 100644 --- a/wordlinator/app/__init__.py +++ b/wordlinator/app/__init__.py @@ -26,30 +26,13 @@ async def get_scores( return scores -async def main_update( - wordle_day: wordlinator.utils.WordleDay = wordlinator.utils.WORDLE_TODAY, -): - sheets_client = wordlinator.sheets.SheetsClient(wordle_day=wordle_day) - sheet_scores = sheets_client.get_scores(completed_only=False) - - today_scores = await get_scores(wordle_day=wordle_day) - - for user, score in today_scores.items(): - if score and sheet_scores[user][-1] != score: - sheet_scores[user][-1] = score - - sheets_client.write_scores(sheet_scores) - - -async def main(wordle_day=None): - scores = await get_scores(wordle_day) - +def print_score_table(wordle_day, scores): table = rich.table.Table( rich.table.Column(header="Username", style="green"), rich.table.Column("Raw Score"), rich.table.Column("Golf Score"), rich.table.Column("Score Name"), - title=f"Wordle Scores Day {wordle_day}", + title=f"Wordle Scores Day {wordle_day.wordle_no}", ) for username, score in scores.items(): args = [username] @@ -72,6 +55,30 @@ async def main(wordle_day=None): rich.print(table) +async def main_update( + wordle_day: wordlinator.utils.WordleDay = wordlinator.utils.WORDLE_TODAY, +): + sheets_client = wordlinator.sheets.SheetsClient(wordle_day=wordle_day) + + today_scores = await get_scores(wordle_day=wordle_day) + + sheets_client.update_scores(today_scores) + + print_score_table(wordle_day, today_scores) + + +async def main(wordle_day=wordlinator.utils.WORDLE_TODAY): + rich.print(wordle_day) + scores = await get_scores(wordle_day) + print_score_table(wordle_day, scores) + + +async def show_user(username: str): + client = wordlinator.twitter.TwitterClient() + scores = await client.get_user_wordles(username) + rich.print(scores) + + def _get_day(): parser = argparse.ArgumentParser("wordlinator") days = parser.add_mutually_exclusive_group() @@ -102,5 +109,12 @@ def sync_update(): asyncio.run(main_update(wordle_day=wordle_day)) +def sync_show_user(): + parser = argparse.ArgumentParser() + parser.add_argument("username") + args = parser.parse_args() + asyncio.run(show_user(args.username)) + + if __name__ == "__main__": sync_main() diff --git a/wordlinator/sheets/__init__.py b/wordlinator/sheets/__init__.py index 57a275b..0ad80a6 100644 --- a/wordlinator/sheets/__init__.py +++ b/wordlinator/sheets/__init__.py @@ -11,7 +11,7 @@ import rich.table import wordlinator.utils SPREADSHEET_ID = "1POoklzvD643pvdMAleFxrecN50IMv2NdQBs9h43Hw8E" -SHEET_NAME = os.getenv("SHEET_NAME", "AutoTest") +SHEET_NAME = os.getenv("SHEET_NAME", None) USER_RANGE = "A2:A1000" SCORE_RANGE = "C2:T1000" @@ -45,6 +45,8 @@ class SheetsClient: self.game_round = None else: self.game_round = wordle_day.golf_hole.hole_no + if not self.sheet_name: + self.sheet_name = f"Round {wordle_day.golf_hole.game_no}" def _get_sheet_values(self, range): sheets = self.client.spreadsheets() @@ -112,6 +114,26 @@ class SheetsClient: ) return result + def update_scores(self, day_scores_dict): + if self.game_round is None: + raise ValueError("Cannot update scores if not in a game round") + current_scores = self.get_scores() + for name, score in day_scores_dict.items(): + current_row = current_scores[name] + row_len = len(current_row) + score_val = str(score.raw_score) if score else "" + if row_len == (self.game_round - 1): + # If the row doesn't include today yet, add it. + current_row.append(score_val) + elif row_len >= self.game_round: + # If there's already an entry for today's game, + # only update if the value is empty. + day_idx = self.game_round - 1 + if current_row[day_idx] == "": + current_row[day_idx] = score_val + current_scores[name] = current_row + self.write_scores(current_scores) + def main(): scores = SheetsClient().get_scores() diff --git a/wordlinator/utils.py b/wordlinator/utils.py index 2080af8..c7706f8 100644 --- a/wordlinator/utils.py +++ b/wordlinator/utils.py @@ -4,7 +4,7 @@ import typing WORDLE_DAY_ZERO = datetime.date(2021, 6, 19) -WORDLE_GOLF_ROUND_DATES = [datetime.date(2022, 5, 9), datetime.date(2022, 5, 30)] +WORDLE_GOLF_ROUND_DATES = [datetime.date(2022, 5, 9), datetime.date(2022, 5, 31)] @dataclasses.dataclass