Fix /api/v2/media returning the wrong status code for media processed synchronously

The API should return a 202 only if data cannot be returned yet and a followup GET /api/v1/media/:id should be called to retrieve it. This is something Mastodon does when it needs to transcode large media files. It does not apply to Pleroma and causes apps to waste an API call when posting a status which causes apps to appear to hang on higher latency environments, such as on mobile networks.

https://docs.joinmastodon.org/methods/media/#v2
This commit is contained in:
Mark Felder 2024-10-27 21:52:42 -04:00
parent 2d591aedae
commit 7d5ef81737
4 changed files with 5 additions and 6 deletions

View file

@ -0,0 +1 @@
Fix /api/v2/media returning the wrong status code (202) for media processed synchronously

View file

@ -121,7 +121,7 @@ def create2_operation do
security: [%{"oAuth" => ["write:media"]}],
requestBody: Helpers.request_body("Parameters", create_request()),
responses: %{
202 => Operation.response("Media", "application/json", Attachment),
200 => Operation.response("Media", "application/json", Attachment),
400 => Operation.response("Media", "application/json", ApiError),
422 => Operation.response("Media", "application/json", ApiError),
500 => Operation.response("Media", "application/json", ApiError)

View file

@ -53,9 +53,7 @@ def create2(
) do
attachment_data = Map.put(object.data, "id", object.id)
conn
|> put_status(202)
|> render("attachment.json", %{attachment: attachment_data})
render(conn, "attachment.json", %{attachment: attachment_data})
end
end

View file

@ -56,7 +56,7 @@ test "/api/v2/media", %{conn: conn, user: user, image: image} do
conn
|> put_req_header("content-type", "multipart/form-data")
|> post("/api/v2/media", %{"file" => image, "description" => desc})
|> json_response_and_validate_schema(202)
|> json_response_and_validate_schema(200)
assert media_id = response["id"]
@ -111,7 +111,7 @@ test "/api/v2/media, upload_limit", %{conn: conn, user: user} do
"file" => large_binary,
"description" => desc
})
|> json_response_and_validate_schema(202)
|> json_response_and_validate_schema(200)
assert media_id = response["id"]