{"action":"created","comment":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/comments/221223596","pull_request_review_id":159821521,"id":221223596,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMTIyMzU5Ng==","diff_hunk":"@@ -379,3 +388,226 @@ def debug_cohort_mgmt(request, course_key_string):\n         kwargs={'course_key': text_type(course_key)}\n     )}\n     return render_to_response('/course_groups/debug.html', context)\n+\n+\n+class APIPermissions(APIView):\n+    authentication_classes = (JwtAuthentication, OAuth2Authentication, SessionAuthentication,)\n+    permission_classes = (permissions.IsAuthenticated, permissions.IsAdminUser)\n+\n+\n+class CohortSettings(DeveloperErrorViewMixin, APIPermissions):\n+    \"\"\"\n+    **Use Cases**\n+\n+        Get the cohort setting for a course.\n+        Set the cohort setting for a course.\n+\n+    **Example Requests**:\n+\n+        GET /api/cohorts/v1/settings/{course_id}\n+        PUT /api/cohorts/v1/settings/{course_id}\n+\n+    **Response Values**\n+\n+        * is_cohorted: current status of the cohort setting\n+    \"\"\"\n+\n+    def get(self, request, course_key_string):\n+        \"\"\"\n+        Endpoint to fetch the course cohort settings.\n+        \"\"\"\n+        course_key, _ = api.get_course(request, course_key_string)\n+        return Response(_cohort_settings(course_key))\n+\n+    def put(self, request, course_key_string):\n+        \"\"\"\n+        Endpoint to set the course cohort settings.\n+        \"\"\"\n+        course_key, _ = api.get_course(request, course_key_string)\n+\n+        if 'is_cohorted' not in request.data:\n+            raise self.api_error(status.HTTP_400_BAD_REQUEST,\n+                                 'Missing field \"is_cohorted\".')\n+        try:\n+            cohorts.set_course_cohorted(course_key, request.data.get('is_cohorted'))\n+        except ValueError as err:\n+            raise self.api_error(status.HTTP_400_BAD_REQUEST, err)\n+        return Response(_cohort_settings(course_key))\n+\n+\n+class CohortHandler(DeveloperErrorViewMixin, APIPermissions):\n+    \"\"\"\n+    **Use Cases**\n+\n+        Get the current cohorts in a course.\n+        Create a new cohort in a course.\n+        Modify a cohort in a course.\n+\n+    **Example Requests**:\n+\n+        GET /api/cohorts/v1/courses/{course_id}/cohorts\n+        POST /api/cohorts/v1/courses/{course_id}/cohorts\n+        GET /api/cohorts/v1/courses/{course_id}/cohorts/{cohort_id}\n+        PATCH /api/cohorts/v1/courses/{course_id}/cohorts/{cohort_id}\n+\n+    **Response Values**\n+\n+        * cohorts: List of cohorts.\n+        * cohort: A cohort representation:\n+            * name: The string identifier for a cohort.\n+            * id: The integer identifier for a cohort.\n+            * user_count: The number of students in the cohort.\n+            * assignment_type: The string representing the assignment type.\n+            * user_partition_id: The integer identified of the UserPartition.\n+            * group_id: The integer identified of the specific group in the partition.\n+    \"\"\"\n+\n+    def get(self, request, course_key_string, cohort_id=None):\n+        \"\"\"\n+        Endpoint to get either one or all cohorts.\n+        \"\"\"\n+        course_key, course = api.get_course(request, course_key_string)\n+        if not cohort_id:\n+            all_cohorts = cohorts.get_course_cohorts(course)\n+            paginator = NamespacedPageNumberPagination()\n+            paginator.max_page_size = 100\n+            page = paginator.paginate_queryset(all_cohorts, request)\n+            response = [_get_cohort_representation(c, course) for c in page]\n+            return Response(response, status=status.HTTP_200_OK)\n+        else:\n+            cohort = cohorts.get_cohort_by_id(course_key, cohort_id)\n+            return Response(_get_cohort_representation(cohort, course), status=status.HTTP_200_OK)\n+\n+    def post(self, request, course_key_string, cohort_id=None):\n+        \"\"\"\n+        Endpoint to create a new cohort, must not include cohort_id.\n+        \"\"\"\n+        if cohort_id is not None:\n+            raise self.api_error(status.HTTP_400_BAD_REQUEST,\n+                                 'Please user the parent endpoint.',\n+                                 'wrong-endpoint')\n+        course_key, course = api.get_course(request, course_key_string)\n+        name = request.data.get('name')\n+        if not name:\n+            raise self.api_error(status.HTTP_400_BAD_REQUEST,\n+                                 'Cohort name must be specified.',\n+                                 'missing-cohort-name')\n+        assignment_type = request.data.get('assignment_type')\n+        if not assignment_type:\n+            raise self.api_error(status.HTTP_400_BAD_REQUEST,\n+                                 'Assignment type must be specified.',\n+                                 'missing-assignment-type')\n+        return Response(_get_cohort_representation(cohorts.add_cohort(course_key, name, assignment_type), course))\n+\n+    def patch(self, request, course_key_string, cohort_id=None):\n+        \"\"\"\n+        Endpoint to update a cohort information, including:\n+        \"\"\"\n+        name = request.data.get('name')\n+        assignment_type = request.data.get('assignment_type')\n+        if None in {cohort_id, name, assignment_type}:\n+            raise self.api_error(status.HTTP_400_BAD_REQUEST,\n+                                 'Request must include cohort id, name and assignment type.',\n+                                 'missing-field')\n+        course_key, _ = api.get_course(request, course_key_string)\n+        cohort = cohorts.get_cohort_by_id(course_key, cohort_id)\n+        if name != cohort.name:\n+            if cohorts.is_cohort_exists(course_key, name):\n+                raise self.api_error(status.HTTP_400_BAD_REQUEST,\n+                                     'A cohort with the same name already exists.',\n+                                     'cohort-name-exists')\n+            cohort.name = name\n+            cohort.save()\n+        cohorts.set_assignment_type(cohort, assignment_type)\n+        return Response(status=status.HTTP_204_NO_CONTENT)\n+\n+\n+class CohortUsers(DeveloperErrorViewMixin, APIPermissions):\n+    \"\"\"\n+    **Use Cases**\n+\n+        Removes an user from a cohort.\n+        Add a user to a specific cohort.\n+\n+    **Example Requests**:\n+\n+        DELETE /api/cohorts/v1/courses/{course_id}/cohorts/{cohort_id}/users/{username}\n+        POST /api/cohorts/v1/courses/{course_id}/cohorts/{cohort_id}/users/{username}\n+        POST /api/cohorts/v1/courses/{course_id}/cohorts/{cohort_id}/users\n+\n+    **Response Values**\n+        * success: Boolean indicating if the operation was successful.\n+        * added: Usernames/emails of the users that have been added to the cohort.\n+        * changed: Usernames/emails of the users that have been moved to the cohort.\n+        * present: Usernames/emails of the users already present in the cohort.\n+        * unknown: Usernames/emails of the users with an unknown cohort.\n+        * preassigned: Usernames/emails of unenrolled users that have been preassigned to the cohort.\n+        * invalid: Invalid emails submitted.\n+    \"\"\"\n+\n+    # pylint: disable=unused-argument\n+    def delete(self, request, course_key_string, cohort_id, username=None):\n+        \"\"\"\n+        Removes and user from a specific cohort.\n+\n+        Note: It's better to use the post method to move users between cohorts.\n+        \"\"\"\n+        course_key, _ = api.get_course(request, course_key_string)\n+        try:\n+            api.remove_user_from_cohort(course_key, username)\n+        except User.DoesNotExist:\n+            raise self.api_error(status.HTTP_404_NOT_FOUND, 'User does not exist.', 'user-not-found')\n+        return Response(status=status.HTTP_204_NO_CONTENT)\n+\n+    def post(self, request, course_key_string, cohort_id, username=None):\n+        \"\"\"\n+        Add given users to the cohort.\n+        \"\"\"\n+        course_key, _ = api.get_course(request, course_key_string)\n+        try:\n+            cohort = cohorts.get_cohort_by_id(course_key, cohort_id)\n+        except CourseUserGroup.DoesNotExist:\n+            msg = 'Cohort (ID {cohort_id}) not found for {course_key_string}'.format(\n+                cohort_id=cohort_id,\n+                course_key_string=course_key_string\n+            )\n+            raise self.api_error(status.HTTP_404_NOT_FOUND, msg, 'cohort-not-found')\n+\n+        users = request.data.get('users')\n+        if not users and username is not None:\n+            users = [username]\n+\n+        added, changed, present, unknown, preassigned, invalid = [], [], [], [], [], []\n+        for username_or_email in users:\n+            if not username_or_email:\n+                continue\n+\n+            try:\n+                # A user object is only returned by add_user_to_cohort if the user already exists.\n+                (user, previous_cohort, preassignedCohort) = cohorts.add_user_to_cohort(cohort, username_or_email)\n+\n+                if preassignedCohort:\n+                    preassigned.append(username_or_email)\n+                elif previous_cohort:\n+                    info = {'email': user.email,\n+                            'previous_cohort': previous_cohort,\n+                            'username': user.username}","path":"openedx/core/djangoapps/course_groups/views.py","position":276,"original_position":276,"commit_id":"15a863e1ad530673579684e718d4c9438a8e5429","original_commit_id":"15a863e1ad530673579684e718d4c9438a8e5429","user":{"login":"viadanna","id":5691347,"node_id":"MDQ6VXNlcjU2OTEzNDc=","avatar_url":"https://avatars0.githubusercontent.com/u/5691347?v=4","gravatar_id":"","url":"https://api.github.com/users/viadanna","html_url":"https://github.com/viadanna","followers_url":"https://api.github.com/users/viadanna/followers","following_url":"https://api.github.com/users/viadanna/following{/other_user}","gists_url":"https://api.github.com/users/viadanna/gists{/gist_id}","starred_url":"https://api.github.com/users/viadanna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/viadanna/subscriptions","organizations_url":"https://api.github.com/users/viadanna/orgs","repos_url":"https://api.github.com/users/viadanna/repos","events_url":"https://api.github.com/users/viadanna/events{/privacy}","received_events_url":"https://api.github.com/users/viadanna/received_events","type":"User","site_admin":false},"body":"👍 ","created_at":"2018-09-28T11:32:35Z","updated_at":"2018-09-28T11:32:35Z","html_url":"https://github.com/edx/edx-platform/pull/18975#discussion_r221223596","pull_request_url":"https://api.github.com/repos/edx/edx-platform/pulls/18975","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/comments/221223596"},"html":{"href":"https://github.com/edx/edx-platform/pull/18975#discussion_r221223596"},"pull_request":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/18975"}},"in_reply_to_id":221085576},"pull_request":{"url":"https://api.github.com/repos/edx/edx-platform/pulls/18975","id":216664056,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE2NjY0MDU2","html_url":"https://github.com/edx/edx-platform/pull/18975","diff_url":"https://github.com/edx/edx-platform/pull/18975.diff","patch_url":"https://github.com/edx/edx-platform/pull/18975.patch","issue_url":"https://api.github.com/repos/edx/edx-platform/issues/18975","number":18975,"state":"open","locked":false,"title":"WIP Cohorting API","user":{"login":"viadanna","id":5691347,"node_id":"MDQ6VXNlcjU2OTEzNDc=","avatar_url":"https://avatars0.githubusercontent.com/u/5691347?v=4","gravatar_id":"","url":"https://api.github.com/users/viadanna","html_url":"https://github.com/viadanna","followers_url":"https://api.github.com/users/viadanna/followers","following_url":"https://api.github.com/users/viadanna/following{/other_user}","gists_url":"https://api.github.com/users/viadanna/gists{/gist_id}","starred_url":"https://api.github.com/users/viadanna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/viadanna/subscriptions","organizations_url":"https://api.github.com/users/viadanna/orgs","repos_url":"https://api.github.com/users/viadanna/repos","events_url":"https://api.github.com/users/viadanna/events{/privacy}","received_events_url":"https://api.github.com/users/viadanna/received_events","type":"User","site_admin":false},"body":"This work in progress PR implements an alternative cohort management API for server-to-server communication.\r\n\r\n**Sandbox URL**: TBD - sandbox is being provisioned.\r\n\r\n**Merge deadline**: \"None\"\r\n\r\n**Testing instructions**: TBD\r\n\r\n**Reviewers**\r\n- [ ] @xitij2000 \r\n- [ ] edX reviewer[s] TBD","created_at":"2018-09-19T14:38:04Z","updated_at":"2018-09-28T11:32:35Z","closed_at":null,"merged_at":null,"merge_commit_sha":"40f3c0221361fbcbfad3732ef399af90d48dd24a","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":920772109,"node_id":"MDU6TGFiZWw5MjA3NzIxMDk=","url":"https://api.github.com/repos/edx/edx-platform/labels/architecture%20review","name":"architecture review","color":"f4a213","default":false},{"id":78051711,"node_id":"MDU6TGFiZWw3ODA1MTcxMQ==","url":"https://api.github.com/repos/edx/edx-platform/labels/open-source-contribution","name":"open-source-contribution","color":"bfe5bf","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/edx/edx-platform/pulls/18975/commits","review_comments_url":"https://api.github.com/repos/edx/edx-platform/pulls/18975/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/18975/comments","statuses_url":"https://api.github.com/repos/edx/edx-platform/statuses/15a863e1ad530673579684e718d4c9438a8e5429","head":{"label":"open-craft:MCKIN-8395/cohorts-api","ref":"MCKIN-8395/cohorts-api","sha":"15a863e1ad530673579684e718d4c9438a8e5429","user":{"login":"open-craft","id":7414786,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0MTQ3ODY=","avatar_url":"https://avatars0.githubusercontent.com/u/7414786?v=4","gravatar_id":"","url":"https://api.github.com/users/open-craft","html_url":"https://github.com/open-craft","followers_url":"https://api.github.com/users/open-craft/followers","following_url":"https://api.github.com/users/open-craft/following{/other_user}","gists_url":"https://api.github.com/users/open-craft/gists{/gist_id}","starred_url":"https://api.github.com/users/open-craft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/open-craft/subscriptions","organizations_url":"https://api.github.com/users/open-craft/orgs","repos_url":"https://api.github.com/users/open-craft/repos","events_url":"https://api.github.com/users/open-craft/events{/privacy}","received_events_url":"https://api.github.com/users/open-craft/received_events","type":"Organization","site_admin":false},"repo":{"id":19940883,"node_id":"MDEwOlJlcG9zaXRvcnkxOTk0MDg4Mw==","name":"edx-platform","full_name":"open-craft/edx-platform","private":false,"owner":{"login":"open-craft","id":7414786,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc0MTQ3ODY=","avatar_url":"https://avatars0.githubusercontent.com/u/7414786?v=4","gravatar_id":"","url":"https://api.github.com/users/open-craft","html_url":"https://github.com/open-craft","followers_url":"https://api.github.com/users/open-craft/followers","following_url":"https://api.github.com/users/open-craft/following{/other_user}","gists_url":"https://api.github.com/users/open-craft/gists{/gist_id}","starred_url":"https://api.github.com/users/open-craft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/open-craft/subscriptions","organizations_url":"https://api.github.com/users/open-craft/orgs","repos_url":"https://api.github.com/users/open-craft/repos","events_url":"https://api.github.com/users/open-craft/events{/privacy}","received_events_url":"https://api.github.com/users/open-craft/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/open-craft/edx-platform","description":"the edX learning management system (LMS) and course authoring tool, Studio","fork":true,"url":"https://api.github.com/repos/open-craft/edx-platform","forks_url":"https://api.github.com/repos/open-craft/edx-platform/forks","keys_url":"https://api.github.com/repos/open-craft/edx-platform/keys{/key_id}","collaborators_url":"https://api.github.com/repos/open-craft/edx-platform/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/open-craft/edx-platform/teams","hooks_url":"https://api.github.com/repos/open-craft/edx-platform/hooks","issue_events_url":"https://api.github.com/repos/open-craft/edx-platform/issues/events{/number}","events_url":"https://api.github.com/repos/open-craft/edx-platform/events","assignees_url":"https://api.github.com/repos/open-craft/edx-platform/assignees{/user}","branches_url":"https://api.github.com/repos/open-craft/edx-platform/branches{/branch}","tags_url":"https://api.github.com/repos/open-craft/edx-platform/tags","blobs_url":"https://api.github.com/repos/open-craft/edx-platform/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/open-craft/edx-platform/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/open-craft/edx-platform/git/refs{/sha}","trees_url":"https://api.github.com/repos/open-craft/edx-platform/git/trees{/sha}","statuses_url":"https://api.github.com/repos/open-craft/edx-platform/statuses/{sha}","languages_url":"https://api.github.com/repos/open-craft/edx-platform/languages","stargazers_url":"https://api.github.com/repos/open-craft/edx-platform/stargazers","contributors_url":"https://api.github.com/repos/open-craft/edx-platform/contributors","subscribers_url":"https://api.github.com/repos/open-craft/edx-platform/subscribers","subscription_url":"https://api.github.com/repos/open-craft/edx-platform/subscription","commits_url":"https://api.github.com/repos/open-craft/edx-platform/commits{/sha}","git_commits_url":"https://api.github.com/repos/open-craft/edx-platform/git/commits{/sha}","comments_url":"https://api.github.com/repos/open-craft/edx-platform/comments{/number}","issue_comment_url":"https://api.github.com/repos/open-craft/edx-platform/issues/comments{/number}","contents_url":"https://api.github.com/repos/open-craft/edx-platform/contents/{+path}","compare_url":"https://api.github.com/repos/open-craft/edx-platform/compare/{base}...{head}","merges_url":"https://api.github.com/repos/open-craft/edx-platform/merges","archive_url":"https://api.github.com/repos/open-craft/edx-platform/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/open-craft/edx-platform/downloads","issues_url":"https://api.github.com/repos/open-craft/edx-platform/issues{/number}","pulls_url":"https://api.github.com/repos/open-craft/edx-platform/pulls{/number}","milestones_url":"https://api.github.com/repos/open-craft/edx-platform/milestones{/number}","notifications_url":"https://api.github.com/repos/open-craft/edx-platform/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/open-craft/edx-platform/labels{/name}","releases_url":"https://api.github.com/repos/open-craft/edx-platform/releases{/id}","deployments_url":"https://api.github.com/repos/open-craft/edx-platform/deployments","created_at":"2014-05-19T12:28:25Z","updated_at":"2018-07-20T16:54:43Z","pushed_at":"2018-09-28T06:20:41Z","git_url":"git://github.com/open-craft/edx-platform.git","ssh_url":"git@github.com:open-craft/edx-platform.git","clone_url":"https://github.com/open-craft/edx-platform.git","svn_url":"https://github.com/open-craft/edx-platform","homepage":"http://code.edx.org/","size":975160,"stargazers_count":6,"watchers_count":6,"language":"Python","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":5,"license":null,"forks":1,"open_issues":5,"watchers":6,"default_branch":"open-craft-notice"}},"base":{"label":"edx:master","ref":"master","sha":"65ab430c0487fb1312be7daa7ba365a6fc9aa23d","user":{"login":"edx","id":3179841,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzk4NDE=","avatar_url":"https://avatars3.githubusercontent.com/u/3179841?v=4","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,"node_id":"MDEwOlJlcG9zaXRvcnkxMDM5MTA3Mw==","name":"edx-platform","full_name":"edx/edx-platform","private":false,"owner":{"login":"edx","id":3179841,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMxNzk4NDE=","avatar_url":"https://avatars3.githubusercontent.com/u/3179841?v=4","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},"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":"2018-09-28T05:20:54Z","pushed_at":"2018-09-28T07:14:45Z","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":966509,"stargazers_count":3871,"watchers_count":3871,"language":"Python","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2179,"mirror_url":null,"archived":false,"open_issues_count":220,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":2179,"open_issues":220,"watchers":3871,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/18975"},"html":{"href":"https://github.com/edx/edx-platform/pull/18975"},"issue":{"href":"https://api.github.com/repos/edx/edx-platform/issues/18975"},"comments":{"href":"https://api.github.com/repos/edx/edx-platform/issues/18975/comments"},"review_comments":{"href":"https://api.github.com/repos/edx/edx-platform/pulls/18975/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/18975/commits"},"statuses":{"href":"https://api.github.com/repos/edx/edx-platform/statuses/15a863e1ad530673579684e718d4c9438a8e5429"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"viadanna"}}