{"action":"created","comment":{"url":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments/206185794","pull_request_review_id":141574111,"id":206185794,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNjE4NTc5NA==","diff_hunk":"@@ -12,21 +15,90 @@\n from open_discussions.utils import now_in_utc\n \n \n+# Max dimension of either height or width for small and medium images\n+IMAGE_SMALL_MAX_DIMENSION = 64\n+IMAGE_MEDIUM_MAX_DIMENSION = 128\n+\n+IMAGE_STANDARD = \"image\"\n+IMAGE_SMALL = \"image_small\"\n+IMAGE_MEDIUM = \"image_medium\"\n+\n+MAX_IMAGE_FIELD_LENGTH = 1024\n+\n+IMAGE_FIELDS = {\n+    IMAGE_STANDARD: \"\",\n+    IMAGE_SMALL: IMAGE_SMALL_MAX_DIMENSION,\n+    IMAGE_MEDIUM: IMAGE_MEDIUM_MAX_DIMENSION\n+}\n+\n # This is the Django ImageField max path size\n IMAGE_PATH_MAX_LENGTH = 100\n IMAGE_PATH_PREFIX = 'profile'\n+GRAVATAR_IMAGE_URL = \"https://www.gravatar.com/avatar/{}.jpg\"\n+\n+DEFAULT_FONTS = [\n+    'HelveticaNeue-Light',\n+    'Helvetica Neue Light',\n+    'Helvetica Neue',\n+    'Helvetica',\n+    'Arial',\n+    'Lucida Grande',\n+    'sans-serif',\n+]\n+\n+SVG_TEMPLATE = \"\"\"\n+<svg xmlns=\"http://www.w3.org/2000/svg\" pointer-events=\"none\"\n+     width=\"{size}\" height=\"{size}\">\n+  <circle cx=\"{cx}\" cy=\"{cy}\" r=\"{radius}\" style=\"{style}\"></circle>\n+  <text text-anchor=\"middle\" y=\"50%\" x=\"50%\" dy=\"0.35em\"\n+        pointer-events=\"auto\" font-family=\"{font-family}\"\n+        font-weight=\"400\" fill=\"#{color}\" style=\"{text-style}\">{text}</text>\n+</svg>\n+\"\"\".strip()\n+SVG_TEMPLATE = re.sub(r'(\\s+|\\n)', ' ', SVG_TEMPLATE)\n+\n+DEFAULT_PROFILE_IMAGE = urljoin(settings.STATIC_URL, \"images/avatar_default.png\")\n+\n+\n+def generate_gravatar_image(user, image_field=None):\n+    \"\"\"\n+    Query gravatar for an image and return those image properties\n \n-default_profile_image = urljoin(settings.STATIC_URL, \"images/avatar_default.png\")\n-\n+    Args:\n+        user (User): the user to compute gravatar image urls for\n \n-def image_uri(user, image_field='image_small'):\n+    Returns:\n+        str: The URL to the image.\n+    \"\"\"\n+    gravatar_hash = hashlib.md5(user.email.lower().encode('utf-8')).hexdigest()\n+    gravatar_image_url = GRAVATAR_IMAGE_URL.format(gravatar_hash)\n+    max_dimension = IMAGE_FIELDS[image_field]\n+    size_param = '&s={}'.format(max_dimension) if max_dimension else ''\n+    if user.profile.name:\n+        d_param = urljoin(\n+            settings.SITE_BASE_URL,\n+            '/profile/{}/{}/fff/579cf9.png'.format(\n+                user.username,\n+                max_dimension\n+            )\n+        )\n+    else:\n+        d_param = settings.SITE_BASE_URL + DEFAULT_PROFILE_IMAGE","path":"profiles/utils.py","position":87,"original_position":87,"commit_id":"a51cac74b33d29f0f2967fe0caae50b87e0ba5e9","original_commit_id":"a51cac74b33d29f0f2967fe0caae50b87e0ba5e9","user":{"login":"gsidebo","id":14932219,"node_id":"MDQ6VXNlcjE0OTMyMjE5","avatar_url":"https://avatars2.githubusercontent.com/u/14932219?v=4","gravatar_id":"","url":"https://api.github.com/users/gsidebo","html_url":"https://github.com/gsidebo","followers_url":"https://api.github.com/users/gsidebo/followers","following_url":"https://api.github.com/users/gsidebo/following{/other_user}","gists_url":"https://api.github.com/users/gsidebo/gists{/gist_id}","starred_url":"https://api.github.com/users/gsidebo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsidebo/subscriptions","organizations_url":"https://api.github.com/users/gsidebo/orgs","repos_url":"https://api.github.com/users/gsidebo/repos","events_url":"https://api.github.com/users/gsidebo/events{/privacy}","received_events_url":"https://api.github.com/users/gsidebo/received_events","type":"User","site_admin":false},"body":"Just wondering: could/should `urljoin` be used here instead of concatenating via `+`?","created_at":"2018-07-30T15:10:38Z","updated_at":"2018-07-30T15:10:44Z","html_url":"https://github.com/mitodl/open-discussions/pull/975#discussion_r206185794","pull_request_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/975","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments/206185794"},"html":{"href":"https://github.com/mitodl/open-discussions/pull/975#discussion_r206185794"},"pull_request":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/975"}}},"pull_request":{"url":"https://api.github.com/repos/mitodl/open-discussions/pulls/975","id":204174717,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA0MTc0NzE3","html_url":"https://github.com/mitodl/open-discussions/pull/975","diff_url":"https://github.com/mitodl/open-discussions/pull/975.diff","patch_url":"https://github.com/mitodl/open-discussions/pull/975.patch","issue_url":"https://api.github.com/repos/mitodl/open-discussions/issues/975","number":975,"state":"open","locked":false,"title":"Profile image improvements","user":{"login":"mbertrand","id":187676,"node_id":"MDQ6VXNlcjE4NzY3Ng==","avatar_url":"https://avatars2.githubusercontent.com/u/187676?v=4","gravatar_id":"","url":"https://api.github.com/users/mbertrand","html_url":"https://github.com/mbertrand","followers_url":"https://api.github.com/users/mbertrand/followers","following_url":"https://api.github.com/users/mbertrand/following{/other_user}","gists_url":"https://api.github.com/users/mbertrand/gists{/gist_id}","starred_url":"https://api.github.com/users/mbertrand/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mbertrand/subscriptions","organizations_url":"https://api.github.com/users/mbertrand/orgs","repos_url":"https://api.github.com/users/mbertrand/repos","events_url":"https://api.github.com/users/mbertrand/events{/privacy}","received_events_url":"https://api.github.com/users/mbertrand/received_events","type":"User","site_admin":false},"body":"#### What are the relevant tickets?\r\nCloses #886 \r\n\r\n#### What's this PR do?\r\n- Nulls out `image`, `image_small`, `image_medium` fields in `Profile` if they contain a gravatar URL\r\n- Adds `profile_image_small` and `profile_image_medium` fields to the Profile serializer, set to either:\r\n  - the uploaded image of the appropriate size if it exists\r\n  - the micromasters image URL if it exists\r\n  - the gravatar URL for the user's email, with the `d` (default image) parameter set to:\r\n    - a new local URL that creates a PNG icon with the user's initials, if they have a `Profile.name`\r\n    - the default profile image\r\n\r\n#### How should this be manually tested?\r\n- If your user has uploaded a profile image, that image should appear as your profile image.\r\n- If your user has not uploaded an image but has done so on Micromasters, that image should appear.\r\n- If your user does not have the above but has a gravatar image, the gravatar image should appear.\r\n- If your user does not have a gravatar image but has a profile name, the profile image should contain the name's initials.  However, this will not work locally because gravatar cannot access your local instance.  A sample URL is available here on heroku: https://www.gravatar.com/avatar/dd89eae21f1a653106af990b8be9435e.jpg?d=https://odl-open-discussions-ci-pr-975.herokuapp.com/profile/mattbert/64/fff/579cf9.png&s=64\r\n- If your user does not have a name or is not logged in, the default profile image should appear. \r\n","created_at":"2018-07-26T15:08:50Z","updated_at":"2018-07-30T15:10:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"56434159bc4ddb5f95785b1c652e087027d3a678","assignee":{"login":"gsidebo","id":14932219,"node_id":"MDQ6VXNlcjE0OTMyMjE5","avatar_url":"https://avatars2.githubusercontent.com/u/14932219?v=4","gravatar_id":"","url":"https://api.github.com/users/gsidebo","html_url":"https://github.com/gsidebo","followers_url":"https://api.github.com/users/gsidebo/followers","following_url":"https://api.github.com/users/gsidebo/following{/other_user}","gists_url":"https://api.github.com/users/gsidebo/gists{/gist_id}","starred_url":"https://api.github.com/users/gsidebo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsidebo/subscriptions","organizations_url":"https://api.github.com/users/gsidebo/orgs","repos_url":"https://api.github.com/users/gsidebo/repos","events_url":"https://api.github.com/users/gsidebo/events{/privacy}","received_events_url":"https://api.github.com/users/gsidebo/received_events","type":"User","site_admin":false},"assignees":[{"login":"gsidebo","id":14932219,"node_id":"MDQ6VXNlcjE0OTMyMjE5","avatar_url":"https://avatars2.githubusercontent.com/u/14932219?v=4","gravatar_id":"","url":"https://api.github.com/users/gsidebo","html_url":"https://github.com/gsidebo","followers_url":"https://api.github.com/users/gsidebo/followers","following_url":"https://api.github.com/users/gsidebo/following{/other_user}","gists_url":"https://api.github.com/users/gsidebo/gists{/gist_id}","starred_url":"https://api.github.com/users/gsidebo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsidebo/subscriptions","organizations_url":"https://api.github.com/users/gsidebo/orgs","repos_url":"https://api.github.com/users/gsidebo/repos","events_url":"https://api.github.com/users/gsidebo/events{/privacy}","received_events_url":"https://api.github.com/users/gsidebo/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":627437808,"node_id":"MDU6TGFiZWw2Mjc0Mzc4MDg=","url":"https://api.github.com/repos/mitodl/open-discussions/labels/Needs%20Review","name":"Needs Review","color":"f9d0c4","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/975/commits","review_comments_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/975/comments","review_comment_url":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mitodl/open-discussions/issues/975/comments","statuses_url":"https://api.github.com/repos/mitodl/open-discussions/statuses/a51cac74b33d29f0f2967fe0caae50b87e0ba5e9","head":{"label":"mitodl:mb/gravatar2","ref":"mb/gravatar2","sha":"a51cac74b33d29f0f2967fe0caae50b87e0ba5e9","user":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"repo":{"id":93760926,"node_id":"MDEwOlJlcG9zaXRvcnk5Mzc2MDkyNg==","name":"open-discussions","full_name":"mitodl/open-discussions","owner":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mitodl/open-discussions","description":null,"fork":false,"url":"https://api.github.com/repos/mitodl/open-discussions","forks_url":"https://api.github.com/repos/mitodl/open-discussions/forks","keys_url":"https://api.github.com/repos/mitodl/open-discussions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mitodl/open-discussions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mitodl/open-discussions/teams","hooks_url":"https://api.github.com/repos/mitodl/open-discussions/hooks","issue_events_url":"https://api.github.com/repos/mitodl/open-discussions/issues/events{/number}","events_url":"https://api.github.com/repos/mitodl/open-discussions/events","assignees_url":"https://api.github.com/repos/mitodl/open-discussions/assignees{/user}","branches_url":"https://api.github.com/repos/mitodl/open-discussions/branches{/branch}","tags_url":"https://api.github.com/repos/mitodl/open-discussions/tags","blobs_url":"https://api.github.com/repos/mitodl/open-discussions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mitodl/open-discussions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mitodl/open-discussions/git/refs{/sha}","trees_url":"https://api.github.com/repos/mitodl/open-discussions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mitodl/open-discussions/statuses/{sha}","languages_url":"https://api.github.com/repos/mitodl/open-discussions/languages","stargazers_url":"https://api.github.com/repos/mitodl/open-discussions/stargazers","contributors_url":"https://api.github.com/repos/mitodl/open-discussions/contributors","subscribers_url":"https://api.github.com/repos/mitodl/open-discussions/subscribers","subscription_url":"https://api.github.com/repos/mitodl/open-discussions/subscription","commits_url":"https://api.github.com/repos/mitodl/open-discussions/commits{/sha}","git_commits_url":"https://api.github.com/repos/mitodl/open-discussions/git/commits{/sha}","comments_url":"https://api.github.com/repos/mitodl/open-discussions/comments{/number}","issue_comment_url":"https://api.github.com/repos/mitodl/open-discussions/issues/comments{/number}","contents_url":"https://api.github.com/repos/mitodl/open-discussions/contents/{+path}","compare_url":"https://api.github.com/repos/mitodl/open-discussions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mitodl/open-discussions/merges","archive_url":"https://api.github.com/repos/mitodl/open-discussions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mitodl/open-discussions/downloads","issues_url":"https://api.github.com/repos/mitodl/open-discussions/issues{/number}","pulls_url":"https://api.github.com/repos/mitodl/open-discussions/pulls{/number}","milestones_url":"https://api.github.com/repos/mitodl/open-discussions/milestones{/number}","notifications_url":"https://api.github.com/repos/mitodl/open-discussions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mitodl/open-discussions/labels{/name}","releases_url":"https://api.github.com/repos/mitodl/open-discussions/releases{/id}","deployments_url":"https://api.github.com/repos/mitodl/open-discussions/deployments","created_at":"2017-06-08T14:46:35Z","updated_at":"2018-07-30T14:49:33Z","pushed_at":"2018-07-30T14:50:11Z","git_url":"git://github.com/mitodl/open-discussions.git","ssh_url":"git@github.com:mitodl/open-discussions.git","clone_url":"https://github.com/mitodl/open-discussions.git","svn_url":"https://github.com/mitodl/open-discussions","homepage":null,"size":2570,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":97,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":97,"watchers":3,"default_branch":"master"}},"base":{"label":"mitodl:master","ref":"master","sha":"c23ef7d9b3a1bc88039c27a4a586702d8e10bc6e","user":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"repo":{"id":93760926,"node_id":"MDEwOlJlcG9zaXRvcnk5Mzc2MDkyNg==","name":"open-discussions","full_name":"mitodl/open-discussions","owner":{"login":"mitodl","id":7918516,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MTg1MTY=","avatar_url":"https://avatars2.githubusercontent.com/u/7918516?v=4","gravatar_id":"","url":"https://api.github.com/users/mitodl","html_url":"https://github.com/mitodl","followers_url":"https://api.github.com/users/mitodl/followers","following_url":"https://api.github.com/users/mitodl/following{/other_user}","gists_url":"https://api.github.com/users/mitodl/gists{/gist_id}","starred_url":"https://api.github.com/users/mitodl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitodl/subscriptions","organizations_url":"https://api.github.com/users/mitodl/orgs","repos_url":"https://api.github.com/users/mitodl/repos","events_url":"https://api.github.com/users/mitodl/events{/privacy}","received_events_url":"https://api.github.com/users/mitodl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mitodl/open-discussions","description":null,"fork":false,"url":"https://api.github.com/repos/mitodl/open-discussions","forks_url":"https://api.github.com/repos/mitodl/open-discussions/forks","keys_url":"https://api.github.com/repos/mitodl/open-discussions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mitodl/open-discussions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mitodl/open-discussions/teams","hooks_url":"https://api.github.com/repos/mitodl/open-discussions/hooks","issue_events_url":"https://api.github.com/repos/mitodl/open-discussions/issues/events{/number}","events_url":"https://api.github.com/repos/mitodl/open-discussions/events","assignees_url":"https://api.github.com/repos/mitodl/open-discussions/assignees{/user}","branches_url":"https://api.github.com/repos/mitodl/open-discussions/branches{/branch}","tags_url":"https://api.github.com/repos/mitodl/open-discussions/tags","blobs_url":"https://api.github.com/repos/mitodl/open-discussions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mitodl/open-discussions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mitodl/open-discussions/git/refs{/sha}","trees_url":"https://api.github.com/repos/mitodl/open-discussions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mitodl/open-discussions/statuses/{sha}","languages_url":"https://api.github.com/repos/mitodl/open-discussions/languages","stargazers_url":"https://api.github.com/repos/mitodl/open-discussions/stargazers","contributors_url":"https://api.github.com/repos/mitodl/open-discussions/contributors","subscribers_url":"https://api.github.com/repos/mitodl/open-discussions/subscribers","subscription_url":"https://api.github.com/repos/mitodl/open-discussions/subscription","commits_url":"https://api.github.com/repos/mitodl/open-discussions/commits{/sha}","git_commits_url":"https://api.github.com/repos/mitodl/open-discussions/git/commits{/sha}","comments_url":"https://api.github.com/repos/mitodl/open-discussions/comments{/number}","issue_comment_url":"https://api.github.com/repos/mitodl/open-discussions/issues/comments{/number}","contents_url":"https://api.github.com/repos/mitodl/open-discussions/contents/{+path}","compare_url":"https://api.github.com/repos/mitodl/open-discussions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mitodl/open-discussions/merges","archive_url":"https://api.github.com/repos/mitodl/open-discussions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mitodl/open-discussions/downloads","issues_url":"https://api.github.com/repos/mitodl/open-discussions/issues{/number}","pulls_url":"https://api.github.com/repos/mitodl/open-discussions/pulls{/number}","milestones_url":"https://api.github.com/repos/mitodl/open-discussions/milestones{/number}","notifications_url":"https://api.github.com/repos/mitodl/open-discussions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mitodl/open-discussions/labels{/name}","releases_url":"https://api.github.com/repos/mitodl/open-discussions/releases{/id}","deployments_url":"https://api.github.com/repos/mitodl/open-discussions/deployments","created_at":"2017-06-08T14:46:35Z","updated_at":"2018-07-30T14:49:33Z","pushed_at":"2018-07-30T14:50:11Z","git_url":"git://github.com/mitodl/open-discussions.git","ssh_url":"git@github.com:mitodl/open-discussions.git","clone_url":"https://github.com/mitodl/open-discussions.git","svn_url":"https://github.com/mitodl/open-discussions","homepage":null,"size":2570,"stargazers_count":3,"watchers_count":3,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":97,"license":{"key":"bsd-3-clause","name":"BSD 3-Clause \"New\" or \"Revised\" License","spdx_id":"BSD-3-Clause","url":"https://api.github.com/licenses/bsd-3-clause","node_id":"MDc6TGljZW5zZTU="},"forks":0,"open_issues":97,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/975"},"html":{"href":"https://github.com/mitodl/open-discussions/pull/975"},"issue":{"href":"https://api.github.com/repos/mitodl/open-discussions/issues/975"},"comments":{"href":"https://api.github.com/repos/mitodl/open-discussions/issues/975/comments"},"review_comments":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/975/comments"},"review_comment":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mitodl/open-discussions/pulls/975/commits"},"statuses":{"href":"https://api.github.com/repos/mitodl/open-discussions/statuses/a51cac74b33d29f0f2967fe0caae50b87e0ba5e9"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"gsidebo"}}