30 lines
855 B
Python
30 lines
855 B
Python
from src.game import Game
|
|
from src.store.managers.async_manager import AsyncManager
|
|
from src.utils.steam import (
|
|
HTTPError,
|
|
SteamGameNotFoundError,
|
|
SteamHelper,
|
|
SteamNotAGameError,
|
|
)
|
|
|
|
|
|
class SteamAPIManager(AsyncManager):
|
|
"""Manager in charge of completing a game's data from the Steam API"""
|
|
|
|
retryable_on = set((HTTPError,))
|
|
|
|
def manager_logic(self, game: Game) -> None:
|
|
# Skip non-steam games
|
|
if not game.source.startswith("steam_"):
|
|
return
|
|
|
|
# Get online metadata
|
|
appid = str(game.game_id).split("_")[-1]
|
|
steam = SteamHelper()
|
|
try:
|
|
online_data = steam.get_api_data(appid=appid)
|
|
except (SteamNotAGameError, SteamGameNotFoundError):
|
|
game.update_values({"blacklisted": True})
|
|
else:
|
|
game.update_values(online_data)
|