Repository navigation
Expand file tree
/
Copy pathbase.py
More file actions
92 lines (71 loc) · 2.56 KB
/
Copy pathbase.py
File metadata and controls
92 lines (71 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from . import exceptions
from .clients import (
APIClient,
TelemetryClient,
)
from .domain.base import Shard
from .domain.telemetry.base import Telemetry
from .exceptions import RequiredFilterError
from .querysets import QuerySet
def shardful_endpoint(f):
def wrapper(self, *args, **kwargs):
return QuerySet(self.api_client, self.shard_url.join(f.__name__))
return wrapper
def endpoint(f):
def wrapper(self, *args, **kwargs):
return QuerySet(
self.api_client, self.api_client.url.copy().join(f.__name__))
return wrapper
class PUBG:
def __init__(self, api_key, shard=None):
self.shard = shard
self.api_client = APIClient(api_key)
self.telemetry_client = TelemetryClient()
@property
def shard(self):
return self._shard
@shard.setter
def shard(self, value):
if not isinstance(value, Shard):
raise exceptions.InvalidShardError('Invalid Shard')
self._shard = value
@property
def shard_url(self):
return self.api_client.url.copy().join(
'shards/{}/'.format(self.shard.value))
@shardful_endpoint
def matches(self):
pass
@shardful_endpoint
def players(self):
pass
@shardful_endpoint
def samples(self):
pass
@endpoint
def tournaments(self):
pass
def seasons(self, season_id=None, **kwargs):
# TODO: probably redesign this?
if season_id is None:
return QuerySet(self.api_client, self.shard_url.join('seasons'))
game_mode = kwargs.pop('game_mode', None)
player_id = kwargs.pop('player_id', None)
if game_mode is None and player_id is None:
raise RequiredFilterError(
'game_mode or player_id is required for fetching seasons.')
if game_mode is not None:
return QuerySet(self.api_client, self.shard_url.join(
'seasons/{}/gameMode/{}/players'.format(season_id, game_mode)))
if player_id is not None:
return QuerySet(self.api_client, self.shard_url.join(
'players/{}/seasons/{}'.format(player_id, season_id)))
def leaderboards(self, game_mode):
return QuerySet(self.api_client, self.shard_url.join(
'leaderboards/{}'.format(game_mode)))
def weapon_mastery(self, player_id):
return QuerySet(self.api_client, self.shard_url.join(
'players/{}/weapon_mastery'.format(player_id)))
def telemetry(self, url):
data = self.telemetry_client.request(url)
return Telemetry(data, url)