Files
cartridges/src/store/managers/steam_api_manager.py
GeoffreyCoulaud 98f02da36c 🎨 SourceIterator can yield addtitional data
SourceIterator-s can yield a game and a tuple of additional data.
This data will be passed to the Store, Pipeline and Managers.
2023-06-07 14:01:06 +02:00

32 lines
930 B
Python

from urllib3.exceptions import SSLError
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, SSLError))
def manager_logic(self, game: Game, _additional_data: tuple) -> 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)