Skip to content

Commit 5a42c4b

Browse files
committed
Add future interface to FacebookGraphMixin
1 parent 218ec03 commit 5a42c4b

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

tornado/auth.py

+13-12
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,7 @@ class FacebookGraphMixin(OAuth2Mixin):
10961096
_OAUTH_AUTHORIZE_URL = "https://graph.facebook.com/oauth/authorize?"
10971097
_OAUTH_NO_CALLBACKS = False
10981098

1099+
@_auth_return_future
10991100
def get_authenticated_user(self, redirect_uri, client_id, client_secret,
11001101
code, callback, extra_fields=None):
11011102
"""Handles the login for the Facebook user, returning a user object.
@@ -1137,10 +1138,9 @@ def get(self):
11371138
client_secret, callback, fields))
11381139

11391140
def _on_access_token(self, redirect_uri, client_id, client_secret,
1140-
callback, fields, response):
1141+
future, fields, response):
11411142
if response.error:
1142-
gen_log.warning('Facebook auth error: %s' % str(response))
1143-
callback(None)
1143+
future.set_exception(AuthError('Facebook auth error: %s' % str(response)))
11441144
return
11451145

11461146
args = escape.parse_qs_bytes(escape.native_str(response.body))
@@ -1152,23 +1152,24 @@ def _on_access_token(self, redirect_uri, client_id, client_secret,
11521152
self.facebook_request(
11531153
path="/me",
11541154
callback=self.async_callback(
1155-
self._on_get_user_info, callback, session, fields),
1155+
self._on_get_user_info, future, session, fields),
11561156
access_token=session["access_token"],
11571157
fields=",".join(fields)
11581158
)
11591159

1160-
def _on_get_user_info(self, callback, session, fields, user):
1160+
def _on_get_user_info(self, future, session, fields, user):
11611161
if user is None:
1162-
callback(None)
1162+
future.set_result(None)
11631163
return
11641164

11651165
fieldmap = {}
11661166
for field in fields:
11671167
fieldmap[field] = user.get(field)
11681168

11691169
fieldmap.update({"access_token": session["access_token"], "session_expires": session.get("expires")})
1170-
callback(fieldmap)
1170+
future.set_result(fieldmap)
11711171

1172+
@_auth_return_future
11721173
def facebook_request(self, path, callback, access_token=None,
11731174
post_args=None, **args):
11741175
"""Fetches the given relative API path, e.g., "/btaylor/picture"
@@ -1220,13 +1221,13 @@ def get(self):
12201221
else:
12211222
http.fetch(url, callback=callback)
12221223

1223-
def _on_facebook_request(self, callback, response):
1224+
def _on_facebook_request(self, future, response):
12241225
if response.error:
1225-
gen_log.warning("Error response %s fetching %s", response.error,
1226-
response.request.url)
1227-
callback(None)
1226+
future.set_exception(AuthError("Error response %s fetching %s",
1227+
response.error, response.request.url))
12281228
return
1229-
callback(escape.json_decode(response.body))
1229+
1230+
future.set_result(escape.json_decode(response.body))
12301231

12311232
def get_auth_http_client(self):
12321233
"""Returns the `.AsyncHTTPClient` instance to be used for auth requests.

0 commit comments

Comments
 (0)