Example #1
0
 def update_all_players_specified_season(self, season: int = 2020):
     # delete all players in current season 2019:
     self.db["players"].delete_many({"season": season})
     # scrape new players info in specified season
     players = scraper.scrape_players(season)
     for player in players:
         self.post_player(player)
Example #2
0
 def update_all_players_all_seasons(self):
     # delete all players in endpoint and re-update every players
     # costly, since perform unncessary updates on past players whose stats stay the same no matter what
     self.delete_all_players_seasons()
     for i in range(2015, 2021):
         print(f"Updating for season {i}")
         playerList = scraper.scrape_players(i)
         for player in playerList:
             self.post_player(player)
Example #3
0
def search_players():
    """
    Palauttaa listan pelaajista, joiden nimi vastaa hakuehtoa.

    Tyhjä hakuehto palauttaa kaikki pelaajat.
    """
    query = request.args.get('query', '')
    # TODO queryn validointi? Onko tarpeen?
    try:
        data = scraper.scrape_players(query)
    except Exception as e:
        logging.error(e)
        abort(404)

    return jsonify(data)
Example #4
0
def search_players():
    """
    Palauttaa listan pelaajista, joiden nimi vastaa hakuehtoa.

    Tyhjä hakuehto palauttaa kaikki pelaajat.
    """
    query = request.args.get('query', '')
    # TODO queryn validointi? Onko tarpeen?
    try:
        data = scraper.scrape_players(query)
    except Exception as e:
        logging.error(e)
        abort(404)

    return jsonify(data)
Example #5
0
def user():
    """
    Hakee, lisää ja poistaa käyttäjän seuraamia pelaajia/joukkueita.

    Vaatii OAuth-allekirjoitetun pyynnön.
    TODO välimuisti
    """
    # Poimitaan oauth token HTTP-pyynnön Authorization-headerista:
    auth_header = request.headers.get("Authorization", None)
    if not auth_header:
        abort(401)  # Unauthorized

    for param in auth_header.split():
        if param.startswith("oauth_token"):
            token = param.split("=")[-1][1:-2]
            break

    if not token:
        abort(401)

    # Haetaan tokenia vastaava käyttäjä:
    try:
        acc_token = AccessToken.query(AccessToken.token == token).get()
        user = acc_token.resource_owner.get()
    except KeyError:  # Access tokenia tai käyttäjää ei löydy
        abort(401)

    # Poimitaan ids_only-parametri joko urlista tai post-parametreista:
    if "ids_only" in request.form:
        ids_only = request.form["ids_only"]
    else:
        ids_only = request.args.get("ids_only", "0")
    try:
        ids_only = int(ids_only)
    except ValueError:
        abort(400)

    if request.method == "GET":
        # Palautetaan käyttäjän seuraamat pelaajat ja joukkueet:
        if ids_only:
            # Palautetaan vain id:t:
            ret = dict(players=user.players, teams=user.teams)
        else:
            # Jos ids_only == 1, palautetaan tunnusten lisäksi tilastoja:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)

    if request.method == "POST":
        # Lisätään seurattava pelaaja tai joukkue:
        if "pid" in request.form:
            pid = request.form["pid"]

            # Validoitaan pelaajan id:
            if pid in user.players:
                abort(400)  # Pelaaja on jo seurattavien listassa

            all_players = scraper.scrape_players()
            if not pid in all_players:
                abort(400)  # pid:tä vastaavaa pelaajaa ei löydy

            # Lisätään pid käyttäjän seurattavien pelaajien listalle:
            user.players.append(pid)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        if "team" in request.form:
            team = request.form["team"].lower()
            # Validoitaan joukkueen tunnus
            if team in user.teams:
                abort(400)  # Joukkue on jo seurattavien listassa
            if not team in scraper.TEAMS:
                abort(400)  # Epäkelpo joukkueen tunnus

            # Lisätään joukkue käyttäjän seurattavien joukkueiden listalle:
            user.teams.append(team)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        else:
            abort(400)  # Lisättävä pelaaja tai joukkue tulee määrittää

    if request.method == "DELETE":
        # Poistetaan seurattava pelaaja tai joukkue:
        pid = request.args.get("pid", None)
        team = request.args.get("team", None)
        if pid:
            if not pid in user.players:
                abort(400)  # pelaajaa ei löydy seurattavien listasta
            user.players.remove(pid)

        elif team:
            if not team in user.teams:
                abort(400)  # joukkuetta ei löydy seurattavien listasta
            user.teams.remove(team)

        else:
            abort(400)  # joko poistettava pelaaja tai joukkue tulee määrittää

        user.put()

        if ids_only:
            ret = dict(players=user.players, teams=user.teams)
        else:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)
