code: def request(method, uri, *args, **kwargs):
      
      req_method = req_methods[method.upper()]
      raise_exception = kwargs.pop("raise_exception", True)
      raw_content = kwargs.pop("raw_content", False)
      kwargs["headers"] = kwargs.get("headers", {})
      http_log_req(method, uri, args, kwargs)
      data = None
      if "data" in kwargs:
          # The 'data' kwarg is used when you don't want json encoding.
          data = kwargs.pop("data")
      elif "body" in kwargs:
          if "Content-Type" not in kwargs["headers"]:
              kwargs["headers"]["Content-Type"] = "application/json"
          data = json.dumps(kwargs.pop("body"))
      if data:
          resp = req_method(uri, data=data, **kwargs)
      else:
          resp = req_method(uri, **kwargs)
      if raw_content:
          body = resp.content
      else:
          try:
              body = resp.json()
          except ValueError:
              # No JSON in response
              body = resp.content
      http_log_resp(resp, body)
      if resp.status_code >= 400 and raise_exception:
          raise exc.from_response(resp, body)
      return resp, body
docs: Handles all the common functionality required for API calls. Returns
      the resulting response object.
  
      Formats the request into a dict representing the headers
      and body that will be used to make the API call.