99 AchievementResponse ,
1010 RecentProgressResponse ,
1111)
12- from xbox .webapi .api .provider .baseprovider import BaseProvider
12+ from xbox .webapi .api .provider .ratelimitedprovider import RateLimitedProvider
1313
1414
15- class AchievementsProvider (BaseProvider ):
15+ class AchievementsProvider (RateLimitedProvider ):
1616 ACHIEVEMENTS_URL = "https://achievements.xboxlive.com"
1717 HEADERS_GAME_360_PROGRESS = {"x-xbl-contract-version" : "1" }
1818 HEADERS_GAME_PROGRESS = {"x-xbl-contract-version" : "2" }
1919
20+ RATE_LIMITS = {"burst" : 100 , "sustain" : 300 }
21+
2022 async def get_achievements_detail_item (
2123 self , xuid , service_config_id , achievement_id , ** kwargs
2224 ) -> AchievementResponse :
@@ -33,7 +35,10 @@ async def get_achievements_detail_item(
3335 """
3436 url = f"{ self .ACHIEVEMENTS_URL } /users/xuid({ xuid } )/achievements/{ service_config_id } /{ achievement_id } "
3537 resp = await self .client .session .get (
36- url , headers = self .HEADERS_GAME_PROGRESS , ** kwargs
38+ url ,
39+ headers = self .HEADERS_GAME_PROGRESS ,
40+ rate_limits = self .rate_limit_read ,
41+ ** kwargs ,
3742 )
3843 resp .raise_for_status ()
3944 return AchievementResponse (** resp .json ())
@@ -54,7 +59,11 @@ async def get_achievements_xbox360_all(
5459 url = f"{ self .ACHIEVEMENTS_URL } /users/xuid({ xuid } )/titleachievements?"
5560 params = {"titleId" : title_id }
5661 resp = await self .client .session .get (
57- url , params = params , headers = self .HEADERS_GAME_360_PROGRESS , ** kwargs
62+ url ,
63+ params = params ,
64+ headers = self .HEADERS_GAME_360_PROGRESS ,
65+ rate_limits = self .rate_limit_read ,
66+ ** kwargs ,
5867 )
5968 resp .raise_for_status ()
6069 return Achievement360Response (** resp .json ())
@@ -75,7 +84,11 @@ async def get_achievements_xbox360_earned(
7584 url = f"{ self .ACHIEVEMENTS_URL } /users/xuid({ xuid } )/achievements?"
7685 params = {"titleId" : title_id }
7786 resp = await self .client .session .get (
78- url , params = params , headers = self .HEADERS_GAME_360_PROGRESS , ** kwargs
87+ url ,
88+ params = params ,
89+ headers = self .HEADERS_GAME_360_PROGRESS ,
90+ rate_limits = self .rate_limit_read ,
91+ ** kwargs ,
7992 )
8093 resp .raise_for_status ()
8194 return Achievement360Response (** resp .json ())
@@ -94,7 +107,10 @@ async def get_achievements_xbox360_recent_progress_and_info(
94107 """
95108 url = f"{ self .ACHIEVEMENTS_URL } /users/xuid({ xuid } )/history/titles"
96109 resp = await self .client .session .get (
97- url , headers = self .HEADERS_GAME_360_PROGRESS , ** kwargs
110+ url ,
111+ headers = self .HEADERS_GAME_360_PROGRESS ,
112+ rate_limits = self .rate_limit_read ,
113+ ** kwargs ,
98114 )
99115 resp .raise_for_status ()
100116 return Achievement360ProgressResponse (** resp .json ())
@@ -115,7 +131,11 @@ async def get_achievements_xboxone_gameprogress(
115131 url = f"{ self .ACHIEVEMENTS_URL } /users/xuid({ xuid } )/achievements?"
116132 params = {"titleId" : title_id }
117133 resp = await self .client .session .get (
118- url , params = params , headers = self .HEADERS_GAME_PROGRESS , ** kwargs
134+ url ,
135+ params = params ,
136+ headers = self .HEADERS_GAME_PROGRESS ,
137+ rate_limits = self .rate_limit_read ,
138+ ** kwargs ,
119139 )
120140 resp .raise_for_status ()
121141 return AchievementResponse (** resp .json ())
@@ -134,7 +154,10 @@ async def get_achievements_xboxone_recent_progress_and_info(
134154 """
135155 url = f"{ self .ACHIEVEMENTS_URL } /users/xuid({ xuid } )/history/titles"
136156 resp = await self .client .session .get (
137- url , headers = self .HEADERS_GAME_PROGRESS , ** kwargs
157+ url ,
158+ headers = self .HEADERS_GAME_PROGRESS ,
159+ rate_limits = self .rate_limit_read ,
160+ ** kwargs ,
138161 )
139162 resp .raise_for_status ()
140163 return RecentProgressResponse (** resp .json ())
0 commit comments