opsgenie / opsgenie-python-sdk

Other
48 stars 40 forks source link

Swagger API doesn't support requests with empty body #10

Open asqui opened 6 years ago

asqui commented 6 years ago

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 commented 5 years ago

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 commented 4 years ago

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