class_docstr: Abstract implementation of OAuth 1.0 and 1.0a.
  
  See `TwitterMixin` below for an example implementation.
  
  Class attributes:
  
  * ``_OAUTH_AUTHORIZE_URL``: The service's OAuth authorization url.
  * ``_OAUTH_ACCESS_TOKEN_URL``: The service's OAuth access token url.
  * ``_OAUTH_VERSION``: May be either "1.0" or "1.0a".
  * ``_OAUTH_NO_CALLBACKS``: Set this to True if the service requires
    advance registration of callbacks.
  
  Subclasses must also override the `_oauth_get_user_future` and
  `_oauth_consumer_token` methods.
class_docstr_tok: ["Abstract","implementation","of","OAuth","1.0","and","1.0a",".","See","`","TwitterMixin","`","below","for","an","example","implementation",".","Class","attributes",":","*","``","_OAUTH_AUTHORIZE_URL","``",":","The","service","'s","OAuth","authorization","url",".","*","``","_OAUTH_ACCESS_TOKEN_URL","``",":","The","service","'s","OAuth","access","token","url",".","*","``","_OAUTH_VERSION","``",":","May","be","either","``","1.0","''","or","``","1.0a","''",".","*","``","_OAUTH_NO_CALLBACKS","``",":","Set","this","to","True","if","the","service","requires","advance","registration","of","callbacks",".","Subclasses","must","also","override","the","`","_oauth_get_user_future","`","and","`","_oauth_consumer_token","`","methods","."]
code: def _oauth_request_token_url(
      self, callback_uri=None, extra_params=None
  ):
      consumer_token = self._oauth_consumer_token()
      url = self._OAUTH_REQUEST_TOKEN_URL
      args = dict(
          oauth_consumer_key=escape.to_basestring(
              consumer_token["key"]
          ),
          oauth_signature_method="HMAC-SHA1",
          oauth_timestamp=str(int(time.time())),
          oauth_nonce=escape.to_basestring(
              binascii.b2a_hex(uuid.uuid4().bytes)
          ),
          oauth_version="1.0",
      )
      if getattr(self, "_OAUTH_VERSION", "1.0a") == "1.0a":
          if callback_uri == "oob":
              args["oauth_callback"] = "oob"
          elif callback_uri:
              args["oauth_callback"] = urlparse.urljoin(
                  self.request.full_url(), callback_uri
              )
          if extra_params:
              args.update(extra_params)
          signature = _oauth10a_signature(
              consumer_token, "GET", url, args
          )
      else:
          signature = _oauth_signature(consumer_token, "GET", url, args)
  
      args["oauth_signature"] = signature
      return url + "?" + urllib_parse.urlencode(args)
  
imports: from __future__ import absolute_import, division, print_function
  import base64
  import binascii
  import functools
  import hashlib
  import hmac
  import time
  import uuid
  from tornado.concurrent import TracebackFuture, return_future, chain_future
  from tornado import gen
  from tornado import httpclient
  from tornado import escape
  from tornado.httputil import url_concat
  from tornado.log import gen_log
  from tornado.stack_context import ExceptionStackContext
  from tornado.util import unicode_type, ArgReplacer, PY3
label_desc: Use image node_id 3 for calling the OAuthMixin obj's underlying member method code with example usage: obj._oauth_request_token_url(callback_uri, extra_params) and returns: unknown