{"action":"created","comment":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/comments/57004830","id":57004830,"diff_hunk":"@@ -0,0 +1,167 @@\n+# -*- coding: utf-8 -*-\n+from __future__ import unicode_literals\n+\n+from ccx_keys.locator import CCXLocator\n+from courseware.courses import get_course_by_id\n+from contextlib import contextmanager\n+from django.db import migrations\n+\n+from lms.djangoapps.instructor.enrollment import (\n+    enroll_email,\n+    get_email_params,\n+    unenroll_email,\n+)\n+from lms.djangoapps.instructor.access import (\n+    allow_access,\n+    list_with_level,\n+    revoke_access,\n+)\n+\n+\n+@contextmanager\n+def ccx_course(ccx_locator):\n+    \"\"\"Create a context in which the course identified by course_locator exists\n+    \"\"\"\n+    course = get_course_by_id(ccx_locator)\n+    yield course\n+\n+\n+def add_master_course_staff_to_ccx_for_existing_ccx(apps, schema_editor):\n+    \"\"\"\n+    Add all staff and admin of master course to respective CCX(s).\n+    \"\"\"\n+    CustomCourseForEdX = apps.get_model(\"ccx\", \"CustomCourseForEdX\")\n+    list_ccx = CustomCourseForEdX.objects.all()\n+    for ccx in list_ccx:\n+        if ccx.course_id.deprecated:\n+            # prevent migration for deprecated course ids.\n+            continue\n+        ccx_locator = CCXLocator.from_course_locator(ccx.course_id, unicode(ccx.id))\n+        add_master_course_staff_to_ccx(\n+            get_course_by_id(ccx.course_id),\n+            ccx_locator,\n+            ccx.display_name\n+        )\n+\n+\n+def remove_master_course_staff_from_ccx_for_existing_ccx(apps, schema_editor):\n+    \"\"\"\n+    Add all staff and admin of master course to respective CCX(s).\n+    \"\"\"\n+    CustomCourseForEdX = apps.get_model(\"ccx\", \"CustomCourseForEdX\")\n+    list_ccx = CustomCourseForEdX.objects.all()\n+    for ccx in list_ccx:\n+        if ccx.course_id.deprecated:\n+            # prevent migration for deprecated course ids.\n+            continue\n+        ccx_locator = CCXLocator.from_course_locator(ccx.course_id, unicode(ccx.id))\n+        remove_master_course_staff_from_ccx(\n+            get_course_by_id(ccx.course_id),\n+            ccx_locator,\n+            ccx.display_name\n+        )\n+\n+\n+def add_master_course_staff_to_ccx(master_course, ccx_key, display_name, send_email=False):\n+    \"\"\"\n+    Add staff and instructor roles on ccx to all the staff and instructors members of master course.\n+\n+    Arguments:\n+        master_course (CourseDescriptorWithMixins): Master course instance\n+        ccx_key (CCXLocator): CCX course key\n+        display_name (str): ccx display name for email\n+    \"\"\"\n+    list_staff = list_with_level(master_course, 'staff')\n+    list_instructor = list_with_level(master_course, 'instructor')\n+\n+    with ccx_course(ccx_key) as course_ccx:\n+        email_params = get_email_params(course_ccx, auto_enroll=True, course_key=ccx_key, display_name=display_name)\n+        list_staff_ccx = list_with_level(course_ccx, 'staff')\n+        list_instructor_ccx = list_with_level(course_ccx, 'instructor')\n+        for staff in list_staff:\n+            # this call should be idempotent\n+            if staff not in list_staff_ccx:\n+                # allow 'staff' access on ccx to staff of master course\n+                allow_access(course_ccx, staff, 'staff')\n+\n+                # Enroll the staff in the ccx\n+                enroll_email(\n+                    course_id=ccx_key,\n+                    student_email=staff.email,\n+                    auto_enroll=True,\n+                    email_students=send_email,\n+                    email_params=email_params,\n+                )\n+\n+        for instructor in list_instructor:\n+            # this call should be idempotent\n+            if instructor not in list_instructor_ccx:\n+                # allow 'instructor' access on ccx to instructor of master course\n+                allow_access(course_ccx, instructor, 'instructor')\n+\n+                # Enroll the instructor in the ccx\n+                enroll_email(\n+                    course_id=ccx_key,\n+                    student_email=instructor.email,\n+                    auto_enroll=True,\n+                    email_students=send_email,\n+                    email_params=email_params,\n+                )\n+","path":"lms/djangoapps/ccx/migrations/0003_add_master_course_staff_in_ccx.py","position":110,"original_position":110,"commit_id":"98421e3f1dfb5a4de62ed3b7619c8bb80529cca0","original_commit_id":"98421e3f1dfb5a4de62ed3b7619c8bb80529cca0","user":{"login":"macdiesel","id":67862,"avatar_url":"https://avatars.githubusercontent.com/u/67862?v=3","gravatar_id":"","url":"https://api.github.com/users/macdiesel","html_url":"https://github.com/macdiesel","followers_url":"https://api.github.com/users/macdiesel/followers","following_url":"https://api.github.com/users/macdiesel/following{/other_user}","gists_url":"https://api.github.com/users/macdiesel/gists{/gist_id}","starred_url":"https://api.github.com/users/macdiesel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/macdiesel/subscriptions","organizations_url":"https://api.github.com/users/macdiesel/orgs","repos_url":"https://api.github.com/users/macdiesel/repos","events_url":"https://api.github.com/users/macdiesel/events{/privacy}","received_events_url":"https://api.github.com/users/macdiesel/received_events","type":"User","site_admin":false},"body":"I talked to @doctoryes this morning about this particular issue and please feel free to chime in if you would like.\r\n\r\nI would prefer to see us take a DRY approach. I can see where you may want to isolate this code to this file, at the same time once you take that stance the same thing could be said for get_course_by_id or CCXLocator. Also should there be an improvement to these methods (better exception handling, etc...) these changes would need to be made in two places. \r\n\r\nI would prefer we don't repeat ourselves.","created_at":"2016-03-22T15:17:58Z","updated_at":"2016-03-22T15:17:58Z","html_url":"https://github.com/edx/edx-platform/pull/11787#discussion_r57004830","pull_request_url":"https://api.github.com/repos/edx/edx-platform/pulls/11787","_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments/57004830"},"html":{"href":"https://github.com/edx/edx-platform/pull/11787#discussion_r57004830"},"pull_request":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11787"}}},"pull_request":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/11787","id":62508292,"html_url":"https://github.com/edx/edx-platform/pull/11787","diff_url":"https://github.com/edx/edx-platform/pull/11787.diff","patch_url":"https://github.com/edx/edx-platform/pull/11787.patch","issue_url":"https://api.github.com/repos/edx/edx-platform/issues/11787","number":11787,"state":"open","locked":false,"title":"Adds staff and instructor users of the master course to CCX","user":{"login":"amir-qayyum-khan","id":10431250,"avatar_url":"https://avatars.githubusercontent.com/u/10431250?v=3","gravatar_id":"","url":"https://api.github.com/users/amir-qayyum-khan","html_url":"https://github.com/amir-qayyum-khan","followers_url":"https://api.github.com/users/amir-qayyum-khan/followers","following_url":"https://api.github.com/users/amir-qayyum-khan/following{/other_user}","gists_url":"https://api.github.com/users/amir-qayyum-khan/gists{/gist_id}","starred_url":"https://api.github.com/users/amir-qayyum-khan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amir-qayyum-khan/subscriptions","organizations_url":"https://api.github.com/users/amir-qayyum-khan/orgs","repos_url":"https://api.github.com/users/amir-qayyum-khan/repos","events_url":"https://api.github.com/users/amir-qayyum-khan/events{/privacy}","received_events_url":"https://api.github.com/users/amir-qayyum-khan/received_events","type":"User","site_admin":false},"body":"### Background\r\nfixes https://github.com/mitocw/edx-platform/issues/126, fixes https://github.com/mitocw/edx-platform/issues/155, fixes https://github.com/mitocw/edx-platform/issues/115 and fixes https://github.com/mitocw/edx-platform/issues/205\r\n\r\nThis is an updated version of https://github.com/edx/edx-platform/pull/10877 which had to be reverted. \r\n\r\n### What is done in this PR\r\n**Studio Updates:** \r\n- Remove ccx from staff dashboard inside studio. Because  a master course can have unlimited ccx, staff's dashboard can be populated with a huge list of ccx along with master course \r\n\r\n**LMS Updates:** \r\n- This is for course staff to see what ccx coaches are doing with course.\r\n- Now when a coach creates a new ccx, I am assigning staff role on this ccx course to all staff of master course.\r\n- Added instructors of master course as instructor(s) in ccx.\r\n- Also adds the master course staff users to new CCX created via the CCX REST APIs\r\n- **Note:** This code will add/enrol staff and instructors in ccx and now max student limit for ccx depends on number of staff and admins. \r\n- Fixed view as student issue on ccx, now staff can view as student and see how ccx  view will appear to student\r\n- Fixed display name on ccx coach dashboard. Previously it was show display name of master course on coach dashboard.\r\n\r\n##### To run migration manually on devstack\r\n- ``python manage.py lms migrate ccx 0003 --settings=devstack``\r\n##### To reverse migration manually on devstack\r\n- ``python manage.py lms migrate ccx 0002 --settings=devstack``\r\n\r\n\r\n@pdpinch @giocalitri \r\n\r\n- Staff on Master course\r\n![screen shot 2015-11-30 at 5 12 54 pm](https://cloud.githubusercontent.com/assets/10431250/11471231/ba5e9cc8-9785-11e5-95c5-0cdcea97f780.png)\r\n\r\n- Staff on CCX\r\n![screen shot 2015-11-30 at 5 13 04 pm](https://cloud.githubusercontent.com/assets/10431250/11471234/c2d0a9dc-9785-11e5-865f-a1b7d79a34db.png)\r\n\r\n- Admin/instructors on master course\r\n![screen shot 2015-12-10 at 5 10 18 pm](https://cloud.githubusercontent.com/assets/10431250/11715098/08685ed0-9f61-11e5-8b79-87defb82c2c9.png)\r\n\r\n- Admin/instructors on ccx\r\n![screen shot 2015-12-10 at 5 10 22 pm](https://cloud.githubusercontent.com/assets/10431250/11715099/11ada5ae-9f61-11e5-92c3-d0316f1b6190.png)\r\n\r\n#### Fixed view as student\r\n\r\n![screen shot 2015-12-17 at 7 21 37 pm 2](https://cloud.githubusercontent.com/assets/10431250/11871777/8eb3d64e-a4f3-11e5-9b32-d0df4a0dd0a6.png)\r\n![screen shot 2015-12-17 at 7 21 53 pm 2](https://cloud.githubusercontent.com/assets/10431250/11871778/8eb92040-a4f3-11e5-9bb7-49c691d4bb24.png)\r\n![screen shot 2015-12-17 at 7 22 05 pm 2](https://cloud.githubusercontent.com/assets/10431250/11871779/8ebdc94c-a4f3-11e5-9e7d-0ee44b1652c3.png)\r\n\r\n#### Fixed display name of ccx on coach dashboard.\r\n![screen shot 2015-12-18 at 3 29 34 pm](https://cloud.githubusercontent.com/assets/10431250/11894922/3f39bfa8-a59c-11e5-82e9-0dabd349e963.png)\r\n![screen shot 2015-12-18 at 3 29 44 pm](https://cloud.githubusercontent.com/assets/10431250/11894921/3f3880de-a59c-11e5-9d38-da5de6837b8a.png)\r\n![screen shot 2015-12-18 at 3 29 55 pm](https://cloud.githubusercontent.com/assets/10431250/11894923/3f411bf4-a59c-11e5-80bb-b79b5073c936.png)\r\n","created_at":"2016-03-11T07:49:25Z","updated_at":"2016-03-22T15:17:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c3823f7e5a32b67297c2b1cb5687b63f638bf22b","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/edx/edx-platform/pulls/11787/commits","review_comments_url":"https://api.github.com/repos/edx/edx-platform/pulls/11787/comments","review_comment_url":"https://api.github.com/repos/edx/edx-platform/pulls/comments{/number}","comments_url":"https://api.github.com/repos/edx/edx-platform/issues/11787/comments","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/98421e3f1dfb5a4de62ed3b7619c8bb80529cca0","head":{"label":"mitocw:enhancement/aq/add_master_course_staff_in_ccx_fix_migration_issue","ref":"enhancement/aq/add_master_course_staff_in_ccx_fix_migration_issue","sha":"98421e3f1dfb5a4de62ed3b7619c8bb80529cca0","user":{"login":"mitocw","id":3009146,"avatar_url":"https://avatars.githubusercontent.com/u/3009146?v=3","gravatar_id":"","url":"https://api.github.com/users/mitocw","html_url":"https://github.com/mitocw","followers_url":"https://api.github.com/users/mitocw/followers","following_url":"https://api.github.com/users/mitocw/following{/other_user}","gists_url":"https://api.github.com/users/mitocw/gists{/gist_id}","starred_url":"https://api.github.com/users/mitocw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitocw/subscriptions","organizations_url":"https://api.github.com/users/mitocw/orgs","repos_url":"https://api.github.com/users/mitocw/repos","events_url":"https://api.github.com/users/mitocw/events{/privacy}","received_events_url":"https://api.github.com/users/mitocw/received_events","type":"Organization","site_admin":false},"repo":{"id":17842334,"name":"edx-platform","full_name":"mitocw/edx-platform","owner":{"login":"mitocw","id":3009146,"avatar_url":"https://avatars.githubusercontent.com/u/3009146?v=3","gravatar_id":"","url":"https://api.github.com/users/mitocw","html_url":"https://github.com/mitocw","followers_url":"https://api.github.com/users/mitocw/followers","following_url":"https://api.github.com/users/mitocw/following{/other_user}","gists_url":"https://api.github.com/users/mitocw/gists{/gist_id}","starred_url":"https://api.github.com/users/mitocw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mitocw/subscriptions","organizations_url":"https://api.github.com/users/mitocw/orgs","repos_url":"https://api.github.com/users/mitocw/repos","events_url":"https://api.github.com/users/mitocw/events{/privacy}","received_events_url":"https://api.github.com/users/mitocw/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mitocw/edx-platform","description":"the edX learning management system (LMS) and course authoring tool, Studio","fork":true,"url":"https://api.github.com/repos/mitocw/edx-platform","forks_url":"https://api.github.com/repos/mitocw/edx-platform/forks","keys_url":"https://api.github.com/repos/mitocw/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mitocw/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mitocw/edx-platform/teams","hooks_url":"https://api.github.com/repos/mitocw/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/mitocw/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/mitocw/edx-platform/events","assignees_url":"https://api.github.com/repos/mitocw/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/mitocw/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/mitocw/edx-platform/tags","blobs_url":"https://api.github.com/repos/mitocw/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mitocw/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mitocw/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/mitocw/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mitocw/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/mitocw/edx-platform/languages","stargazers_url":"https://api.github.com/repos/mitocw/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/mitocw/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/mitocw/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/mitocw/edx-platform/subscription","commits_url":"https://api.github.com/repos/mitocw/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/mitocw/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/mitocw/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/mitocw/edx-platform/issues/comments{/number}","contents_url":"https://api.github.com/repos/mitocw/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/mitocw/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mitocw/edx-platform/merges","archive_url":"https://api.github.com/repos/mitocw/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mitocw/edx-platform/downloads","issues_url":"https://api.github.com/repos/mitocw/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/mitocw/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/mitocw/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/mitocw/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mitocw/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/mitocw/edx-platform/releases{/id}","deployments_url":"https://api.github.com/repos/mitocw/edx-platform/deployments","created_at":"2014-03-17T20:32:05Z","updated_at":"2016-01-11T19:42:28Z","pushed_at":"2016-03-22T11:00:24Z","git_url":"git://github.com/mitocw/edx-platform.git","ssh_url":"git@github.com:mitocw/edx-platform.git","clone_url":"https://github.com/mitocw/edx-platform.git","svn_url":"https://github.com/mitocw/edx-platform","homepage":"http://code.edx.org/","size":651183,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":89,"forks":1,"open_issues":89,"watchers":3,"default_branch":"master"}},"base":{"label":"edx:master","ref":"master","sha":"7c5a9da7fc5d923e8ba10977064b1298c2d21565","user":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"repo":{"id":10391073,"name":"edx-platform","full_name":"edx/edx-platform","owner":{"login":"edx","id":3179841,"avatar_url":"https://avatars.githubusercontent.com/u/3179841?v=3","gravatar_id":"","url":"https://api.github.com/users/edx","html_url":"https://github.com/edx","followers_url":"https://api.github.com/users/edx/followers","following_url":"https://api.github.com/users/edx/following{/other_user}","gists_url":"https://api.github.com/users/edx/gists{/gist_id}","starred_url":"https://api.github.com/users/edx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/edx/subscriptions","organizations_url":"https://api.github.com/users/edx/orgs","repos_url":"https://api.github.com/users/edx/repos","events_url":"https://api.github.com/users/edx/events{/privacy}","received_events_url":"https://api.github.com/users/edx/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/edx/edx-platform","description":"The Open edX platform, the software that powers edX!","fork":false,"url":"https://api.github.com/repos/edx/edx-platform","forks_url":"https://api.github.com/repos/edx/edx-platform/forks","keys_url":"https://api.github.com/repos/edx/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/edx/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/edx/edx-platform/teams","hooks_url":"https://api.github.com/repos/edx/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/edx/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/edx/edx-platform/events","assignees_url":"https://api.github.com/repos/edx/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/edx/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/edx/edx-platform/tags","blobs_url":"https://api.github.com/repos/edx/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/edx/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/edx/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/edx/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/edx/edx-platform/languages","stargazers_url":"https://api.github.com/repos/edx/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/edx/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/edx/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/edx/edx-platform/subscription","commits_url":"https://api.github.com/repos/edx/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/edx/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/edx/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/edx/edx-platform/issues/comments{/number}","contents_url":"https://api.github.com/repos/edx/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/edx/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/edx/edx-platform/merges","archive_url":"https://api.github.com/repos/edx/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/edx/edx-platform/downloads","issues_url":"https://api.github.com/repos/edx/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/edx/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/edx/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/edx/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/edx/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/edx/edx-platform/releases{/id}","deployments_url":"https://api.github.com/repos/edx/edx-platform/deployments","created_at":"2013-05-30T20:20:38Z","updated_at":"2016-03-21T18:23:19Z","pushed_at":"2016-03-22T15:16:49Z","git_url":"git://github.com/edx/edx-platform.git","ssh_url":"git@github.com:edx/edx-platform.git","clone_url":"https://github.com/edx/edx-platform.git","svn_url":"https://github.com/edx/edx-platform","homepage":"http://open.edx.org/","size":727204,"stargazers_count":2453,"watchers_count":2453,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1490,"mirror_url":null,"open_issues_count":166,"forks":1490,"open_issues":166,"watchers":2453,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11787"},"html":{"href":"https://github.com/edx/edx-platform/pull/11787"},"issue":{"href":"https://api.github.com/repos/edx/edx-platform/issues/11787"},"comments":{"href":"https://api.github.com/repos/edx/edx-platform/issues/11787/comments"},"review_comments":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11787/comments"},"review_comment":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/11787/commits"},"statuses":{"href":"https://api.github.com/repos/edx/edx-platform/statuses/98421e3f1dfb5a4de62ed3b7619c8bb80529cca0"}}}}