fix: improve error handling for write operation rate limits (retweet/like)
This commit is contained in:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "twitter-cli"
|
name = "twitter-cli"
|
||||||
version = "0.3.1"
|
version = "0.3.2"
|
||||||
description = "A CLI for Twitter/X — feed, bookmarks, and user timeline in terminal"
|
description = "A CLI for Twitter/X — feed, bookmarks, and user timeline in terminal"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
|
|||||||
@@ -731,7 +731,26 @@ class TwitterClient:
|
|||||||
)
|
)
|
||||||
time.sleep(wait)
|
time.sleep(wait)
|
||||||
continue
|
continue
|
||||||
|
# Write operation rate limits (retweet/like/bookmark limits)
|
||||||
|
# Code 348 = "retweet limit", 327 = "already retweeted"
|
||||||
|
# Provide user-friendly message
|
||||||
|
if err_code in (348, 349):
|
||||||
|
raise TwitterAPIError(
|
||||||
|
429, "Rate limited: %s (try again later, recommended wait: 15+ minutes)" % err_msg
|
||||||
|
)
|
||||||
raise TwitterAPIError(0, "Twitter API returned errors: %s" % err_msg)
|
raise TwitterAPIError(0, "Twitter API returned errors: %s" % err_msg)
|
||||||
|
|
||||||
|
# GraphQL write mutations return errors in data.errors (separate from top-level)
|
||||||
|
if isinstance(parsed, dict) and "data" in parsed:
|
||||||
|
data_obj = parsed["data"]
|
||||||
|
if isinstance(data_obj, dict):
|
||||||
|
for key, val in data_obj.items():
|
||||||
|
if isinstance(val, dict) and val.get("errors"):
|
||||||
|
inner_errors = val["errors"]
|
||||||
|
if inner_errors:
|
||||||
|
inner_msg = inner_errors[0].get("message", "Unknown error")
|
||||||
|
raise TwitterAPIError(0, "Twitter API: %s" % inner_msg)
|
||||||
|
|
||||||
return parsed
|
return parsed
|
||||||
|
|
||||||
# Should not be reached, but just in case
|
# Should not be reached, but just in case
|
||||||
|
|||||||
2
uv.lock
generated
2
uv.lock
generated
@@ -1116,7 +1116,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "twitter-cli"
|
name = "twitter-cli"
|
||||||
version = "0.3.0"
|
version = "0.3.1"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "beautifulsoup4" },
|
{ name = "beautifulsoup4" },
|
||||||
|
|||||||
Reference in New Issue
Block a user