How to correctly requests.put in Python 3.7

Viewed 1436

I'm trying to communicate with datadog's api using the PUT method but failing with a "400" response. I've looked into the documentation and I'm confident my headers are set up correctly and access keys have been specified. Below is the function I'm working with:

def editMonitor(monitor_Data):

api_url = 'https://api.datadoghq.com/api/v1/monitor/' + str(monitor_Data['id'])

response = requests.put(api_url, monitor_Data, headers=headers)

print(response)

if response.status_code == 200:
    return json.loads(response.content.decode('utf-8'))
else:
    return None

Below is what the header is made of:

headers = {'Content-Type': 'application/json',
           'DD-API-KEY': '**********************',
           'DD-APPLICATION-KEY': '***********************'
           }

Other articles I've seen so far don't seem to answer my question.

1 Answers

If you take a look at the API documentation, you will notice it requires you to send required data into the body of the requests.

Here is an example on how to send data into the body using the requests module:

data = {
    "message": yourMessageInfo,
    "name": yourNameInfo,
    "object": yourObjectInfo,
    "priority": yourPriorityInfo,
    "query": yourQueryInfo,
    "tags": yourTagsInfo,
    "type": yourTypeInfo
}

response = requests.put(api_url, headers=headers, json=data)

You will of course need to fill in all the information.

Another example straight from the documentation:

data = {
  "message": "string",
  "name": "string",
  "options": {
    "enable_logs_sample": false,
    "escalation_message": "string",
    "evaluation_delay": "integer",
    "include_tags": false,
    "locked": false,
    "min_failure_duration": "integer",
    "min_location_failed": "integer",
    "new_host_delay": "integer",
    "no_data_timeframe": "integer",
    "notify_audit": false,
    "notify_no_data": false,
    "renotify_interval": "integer",
    "require_full_window": false,
    "restricted_roles": [],
    "silenced": {
      "<any-key>": "integer"
    },
    "synthetics_check_id": "string",
    "threshold_windows": {
      "recovery_window": "string",
      "trigger_window": "string"
    },
    "thresholds": {
      "critical": "number",
      "critical_recovery": "number",
      "ok": "number",
      "unknown": "number",
      "warning": "number",
      "warning_recovery": "number"
    },
    "timeout_h": "integer"
  },
  "priority": "integer",
  "query": "string",
  "tags": [],
  "type": "string"
}

response = requests.put(api_url, headers=headers, json=data)

More information in the API documentation and the picture below:

required headers image

Related