code: def request(self, method, path, headers=None, data=None, **kwargs):
          
          full_path = self.url + path
          request_headers = {}
          request_headers.update(self.default_headers)
          if headers:
              request_headers.update(headers)
          jdata = None
          if data:
              jdata = json.dumps(data)
          if self.verbose:
              print("%s\t%s\t%s" % 
                  (datetime.now().isoformat(), method, full_path), 
                  file=self.verbose)
          resp = requests.request(method, full_path, auth=self.auth, 
              headers=request_headers, data=jdata,
              verify=self.verify, **kwargs)
          if (resp.status_code == 401 and self.auth and 
                  self.auth.signer._agent_key):
              self.auth.signer.swap_keys()
              return self.request(method, path, headers=headers, data=data,
                  **kwargs)
          if 400 <= resp.status_code < 499:
              if resp.content:
                  print(resp.content, file=sys.stderr)
              resp.raise_for_status()
          if resp.content:
              if resp.headers['content-type'] == 'application/json':
                  return (json.loads(resp.content), resp)
              else:
                  return (resp.content, resp)
          else:
              return (None, resp)
docs: (Primarily) internal method for making all requests to the datacenter.
          
          :param method: HTTP verb
          :type method: :py:class:`str`
          
          :param path: path relative to `login` path
          :type path: :py:class:`str`
          
          :param headers: additional headers to send
          :type headers: :py:class:`dict`
          
          :Returns: tuple of decoded response body & `Response` object
          :raises: client (4xx) errors