Swagger API doesn't support requests with empty body
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.
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
FYI: I just re-tested to make sure and this is still an issue on v2.0.1