def add_players_to_db(players_from_db, players_from_api, player_data_from_api, dbsession): print("Updating player table...") # find the new player(s) from the API api_ids_from_db = [p.fpl_api_id for p in players_from_db] new_players = [p for p in players_from_api if p not in api_ids_from_db] for player_api_id in new_players: first_name = player_data_from_api[player_api_id]["first_name"] second_name = player_data_from_api[player_api_id]["second_name"] name = "{} {}".format(first_name, second_name) # check whether we alreeady have this player in the database - # if yes update that player's data, if no create a new player p = get_player(name, dbsession=dbsession) if p is None: print("Adding player {}".format(name)) p = Player() update = False elif p.fpl_api_id is None: print("Updating player {}".format(name)) update = True else: update = True p.fpl_api_id = player_api_id p.name = name if not update: dbsession.add(p) dbsession.commit() return len(new_players)
def fill_players(): """ fill a bunch of dummy players """ team_list = list(alternative_team_names.keys()) season = CURRENT_SEASON gameweek = 1 with test_session_scope() as ts: if len(ts.query(Player).all()) > 0: return for i, n in enumerate(dummy_players): p = Player() p.player_id = i p.fpl_api_id = i p.name = n print("Filling {} {}".format(i, n)) try: ts.add(p) except Exception: print("Error adding {} {}".format(i, n)) # now fill player_attributes if i % 15 < 2: pos = "GK" elif i % 15 < 7: pos = "DEF" elif i % 15 < 12: pos = "MID" else: pos = "FWD" team = team_list[i % 20] # make the first 15 players affordable, # the next 15 almost affordable, # the next 15 mostly unaffordable, # and rest very expensive price = value_generator(i // 15, pos) pa = PlayerAttributes() pa.season = season pa.team = team pa.gameweek = gameweek pa.price = price pa.position = pos player = ts.query(Player).filter_by(player_id=i).first() pa.player = player ts.add(pa) ts.commit()
def update_players(season, dbsession): """ See if any new players have been added to FPL since we last filled the 'player' table in the db. If so, add them. """ players_from_db = list_players( position="all", team="all", season=season, dbsession=dbsession ) player_data_from_api = fetcher.get_player_summary_data() players_from_api = list(player_data_from_api.keys()) if len(players_from_db) == len(players_from_api): print("Player table already up-to-date.") return 0 elif len(players_from_db) > len(players_from_api): raise RuntimeError( "Something strange has happened - more players in DB than API" ) else: print("Updating player table...") # find the new player(s) from the API api_ids_from_db = [p.fpl_api_id for p in players_from_db] new_players = [p for p in players_from_api if p not in api_ids_from_db] for player_api_id in new_players: first_name = player_data_from_api[player_api_id]["first_name"] second_name = player_data_from_api[player_api_id]["second_name"] name = "{} {}".format(first_name, second_name) # check whether we alreeady have this player in the database - # if yes update that player's data, if no create a new player p = get_player(name, dbsession=dbsession) if p is None: print("Adding player {}".format(name)) p = Player() update = False elif p.fpl_api_id is None: print("Updating player {}".format(name)) update = True else: update = True p.fpl_api_id = player_api_id p.name = name if not update: dbsession.add(p) dbsession.commit() return len(new_players)
def fill_player_table_from_api(season, session): """ use the FPL API """ df = FPLDataFetcher() pd = df.get_player_summary_data() for k, v in pd.items(): p = Player() p.fpl_api_id = k first_name = v["first_name"] # .encode("utf-8") second_name = v["second_name"] # .encode("utf-8") name = "{} {}".format(first_name, second_name) print("PLAYER {} {}".format(season, name)) p.name = name session.add(p) session.commit()