data load improvements

* support given date for pull
* support load for user score not in game db yet
This commit is contained in:
2022-06-20 10:33:49 -05:00
parent e94d0a7714
commit f5bf263635
3 changed files with 26 additions and 3 deletions

View File

@@ -84,7 +84,9 @@ def _save_db_scores(
db_holes = db.get_holes(game_no, ensure_all=True) db_holes = db.get_holes(game_no, ensure_all=True)
db_scores = db.get_scores(game_no) db_scores = db.get_scores(game_no)
db_scores_by_user = wordlinator.utils.scores.ScoreMatrix(db_scores).by_user() db_scores_by_user = wordlinator.utils.scores.ScoreMatrix(db_scores).by_user(
usernames=list(scores.keys())
)
to_update = [] to_update = []
to_create = [] to_create = []
@@ -95,6 +97,7 @@ def _save_db_scores(
continue continue
db_user_match = [u for u in db_users if u.username == user] db_user_match = [u for u in db_users if u.username == user]
if not db_user_match: if not db_user_match:
rich.print(f"[yellow]User {user} not in database, cannot add scores.")
continue continue
db_user = db_user_match[0] db_user = db_user_match[0]
twitter_score = twitter_scores.get(user, None) twitter_score = twitter_scores.get(user, None)
@@ -169,6 +172,11 @@ def _get_day():
days.add_argument( days.add_argument(
"--wordle-day", type=int, help="The wordle day number for the score report." "--wordle-day", type=int, help="The wordle day number for the score report."
) )
days.add_argument(
"--date",
type=wordlinator.utils.date_from_string,
help="a YYYY-MM-DD format date to pull a score report.",
)
args = parser.parse_args() args = parser.parse_args()
wordle_day = wordlinator.utils.WORDLE_TODAY wordle_day = wordlinator.utils.WORDLE_TODAY
if args.wordle_day: if args.wordle_day:
@@ -177,6 +185,8 @@ def _get_day():
wordle_day = wordlinator.utils.WordleDay.from_wordle_no( wordle_day = wordlinator.utils.WordleDay.from_wordle_no(
wordle_day.wordle_no - args.days_ago wordle_day.wordle_no - args.days_ago
) )
elif args.date:
wordle_day = wordlinator.utils.WordleDay.from_date(args.date)
return wordle_day return wordle_day

View File

@@ -1,3 +1,4 @@
import argparse
import dataclasses import dataclasses
import datetime import datetime
import typing import typing
@@ -7,6 +8,14 @@ WORDLE_DAY_ZERO = datetime.date(2021, 6, 19)
WORDLE_GOLF_ROUND_DATES = [datetime.date(2022, 5, 9), datetime.date(2022, 5, 31)] WORDLE_GOLF_ROUND_DATES = [datetime.date(2022, 5, 9), datetime.date(2022, 5, 31)]
def date_from_string(datestr: str):
try:
return datetime.date.fromisoformat(datestr)
except ValueError:
msg = "Invalid date string, expected format: YYYY-mm-DD"
raise argparse.ArgumentTypeError(msg)
@dataclasses.dataclass @dataclasses.dataclass
class GolfHole: class GolfHole:
game_no: int game_no: int

View File

@@ -153,8 +153,12 @@ class UserRow(ScoreRow):
class ScoreMatrix(ScoreContainer): class ScoreMatrix(ScoreContainer):
def by_user(self): def by_user(self, usernames: typing.List[str] = []):
return self.dict_by("user_id.username", UserRow) res = self.dict_by("user_id.username", UserRow)
for username in usernames:
if username not in res:
res[username] = UserRow([], username)
return res
def for_user(self, username): def for_user(self, username):
user_scores = [s for s in self._scores if s.user_id.username == username] user_scores = [s for s in self._scores if s.user_id.username == username]