def METHOD_NAME(self, method, uri, headers, body):
    """Sign the HTTP request, add OAuth parameters and signature.
    :param method: HTTP method of the request.
    :param uri:  URI of the HTTP request.
    :param body: Body payload of the HTTP request.
    :param headers: Headers of the HTTP request.
    :return: uri, headers, body
    """
    nonce = generate_nonce()
    timestamp = generate_timestamp()
    if body is None:
        body = b''
    # transform int to str
    timestamp = str(timestamp)
    if headers is None:
        headers = {}
    oauth_params = self.get_oauth_params(nonce, timestamp)
    # https://datatracker.ietf.org/doc/html/draft-eaton-oauth-bodyhash-00.html
    # include oauth_body_hash
    if body and headers.get('Content-Type') != CONTENT_TYPE_FORM_URLENCODED:
        oauth_body_hash = base64.b64encode(hashlib.sha1(body).digest())
        oauth_params.append(('oauth_body_hash', oauth_body_hash.decode('utf-8')))
    uri, headers, body = self._render(uri, headers, body, oauth_params)
    sig = self.get_oauth_signature(method, uri, headers, body)
    oauth_params.append(('oauth_signature', sig))
    uri, headers, body = self._render(uri, headers, body, oauth_params)
    return uri, headers, body