diff --git a/pyproject.toml b/pyproject.toml index ff8f1c1..70a2bec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ ipython = "^8.4.0" wordlinator = "wordlinator.app:sync_main" update = "wordlinator.app:sync_update" show-user = "wordlinator.app:sync_show_user" +show-missing = "wordlinator.app:sync_show_missing" [tool.mypy] ignore_missing_imports = true diff --git a/wordlinator/app/__init__.py b/wordlinator/app/__init__.py index 2938cac..347d9d2 100644 --- a/wordlinator/app/__init__.py +++ b/wordlinator/app/__init__.py @@ -12,7 +12,7 @@ import wordlinator.utils async def get_scores( wordle_day: wordlinator.utils.WordleDay = wordlinator.utils.WORDLE_TODAY, ): - users = wordlinator.sheets.SheetsClient().get_users() + users = wordlinator.sheets.SheetsClient(wordle_day=wordle_day).get_missing_names() twitter_client = wordlinator.twitter.TwitterClient(wordle_day=wordle_day) @@ -81,6 +81,13 @@ async def show_user(username: str): rich.print(scores) +async def show_missing( + wordle_day: wordlinator.utils.WordleDay = wordlinator.utils.WORDLE_TODAY, +): + client = wordlinator.sheets.SheetsClient(wordle_day=wordle_day) + rich.print(client.get_missing_names()) + + def _get_day(): parser = argparse.ArgumentParser("wordlinator") days = parser.add_mutually_exclusive_group() @@ -118,5 +125,10 @@ def sync_show_user(): asyncio.run(show_user(args.username)) +def sync_show_missing(): + wordle_day = _get_day() + asyncio.run(show_missing(wordle_day=wordle_day)) + + if __name__ == "__main__": sync_main() diff --git a/wordlinator/sheets/__init__.py b/wordlinator/sheets/__init__.py index 0ad80a6..e4f78d5 100644 --- a/wordlinator/sheets/__init__.py +++ b/wordlinator/sheets/__init__.py @@ -99,6 +99,18 @@ class SheetsClient: scores = ranges[1].get("values", []) return self.score_dict(names, scores, completed_only=completed_only) + def get_missing_names(self): + if self.game_round is None: + raise ValueError( + "Cannot check missing names when day is not in a game round." + ) + scores = self.get_scores() + missing_scores = [] + for name, score_list in scores.items(): + if len(score_list) < self.game_round or not score_list[self.game_round - 1]: + missing_scores.append(name) + return missing_scores + def write_scores(self, score_dict): body = {"values": list(score_dict.values())} sheets = self.client.spreadsheets()