class_docstr: Abstract implementation of OAuth 2.0.
  
  See `FacebookGraphMixin` or `GoogleOAuth2Mixin` below for example
  implementations.
  
  Class attributes:
  
  * ``_OAUTH_AUTHORIZE_URL``: The service's authorization url.
  * ``_OAUTH_ACCESS_TOKEN_URL``:  The service's access token url.
class_docstr_tok: ["Abstract","implementation","of","OAuth","2.0",".","See","`","FacebookGraphMixin","`","or","`","GoogleOAuth2Mixin","`","below","for","example","implementations",".","Class","attributes",":","*","``","_OAUTH_AUTHORIZE_URL","``",":","The","service","'s","authorization","url",".","*","``","_OAUTH_ACCESS_TOKEN_URL","``",":","The","service","'s","access","token","url","."]
code: def _on_oauth2_request(self, future, response):
      if response.error:
          future.set_exception(
              AuthError(
                  "Error response %s fetching %s"
                  % (response.error, response.request.url)
              )
          )
          return
  
      future.set_result(escape.json_decode(response.body))
  
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 4 for calling the OAuth2Mixin obj's underlying member method code with example usage: obj._on_oauth2_request(future, response) without return types