opsgenie-python-sdk icon indicating copy to clipboard operation
opsgenie-python-sdk copied to clipboard

Swagger API doesn't support requests with empty body

Open asqui opened this issue 7 years ago • 2 comments

Not all requests require a body, however it looks like the Swagger API does not permit a request with an empty body.

For example, the close alert method does not have any mandatory JSON body fields, which implies you should be able to call it like this:

client.close_alert(alert.id)

Or more explicitly:

client.close_alert(alert.id, body=CloseAlertRequest())

However both of these fail with:

ApiException: (400) Reason: Bad Request HTTP response headers: HTTPHeaderDict({}) HTTP response body: {"message":"Body should be a JSON object","took":0.003,"requestId":"b5648d74-cee1-47ed-b8d7-1d458f31101a"}

I believe this section of the Swagger API code is at least partly responsible for this:

https://github.com/opsgenie/opsgenie-python-sdk/blob/master/opsgenie/swagger_client/rest.py#L152

                if body:
                    request_body = json.dumps(body)

My current workaround is to always specify source for these requests.

asqui avatar May 01 '18 16:05 asqui

This is better in v2.0 Beta 3.

The explicit empty-payload form now works:

client.close_alert(alert_id, body=CloseAlertPayload())

However the simplest form which could reasonably be expected to work still fails:

client.close_alert(alert_id)  # Fails with: HTTP 400: Bad Request: Invalid JSON body

asqui avatar Jul 15 '19 16:07 asqui

FYI: I just re-tested to make sure and this is still an issue on v2.0.1

asqui avatar Nov 07 '19 09:11 asqui