{"action":"created","comment":{"url":"https://api.github.com/repos/codalab/codalab-competitions/pulls/comments/183861738","pull_request_review_id":114938393,"id":183861738,"diff_hunk":"@@ -0,0 +1,177 @@\n+\n+from django.core.files.uploadedfile import SimpleUploadedFile\n+from django.test import TestCase\n+from django.contrib.auth import get_user_model\n+from django.core.urlresolvers import reverse\n+\n+from apps.web.models import Competition\n+from apps.teams.models import Team\n+\n+User = get_user_model()\n+\n+\n+class CompetitionOrganizerTeamsTests(TestCase):\n+    def setUp(self):\n+        self.creator = User.objects.create(email='test@user.com', username='testuser')\n+        self.creator.set_password('test')\n+        self.creator.save()\n+\n+        self.admin = User.objects.create(email='testadmin@user.com', username='testadminuser')\n+        self.admin.set_password('testadmin')\n+        self.admin.save()\n+\n+        self.user = User.objects.create(email='testclient@user.com', username='testclientuser')\n+        self.user.set_password('testclient')\n+        self.user.save()\n+\n+        self.competition = Competition.objects.create(creator=self.creator, modified_by=self.creator)\n+        self.competition.admins.add(self.admin)\n+        self.competition.save()\n+\n+    # def test_organizer_teams_permissions(self):\n+    def test_organizer_teams_competition_creator_can_create_teams(self):\n+        # Creator and Admin should be allowed.\n+        self.client.login(username='testuser', password='test')\n+        resp = self.client.post(reverse('create_org_team', kwargs={'competition_pk': self.competition.pk}), {\"text_members\": \"test@user.com\", \"name\": \"Test Team 1\", \"description\": \"Test Team\"})\n+        assert resp.status_code == 302\n+        assert resp.url == 'http://testserver/my/competition/1/participants/'\n+\n+    def test_organizer_teams_sitewide_admin_can_create_teams(self):\n+        self.client.login(username='testadminuser', password='testadmin')\n+        resp = self.client.post(reverse('create_org_team', kwargs={'competition_pk': self.competition.pk}),\n+                          {\"text_members\": \"testadmin@user.com\", \"name\": \"Test Team 3\", \"description\": \"Test Team\"})\n+        assert resp.status_code == 302\n+        assert resp.url == 'http://testserver/my/competition/1/participants/'\n+\n+    def test_organizer_teams_regular_user_cannot_create_teams(self):\n+        # Random users should not be allowed, nor anonymous users\n+        self.client.login(username='testclientuser', password='testclient')\n+        resp = self.client.post(reverse('create_org_team', kwargs={'competition_pk': self.competition.pk}),\n+                      {\"text_members\": \"testclient@user.com\", \"name\": \"Test Team 2\", \"description\": \"Test Team\"})\n+        assert resp.status_code == 403\n+\n+    def test_organizer_teams_random_user_cannot_create_teams(self):\n+        resp = self.client.post(reverse('create_org_team', kwargs={'competition_pk': self.competition.pk}),\n+                         {\"text_members\": \"testadmin@user.com\", \"name\": \"Test Team 4\", \"description\": \"Test Team\"})\n+        assert resp.status_code == 302\n+        assert resp.url == 'http://testserver/accounts/login/?next=/teams/1/create_org_team/'\n+\n+    def test_organizer_team_form_with_creator(self):\n+        self.client.login(username='testuser', password='test')\n+        resp = self.client.post(reverse('create_org_team', kwargs={'competition_pk': self.competition.pk}),\n+                            {\"text_members\": \"test@user.com\", \"name\": \"Test Team 1\", \"description\": \"Test Team\"})\n+        assert resp.status_code == 302\n+        # Make sure new team was created\n+        new_team = Team.objects.get(name=\"Test Team 1\", description=\"Test Team\")\n+\n+        assert self.creator in new_team.members.all()\n+\n+        resp = self.client.post(\n+            reverse(\n+                'edit_org_team',\n+                kwargs={'competition_pk': self.competition.pk, 'pk': new_team.pk}\n+            ),\n+            {\"text_members\": \"test@user.com\", \"name\": \"Test Team 1\", \"description\": \"Test Team\"}\n+        )\n+\n+        assert resp.status_code == 302\n+        other_teams = Team.objects.all().exclude(pk=new_team.pk)\n+        # Make sure we still only have one instance\n+        assert not other_teams\n+        # Make sure we can still grab it by the same name and description. We didnt change anything.\n+        new_team = Team.objects.get(name=\"Test Team 1\", description=\"Test Team\")\n+\n+        resp = self.client.post(\n+            reverse(\n+                'edit_org_team',\n+                kwargs={'competition_pk': self.competition.pk, 'pk': new_team.pk}\n+            ),\n+            {\"text_members\": \"test@user.com\", \"name\": \"Test Team @@@\", \"description\": \"Test Team @@@\"}\n+        )\n+\n+        assert resp.status_code == 302\n+        new_team = Team.objects.get(name=\"Test Team @@@\", description=\"Test Team @@@\")\n+        # Make sure we can grab it by the new name and description.\n+        # We should still have the creator as a member\n+        assert self.creator in new_team.members.all()\n+\n+        resp = self.client.post(\n+            reverse(\n+                'edit_org_team',\n+                kwargs={'competition_pk': self.competition.pk, 'pk': new_team.pk}\n+            ),\n+            {\"text_members\": \"test@user.com, testclientuser\", \"name\": \"Test Team @@@\", \"description\": \"Test Team @@@\"}\n+        )\n+\n+        assert resp.status_code == 302\n+        new_team = Team.objects.get(name=\"Test Team @@@\", description=\"Test Team @@@\")\n+        # Make sure we can grab it by the new name and description.\n+        # We should still have the creator as a member, and now a regular user\n+        assert self.creator in new_team.members.all()\n+        assert self.user in new_team.members.all()\n+\n+        # Create a new team with our creator as a member. This should remove us from the first team.\n+        resp = self.client.post(reverse('create_org_team', kwargs={'competition_pk': self.competition.pk}),\n+                            {\"text_members\": \"test@user.com\", \"name\": \"@@@Test@@@\", \"description\": \"@@@Test@@@\"})\n+        assert resp.status_code == 302\n+        new_team_to_leave_for = Team.objects.get(name=\"@@@Test@@@\", description=\"@@@Test@@@\")\n+        # Check that our creator got removed from the first team, and added to the second.\n+        assert self.creator not in new_team.members.all()\n+        assert self.creator in new_team_to_leave_for.members.all()\n+\n+    def test_organizer_teams_csv_file_form(self):","path":"codalab/apps/teams/tests/test_organizer_teams.py","position":122,"original_position":122,"commit_id":"27c8c464d857141ff1c538d5239a8b64fb1331aa","original_commit_id":"27c8c464d857141ff1c538d5239a8b64fb1331aa","user":{"login":"ckcollab","id":2185159,"avatar_url":"https://avatars2.githubusercontent.com/u/2185159?v=4","gravatar_id":"","url":"https://api.github.com/users/ckcollab","html_url":"https://github.com/ckcollab","followers_url":"https://api.github.com/users/ckcollab/followers","following_url":"https://api.github.com/users/ckcollab/following{/other_user}","gists_url":"https://api.github.com/users/ckcollab/gists{/gist_id}","starred_url":"https://api.github.com/users/ckcollab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ckcollab/subscriptions","organizations_url":"https://api.github.com/users/ckcollab/orgs","repos_url":"https://api.github.com/users/ckcollab/repos","events_url":"https://api.github.com/users/ckcollab/events{/privacy}","received_events_url":"https://api.github.com/users/ckcollab/received_events","type":"User","site_admin":false},"body":"is there a test for re-uploading the same CSV?","created_at":"2018-04-24T20:02:18Z","updated_at":"2018-04-24T20:02:22Z","html_url":"https://github.com/codalab/codalab-competitions/pull/2267#discussion_r183861738","pull_request_url":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/codalab/codalab-competitions/pulls/comments/183861738"},"html":{"href":"https://github.com/codalab/codalab-competitions/pull/2267#discussion_r183861738"},"pull_request":{"href":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267"}}},"pull_request":{"url":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267","id":182589645,"html_url":"https://github.com/codalab/codalab-competitions/pull/2267","diff_url":"https://github.com/codalab/codalab-competitions/pull/2267.diff","patch_url":"https://github.com/codalab/codalab-competitions/pull/2267.patch","issue_url":"https://api.github.com/repos/codalab/codalab-competitions/issues/2267","number":2267,"state":"open","locked":false,"title":"A-Teams","user":{"login":"Tthomas63","id":28552312,"avatar_url":"https://avatars0.githubusercontent.com/u/28552312?v=4","gravatar_id":"","url":"https://api.github.com/users/Tthomas63","html_url":"https://github.com/Tthomas63","followers_url":"https://api.github.com/users/Tthomas63/followers","following_url":"https://api.github.com/users/Tthomas63/following{/other_user}","gists_url":"https://api.github.com/users/Tthomas63/gists{/gist_id}","starred_url":"https://api.github.com/users/Tthomas63/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tthomas63/subscriptions","organizations_url":"https://api.github.com/users/Tthomas63/orgs","repos_url":"https://api.github.com/users/Tthomas63/repos","events_url":"https://api.github.com/users/Tthomas63/events{/privacy}","received_events_url":"https://api.github.com/users/Tthomas63/received_events","type":"User","site_admin":false},"body":"Features for A-Teams:\r\n - Competition `Allow Organizer Teams` option\r\n - Remove Teams tab/participation approval\r\n - Add Create Organizer Team Button/Form/View/Template\r\n - Add Create Organizer Team from CSV Button/Form/View/Template\r\n - Added logic to `Team` save to prevent users from having more than 1 `TeamMembership` Object per `Competition`.\r\n - Add validation/error handling to forms","created_at":"2018-04-18T20:11:52Z","updated_at":"2018-04-24T20:02:22Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cf304491398d971e9235ad4764ce8ee7f4c34114","assignee":{"login":"BrendanMyers88","id":19380562,"avatar_url":"https://avatars3.githubusercontent.com/u/19380562?v=4","gravatar_id":"","url":"https://api.github.com/users/BrendanMyers88","html_url":"https://github.com/BrendanMyers88","followers_url":"https://api.github.com/users/BrendanMyers88/followers","following_url":"https://api.github.com/users/BrendanMyers88/following{/other_user}","gists_url":"https://api.github.com/users/BrendanMyers88/gists{/gist_id}","starred_url":"https://api.github.com/users/BrendanMyers88/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BrendanMyers88/subscriptions","organizations_url":"https://api.github.com/users/BrendanMyers88/orgs","repos_url":"https://api.github.com/users/BrendanMyers88/repos","events_url":"https://api.github.com/users/BrendanMyers88/events{/privacy}","received_events_url":"https://api.github.com/users/BrendanMyers88/received_events","type":"User","site_admin":false},"assignees":[{"login":"BrendanMyers88","id":19380562,"avatar_url":"https://avatars3.githubusercontent.com/u/19380562?v=4","gravatar_id":"","url":"https://api.github.com/users/BrendanMyers88","html_url":"https://github.com/BrendanMyers88","followers_url":"https://api.github.com/users/BrendanMyers88/followers","following_url":"https://api.github.com/users/BrendanMyers88/following{/other_user}","gists_url":"https://api.github.com/users/BrendanMyers88/gists{/gist_id}","starred_url":"https://api.github.com/users/BrendanMyers88/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/BrendanMyers88/subscriptions","organizations_url":"https://api.github.com/users/BrendanMyers88/orgs","repos_url":"https://api.github.com/users/BrendanMyers88/repos","events_url":"https://api.github.com/users/BrendanMyers88/events{/privacy}","received_events_url":"https://api.github.com/users/BrendanMyers88/received_events","type":"User","site_admin":false},{"login":"Tthomas63","id":28552312,"avatar_url":"https://avatars0.githubusercontent.com/u/28552312?v=4","gravatar_id":"","url":"https://api.github.com/users/Tthomas63","html_url":"https://github.com/Tthomas63","followers_url":"https://api.github.com/users/Tthomas63/followers","following_url":"https://api.github.com/users/Tthomas63/following{/other_user}","gists_url":"https://api.github.com/users/Tthomas63/gists{/gist_id}","starred_url":"https://api.github.com/users/Tthomas63/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tthomas63/subscriptions","organizations_url":"https://api.github.com/users/Tthomas63/orgs","repos_url":"https://api.github.com/users/Tthomas63/repos","events_url":"https://api.github.com/users/Tthomas63/events{/privacy}","received_events_url":"https://api.github.com/users/Tthomas63/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":690688475,"url":"https://api.github.com/repos/codalab/codalab-competitions/labels/review","name":"review","color":"eb6420","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267/commits","review_comments_url":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267/comments","review_comment_url":"https://api.github.com/repos/codalab/codalab-competitions/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codalab/codalab-competitions/issues/2267/comments","statuses_url":"https://api.github.com/repos/codalab/codalab-competitions/statuses/27c8c464d857141ff1c538d5239a8b64fb1331aa","head":{"label":"codalab:a-teams","ref":"a-teams","sha":"27c8c464d857141ff1c538d5239a8b64fb1331aa","user":{"login":"codalab","id":4633552,"avatar_url":"https://avatars0.githubusercontent.com/u/4633552?v=4","gravatar_id":"","url":"https://api.github.com/users/codalab","html_url":"https://github.com/codalab","followers_url":"https://api.github.com/users/codalab/followers","following_url":"https://api.github.com/users/codalab/following{/other_user}","gists_url":"https://api.github.com/users/codalab/gists{/gist_id}","starred_url":"https://api.github.com/users/codalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codalab/subscriptions","organizations_url":"https://api.github.com/users/codalab/orgs","repos_url":"https://api.github.com/users/codalab/repos","events_url":"https://api.github.com/users/codalab/events{/privacy}","received_events_url":"https://api.github.com/users/codalab/received_events","type":"Organization","site_admin":false},"repo":{"id":10556194,"name":"codalab-competitions","full_name":"codalab/codalab-competitions","owner":{"login":"codalab","id":4633552,"avatar_url":"https://avatars0.githubusercontent.com/u/4633552?v=4","gravatar_id":"","url":"https://api.github.com/users/codalab","html_url":"https://github.com/codalab","followers_url":"https://api.github.com/users/codalab/followers","following_url":"https://api.github.com/users/codalab/following{/other_user}","gists_url":"https://api.github.com/users/codalab/gists{/gist_id}","starred_url":"https://api.github.com/users/codalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codalab/subscriptions","organizations_url":"https://api.github.com/users/codalab/orgs","repos_url":"https://api.github.com/users/codalab/repos","events_url":"https://api.github.com/users/codalab/events{/privacy}","received_events_url":"https://api.github.com/users/codalab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codalab/codalab-competitions","description":"CodaLab Competitions","fork":false,"url":"https://api.github.com/repos/codalab/codalab-competitions","forks_url":"https://api.github.com/repos/codalab/codalab-competitions/forks","keys_url":"https://api.github.com/repos/codalab/codalab-competitions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codalab/codalab-competitions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codalab/codalab-competitions/teams","hooks_url":"https://api.github.com/repos/codalab/codalab-competitions/hooks","issue_events_url":"https://api.github.com/repos/codalab/codalab-competitions/issues/events{/number}","events_url":"https://api.github.com/repos/codalab/codalab-competitions/events","assignees_url":"https://api.github.com/repos/codalab/codalab-competitions/assignees{/user}","branches_url":"https://api.github.com/repos/codalab/codalab-competitions/branches{/branch}","tags_url":"https://api.github.com/repos/codalab/codalab-competitions/tags","blobs_url":"https://api.github.com/repos/codalab/codalab-competitions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codalab/codalab-competitions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codalab/codalab-competitions/git/refs{/sha}","trees_url":"https://api.github.com/repos/codalab/codalab-competitions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codalab/codalab-competitions/statuses/{sha}","languages_url":"https://api.github.com/repos/codalab/codalab-competitions/languages","stargazers_url":"https://api.github.com/repos/codalab/codalab-competitions/stargazers","contributors_url":"https://api.github.com/repos/codalab/codalab-competitions/contributors","subscribers_url":"https://api.github.com/repos/codalab/codalab-competitions/subscribers","subscription_url":"https://api.github.com/repos/codalab/codalab-competitions/subscription","commits_url":"https://api.github.com/repos/codalab/codalab-competitions/commits{/sha}","git_commits_url":"https://api.github.com/repos/codalab/codalab-competitions/git/commits{/sha}","comments_url":"https://api.github.com/repos/codalab/codalab-competitions/comments{/number}","issue_comment_url":"https://api.github.com/repos/codalab/codalab-competitions/issues/comments{/number}","contents_url":"https://api.github.com/repos/codalab/codalab-competitions/contents/{+path}","compare_url":"https://api.github.com/repos/codalab/codalab-competitions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codalab/codalab-competitions/merges","archive_url":"https://api.github.com/repos/codalab/codalab-competitions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codalab/codalab-competitions/downloads","issues_url":"https://api.github.com/repos/codalab/codalab-competitions/issues{/number}","pulls_url":"https://api.github.com/repos/codalab/codalab-competitions/pulls{/number}","milestones_url":"https://api.github.com/repos/codalab/codalab-competitions/milestones{/number}","notifications_url":"https://api.github.com/repos/codalab/codalab-competitions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codalab/codalab-competitions/labels{/name}","releases_url":"https://api.github.com/repos/codalab/codalab-competitions/releases{/id}","deployments_url":"https://api.github.com/repos/codalab/codalab-competitions/deployments","created_at":"2013-06-07T18:23:37Z","updated_at":"2018-04-24T18:26:21Z","pushed_at":"2018-04-24T18:54:13Z","git_url":"git://github.com/codalab/codalab-competitions.git","ssh_url":"git@github.com:codalab/codalab-competitions.git","clone_url":"https://github.com/codalab/codalab-competitions.git","svn_url":"https://github.com/codalab/codalab-competitions","homepage":"https://competitions.codalab.org","size":62064,"stargazers_count":155,"watchers_count":155,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":69,"mirror_url":null,"archived":false,"open_issues_count":27,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":69,"open_issues":27,"watchers":155,"default_branch":"develop"}},"base":{"label":"codalab:develop","ref":"develop","sha":"bab97920cf9f0ff52c83764e39431ee88e693d2d","user":{"login":"codalab","id":4633552,"avatar_url":"https://avatars0.githubusercontent.com/u/4633552?v=4","gravatar_id":"","url":"https://api.github.com/users/codalab","html_url":"https://github.com/codalab","followers_url":"https://api.github.com/users/codalab/followers","following_url":"https://api.github.com/users/codalab/following{/other_user}","gists_url":"https://api.github.com/users/codalab/gists{/gist_id}","starred_url":"https://api.github.com/users/codalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codalab/subscriptions","organizations_url":"https://api.github.com/users/codalab/orgs","repos_url":"https://api.github.com/users/codalab/repos","events_url":"https://api.github.com/users/codalab/events{/privacy}","received_events_url":"https://api.github.com/users/codalab/received_events","type":"Organization","site_admin":false},"repo":{"id":10556194,"name":"codalab-competitions","full_name":"codalab/codalab-competitions","owner":{"login":"codalab","id":4633552,"avatar_url":"https://avatars0.githubusercontent.com/u/4633552?v=4","gravatar_id":"","url":"https://api.github.com/users/codalab","html_url":"https://github.com/codalab","followers_url":"https://api.github.com/users/codalab/followers","following_url":"https://api.github.com/users/codalab/following{/other_user}","gists_url":"https://api.github.com/users/codalab/gists{/gist_id}","starred_url":"https://api.github.com/users/codalab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codalab/subscriptions","organizations_url":"https://api.github.com/users/codalab/orgs","repos_url":"https://api.github.com/users/codalab/repos","events_url":"https://api.github.com/users/codalab/events{/privacy}","received_events_url":"https://api.github.com/users/codalab/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codalab/codalab-competitions","description":"CodaLab Competitions","fork":false,"url":"https://api.github.com/repos/codalab/codalab-competitions","forks_url":"https://api.github.com/repos/codalab/codalab-competitions/forks","keys_url":"https://api.github.com/repos/codalab/codalab-competitions/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codalab/codalab-competitions/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codalab/codalab-competitions/teams","hooks_url":"https://api.github.com/repos/codalab/codalab-competitions/hooks","issue_events_url":"https://api.github.com/repos/codalab/codalab-competitions/issues/events{/number}","events_url":"https://api.github.com/repos/codalab/codalab-competitions/events","assignees_url":"https://api.github.com/repos/codalab/codalab-competitions/assignees{/user}","branches_url":"https://api.github.com/repos/codalab/codalab-competitions/branches{/branch}","tags_url":"https://api.github.com/repos/codalab/codalab-competitions/tags","blobs_url":"https://api.github.com/repos/codalab/codalab-competitions/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codalab/codalab-competitions/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codalab/codalab-competitions/git/refs{/sha}","trees_url":"https://api.github.com/repos/codalab/codalab-competitions/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codalab/codalab-competitions/statuses/{sha}","languages_url":"https://api.github.com/repos/codalab/codalab-competitions/languages","stargazers_url":"https://api.github.com/repos/codalab/codalab-competitions/stargazers","contributors_url":"https://api.github.com/repos/codalab/codalab-competitions/contributors","subscribers_url":"https://api.github.com/repos/codalab/codalab-competitions/subscribers","subscription_url":"https://api.github.com/repos/codalab/codalab-competitions/subscription","commits_url":"https://api.github.com/repos/codalab/codalab-competitions/commits{/sha}","git_commits_url":"https://api.github.com/repos/codalab/codalab-competitions/git/commits{/sha}","comments_url":"https://api.github.com/repos/codalab/codalab-competitions/comments{/number}","issue_comment_url":"https://api.github.com/repos/codalab/codalab-competitions/issues/comments{/number}","contents_url":"https://api.github.com/repos/codalab/codalab-competitions/contents/{+path}","compare_url":"https://api.github.com/repos/codalab/codalab-competitions/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codalab/codalab-competitions/merges","archive_url":"https://api.github.com/repos/codalab/codalab-competitions/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codalab/codalab-competitions/downloads","issues_url":"https://api.github.com/repos/codalab/codalab-competitions/issues{/number}","pulls_url":"https://api.github.com/repos/codalab/codalab-competitions/pulls{/number}","milestones_url":"https://api.github.com/repos/codalab/codalab-competitions/milestones{/number}","notifications_url":"https://api.github.com/repos/codalab/codalab-competitions/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codalab/codalab-competitions/labels{/name}","releases_url":"https://api.github.com/repos/codalab/codalab-competitions/releases{/id}","deployments_url":"https://api.github.com/repos/codalab/codalab-competitions/deployments","created_at":"2013-06-07T18:23:37Z","updated_at":"2018-04-24T18:26:21Z","pushed_at":"2018-04-24T18:54:13Z","git_url":"git://github.com/codalab/codalab-competitions.git","ssh_url":"git@github.com:codalab/codalab-competitions.git","clone_url":"https://github.com/codalab/codalab-competitions.git","svn_url":"https://github.com/codalab/codalab-competitions","homepage":"https://competitions.codalab.org","size":62064,"stargazers_count":155,"watchers_count":155,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":69,"mirror_url":null,"archived":false,"open_issues_count":27,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":69,"open_issues":27,"watchers":155,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267"},"html":{"href":"https://github.com/codalab/codalab-competitions/pull/2267"},"issue":{"href":"https://api.github.com/repos/codalab/codalab-competitions/issues/2267"},"comments":{"href":"https://api.github.com/repos/codalab/codalab-competitions/issues/2267/comments"},"review_comments":{"href":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267/comments"},"review_comment":{"href":"https://api.github.com/repos/codalab/codalab-competitions/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codalab/codalab-competitions/pulls/2267/commits"},"statuses":{"href":"https://api.github.com/repos/codalab/codalab-competitions/statuses/27c8c464d857141ff1c538d5239a8b64fb1331aa"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"ckcollab"}}