{"action":"created","comment":{"url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/comments/65106140","id":65106140,"diff_hunk":"@@ -76,21 +81,236 @@ def test_record_filters_by_ip_and_type(self):\n         mvs.request = request\n         self.assertEqual(len(mvs.get_queryset()), 8)\n \n-    def test_no_access_to_not_owned_domain(self):\n-        url = reverse('domain-list')\n-        data = {'name': 'allegro.pl'}\n-        response = self.client.post(url, data, format='json')\n+\n+class BaseApiTestCase(TestCase):\n+    def setUp(self):\n+        super().setUp()\n+        self.request_factory = APIRequestFactory()\n+        self.super_user = get_user_model().objects.create_superuser(\n+            'super_user', 'test@test.test', 'super_user'\n+        )\n+        self.client = APIClient()\n+\n+\n+class TestRecords(BaseApiTestCase):\n+    def setUp(self):\n+        super().setUp()\n+        self.regular_user1 = get_user_model().objects.create_user(\n+            'regular_user1', 'regular_user1@test.test', 'regular_user1'\n+        )\n+        self.regular_user2 = get_user_model().objects.create_user(\n+            'regular_user2', 'regular_user2@test.test', 'regular_user2'\n+        )\n+\n+    def test_record_is_created_when_superuser(self):\n+        self.client.login(username='super_user', password='super_user')\n+        domain = DomainFactory(name='example.com', owner=self.super_user)\n+        data = {\n+            'type': 'cname'.upper(),\n+            'domain': '/api/domains/' + str(domain.id) + '/',\n+            'name': 'example.com',\n+            'content': '192.168.0.1',\n+        }\n+        response = self.client.post(\n+            reverse('record-list'), data, format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n         self.assertEqual(response.status_code, status.HTTP_201_CREATED)\n-        self.assertEqual(response.data['name'], data['name'])\n-        domain_id = response.data['id']\n-        self.assertTrue(Domain.objects.filter(pk=domain_id).exists())\n \n-        self.client.login(username='user', password='user')\n-        data_2 = {'name': 'allegro2.pl'}\n-        response = self.client.post(url, data_2, format='json')\n-        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)\n+    def test_record_is_created_when_user_owns_domain(self):\n+        self.client.login(username='regular_user1', password='regular_user1')\n+        domain = DomainFactory(name='example.com', owner=self.regular_user1)\n+        data = {\n+            'type': 'cname'.upper(),\n+            'domain': '/api/domains/' + str(domain.id) + '/',\n+            'name': 'example.com',\n+            'content': '192.168.0.1',\n+        }\n+        response = self.client.post(\n+            reverse('record-list'), data, format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_201_CREATED)\n \n-        url = reverse('domain-detail', args=(domain_id,))\n-        response = self.client.get(url, format='json')\n+    def test_record_is_not_created_when_domain_is_not_owned(self):\n+        self.client.login(username='regular_user1', password='regular_user1')\n+        domain = DomainFactory(name='example.com', owner=self.regular_user2)\n+        data = {\n+            'type': 'cname'.upper(),\n+            'domain': '/api/domains/' + str(domain.id) + '/',\n+            'name': 'example.com',\n+            'content': '192.168.0.1',\n+        }\n+        response = self.client.post(\n+            reverse('record-list'), data, format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)\n+\n+    #\n+    # updates\n+    #\n+    def test_update_record_when_recordrequest_doesnt_exist(self):\n+        self.client.login(username='super_user', password='super_user')\n+        record = RecordFactory(\n+            auto_ptr=AutoPtrOptions.NEVER.id,\n+            type='A',\n+            name='blog.com',\n+            content='192.168.1.0',\n+        )\n+        new_name = 'new-' + record.name\n+        response = self.client.patch(\n+            reverse('record-detail', kwargs={'pk': record.pk}),\n+            data={'name': new_name},\n+            format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n         self.assertEqual(response.status_code, status.HTTP_200_OK)\n-        self.assertEqual(response.data['name'], data['name'])\n+        record.refresh_from_db()\n+        self.assertEqual(record.name, new_name)\n+        self.assertEqual(\n+            RecordRequest.objects.filter(record__id=record.id).count(), 1\n+        )\n+\n+    def test_update_record_when_recordrequest_exists(self):\n+        self.client.login(username='super_user', password='super_user')\n+        record_request = RecordRequestFactory(\n+            record__auto_ptr=AutoPtrOptions.NEVER.id,\n+            record__type='A',\n+            record__name='blog.com',\n+            record__content='192.168.1.0',\n+        )\n+        new_name = 'new-' + record_request.record.name\n+        response = self.client.patch(\n+            reverse('record-detail', kwargs={'pk': record_request.record.pk}),\n+            data={'name': new_name},\n+            format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_200_OK)\n+        record_request.record.refresh_from_db()\n+        self.assertEqual(record_request.record.name, new_name)\n+        self.assertEqual(\n+            RecordRequest.objects.filter(\n+                record__id=record_request.record.id\n+            ).count(),\n+            2,\n+        )\n+\n+    def test_update_record_when_cant_auto_accept(self):\n+        self.client.login(username='regular_user1', password='regular_user1')\n+        record_request = RecordRequestFactory(\n+            state=RequestStates.ACCEPTED.id,\n+            record__auto_ptr=AutoPtrOptions.NEVER.id,\n+            record__type='A',\n+            record__name='blog.com',\n+            record__content='192.168.1.0',\n+        )\n+        new_name = 'new-' + record_request.record.name\n+        response = self.client.patch(\n+            reverse('record-detail', kwargs={'pk': record_request.record.pk}),\n+            data={'name': new_name},\n+            format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)\n+        record_request.record.refresh_from_db()\n+        self.assertFalse('new' in record_request.record.name)\n+        self.assertEqual(\n+            RecordRequest.objects.filter(\n+                record__id=record_request.record.id\n+            ).count(),\n+            2,\n+        )\n+\n+    def test_reject_update_when_already_exists(self):\n+        self.client.login(username='regular_user1', password='regular_user1')\n+        record_request = RecordRequestFactory(\n+            state=RequestStates.OPEN.id,\n+            record__auto_ptr=AutoPtrOptions.NEVER.id,\n+            record__type='A',\n+            record__name='blog.com',\n+            record__content='192.168.1.0',\n+        )\n+        new_name = 'new-' + record_request.record.name\n+        response = self.client.patch(\n+            reverse('record-detail', kwargs={'pk': record_request.record.pk}),\n+            data={'name': new_name},\n+            format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_303_SEE_OTHER)\n+        self.assertEqual(\n+            response.data['record_request_ids'][0], record_request.id\n+        )\n+\n+    def test_dont_reject_update_when_already_exists_but_superuser(self):\n+        self.client.login(username='super_user', password='super_user')\n+        record_request = RecordRequestFactory(\n+            state=RequestStates.OPEN.id,\n+            record__auto_ptr=AutoPtrOptions.NEVER.id,\n+            record__type='A',\n+            record__name='blog.com',\n+            record__content='192.168.1.0',\n+        )\n+        new_name = 'new-' + record_request.record.name\n+        response = self.client.patch(\n+            reverse('record-detail', kwargs={'pk': record_request.record.pk}),\n+            data={'name': new_name},\n+            format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_200_OK)\n+\n+    #\n+    # deletion\n+    #\n+    def test_delete_record_when_superuser(self):\n+        self.client.login(username='super_user', password='super_user')\n+        record_request = RecordRequestFactory(\n+            record__auto_ptr=AutoPtrOptions.NEVER.id,\n+            record__type='A',\n+            record__name='blog.com',\n+            record__content='192.168.1.0',\n+        )\n+        response = self.client.delete(\n+            reverse('record-detail', kwargs={'pk': record_request.record.pk}),\n+            format='json',\n+            **{'HTTP_ACCEPT': 'application/json; version=v2'}\n+        )\n+        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)\n+        # record_request.refresh_from_db doesn't refresh since\n+        # record_request.record is on_delete=models.DO_NOTHING, so get record\n+        # by query\n+        self.assertEqual(\n+            RecordRequest.objects.get(pk=record_request.id).record_id,\n+            record_request.record_id,\n+        )\n+        with self.assertRaises(Record.DoesNotExist):\n+            RecordRequest.objects.get(pk=record_request.id).record\n+        self.assertTrue(\n+            DeleteRequest.objects.get(target_id=record_request.record_id)\n+        )\n+\n+    def test_delete_record_when_cant_auto_accept(self):","path":"powerdns/tests/test_api.py","position":274,"original_position":274,"commit_id":"441bd9494b5ad504cecf78ae867431d7bfc6c723","original_commit_id":"441bd9494b5ad504cecf78ae867431d7bfc6c723","user":{"login":"mkurek","id":107437,"avatar_url":"https://avatars.githubusercontent.com/u/107437?v=3","gravatar_id":"","url":"https://api.github.com/users/mkurek","html_url":"https://github.com/mkurek","followers_url":"https://api.github.com/users/mkurek/followers","following_url":"https://api.github.com/users/mkurek/following{/other_user}","gists_url":"https://api.github.com/users/mkurek/gists{/gist_id}","starred_url":"https://api.github.com/users/mkurek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkurek/subscriptions","organizations_url":"https://api.github.com/users/mkurek/orgs","repos_url":"https://api.github.com/users/mkurek/repos","events_url":"https://api.github.com/users/mkurek/events{/privacy}","received_events_url":"https://api.github.com/users/mkurek/received_events","type":"User","site_admin":false},"body":"make some additional test for deletion when another request is pending.","created_at":"2016-05-30T21:08:23Z","updated_at":"2016-05-30T21:08:23Z","html_url":"https://github.com/allegro/django-powerdns-dnssec/pull/79#discussion_r65106140","pull_request_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79","_links":{"self":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/comments/65106140"},"html":{"href":"https://github.com/allegro/django-powerdns-dnssec/pull/79#discussion_r65106140"},"pull_request":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79"}}},"pull_request":{"url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79","id":70692179,"html_url":"https://github.com/allegro/django-powerdns-dnssec/pull/79","diff_url":"https://github.com/allegro/django-powerdns-dnssec/pull/79.diff","patch_url":"https://github.com/allegro/django-powerdns-dnssec/pull/79.patch","issue_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues/79","number":79,"state":"open","locked":false,"title":"API resource Record creates Request objects in v2","user":{"login":"xliiv","id":298994,"avatar_url":"https://avatars.githubusercontent.com/u/298994?v=3","gravatar_id":"","url":"https://api.github.com/users/xliiv","html_url":"https://github.com/xliiv","followers_url":"https://api.github.com/users/xliiv/followers","following_url":"https://api.github.com/users/xliiv/following{/other_user}","gists_url":"https://api.github.com/users/xliiv/gists{/gist_id}","starred_url":"https://api.github.com/users/xliiv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xliiv/subscriptions","organizations_url":"https://api.github.com/users/xliiv/orgs","repos_url":"https://api.github.com/users/xliiv/repos","events_url":"https://api.github.com/users/xliiv/events{/privacy}","received_events_url":"https://api.github.com/users/xliiv/received_events","type":"User","site_admin":false},"body":"API is now versioned (default version is 'v1').\r\nIn version 'v2' resource Record creates always Requests (RecordRequest for\r\ncreation and update, DeleteRequest for deletion)\r\nBeside that Record endpoint also checks if requested changes can be\r\nautoaccepted, which instantly changes Records in powerdns table.","created_at":"2016-05-19T13:17:57Z","updated_at":"2016-05-30T21:08:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f0f84220dd084e52e0731f1c53bcf768231854d","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79/commits","review_comments_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79/comments","review_comment_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/comments{/number}","comments_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues/79/comments","statuses_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/statuses/441bd9494b5ad504cecf78ae867431d7bfc6c723","head":{"label":"xliiv:new-api","ref":"new-api","sha":"441bd9494b5ad504cecf78ae867431d7bfc6c723","user":{"login":"xliiv","id":298994,"avatar_url":"https://avatars.githubusercontent.com/u/298994?v=3","gravatar_id":"","url":"https://api.github.com/users/xliiv","html_url":"https://github.com/xliiv","followers_url":"https://api.github.com/users/xliiv/followers","following_url":"https://api.github.com/users/xliiv/following{/other_user}","gists_url":"https://api.github.com/users/xliiv/gists{/gist_id}","starred_url":"https://api.github.com/users/xliiv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xliiv/subscriptions","organizations_url":"https://api.github.com/users/xliiv/orgs","repos_url":"https://api.github.com/users/xliiv/repos","events_url":"https://api.github.com/users/xliiv/events{/privacy}","received_events_url":"https://api.github.com/users/xliiv/received_events","type":"User","site_admin":false},"repo":{"id":53501845,"name":"django-powerdns-dnssec","full_name":"xliiv/django-powerdns-dnssec","owner":{"login":"xliiv","id":298994,"avatar_url":"https://avatars.githubusercontent.com/u/298994?v=3","gravatar_id":"","url":"https://api.github.com/users/xliiv","html_url":"https://github.com/xliiv","followers_url":"https://api.github.com/users/xliiv/followers","following_url":"https://api.github.com/users/xliiv/following{/other_user}","gists_url":"https://api.github.com/users/xliiv/gists{/gist_id}","starred_url":"https://api.github.com/users/xliiv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xliiv/subscriptions","organizations_url":"https://api.github.com/users/xliiv/orgs","repos_url":"https://api.github.com/users/xliiv/repos","events_url":"https://api.github.com/users/xliiv/events{/privacy}","received_events_url":"https://api.github.com/users/xliiv/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/xliiv/django-powerdns-dnssec","description":"Django application managing PowerDNS database","fork":true,"url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec","forks_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/forks","keys_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/teams","hooks_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/hooks","issue_events_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/issues/events{/number}","events_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/events","assignees_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/assignees{/user}","branches_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/branches{/branch}","tags_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/tags","blobs_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/git/refs{/sha}","trees_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/statuses/{sha}","languages_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/languages","stargazers_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/stargazers","contributors_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/contributors","subscribers_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/subscribers","subscription_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/subscription","commits_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/commits{/sha}","git_commits_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/git/commits{/sha}","comments_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/comments{/number}","issue_comment_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/issues/comments{/number}","contents_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/contents/{+path}","compare_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/merges","archive_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/downloads","issues_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/issues{/number}","pulls_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/pulls{/number}","milestones_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/milestones{/number}","notifications_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/labels{/name}","releases_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/releases{/id}","deployments_url":"https://api.github.com/repos/xliiv/django-powerdns-dnssec/deployments","created_at":"2016-03-09T13:59:19Z","updated_at":"2016-03-09T13:59:20Z","pushed_at":"2016-05-30T13:42:29Z","git_url":"git://github.com/xliiv/django-powerdns-dnssec.git","ssh_url":"git@github.com:xliiv/django-powerdns-dnssec.git","clone_url":"https://github.com/xliiv/django-powerdns-dnssec.git","svn_url":"https://github.com/xliiv/django-powerdns-dnssec","homepage":"http://django-powerdns-dnssec.readthedocs.org","size":410,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"allegro:develop","ref":"develop","sha":"c2f2f1ce6440f0d21a939ce6ac8e867d8a96f488","user":{"login":"allegro","id":562236,"avatar_url":"https://avatars.githubusercontent.com/u/562236?v=3","gravatar_id":"","url":"https://api.github.com/users/allegro","html_url":"https://github.com/allegro","followers_url":"https://api.github.com/users/allegro/followers","following_url":"https://api.github.com/users/allegro/following{/other_user}","gists_url":"https://api.github.com/users/allegro/gists{/gist_id}","starred_url":"https://api.github.com/users/allegro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allegro/subscriptions","organizations_url":"https://api.github.com/users/allegro/orgs","repos_url":"https://api.github.com/users/allegro/repos","events_url":"https://api.github.com/users/allegro/events{/privacy}","received_events_url":"https://api.github.com/users/allegro/received_events","type":"Organization","site_admin":false},"repo":{"id":37307631,"name":"django-powerdns-dnssec","full_name":"allegro/django-powerdns-dnssec","owner":{"login":"allegro","id":562236,"avatar_url":"https://avatars.githubusercontent.com/u/562236?v=3","gravatar_id":"","url":"https://api.github.com/users/allegro","html_url":"https://github.com/allegro","followers_url":"https://api.github.com/users/allegro/followers","following_url":"https://api.github.com/users/allegro/following{/other_user}","gists_url":"https://api.github.com/users/allegro/gists{/gist_id}","starred_url":"https://api.github.com/users/allegro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/allegro/subscriptions","organizations_url":"https://api.github.com/users/allegro/orgs","repos_url":"https://api.github.com/users/allegro/repos","events_url":"https://api.github.com/users/allegro/events{/privacy}","received_events_url":"https://api.github.com/users/allegro/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/allegro/django-powerdns-dnssec","description":"Django application managing PowerDNS database","fork":false,"url":"https://api.github.com/repos/allegro/django-powerdns-dnssec","forks_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/forks","keys_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/keys{/key_id}","collaborators_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/teams","hooks_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/hooks","issue_events_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues/events{/number}","events_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/events","assignees_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/assignees{/user}","branches_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/branches{/branch}","tags_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/tags","blobs_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/git/refs{/sha}","trees_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/git/trees{/sha}","statuses_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/statuses/{sha}","languages_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/languages","stargazers_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/stargazers","contributors_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/contributors","subscribers_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/subscribers","subscription_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/subscription","commits_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/commits{/sha}","git_commits_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/git/commits{/sha}","comments_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/comments{/number}","issue_comment_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues/comments{/number}","contents_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/contents/{+path}","compare_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/compare/{base}...{head}","merges_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/merges","archive_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/downloads","issues_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues{/number}","pulls_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls{/number}","milestones_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/milestones{/number}","notifications_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/labels{/name}","releases_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/releases{/id}","deployments_url":"https://api.github.com/repos/allegro/django-powerdns-dnssec/deployments","created_at":"2015-06-12T07:12:29Z","updated_at":"2016-05-27T11:28:51Z","pushed_at":"2016-05-30T13:47:39Z","git_url":"git://github.com/allegro/django-powerdns-dnssec.git","ssh_url":"git@github.com:allegro/django-powerdns-dnssec.git","clone_url":"https://github.com/allegro/django-powerdns-dnssec.git","svn_url":"https://github.com/allegro/django-powerdns-dnssec","homepage":"http://django-powerdns-dnssec.readthedocs.org","size":419,"stargazers_count":14,"watchers_count":14,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":5,"forks":5,"open_issues":5,"watchers":14,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79"},"html":{"href":"https://github.com/allegro/django-powerdns-dnssec/pull/79"},"issue":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues/79"},"comments":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/issues/79/comments"},"review_comments":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79/comments"},"review_comment":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/pulls/79/commits"},"statuses":{"href":"https://api.github.com/repos/allegro/django-powerdns-dnssec/statuses/441bd9494b5ad504cecf78ae867431d7bfc6c723"}}}}
{"actor":{"display_login":"mkurek"}}