Fixed only_forced bug

Fixed scouting caching bug
This commit is contained in:
Cal Corum 2024-12-24 16:11:28 -06:00
parent fddb06b2fe
commit c7b45aecf4
2 changed files with 23 additions and 91 deletions

View File

@ -719,7 +719,7 @@ def advance_runners(session: Session, this_play: Play, num_bases: int, only_forc
if this_play.on_third:
this_play.on_third_final = 3
if this_play.on_second:
elif this_play.on_second:
if this_play.on_third:
if num_bases > 0:
this_play.on_third_final = 4

View File

@ -172,17 +172,20 @@ async def get_batter_scouting_or_none(session: Session, card: Card, skip_cache:
if s_query['count'] != 2:
log_exception(DatabaseError, f'Scouting for {card.player.name_with_desc} was not found.')
this_scouting = session.exec(select(BatterScouting).where(BatterScouting.battingcard_id == s_query['ratings'][0]['battingcard']['id'])).all()
logger.info(f'this_scouting: {this_scouting}')
# this_scouting = session.get(BatterScouting, s_query['ratings'][0]['battingcard']['id'])
bs_query = session.exec(select(BatterScouting).where(BatterScouting.battingcard_id == s_query['ratings'][0]['battingcard']['id'])).all()
logger.info(f'bs_query: {bs_query}')
if len(this_scouting) > 0:
if len(bs_query) > 0:
this_scouting = bs_query[0]
logger.info(f'this_scouting: {this_scouting}')
logger.info(f'we found a cached scouting: {this_scouting} / created {this_scouting.created}')
tdelta = datetime.datetime.now() - this_scouting.created
logger.debug(f'tdelta: {tdelta}')
if tdelta.total_seconds() < CACHE_LIMIT:
if tdelta.total_seconds() < CACHE_LIMIT and None not in [this_scouting.battingcard, this_scouting.ratings_vl, this_scouting.ratings_vr]:
logger.info(f'returning cached scouting')
return this_scouting
else:
logger.info(f'deleting cached scouting')
session.delete(this_scouting.battingcard)
session.delete(this_scouting.ratings_vl)
session.delete(this_scouting.ratings_vr)
@ -226,19 +229,22 @@ async def get_pitcher_scouting_or_none(session: Session, card: Card, skip_cache:
if s_query['count'] != 2:
log_exception(DatabaseError, f'Scouting for {card.player.name_with_desc} was not found.')
this_scouting = session.exec(select(PitcherScouting).where(PitcherScouting.pitchingcard_id == s_query['ratings'][0]['pitchingcard']['id'])).all()
logger.info(f'this_scouting: {this_scouting}')
bs_query = session.exec(select(PitcherScouting).where(PitcherScouting.pitchingcard_id == s_query['ratings'][0]['pitchingcard']['id'])).all()
logger.info(f'bs_query: {bs_query}')
# this_scouting = session.get(PitcherScouting, s_query['ratings'][0]['pitchingcard']['id'])
if len(this_scouting) > 0:
if len(bs_query) > 0:
this_scouting = bs_query[0]
logger.info(f'we found a cached scouting: {this_scouting} / created {this_scouting.created}')
tdelta = datetime.datetime.now() - this_scouting.created
logger.debug(f'tdelta: {tdelta}')
if tdelta.total_seconds() < CACHE_LIMIT:
if tdelta.total_seconds() < CACHE_LIMIT and None not in [this_scouting.battingcard, this_scouting.ratings_vl, this_scouting.ratings_vr]:
logger.info(f'returning cached scouting')
return this_scouting
else:
logger.info(f'deleting cached scouting')
session.delete(this_scouting.pitchingcard)
session.delete(this_scouting.ratings_vl)
session.delete(this_scouting.ratings_vr)
@ -276,85 +282,6 @@ async def get_pitcher_scouting_or_none(session: Session, card: Card, skip_cache:
pos_rating = await get_position(session, card, 'P')
return scouting
# if not skip_cache and card.pitcherscouting is not None:
# this_scouting = session.get(PitcherScouting, card.pitcherscouting.id)
# # s_query = session.exec(select(PitcherScouting).where(PitcherScouting.pitchingcard_id == card.))
# if this_scouting is not None:
# logger.info(f'we found a cached scouting: {this_scouting} / created {this_scouting.created}')
# tdelta = datetime.datetime.now() - this_scouting.created
# logger.debug(f'tdelta: {tdelta}')
# if tdelta.total_seconds() < CACHE_LIMIT:
# return this_scouting
# else:
# session.delete(this_scouting)
# session.commit()
# def cache_scouting(pitching_card: dict, ratings_vr: dict, ratings_vl: dict) -> PitcherScouting:
# valid_bc = PitchingCardBase.model_validate(pitching_card, from_attributes=True)
# db_bc = PitchingCard.model_validate(valid_bc)
# valid_vl = PitchingRatingsBase.model_validate(ratings_vl, from_attributes=True)
# db_vl = PitchingRatings.model_validate(valid_vl)
# valid_vr = PitchingRatingsBase.model_validate(ratings_vr, from_attributes=True)
# db_vr = PitchingRatings.model_validate(valid_vr)
# db_scouting = PitcherScouting(
# pitchingcard=db_bc,
# ratings_vl=db_vl,
# ratings_vr=db_vr
# )
# session.add(db_scouting)
# session.commit()
# session.refresh(db_scouting)
# return db_scouting
# s_query = await db_get(f'pitchingcardratings/player/{card.player.id}', none_okay=False)
# if s_query['count'] == 2:
# scouting = cache_scouting(
# pitching_card=s_query['ratings'][0]['pitchingcard'],
# ratings_vr=s_query['ratings'][0] if s_query['ratings'][0]['vs_hand'] == 'R' else s_query['ratings'][1],
# ratings_vl=s_query['ratings'][0] if s_query['ratings'][0]['vs_hand'] == 'L' else s_query['ratings'][1]
# )
# pos_rating = await get_position(session, card, 'P')
# return scouting
# return None
# async def get_position_rating_or_none(session: Session, card: Card, position: str, skip_cache: bool = False) -> PositionRating | None:
# logger.info(f'Getting position rating for card ID')
# if not skip_cache:
# ratings = session.exec(select(PositionRating).where(PositionRating.player == card.player, PositionRating.variant == card.variant, PositionRating.position == position).limit(1)).all()
# """Test all of this; rebuild DB"""
# if len(ratings) > 0:
# logger.info(f'we found a cached position: {ratings[0]} / created {ratings[0].created}')
# tdelta = datetime.datetime.now() - ratings[0].created
# logger.debug(f'tdelta: {tdelta}')
# if tdelta.total_seconds() < CACHE_LIMIT:
# return ratings[0]
# else:
# session.delete(ratings[0])
# session.commit()
# def cache_rating(json_data: dict) -> PositionRating:
# valid_position = PositionRatingBase.model_validate(json_data, from_attributes=True)
# db_position = PositionRating.model_validate(valid_position)
# session.add(db_position)
# session.commit()
# session.refresh(db_position)
# return db_position
# p_query = await db_get('cardpositions', params=[('player_id', card.player.id)])
# if p_query['count'] > 0:
# return cache_rating(p_query['positions'][0])
# return None
def get_player_id_from_dict(json_data: dict) -> int:
logger.info(f'Getting player from dict {json_data}')
@ -443,7 +370,8 @@ async def get_or_create_ai_card(session: Session, player: Player, team: Team, sk
logger.info(f'we found a cached card: {this_card} / created: {this_card.created}')
tdelta = datetime.datetime.now() - this_card.created
logger.debug(f'tdelta: {tdelta}')
if tdelta.total_seconds() < CACHE_LIMIT:
if tdelta.total_seconds() < CACHE_LIMIT and (this_card.pitcherscouting is not None or this_card.batterscouting is not None):
logger.info(f'returning this_card')
return this_card
else:
logger.info(f'deleting card record')
@ -522,9 +450,13 @@ async def get_card_or_none(session: Session, card_id: int, skip_cache: bool = Fa
logger.info(f'we found a cached card: {this_card} / created: {this_card.created}')
tdelta = datetime.datetime.now() - this_card.created
logger.debug(f'tdelta: {tdelta}')
if tdelta.total_seconds() < CACHE_LIMIT:
if tdelta.total_seconds() < CACHE_LIMIT and (this_card.pitcherscouting is not None or this_card.batterscouting is not None):
logger.info(f'returning this_card')
return this_card
else:
logger.info(f'deleting this_card')
session.delete(this_card.batterscouting)
session.delete(this_card.pitcherscouting)
session.delete(this_card)
session.commit()