Example #6
0
# -*- coding: utf-8 -*-

"""
The top-level module is run in order to collect data and
ensure they remain up to date for the project's MongoDB database.
@author: Darren Vong
"""
import sys

from scraper import scrape_players
from db_updater import insert_players, enforce_injective_name_mapping, update_heroku_db
from views.helpers import connect

client, col = connect()
try:
    players_list = scrape_players()
except:
    sys.exit(1)
else:
    insert_players(col, players_list)
    enforce_injective_name_mapping(col)
finally:
    client.close()

# update_heroku_db(client)
Example #7
0
def user():
    """
    Hakee, lisää ja poistaa käyttäjän seuraamia pelaajia/joukkueita.

    Vaatii OAuth-allekirjoitetun pyynnön.
    TODO välimuisti
    """
    # Poimitaan oauth token HTTP-pyynnön Authorization-headerista:
    auth_header = request.headers.get("Authorization", None)
    if not auth_header:
        abort(401)  # Unauthorized

    for param in auth_header.split():
        if param.startswith("oauth_token"):
            token = param.split("=")[-1][1:-2]
            break

    if not token:
        abort(401)

    # Haetaan tokenia vastaava käyttäjä:
    try:
        acc_token = AccessToken.query(AccessToken.token == token).get()
        user = acc_token.resource_owner.get()
    except KeyError:  # Access tokenia tai käyttäjää ei löydy
        abort(401)

    # Poimitaan ids_only-parametri joko urlista tai post-parametreista:
    if "ids_only" in request.form:
        ids_only = request.form["ids_only"]
    else:
        ids_only = request.args.get("ids_only", "0")
    try:
        ids_only = int(ids_only)
    except ValueError:
        abort(400)

    if request.method == "GET":
        # Palautetaan käyttäjän seuraamat pelaajat ja joukkueet:
        if ids_only:
            # Palautetaan vain id:t:
            ret = dict(players=user.players, teams=user.teams)
        else:
            # Jos ids_only == 1, palautetaan tunnusten lisäksi tilastoja:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)

    if request.method == "POST":
        # Lisätään seurattava pelaaja tai joukkue:
        if "pid" in request.form:
            pid = request.form["pid"]

            # Validoitaan pelaajan id:
            if pid in user.players:
                abort(400)  # Pelaaja on jo seurattavien listassa

            all_players = scraper.scrape_players()
            if not pid in all_players:
                abort(400)  # pid:tä vastaavaa pelaajaa ei löydy

            # Lisätään pid käyttäjän seurattavien pelaajien listalle:
            user.players.append(pid)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        if "team" in request.form:
            team = request.form["team"].lower()
            # Validoitaan joukkueen tunnus
            if team in user.teams:
                abort(400)  # Joukkue on jo seurattavien listassa
            if not team in scraper.TEAMS:
                abort(400)  # Epäkelpo joukkueen tunnus

            # Lisätään joukkue käyttäjän seurattavien joukkueiden listalle:
            user.teams.append(team)
            user.put()

            # Palautetaan päivittynyt seurantalista, kuten GET-pyynnössä:
            if ids_only:
                ret = dict(players=user.players, teams=user.teams)
            else:
                ret = get_players_and_teams(user.players, user.teams)
            ret["name"] = user.name
            return jsonify(ret)

        else:
            abort(400)  # Lisättävä pelaaja tai joukkue tulee määrittää

    if request.method == "DELETE":
        # Poistetaan seurattava pelaaja tai joukkue:
        pid = request.args.get("pid", None)
        team = request.args.get("team", None)
        if pid:
            if not pid in user.players:
                abort(400)  # pelaajaa ei löydy seurattavien listasta
            user.players.remove(pid)

        elif team:
            if not team in user.teams:
                abort(400)  # joukkuetta ei löydy seurattavien listasta
            user.teams.remove(team)

        else:
            abort(400)  # joko poistettava pelaaja tai joukkue tulee määrittää

        user.put()

        if ids_only:
            ret = dict(players=user.players, teams=user.teams)
        else:
            ret = get_players_and_teams(user.players, user.teams)
        ret["name"] = user.name
        return jsonify(ret)