Module kickbase_api.kickbase

Expand source code
from datetime import datetime, timedelta
from typing import Union

import requests
import json

from kickbase_api.exceptions import KickbaseLoginException, KickbaseException
from kickbase_api.models._transforms import parse_date
from kickbase_api.models.feed_item import FeedItem
from kickbase_api.models.feed_item_comment import FeedItemComment
from kickbase_api.models.league_data import LeagueData
from kickbase_api.models.league_info import LeagueInfo
from kickbase_api.models.league_me import LeagueMe
from kickbase_api.models.league_user_data import LeagueUserData
from kickbase_api.models.league_user_profile import LeagueUserProfile
from kickbase_api.models.league_user_stats import LeagueUserStats
from kickbase_api.models.lineup import LineUp
from kickbase_api.models.market import Market
from kickbase_api.models.market_player import MarketPlayer
from kickbase_api.models.player import Player
from kickbase_api.models.response.league_stats_response import LeagueStatsResponse
from kickbase_api.models.user import User


class Kickbase:
    base_url: str = None
    token: str = None
    token_expire: datetime = None

    _username: str = None
    _password: str = None

    def __init__(self, base_url: str = 'https://api.kickbase.com'):
        self.base_url = base_url

    def login(self, username: str, password: str) -> (User, [LeagueData]):
        data = {
            "email": username,
            "password": password,
            "ext": False
        }

        r = self._do_post("/user/login", data, False)

        if r.status_code == 200:
            j = r.json()
            self.token = j["token"]
            self.token_expire = parse_date(j["tokenExp"])

            self._username = username
            self._password = password

            user = User(j["user"])
            league_data = [LeagueData(d) for d in j["leagues"]]
            return user, league_data

        elif r.status_code == 401:
            raise KickbaseLoginException()
        else:
            raise KickbaseException()

    def _is_token_valid(self):
        if self.token is None or self.token_expire is None:
            return False
        return self.token_expire > datetime.now() - timedelta(days=1)

    def leagues(self) -> [LeagueData]:
        r =  self._do_get("/leagues/", True)

        if r.status_code == 200:
            j = r.json()
            return [LeagueData(d) for d in j["leagues"]]
        else:
            raise KickbaseException()

    def league_me(self, league: Union[str, LeagueData]) -> LeagueMe:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/me".format(league_id), True)

        if r.status_code == 200:
            return LeagueMe(r.json())
        else:
            raise KickbaseException()

    def league_info(self, league: Union[str, LeagueData]) -> LeagueInfo:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/info".format(league_id), True)

        if r.status_code == 200:
            return LeagueInfo(r.json())
        else:
            raise KickbaseException()

    def league_stats(self, league: Union[str, LeagueData]) -> LeagueStatsResponse:
        league_id = self._get_league_id(league)
        
        r = self._do_get("/leagues/{}/stats".format(league_id), True)

        if r.status_code == 200:
            return LeagueStatsResponse(r.json())
        else:
            raise KickbaseException()

    def league_users(self, league: Union[str, LeagueData]) -> [LeagueUserData]:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/users".format(league_id), True)

        if r.status_code == 200:
            return [LeagueUserData(d) for d in r.json()["users"]]
        else:
            raise KickbaseException()

    def league_user_stats(self, league: Union[str, LeagueData], user: Union[str, User]) -> LeagueUserStats:
        league_id = self._get_league_id(league)
        user_id = self._get_user_id(user)

        r = self._do_get("/leagues/{}/users/{}/stats".format(league_id, user_id), True)

        if r.status_code == 200:
            return LeagueUserStats(r.json())
        else:
            raise KickbaseException()

    def league_user_profile(self, league: Union[str, LeagueData], user: Union[str, User]) -> LeagueUserProfile:
        league_id = self._get_league_id(league)
        user_id = self._get_user_id(user)
        
        r = self._do_get("/leagues/{}/users/{}/profile".format(league_id, user_id), True)

        if r.status_code == 200:
            return LeagueUserProfile(r.json())
        else:
            raise KickbaseException()

    def league_feed(self, start_index: int, league: Union[str, LeagueData]) -> [FeedItem]:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/feed?start={}".format(league_id, start_index), True)

        if r.status_code == 200:
            return [FeedItem(v) for v in r.json()["items"]]
        else:
            raise KickbaseException()

    def post_feed_item(self, comment: str, league: Union[str, LeagueData]):
        league_id = self._get_league_id(league)

        data = {
            "comment": comment
        }

        r = self._do_post("/leagues/{}/feed".format(league_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def league_feed_comments(self, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]) -> [FeedItemComment]:
        league_id = self._get_league_id(league)
        feed_item_id = self._get_feed_item_id(feed_item)

        r = self._do_get("/leagues/{}/feed/{}/comments".format(league_id, feed_item_id), True)

        if r.status_code == 200:
            return [FeedItemComment(v) for v in r.json()["comments"]]
        else:
            raise KickbaseException()

    def post_feed_comment(self, comment: str, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]):
        league_id = self._get_league_id(league)
        feed_item_id = self._get_feed_item_id(feed_item)

        data = {
            "comment": comment
        }

        r = self._do_post("/leagues/{}/feed/{}/comments".format(league_id, feed_item_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def league_user_players(self, league: Union[str, LeagueData], user: Union[str, User], match_day: int = 0) -> [
        Player]:
        league_id = self._get_league_id(league)
        user_id = self._get_user_id(user)

        r = self._do_get("/leagues/{}/users/{}/players?matchDay={}".format(league_id, user_id, match_day), True)

        if r.status_code == 200:
            return [Player(v) for v in r.json()["players"]]
        else:
            raise KickbaseException()

    def search_player(self, search_query: str) -> [Player]:
        r = self._do_get("/competition/search?t={}".format(search_query))

        if r.status_code == 200:
            return [Player(v) for v in r.json()["p"]]
        else:
            raise KickbaseException()

    def team_players(self, team_id: str) -> [Player]:
        r = self._do_get("/competition/teams/{}/players".format(team_id))

        if r.status_code == 200:
            return [Player(v) for v in r.json()["p"]]
        else:
            raise KickbaseException()

    def top_25_players(self) -> [Player]:
        r = self._do_get("/competition/best?position=0")

        if r.status_code == 200:
            return [Player(v) for v in r.json()["p"]]
        else:
            raise KickbaseException()

    def line_up(self, league: Union[str, LeagueData]) -> LineUp:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/lineup".format(league_id), True)

        if r.status_code == 200:
            return LineUp(r.json())
        else:
            raise KickbaseException()

    def set_line_up(self, line_up: LineUp, league: Union[str, LeagueData]) -> LineUp:
        league_id = self._get_league_id(league)

        if not self._is_token_valid:
            self.login(self._username, self._password)

        data = {
            "type": line_up.type,
            "players": line_up.players
        }

        r = self._do_post("/leagues/{}/lineup".format(league_id), data, True)

        if r.status_code == 200:
            return LineUp(r.json())
        else:
            raise KickbaseException()

    def market(self, league: Union[str, LeagueData]) -> Market:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/market".format(league_id), True)

        if r.status_code == 200:
            return Market(r.json())
        else:
            raise KickbaseException()

    def add_to_market(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        data = {
            "playerId": player_id,
            "price": price
        }

        r = self._do_post("/leagues/{}/market".format(league_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def remove_from_market(self, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_delete("/leagues/{}/market/{}".format(league_id, player_id), True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def update_price(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        data = {
            "price": price
        }

        r = self._do_put("/leagues/{}/market/{}".format(league_id, player_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def make_offer(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        data = {
            "price": price
        }

        r = self._do_post("/leagues/{}/market/{}/offers".format(league_id, player_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def remove_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_delete("/leagues/{}/market/{}/offers/{}".format(league_id, player_id, offer_id), True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def accept_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_post("/leagues/{}/market/{}/offers/{}/accept".format(league_id, player_id, offer_id), {}, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def decline_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_post("/leagues/{}/market/{}/offers/{}/decline".format(league_id, player_id, offer_id), {}, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def _get_league_id(self, league: any):
        if isinstance(league, str):
            return league
        if isinstance(league, LeagueData):
            return league.id
        raise KickbaseException("league must be either type of str or LeagueData")

    def _get_player_id(self, player: any):
        if isinstance(player, str):
            return player
        if isinstance(player, Player):
            return player.id
        if isinstance(player, MarketPlayer):
            return player.id
        raise KickbaseException("player must be either type of str, Player or MarketPlayer")

    def _get_user_id(self, user: any):
        if isinstance(user, str):
            return user
        if isinstance(user, User):
            return user.id
        raise KickbaseException("user must be either type of str or User")
    
    def _get_feed_item_id(self, feed_item: any):
        if isinstance(feed_item, str):
            return feed_item
        if isinstance(feed_item, FeedItem):
            return feed_item.id
        raise KickbaseException("feed_item must be either type of str or FeedItem")

    def _url_for_endpoint(self, endpoint: str):
        return self.base_url + endpoint

    def _auth_cookie(self):
        return "kkstrauth={}".format(self.token)

    def _do_get(self, endpoint: str, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.get(self._url_for_endpoint(endpoint), headers=headers)

    def _do_post(self, endpoint: str, data: dict, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.post(self._url_for_endpoint(endpoint), data=json.dumps(data), headers=headers)

    def _do_put(self, endpoint: str, data: dict, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.put(self._url_for_endpoint(endpoint), data=json.dumps(data), headers=headers)

    def _do_delete(self, endpoint: str, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.delete(self._url_for_endpoint(endpoint), headers=headers)

Classes

class Kickbase (base_url: str = 'https://api.kickbase.com')
Expand source code
class Kickbase:
    base_url: str = None
    token: str = None
    token_expire: datetime = None

    _username: str = None
    _password: str = None

    def __init__(self, base_url: str = 'https://api.kickbase.com'):
        self.base_url = base_url

    def login(self, username: str, password: str) -> (User, [LeagueData]):
        data = {
            "email": username,
            "password": password,
            "ext": False
        }

        r = self._do_post("/user/login", data, False)

        if r.status_code == 200:
            j = r.json()
            self.token = j["token"]
            self.token_expire = parse_date(j["tokenExp"])

            self._username = username
            self._password = password

            user = User(j["user"])
            league_data = [LeagueData(d) for d in j["leagues"]]
            return user, league_data

        elif r.status_code == 401:
            raise KickbaseLoginException()
        else:
            raise KickbaseException()

    def _is_token_valid(self):
        if self.token is None or self.token_expire is None:
            return False
        return self.token_expire > datetime.now() - timedelta(days=1)

    def leagues(self) -> [LeagueData]:
        r =  self._do_get("/leagues/", True)

        if r.status_code == 200:
            j = r.json()
            return [LeagueData(d) for d in j["leagues"]]
        else:
            raise KickbaseException()

    def league_me(self, league: Union[str, LeagueData]) -> LeagueMe:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/me".format(league_id), True)

        if r.status_code == 200:
            return LeagueMe(r.json())
        else:
            raise KickbaseException()

    def league_info(self, league: Union[str, LeagueData]) -> LeagueInfo:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/info".format(league_id), True)

        if r.status_code == 200:
            return LeagueInfo(r.json())
        else:
            raise KickbaseException()

    def league_stats(self, league: Union[str, LeagueData]) -> LeagueStatsResponse:
        league_id = self._get_league_id(league)
        
        r = self._do_get("/leagues/{}/stats".format(league_id), True)

        if r.status_code == 200:
            return LeagueStatsResponse(r.json())
        else:
            raise KickbaseException()

    def league_users(self, league: Union[str, LeagueData]) -> [LeagueUserData]:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/users".format(league_id), True)

        if r.status_code == 200:
            return [LeagueUserData(d) for d in r.json()["users"]]
        else:
            raise KickbaseException()

    def league_user_stats(self, league: Union[str, LeagueData], user: Union[str, User]) -> LeagueUserStats:
        league_id = self._get_league_id(league)
        user_id = self._get_user_id(user)

        r = self._do_get("/leagues/{}/users/{}/stats".format(league_id, user_id), True)

        if r.status_code == 200:
            return LeagueUserStats(r.json())
        else:
            raise KickbaseException()

    def league_user_profile(self, league: Union[str, LeagueData], user: Union[str, User]) -> LeagueUserProfile:
        league_id = self._get_league_id(league)
        user_id = self._get_user_id(user)
        
        r = self._do_get("/leagues/{}/users/{}/profile".format(league_id, user_id), True)

        if r.status_code == 200:
            return LeagueUserProfile(r.json())
        else:
            raise KickbaseException()

    def league_feed(self, start_index: int, league: Union[str, LeagueData]) -> [FeedItem]:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/feed?start={}".format(league_id, start_index), True)

        if r.status_code == 200:
            return [FeedItem(v) for v in r.json()["items"]]
        else:
            raise KickbaseException()

    def post_feed_item(self, comment: str, league: Union[str, LeagueData]):
        league_id = self._get_league_id(league)

        data = {
            "comment": comment
        }

        r = self._do_post("/leagues/{}/feed".format(league_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def league_feed_comments(self, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]) -> [FeedItemComment]:
        league_id = self._get_league_id(league)
        feed_item_id = self._get_feed_item_id(feed_item)

        r = self._do_get("/leagues/{}/feed/{}/comments".format(league_id, feed_item_id), True)

        if r.status_code == 200:
            return [FeedItemComment(v) for v in r.json()["comments"]]
        else:
            raise KickbaseException()

    def post_feed_comment(self, comment: str, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]):
        league_id = self._get_league_id(league)
        feed_item_id = self._get_feed_item_id(feed_item)

        data = {
            "comment": comment
        }

        r = self._do_post("/leagues/{}/feed/{}/comments".format(league_id, feed_item_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def league_user_players(self, league: Union[str, LeagueData], user: Union[str, User], match_day: int = 0) -> [
        Player]:
        league_id = self._get_league_id(league)
        user_id = self._get_user_id(user)

        r = self._do_get("/leagues/{}/users/{}/players?matchDay={}".format(league_id, user_id, match_day), True)

        if r.status_code == 200:
            return [Player(v) for v in r.json()["players"]]
        else:
            raise KickbaseException()

    def search_player(self, search_query: str) -> [Player]:
        r = self._do_get("/competition/search?t={}".format(search_query))

        if r.status_code == 200:
            return [Player(v) for v in r.json()["p"]]
        else:
            raise KickbaseException()

    def team_players(self, team_id: str) -> [Player]:
        r = self._do_get("/competition/teams/{}/players".format(team_id))

        if r.status_code == 200:
            return [Player(v) for v in r.json()["p"]]
        else:
            raise KickbaseException()

    def top_25_players(self) -> [Player]:
        r = self._do_get("/competition/best?position=0")

        if r.status_code == 200:
            return [Player(v) for v in r.json()["p"]]
        else:
            raise KickbaseException()

    def line_up(self, league: Union[str, LeagueData]) -> LineUp:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/lineup".format(league_id), True)

        if r.status_code == 200:
            return LineUp(r.json())
        else:
            raise KickbaseException()

    def set_line_up(self, line_up: LineUp, league: Union[str, LeagueData]) -> LineUp:
        league_id = self._get_league_id(league)

        if not self._is_token_valid:
            self.login(self._username, self._password)

        data = {
            "type": line_up.type,
            "players": line_up.players
        }

        r = self._do_post("/leagues/{}/lineup".format(league_id), data, True)

        if r.status_code == 200:
            return LineUp(r.json())
        else:
            raise KickbaseException()

    def market(self, league: Union[str, LeagueData]) -> Market:
        league_id = self._get_league_id(league)

        r = self._do_get("/leagues/{}/market".format(league_id), True)

        if r.status_code == 200:
            return Market(r.json())
        else:
            raise KickbaseException()

    def add_to_market(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        data = {
            "playerId": player_id,
            "price": price
        }

        r = self._do_post("/leagues/{}/market".format(league_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def remove_from_market(self, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_delete("/leagues/{}/market/{}".format(league_id, player_id), True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def update_price(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        data = {
            "price": price
        }

        r = self._do_put("/leagues/{}/market/{}".format(league_id, player_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def make_offer(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        data = {
            "price": price
        }

        r = self._do_post("/leagues/{}/market/{}/offers".format(league_id, player_id), data, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def remove_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_delete("/leagues/{}/market/{}/offers/{}".format(league_id, player_id, offer_id), True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def accept_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_post("/leagues/{}/market/{}/offers/{}/accept".format(league_id, player_id, offer_id), {}, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def decline_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
        player_id = self._get_player_id(player)
        league_id = self._get_league_id(league)

        r = self._do_post("/leagues/{}/market/{}/offers/{}/decline".format(league_id, player_id, offer_id), {}, True)

        if r.status_code == 200:
            return
        else:
            raise KickbaseException()

    def _get_league_id(self, league: any):
        if isinstance(league, str):
            return league
        if isinstance(league, LeagueData):
            return league.id
        raise KickbaseException("league must be either type of str or LeagueData")

    def _get_player_id(self, player: any):
        if isinstance(player, str):
            return player
        if isinstance(player, Player):
            return player.id
        if isinstance(player, MarketPlayer):
            return player.id
        raise KickbaseException("player must be either type of str, Player or MarketPlayer")

    def _get_user_id(self, user: any):
        if isinstance(user, str):
            return user
        if isinstance(user, User):
            return user.id
        raise KickbaseException("user must be either type of str or User")
    
    def _get_feed_item_id(self, feed_item: any):
        if isinstance(feed_item, str):
            return feed_item
        if isinstance(feed_item, FeedItem):
            return feed_item.id
        raise KickbaseException("feed_item must be either type of str or FeedItem")

    def _url_for_endpoint(self, endpoint: str):
        return self.base_url + endpoint

    def _auth_cookie(self):
        return "kkstrauth={}".format(self.token)

    def _do_get(self, endpoint: str, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.get(self._url_for_endpoint(endpoint), headers=headers)

    def _do_post(self, endpoint: str, data: dict, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.post(self._url_for_endpoint(endpoint), data=json.dumps(data), headers=headers)

    def _do_put(self, endpoint: str, data: dict, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.put(self._url_for_endpoint(endpoint), data=json.dumps(data), headers=headers)

    def _do_delete(self, endpoint: str, authenticated: bool = False):
        if not self._is_token_valid:
            self.login(self._username, self._password)

        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json"
        }
        if authenticated:
            headers["Cookie"] = self._auth_cookie()

        return requests.delete(self._url_for_endpoint(endpoint), headers=headers)

Class variables

var base_url : str
var token : str
var token_expire : datetime.datetime

Methods

def accept_offer(self, offer_id: str, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def accept_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    r = self._do_post("/leagues/{}/market/{}/offers/{}/accept".format(league_id, player_id, offer_id), {}, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def add_to_market(self, price: int, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def add_to_market(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    data = {
        "playerId": player_id,
        "price": price
    }

    r = self._do_post("/leagues/{}/market".format(league_id), data, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def decline_offer(self, offer_id: str, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def decline_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    r = self._do_post("/leagues/{}/market/{}/offers/{}/decline".format(league_id, player_id, offer_id), {}, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def league_feed(self, start_index: int, league: Union[str, LeagueData]) ‑> [FeedItem'>]
Expand source code
def league_feed(self, start_index: int, league: Union[str, LeagueData]) -> [FeedItem]:
    league_id = self._get_league_id(league)

    r = self._do_get("/leagues/{}/feed?start={}".format(league_id, start_index), True)

    if r.status_code == 200:
        return [FeedItem(v) for v in r.json()["items"]]
    else:
        raise KickbaseException()
def league_feed_comments(self, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]) ‑> [FeedItemComment'>]
Expand source code
def league_feed_comments(self, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]) -> [FeedItemComment]:
    league_id = self._get_league_id(league)
    feed_item_id = self._get_feed_item_id(feed_item)

    r = self._do_get("/leagues/{}/feed/{}/comments".format(league_id, feed_item_id), True)

    if r.status_code == 200:
        return [FeedItemComment(v) for v in r.json()["comments"]]
    else:
        raise KickbaseException()
def league_info(self, league: Union[str, LeagueData]) ‑> LeagueInfo
Expand source code
def league_info(self, league: Union[str, LeagueData]) -> LeagueInfo:
    league_id = self._get_league_id(league)

    r = self._do_get("/leagues/{}/info".format(league_id), True)

    if r.status_code == 200:
        return LeagueInfo(r.json())
    else:
        raise KickbaseException()
def league_me(self, league: Union[str, LeagueData]) ‑> LeagueMe
Expand source code
def league_me(self, league: Union[str, LeagueData]) -> LeagueMe:
    league_id = self._get_league_id(league)

    r = self._do_get("/leagues/{}/me".format(league_id), True)

    if r.status_code == 200:
        return LeagueMe(r.json())
    else:
        raise KickbaseException()
def league_stats(self, league: Union[str, LeagueData]) ‑> LeagueStatsResponse
Expand source code
def league_stats(self, league: Union[str, LeagueData]) -> LeagueStatsResponse:
    league_id = self._get_league_id(league)
    
    r = self._do_get("/leagues/{}/stats".format(league_id), True)

    if r.status_code == 200:
        return LeagueStatsResponse(r.json())
    else:
        raise KickbaseException()
def league_user_players(self, league: Union[str, LeagueData], user: Union[str, User], match_day: int = 0) ‑> [Player'>]
Expand source code
def league_user_players(self, league: Union[str, LeagueData], user: Union[str, User], match_day: int = 0) -> [
    Player]:
    league_id = self._get_league_id(league)
    user_id = self._get_user_id(user)

    r = self._do_get("/leagues/{}/users/{}/players?matchDay={}".format(league_id, user_id, match_day), True)

    if r.status_code == 200:
        return [Player(v) for v in r.json()["players"]]
    else:
        raise KickbaseException()
def league_user_profile(self, league: Union[str, LeagueData], user: Union[str, User]) ‑> LeagueUserProfile
Expand source code
def league_user_profile(self, league: Union[str, LeagueData], user: Union[str, User]) -> LeagueUserProfile:
    league_id = self._get_league_id(league)
    user_id = self._get_user_id(user)
    
    r = self._do_get("/leagues/{}/users/{}/profile".format(league_id, user_id), True)

    if r.status_code == 200:
        return LeagueUserProfile(r.json())
    else:
        raise KickbaseException()
def league_user_stats(self, league: Union[str, LeagueData], user: Union[str, User]) ‑> LeagueUserStats
Expand source code
def league_user_stats(self, league: Union[str, LeagueData], user: Union[str, User]) -> LeagueUserStats:
    league_id = self._get_league_id(league)
    user_id = self._get_user_id(user)

    r = self._do_get("/leagues/{}/users/{}/stats".format(league_id, user_id), True)

    if r.status_code == 200:
        return LeagueUserStats(r.json())
    else:
        raise KickbaseException()
def league_users(self, league: Union[str, LeagueData]) ‑> [LeagueUserData'>]
Expand source code
def league_users(self, league: Union[str, LeagueData]) -> [LeagueUserData]:
    league_id = self._get_league_id(league)

    r = self._do_get("/leagues/{}/users".format(league_id), True)

    if r.status_code == 200:
        return [LeagueUserData(d) for d in r.json()["users"]]
    else:
        raise KickbaseException()
def leagues(self) ‑> [LeagueData'>]
Expand source code
def leagues(self) -> [LeagueData]:
    r =  self._do_get("/leagues/", True)

    if r.status_code == 200:
        j = r.json()
        return [LeagueData(d) for d in j["leagues"]]
    else:
        raise KickbaseException()
def line_up(self, league: Union[str, LeagueData]) ‑> LineUp
Expand source code
def line_up(self, league: Union[str, LeagueData]) -> LineUp:
    league_id = self._get_league_id(league)

    r = self._do_get("/leagues/{}/lineup".format(league_id), True)

    if r.status_code == 200:
        return LineUp(r.json())
    else:
        raise KickbaseException()
def login(self, username: str, password: str) ‑> (User'>, [LeagueData'>])
Expand source code
def login(self, username: str, password: str) -> (User, [LeagueData]):
    data = {
        "email": username,
        "password": password,
        "ext": False
    }

    r = self._do_post("/user/login", data, False)

    if r.status_code == 200:
        j = r.json()
        self.token = j["token"]
        self.token_expire = parse_date(j["tokenExp"])

        self._username = username
        self._password = password

        user = User(j["user"])
        league_data = [LeagueData(d) for d in j["leagues"]]
        return user, league_data

    elif r.status_code == 401:
        raise KickbaseLoginException()
    else:
        raise KickbaseException()
def make_offer(self, price: int, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def make_offer(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    data = {
        "price": price
    }

    r = self._do_post("/leagues/{}/market/{}/offers".format(league_id, player_id), data, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def market(self, league: Union[str, LeagueData]) ‑> Market
Expand source code
def market(self, league: Union[str, LeagueData]) -> Market:
    league_id = self._get_league_id(league)

    r = self._do_get("/leagues/{}/market".format(league_id), True)

    if r.status_code == 200:
        return Market(r.json())
    else:
        raise KickbaseException()
def post_feed_comment(self, comment: str, league: Union[str, LeagueData], feed_item: Union[str, FeedItem])
Expand source code
def post_feed_comment(self, comment: str, league: Union[str, LeagueData], feed_item: Union[str, FeedItem]):
    league_id = self._get_league_id(league)
    feed_item_id = self._get_feed_item_id(feed_item)

    data = {
        "comment": comment
    }

    r = self._do_post("/leagues/{}/feed/{}/comments".format(league_id, feed_item_id), data, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def post_feed_item(self, comment: str, league: Union[str, LeagueData])
Expand source code
def post_feed_item(self, comment: str, league: Union[str, LeagueData]):
    league_id = self._get_league_id(league)

    data = {
        "comment": comment
    }

    r = self._do_post("/leagues/{}/feed".format(league_id), data, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def remove_from_market(self, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def remove_from_market(self, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    r = self._do_delete("/leagues/{}/market/{}".format(league_id, player_id), True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def remove_offer(self, offer_id: str, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def remove_offer(self, offer_id: str, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    r = self._do_delete("/leagues/{}/market/{}/offers/{}".format(league_id, player_id, offer_id), True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()
def search_player(self, search_query: str) ‑> [Player'>]
Expand source code
def search_player(self, search_query: str) -> [Player]:
    r = self._do_get("/competition/search?t={}".format(search_query))

    if r.status_code == 200:
        return [Player(v) for v in r.json()["p"]]
    else:
        raise KickbaseException()
def set_line_up(self, line_up: LineUp, league: Union[str, LeagueData]) ‑> LineUp
Expand source code
def set_line_up(self, line_up: LineUp, league: Union[str, LeagueData]) -> LineUp:
    league_id = self._get_league_id(league)

    if not self._is_token_valid:
        self.login(self._username, self._password)

    data = {
        "type": line_up.type,
        "players": line_up.players
    }

    r = self._do_post("/leagues/{}/lineup".format(league_id), data, True)

    if r.status_code == 200:
        return LineUp(r.json())
    else:
        raise KickbaseException()
def team_players(self, team_id: str) ‑> [Player'>]
Expand source code
def team_players(self, team_id: str) -> [Player]:
    r = self._do_get("/competition/teams/{}/players".format(team_id))

    if r.status_code == 200:
        return [Player(v) for v in r.json()["p"]]
    else:
        raise KickbaseException()
def top_25_players(self) ‑> [Player'>]
Expand source code
def top_25_players(self) -> [Player]:
    r = self._do_get("/competition/best?position=0")

    if r.status_code == 200:
        return [Player(v) for v in r.json()["p"]]
    else:
        raise KickbaseException()
def update_price(self, price: int, player: Union[str, PlayerMarketPlayer], league: Union[str, LeagueData])
Expand source code
def update_price(self, price: int, player: Union[str, Player, MarketPlayer], league: Union[str, LeagueData]):
    player_id = self._get_player_id(player)
    league_id = self._get_league_id(league)

    data = {
        "price": price
    }

    r = self._do_put("/leagues/{}/market/{}".format(league_id, player_id), data, True)

    if r.status_code == 200:
        return
    else:
        raise KickbaseException()