Passed
Push — master ( edd58c...27f8f6 )
by manny
04:39
created

ladder_client.ladder_get()   A

Complexity

Conditions 5

Size

Total Lines 14
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 12
nop 2
dl 0
loc 14
rs 9.3333
c 0
b 0
f 0
1
from typing import Any
2
3
import requests
4
5
from models.ladder import (Standings, flags_from_dict, racer_results_from_dict,
6
                           racers_from_dict, schedule_from_dict,
7
                           seasons_from_dict, standings_from_dict, from_bool)
8
9
10
def script_description():
11
    return (
12
        "<p>You've loaded the incorrect script.<br><br>Please remove this file"
13
        "and add 'racetime_obs.py' instead</p>"
14
    )
15
16
17
base_url = "https://alttprladder.com/api/v1/PublicApi/"
18
19
20
def ladder_get(uri: str, payload={}):
21
    headers = {
22
        'User-Agent': "oro-obs-bot_alpha"
23
    }
24
    try:
25
        with requests.get(uri, payload, headers=headers) as res:
26
            if res.status_code == 200:
27
                try:
28
                    return res.json()
29
                except ValueError:
30
                    # GetCurrentRaceTime isn't returned in json
31
                    return res.text
32
    except Any:
33
        return None
34
35
36
def get_active_racers():
37
    return racers_from_dict(ladder_get(f'{base_url}GetActiveRacers'))
38
39
40
def get_flags():
41
    return flags_from_dict(ladder_get(f'{base_url}GetFlags'))
42
43
44
def get_seasons():
45
    return seasons_from_dict(ladder_get(f'{base_url}GetSeasons'))
46
47
48
def get_standings(season_id=0, flag_id=0):
49
    payload = {"season_id": season_id, "flag_id": flag_id}
50
    return standings_from_dict(ladder_get(f'{base_url}GetStandings', payload))
51
52
53
def get_racer_standings(racer_id, season_id=0, flag_id=0):
54
    payload = {
55
        "racer_id": racer_id,
56
        "season_id": season_id,
57
        "flag_id": flag_id
58
    }
59
    return (Standings.from_dict(
60
        ladder_get(f'{base_url}GetRacerStandings', payload)
61
        ))
62
63
64
def get_racer_history(racer_id):
65
    payload = {"racer_id": racer_id}
66
    return racer_results_from_dict(
67
        ladder_get(f'{base_url}GetRacerHistory', payload))
68
69
70
def get_schedule(season_id):
71
    payload = {"season_id": season_id}
72
    return schedule_from_dict(ladder_get(f'{base_url}GetSchedule', payload))
73
74
75
def get_current_race_time():
76
    return ladder_get(f'{base_url}GetCurrentRaceTime')
77
78
79
def is_currently_racing(racer_id):
80
    payload = {
81
        "racer_id": racer_id
82
    }
83
    return from_bool(ladder_get(f'{base_url}IsCurrentlyRacing', payload))
84