Attempt to resolve status ID from URL for status actions

This commit is contained in:
Ivan Habunek 2024-08-12 11:59:39 +02:00
parent 05bee9f74d
commit 070f6b9ef1
No known key found for this signature in database
GPG Key ID: 01DB3DD0D824504C
1 changed files with 24 additions and 0 deletions

View File

@ -44,10 +44,34 @@ def _account_action(app, user, account, action) -> Response:
def _status_action(app, user, status_id, action, data=None) -> Response:
status_id = _resolve_status_id(app, user, status_id)
url = f"/api/v1/statuses/{status_id}/{action}"
return http.post(app, user, url, data=data)
def _resolve_status_id(app, user, id_or_url) -> str:
"""
If given an URL instead of status ID, attempt to resolve the status ID.
TODO: Not 100% sure this is the correct way of doing this, but it seems to
work for all test cases I've thrown at it. So leaving it undocumented until
we're happy it works.
"""
if re.match(r"^https?://", id_or_url):
response = search(app, user, id_or_url, resolve=True, type="statuses")
statuses = response.json().get("statuses")
if not statuses:
raise ConsoleError(f"Cannot find status matching URL {id_or_url}")
if len(statuses) > 1:
raise ConsoleError(f"Found multiple statuses mathcing URL {id_or_url}")
return statuses[0]["id"]
return id_or_url
def _tag_action(app, user, tag_name, action) -> Response:
url = f"/api/v1/tags/{tag_name}/{action}"
return http.post(app, user, url)