1212
1313import aiohttp
1414from aiohttp import ContentTypeError , FormData
15- from pyrate_limiter import BucketFullException , Duration , Limiter , Rate
15+ from pyrate_limiter import Duration , Limiter , Rate
1616
1717from roborock import HomeDataSchedule
1818from roborock .data import HomeData , HomeDataRoom , HomeDataScene , ProductResponse , RRiot , UserData
@@ -62,7 +62,7 @@ class RoborockApiClient:
6262 Rate (40 , Duration .DAY ),
6363 ]
6464
65- _login_limiter = Limiter (_LOGIN_RATES , max_delay = 1000 )
65+ _login_limiter = Limiter (_LOGIN_RATES )
6666 _home_data_limiter = Limiter (_HOME_DATA_RATES )
6767
6868 def __init__ (
@@ -204,11 +204,8 @@ async def add_device(self, user_data: UserData, s: str, t: str) -> dict:
204204 return add_device_response ["result" ]
205205
206206 async def request_code (self ) -> None :
207- try :
208- await self ._login_limiter .try_acquire_async ("login" )
209- except BucketFullException as ex :
210- _LOGGER .info (ex .meta_info )
211- raise RoborockRateLimit ("Reached maximum requests for login. Please try again later." ) from ex
207+ if not await self ._login_limiter .try_acquire_async ("login" , blocking = True , timeout = 1 ):
208+ raise RoborockRateLimit ("Reached maximum requests for login. Please try again later." )
212209 base_url = await self .base_url
213210 header_clientid = self ._get_header_client_id ()
214211 code_request = PreparedRequest (base_url , self .session , {"header_clientid" : header_clientid })
@@ -238,11 +235,8 @@ async def request_code_v4(self) -> None:
238235 if await self .country_code is None or await self .country is None :
239236 _LOGGER .info ("No country code or country found, trying old version of request code." )
240237 return await self .request_code ()
241- try :
242- await self ._login_limiter .try_acquire_async ("login" )
243- except BucketFullException as ex :
244- _LOGGER .info (ex .meta_info )
245- raise RoborockRateLimit ("Reached maximum requests for login. Please try again later." ) from ex
238+ if not await self ._login_limiter .try_acquire_async ("login" , blocking = True , timeout = 1 ):
239+ raise RoborockRateLimit ("Reached maximum requests for login. Please try again later." )
246240 base_url = await self .base_url
247241 header_clientid = self ._get_header_client_id ()
248242 code_request = PreparedRequest (
@@ -370,11 +364,8 @@ async def code_login_v4(
370364 return UserData .from_dict (user_data )
371365
372366 async def pass_login (self , password : str ) -> UserData :
373- try :
374- await self ._login_limiter .try_acquire_async ("login" )
375- except BucketFullException as ex :
376- _LOGGER .info (ex .meta_info )
377- raise RoborockRateLimit ("Reached maximum requests for login. Please try again later." ) from ex
367+ if not await self ._login_limiter .try_acquire_async ("login" , blocking = True , timeout = 1 ):
368+ raise RoborockRateLimit ("Reached maximum requests for login. Please try again later." )
378369 base_url = await self .base_url
379370 header_clientid = self ._get_header_client_id ()
380371
@@ -468,11 +459,8 @@ async def _get_home_id(self, user_data: UserData):
468459 return home_id_response ["data" ]["rrHomeId" ]
469460
470461 async def get_home_data (self , user_data : UserData ) -> HomeData :
471- try :
472- self ._home_data_limiter .try_acquire ("home_data" )
473- except BucketFullException as ex :
474- _LOGGER .info (ex .meta_info )
475- raise RoborockRateLimit ("Reached maximum requests for home data. Please try again later." ) from ex
462+ if not self ._home_data_limiter .try_acquire ("home_data" , blocking = False ):
463+ raise RoborockRateLimit ("Reached maximum requests for home data. Please try again later." )
476464 rriot = user_data .rriot
477465 if rriot is None :
478466 raise RoborockException ("rriot is none" )
@@ -497,11 +485,8 @@ async def get_home_data(self, user_data: UserData) -> HomeData:
497485
498486 async def get_home_data_v2 (self , user_data : UserData ) -> HomeData :
499487 """This is the same as get_home_data, but uses a different endpoint and includes non-robotic vacuums."""
500- try :
501- self ._home_data_limiter .try_acquire ("home_data" )
502- except BucketFullException as ex :
503- _LOGGER .info (ex .meta_info )
504- raise RoborockRateLimit ("Reached maximum requests for home data. Please try again later." ) from ex
488+ if not self ._home_data_limiter .try_acquire ("home_data" , blocking = False ):
489+ raise RoborockRateLimit ("Reached maximum requests for home data. Please try again later." )
505490 rriot = user_data .rriot
506491 if rriot is None :
507492 raise RoborockException ("rriot is none" )
@@ -526,11 +511,8 @@ async def get_home_data_v2(self, user_data: UserData) -> HomeData:
526511
527512 async def get_home_data_v3 (self , user_data : UserData ) -> HomeData :
528513 """This is the same as get_home_data, but uses a different endpoint and includes non-robotic vacuums."""
529- try :
530- self ._home_data_limiter .try_acquire ("home_data" )
531- except BucketFullException as ex :
532- _LOGGER .info (ex .meta_info )
533- raise RoborockRateLimit ("Reached maximum requests for home data. Please try again later." ) from ex
514+ if not self ._home_data_limiter .try_acquire ("home_data" , blocking = False ):
515+ raise RoborockRateLimit ("Reached maximum requests for home data. Please try again later." )
534516 rriot = user_data .rriot
535517 home_id = await self ._get_home_id (user_data )
536518 if rriot .r .a is None :
0 commit comments