def __init__(self, api_url=PATH["api"], db_path=PATH["db"]): self.api = BoardGameGeekApi(url=api_url) self.db = BoardGameGeekDb(path=db_path)
class BoardGameGeek: def __init__(self, api_url=PATH["api"], db_path=PATH["db"]): self.api = BoardGameGeekApi(url=api_url) self.db = BoardGameGeekDb(path=db_path) def get_collection(self, username, refresh=False, include_xpac=False): return BoardGameGeekCollection(self.api, self.db, username, refresh, include_xpac) def get_game(self, bgg_id): return BoardGameGeekGame(self.api, self.db, bgg_id) def top_100(self, limit=100, include_xpac=True): top100 = self.db.games(limit=limit) if not top100 or len(top100) != limit: top100 = self.api.top_100(limit=limit) games = [] for i, bgg_id in enumerate(top100): if isinstance(bgg_id, int): if not self.db.has_game(bgg_id): sys.stderr.write("Fetching Game {} of {}\n".format(i + 1, len(top100))) game = BoardGameGeekGame(self.api, self.db, bgg_id) game.data["user_rating"] = "N/A" if include_xpac or game["gametype"] == "boardgame": games.append(game) return games else: return top100 def all_ratings(self): return self.db.all_ratings() def ratings(self, bgg_id): if not self.db.has_ratings(bgg_id): results = self.api.ratings(bgg_id) self.db.ratings_add(bgg_id, results) return results return self.db.ratings(bgg_id) def search(self, query, retall=False): res = self.db.game_by_name(query) if res: return self.db.games_extended_info([res])[0] else: results = self.api.search(query=query) exact = [x for x in results if x["name"] == query] games = [] if not retall and len(exact) == 1: games.append(BoardGameGeekGame(self.api, self.db, exact[0]["bgg_id"])) return self.db.games_extended_info(games)[0] for i, g in enumerate(results): game = BoardGameGeekGame(self.api, self.db, g["bgg_id"]) games.append(game) return self.db.games_extended_info(games)