Skip to content

Commit 6fd78d9

Browse files
CopilotLash-L
andcommitted
fix: Update pyrate-limiter to v4 compatibility
Co-authored-by: Lash-L <20257911+Lash-L@users.noreply.github.com>
1 parent ae9aca2 commit 6fd78d9

File tree

2 files changed

+26
-32
lines changed

2 files changed

+26
-32
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ dependencies = [
2626
"paho-mqtt>=1.6.1,<3.0.0",
2727
"construct>=2.10.57,<3",
2828
"vacuum-map-parser-roborock",
29-
"pyrate-limiter>=3.7.0,<4",
29+
"pyrate-limiter>=3.7.0,<5",
3030
"aiomqtt>=2.5.0,<3",
3131
"click-shell~=2.1",
3232
]

roborock/web_api.py

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import aiohttp
1414
from aiohttp import ContentTypeError, FormData
15-
from pyrate_limiter import BucketFullException, Duration, Limiter, Rate
15+
from pyrate_limiter import Duration, Limiter, Rate
1616

1717
from roborock import HomeDataSchedule
1818
from roborock.data import HomeData, HomeDataRoom, HomeDataScene, ProductResponse, RRiot, UserData
@@ -204,11 +204,10 @@ 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+
success = await self._login_limiter.try_acquire_async("login", blocking=False)
208+
if not success:
209+
_LOGGER.info("Rate limit reached for login")
210+
raise RoborockRateLimit("Reached maximum requests for login. Please try again later.")
212211
base_url = await self.base_url
213212
header_clientid = self._get_header_client_id()
214213
code_request = PreparedRequest(base_url, self.session, {"header_clientid": header_clientid})
@@ -238,11 +237,10 @@ async def request_code_v4(self) -> None:
238237
if await self.country_code is None or await self.country is None:
239238
_LOGGER.info("No country code or country found, trying old version of request code.")
240239
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
240+
success = await self._login_limiter.try_acquire_async("login", blocking=False)
241+
if not success:
242+
_LOGGER.info("Rate limit reached for login")
243+
raise RoborockRateLimit("Reached maximum requests for login. Please try again later.")
246244
base_url = await self.base_url
247245
header_clientid = self._get_header_client_id()
248246
code_request = PreparedRequest(
@@ -370,11 +368,10 @@ async def code_login_v4(
370368
return UserData.from_dict(user_data)
371369

372370
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
371+
success = await self._login_limiter.try_acquire_async("login", blocking=False)
372+
if not success:
373+
_LOGGER.info("Rate limit reached for login")
374+
raise RoborockRateLimit("Reached maximum requests for login. Please try again later.")
378375
base_url = await self.base_url
379376
header_clientid = self._get_header_client_id()
380377

@@ -468,11 +465,10 @@ async def _get_home_id(self, user_data: UserData):
468465
return home_id_response["data"]["rrHomeId"]
469466

470467
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
468+
success = self._home_data_limiter.try_acquire("home_data", blocking=False)
469+
if not success:
470+
_LOGGER.info("Rate limit reached for home data")
471+
raise RoborockRateLimit("Reached maximum requests for home data. Please try again later.")
476472
rriot = user_data.rriot
477473
if rriot is None:
478474
raise RoborockException("rriot is none")
@@ -497,11 +493,10 @@ async def get_home_data(self, user_data: UserData) -> HomeData:
497493

498494
async def get_home_data_v2(self, user_data: UserData) -> HomeData:
499495
"""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
496+
success = self._home_data_limiter.try_acquire("home_data", blocking=False)
497+
if not success:
498+
_LOGGER.info("Rate limit reached for home data")
499+
raise RoborockRateLimit("Reached maximum requests for home data. Please try again later.")
505500
rriot = user_data.rriot
506501
if rriot is None:
507502
raise RoborockException("rriot is none")
@@ -526,11 +521,10 @@ async def get_home_data_v2(self, user_data: UserData) -> HomeData:
526521

527522
async def get_home_data_v3(self, user_data: UserData) -> HomeData:
528523
"""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
524+
success = self._home_data_limiter.try_acquire("home_data", blocking=False)
525+
if not success:
526+
_LOGGER.info("Rate limit reached for home data")
527+
raise RoborockRateLimit("Reached maximum requests for home data. Please try again later.")
534528
rriot = user_data.rriot
535529
home_id = await self._get_home_id(user_data)
536530
if rriot.r.a is None:

0 commit comments

Comments
 (0)