1
- import requests
2
1
import urllib .parse
3
2
3
+ from .caller import WebCaller
4
+
4
5
from .objects import ActDTO
5
6
from .objects import AccountDTO
6
7
from .objects import ContentItemDTO
10
11
from .objects import ContentList
11
12
12
13
from .values import SAFES
13
- from .values import ROUTES
14
14
from .values import LOCALE
15
- from .values import LOCALES
16
- from .values import REGIONS
17
- from .values import HEADERS
18
- from .values import WEB_API
19
- from .values import ENDPOINTS
20
- from .values import CLIENT_API
21
15
22
16
23
17
def update (stale : dict , latest : dict ) -> dict :
@@ -31,16 +25,9 @@ class Client(object):
31
25
def __init__ (self , key , locale = LOCALE , region = "na" , route = "americas" , reload = True ):
32
26
self .key = key
33
27
self .route = route
28
+ self .locale = locale
34
29
self .region = region
35
- self .fetch = requests .get
36
-
37
- if locale not in LOCALES :
38
- raise ValueError (
39
- f"The given locale '{ locale } ' is invalid. See "
40
- + "`valorant.values.LOCALES` for a list of valid locales."
41
- )
42
- else :
43
- self .locale = locale
30
+ self .handle = WebCaller (key , locale , region , route )
44
31
45
32
if reload :
46
33
self .reload ()
@@ -58,79 +45,30 @@ def set_attributes(self, attrs) -> None:
58
45
59
46
def reload (self ) -> None :
60
47
"""Reload the current cached response for the VAL-CONTENT endpoints."""
61
-
62
- url = self .build_url (code = self .region , endpoint = "content" )
63
- heads = self .build_header ({"X-Riot-Token" : self .key })
64
- params = {"locale" : self .locale }
65
-
66
- r = self .fetch (url , params = params , headers = heads )
67
- r .raise_for_status ()
68
-
69
- self .set_attributes (r .json ())
48
+ r = self .handle .call ("GET" , "content" )
49
+ self .set_attributes (r )
70
50
71
51
return
72
52
73
- def build_header (self , mixin : dict , base : str = "web" ) -> dict :
74
- """Create a header dictionary from the default request headers."""
75
-
76
- c = HEADERS [base ].copy ()
77
-
78
- for n , v in mixin .items ():
79
- c [n ] = v
80
-
81
- return c
82
-
83
- def build_url (
84
- self , code : str = "na" , endpoint : str = "content" , base : str = "web"
85
- ) -> str :
86
- """Create a request URL with the given code and endpoint."""
87
-
88
- if code not in REGIONS and code not in ROUTES :
89
- raise ValueError (f"Invalid Route Code: '{ code } '" )
90
- else :
91
- url = WEB_API if base == "web" else CLIENT_API
92
- end = ENDPOINTS [base ][endpoint ]
93
- url = url .format (code = code ) + end
94
-
95
- return url
96
-
97
53
def get_user_by_puuid (self , puuid : str ) -> AccountDTO :
98
- """Get a Riot account by the given puuid."""
99
-
100
- heads = self .build_header ({"X-Riot-Token" : self .key })
101
-
102
- url = self .build_url (code = self .route , endpoint = "puuid" )
103
- url = url .format (puuid = puuid )
104
-
105
- r = self .fetch (url , headers = heads )
106
- r .raise_for_status ()
54
+ """Get a Riot account by the given PUUID."""
55
+ r = self .handle .call ("GET" , "puuid" , puuid = puuid )
107
56
108
- return AccountDTO (r . json () )
57
+ return AccountDTO (r )
109
58
110
- def get_user_by_name (self , name : str , delim : str = "#" ) -> AccountDTO :
111
- """Get a Riot account by a given name split by a delimiter ."""
112
- heads = self . build_header ({ "X-Riot-Token" : self . key } )
113
- values = name . split ( delim )
114
- values = [ urllib . parse . quote ( v , safe = SAFES ) for v in values ]
59
+ def get_user_by_name (self , name : str ) -> AccountDTO :
60
+ """Get a Riot account by a given name and tag ."""
61
+ vals = name . split ( "#" )
62
+ vals = [ urllib . parse . quote ( v , safe = SAFES ) for v in vals ]
63
+ r = self . handle . call ( "GET" , "game-name" , route = True , name = vals [ 0 ], tag = vals [ 1 ])
115
64
116
- url = self .build_url (code = self .route , endpoint = "game-name" )
117
- url = url .format (name = values [0 ], tag = values [1 ])
118
-
119
- r = self .fetch (url , headers = heads )
120
- r .raise_for_status ()
121
-
122
- return AccountDTO (r .json ())
65
+ return AccountDTO (r )
123
66
124
67
def get_platform_status (self ) -> PlatformDataDTO :
125
68
"""Get the current platform status for Valorant."""
126
- url = self .build_url (code = self .region , endpoint = "status" )
127
- heads = self .build_header ({"X-Riot-Token" : self .key })
128
- params = {"locale" : self .locale }
129
-
130
- r = self .fetch (url , headers = heads , params = params )
131
- r .raise_for_status ()
69
+ r = self .handle .call ("GET" , "status" )
132
70
133
- return PlatformDataDTO (r . json () )
71
+ return PlatformDataDTO (r )
134
72
135
73
def get_acts (self ) -> ContentList :
136
74
"""Get a ContentList of Acts from Valorant."""
@@ -179,17 +117,11 @@ def get_equips(self) -> ContentList:
179
117
def get_leaderboard (self , size : int = 100 , page : int = 0 , actID : str = "" ):
180
118
"""Get the top user's in your client's region during a given Act."""
181
119
actID = self .get_current_act ().id if not actID else actID
120
+ params = {"size" : size , "startIndex" : size * page }
182
121
183
- url = self .build_url (self .region , endpoint = "leaderboard" )
184
- url = url .format (actID = actID )
185
-
186
- heads = self .build_header ({"X-Riot-Token" : self .key })
187
- params = {"locale" : self .locale , "size" : size , "startIndex" : size * page }
188
-
189
- r = self .fetch (url , headers = heads , params = params )
190
- r .raise_for_status ()
122
+ r = self .handle .call ("GET" , "leaderboard" , params = params , actID = actID )
191
123
192
- return LeaderboardDTO (r . json () )
124
+ return LeaderboardDTO (r )
193
125
194
126
def get_maps (self ) -> ContentList :
195
127
"""Get a ContentList of Maps from Valorant."""
0 commit comments