diff --git a/docs/changes.rst b/docs/changes.rst index c6172630..4a29f68b 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -18,6 +18,8 @@ Version 3.0.0 (unreleased) - Add search method (#362). - Rename `auth_url` method to `get_auth_url` and move it into the Graph API object (#377, #378, #422). + - Add `x-app-usage` Graph API response headers to result returned from + GraphAPI's request method Version 2.0.0 (2016-08-08) ========================== diff --git a/facebook/__init__.py b/facebook/__init__.py index 839856c7..d7924234 100755 --- a/facebook/__init__.py +++ b/facebook/__init__.py @@ -286,6 +286,9 @@ def request( else: raise GraphAPIError('Maintype was not text, image, or querystring') + if headers.get('x-app-usage'): + result['x-app-usage'] = json.loads(headers['x-app-usage']) + if result and isinstance(result, dict) and result.get("error"): raise GraphAPIError(result) return result diff --git a/test/test_facebook.py b/test/test_facebook.py index fcb7a4fe..aa6def42 100644 --- a/test/test_facebook.py +++ b/test/test_facebook.py @@ -19,10 +19,10 @@ import inspect try: - from urllib.parse import parse_qs, urlencode, urlparse + from urllib.parse import parse_qs, urlencode, urlparse, quote except ImportError: from urlparse import parse_qs, urlparse - from urllib import urlencode + from urllib import urlencode, quote class FacebookTestCase(unittest.TestCase): @@ -332,6 +332,17 @@ def test_request_access_tokens_are_unique_to_instances(self): self.assertEqual(graph1.request.__defaults__[0], None) self.assertEqual(graph2.request.__defaults__[0], None) + def test_request_result_has_x_app_usage_key(self): + """Verify that result has x-app-usage key from response headers""" + # using website's url as ID + # https://developers.facebook.com/docs/graph-api/reference/v3.1/url + FB_OBJECT_ID = quote('http://www.example.com') + token = facebook.GraphAPI().get_app_access_token( + self.app_id, self.secret, True) + graph = facebook.GraphAPI(access_token=token) + result = graph.request(FB_OBJECT_ID) + self.assertIn('x-app-usage', result.keys()) + class TestGetUserPermissions(FacebookTestCase): """