|
5 | 5 | """ |
6 | 6 | from typing import List |
7 | 7 |
|
8 | | -from xbox.webapi.api.provider.baseprovider import BaseProvider |
| 8 | +from xbox.webapi.api.provider.ratelimitedprovider import RateLimitedProvider |
9 | 9 | from xbox.webapi.api.provider.profile.models import ProfileResponse, ProfileSettings |
10 | 10 |
|
11 | 11 |
|
12 | | -class ProfileProvider(BaseProvider): |
| 12 | +class ProfileProvider(RateLimitedProvider): |
13 | 13 | PROFILE_URL = "https://profile.xboxlive.com" |
14 | 14 | HEADERS_PROFILE = {"x-xbl-contract-version": "3"} |
15 | 15 | SEPARATOR = "," |
16 | 16 |
|
| 17 | + RATE_LIMITS = {"burst": 10, "sustain": 30} |
| 18 | + |
17 | 19 | async def get_profiles(self, xuid_list: List[str], **kwargs) -> ProfileResponse: |
18 | 20 | """ |
19 | 21 | Get profile info for list of xuids |
@@ -45,7 +47,11 @@ async def get_profiles(self, xuid_list: List[str], **kwargs) -> ProfileResponse: |
45 | 47 | } |
46 | 48 | url = self.PROFILE_URL + "/users/batch/profile/settings" |
47 | 49 | resp = await self.client.session.post( |
48 | | - url, json=post_data, headers=self.HEADERS_PROFILE, **kwargs |
| 50 | + url, |
| 51 | + json=post_data, |
| 52 | + headers=self.HEADERS_PROFILE, |
| 53 | + rate_limits=self.rate_limit_read, |
| 54 | + **kwargs, |
49 | 55 | ) |
50 | 56 | resp.raise_for_status() |
51 | 57 | return ProfileResponse(**resp.json()) |
@@ -83,7 +89,11 @@ async def get_profile_by_xuid(self, target_xuid: str, **kwargs) -> ProfileRespon |
83 | 89 | ) |
84 | 90 | } |
85 | 91 | resp = await self.client.session.get( |
86 | | - url, params=params, headers=self.HEADERS_PROFILE, **kwargs |
| 92 | + url, |
| 93 | + params=params, |
| 94 | + headers=self.HEADERS_PROFILE, |
| 95 | + rate_limits=self.rate_limit_read, |
| 96 | + **kwargs, |
87 | 97 | ) |
88 | 98 | resp.raise_for_status() |
89 | 99 | return ProfileResponse(**resp.json()) |
@@ -121,7 +131,11 @@ async def get_profile_by_gamertag(self, gamertag: str, **kwargs) -> ProfileRespo |
121 | 131 | ) |
122 | 132 | } |
123 | 133 | resp = await self.client.session.get( |
124 | | - url, params=params, headers=self.HEADERS_PROFILE, **kwargs |
| 134 | + url, |
| 135 | + params=params, |
| 136 | + headers=self.HEADERS_PROFILE, |
| 137 | + rate_limits=self.rate_limit_read, |
| 138 | + **kwargs, |
125 | 139 | ) |
126 | 140 | resp.raise_for_status() |
127 | 141 | return ProfileResponse(**resp.json()) |
0 commit comments