{"action":"created","comment":{"url":"https://api.github.com/repos/Kinto/kinto.py/pulls/comments/36429852","id":36429852,"diff_hunk":"@@ -0,0 +1,541 @@\n+from unittest2 import TestCase\n+import json\n+import mock\n+\n+from kintoclient import (\n+    Bucket, Session, Permissions, Collection, Record,\n+    DEFAULT_SERVER_URL, create_session, KintoException, BucketNotFound\n+)\n+\n+\n+# XXX Put this function in tests/support.py\n+def mock_response(session, data=None, permissions=None, headers=None,\n+                  error=False):\n+    data = data or {}\n+    permissions = permissions or {}\n+    headers = headers or {}\n+    info = {'data': data, 'permissions': permissions}\n+    if error:\n+        session.request.side_effect = ValueError\n+    else:\n+        session.request.return_value = (info, headers)\n+\n+\n+def get_record(id=None, data=None, permissions=None):\n+    record = mock.MagicMock()\n+    record.id = id or '1234'\n+    record.data = data or {'foo': 'bar'}\n+    record.permissions = permissions or {'read': ['Niko', 'Mat']}\n+    return record\n+\n+\n+class BucketTest(TestCase):\n+\n+    def setUp(self):\n+        self.session = mock.MagicMock()\n+        mock_response(self.session)\n+\n+    def test_put_is_issued_on_creation(self):\n+        Bucket('testbucket', session=self.session, create=True)\n+        self.session.request.assert_called_with('put', '/buckets/testbucket',\n+                                                permissions=None)\n+\n+    def test_get_is_issued_on_retrieval(self):\n+        Bucket('testbucket', session=self.session)\n+        self.session.request.assert_called_with('get', '/buckets/testbucket')\n+\n+    def test_collection_is_not_created_for_personal_bucket(self):\n+        Bucket('default', session=self.session, create=True)\n+        self.session.request.assert_called_with('get', '/buckets/default')\n+\n+    def test_permissions_are_retrieved(self):\n+        mock_response(self.session, permissions={'read': ['phrawzty', ]})\n+        bucket = Bucket('testbucket', session=self.session)\n+\n+        self.assertIn('phrawzty', bucket.permissions.read)\n+\n+    def test_groups_can_be_created_from_buckets(self):\n+        pass\n+\n+    def test_collections_throw_on_unexisting_bucket(self):\n+        exception = KintoException()\n+        exception.response = mock.MagicMock()\n+        exception.response.status_code = 403\n+        exception.request = mock.sentinel.request\n+\n+        self.session.request.side_effect = exception\n+\n+        try:\n+            Bucket('test', session=self.session)\n+        except BucketNotFound as e:\n+            self.assertEquals(e.response, exception.response)\n+            self.assertEquals(e.request, mock.sentinel.request)\n+            self.assertEquals(e.message, 'test')\n+        else:\n+            self.fail(\"Exception not raised\")\n+\n+    def test_collections_throw_on_error(self):\n+        exception = KintoException()\n+        exception.response = mock.MagicMock()\n+        exception.response.status_code = 400\n+        exception.request = mock.sentinel.request\n+\n+        self.session.request.side_effect = exception\n+\n+        try:\n+            Bucket('test', session=self.session)\n+        except KintoException as e:\n+            self.assertEquals(e.response, exception.response)\n+            self.assertEquals(e.request, mock.sentinel.request)\n+        else:\n+            self.fail(\"Exception not raised\")\n+\n+    def test_collections_can_be_retrieved_from_buckets(self):\n+        mock_response(self.session, data=[{'id': 'foo'}, {'id': 'bar'}])\n+        bucket = Bucket('testbucket', session=self.session)\n+        collections = bucket.list_collections()\n+        self.assertEquals(collections, ['foo', 'bar'])\n+\n+    @mock.patch('kintoclient.Collection')\n+    def test_unique_collections_can_be_retrieved(self, collection_mock):\n+        bucket = Bucket('testbucket', session=self.session)\n+        bucket.get_collection('mycollection')\n+        collection_mock.assert_called_with(\n+            'mycollection',\n+            bucket=bucket,\n+            session=self.session)\n+\n+    @mock.patch('kintoclient.Collection')\n+    def test_collections_can_be_created_from_buckets(self, collection_mock):\n+        bucket = Bucket('testbucket', session=self.session)\n+        bucket.create_collection('mycollection')\n+        collection_mock.assert_called_with(\n+            'mycollection',\n+            bucket=bucket,\n+            create=True,\n+            permissions=None,\n+            session=self.session)\n+\n+    @mock.patch('kintoclient.Collection')\n+    def test_get_collection_uses_the_collection_object(self, collection_mock):\n+        bucket = Bucket('testbucket', session=self.session)\n+        bucket.get_collection('mycollection')\n+        collection_mock.assert_called_with(\n+            'mycollection',\n+            bucket=bucket,\n+            session=self.session)\n+\n+    def test_collections_can_be_deleted_from_buckets(self):\n+        bucket = Bucket('testbucket', session=self.session)\n+        bucket.delete_collection('testcollection')\n+        uri = '/buckets/testbucket/collections/testcollection'\n+        self.session.request.assert_called_with('delete', uri)\n+\n+    @mock.patch('kintoclient.Permissions')\n+    def test_save_issues_request_with_data_and_permissions(self,\n+                                                           permissions_mock):\n+        mock_response(self.session, data=mock.sentinel.data,\n+                      permissions={'read': ['natim', ]})\n+        bucket = Bucket('testbucket', session=self.session,\n+                        permissions={'foo': 'bar'})\n+        bucket.save()\n+\n+        self.session.request.assert_called_with(\n+            'patch', '/buckets/testbucket', data=mock.sentinel.data,\n+            permissions=permissions_mock({'read': ['natim', ]}))\n+\n+    def test_bucket_can_be_deleted(self):\n+        mock_response(self.session)\n+        bucket = Bucket('testbucket', session=self.session)\n+        bucket.delete()\n+\n+        self.session.request.assert_called_with(\n+            'delete', '/buckets/testbucket')\n+\n+\n+class SessionTest(TestCase):\n+\n+    def test_default_server_url_used_if_not_provided(self):\n+        session = Session()\n+        self.assertEquals(session.server_url, DEFAULT_SERVER_URL)\n+\n+    def test_uses_specified_server_url(self):\n+        session = Session(mock.sentinel.server_url)\n+        self.assertEquals(session.server_url, mock.sentinel.server_url)\n+\n+    @mock.patch('kintoclient.requests')\n+    def test_no_auth_is_used_by_default(self, requests_mock):\n+        response = mock.MagicMock()\n+        response.status_code = 200\n+        requests_mock.request.return_value = response\n+        session = Session('https://example.org')\n+        self.assertEquals(session.auth, None)\n+        session.request('get', 'https://example.org/test')\n+        requests_mock.request.assert_called_with(\n+            'get', 'https://example.org/test',\n+            data=json.dumps({'data': {}}),\n+            headers={'Content-Type': 'application/json'})\n+\n+    @mock.patch('kintoclient.requests')\n+    def test_bad_http_status_raises_exception(self, requests_mock):\n+        response = mock.MagicMock()\n+        response.status_code = 400\n+        requests_mock.request.return_value = response\n+        session = Session('https://example.org')\n+\n+        self.assertRaises(KintoException, session.request, 'get',\n+                          'https://example.org/test')\n+\n+    @mock.patch('kintoclient.requests')\n+    def test_session_injects_auth_on_requests(self, requests_mock):\n+        response = mock.MagicMock()\n+        response.status_code = 200\n+        requests_mock.request.return_value = response\n+        session = Session(auth=mock.sentinel.auth,\n+                          server_url='https://example.org')\n+        session.request('get', '/test')\n+        requests_mock.request.assert_called_with(\n+            'get', 'https://example.org/test',\n+            auth=mock.sentinel.auth,\n+            data='{\"data\": {}}',\n+            headers={'Content-Type': 'application/json'})\n+\n+    @mock.patch('kintoclient.requests')\n+    def test_requests_arguments_are_forwarded(self, requests_mock):\n+        response = mock.MagicMock()\n+        response.status_code = 200\n+        requests_mock.request.return_value = response\n+        session = Session('https://example.org')\n+        session.request('get', 'https://example.org/test',\n+                        foo=mock.sentinel.bar)\n+        requests_mock.request.assert_called_with(\n+            'get', 'https://example.org/test',\n+            foo=mock.sentinel.bar,\n+            data='{\"data\": {}}',\n+            headers={'Content-Type': 'application/json'})\n+\n+    @mock.patch('kintoclient.requests')\n+    def test_passed_data_is_encoded_to_json(self, requests_mock):\n+        response = mock.MagicMock()\n+        response.status_code = 200\n+        requests_mock.request.return_value = response\n+        session = Session('https://example.org')\n+        session.request('get', 'https://example.org/test',\n+                        data={'foo': 'bar'})\n+        requests_mock.request.assert_called_with(\n+            'get', 'https://example.org/test',\n+            data=json.dumps({'data': {'foo': 'bar'}}),\n+            headers={'Content-Type': 'application/json'})\n+\n+    @mock.patch('kintoclient.requests')","path":"kintoclient/tests/test_client.py","position":230,"original_position":230,"commit_id":"eac878230dd992eca1ecaf2bbbcbf4087a8f90e4","original_commit_id":"eac878230dd992eca1ecaf2bbbcbf4087a8f90e4","user":{"login":"kumar303","id":55398,"avatar_url":"https://avatars.githubusercontent.com/u/55398?v=3","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false},"body":"since this is used so much you could also put it in setUp:\r\n````\r\ndef setUp(self):\r\n    p = mock.patch('kintoclient.requests')\r\n    self.requests_mock = p.start()\r\n    self.addCleanup(p.stop)\r\n````","created_at":"2015-08-06T15:43:57Z","updated_at":"2015-08-06T15:43:57Z","html_url":"https://github.com/Kinto/kinto.py/pull/3#discussion_r36429852","pull_request_url":"https://api.github.com/repos/Kinto/kinto.py/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/Kinto/kinto.py/pulls/comments/36429852"},"html":{"href":"https://github.com/Kinto/kinto.py/pull/3#discussion_r36429852"},"pull_request":{"href":"https://api.github.com/repos/Kinto/kinto.py/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/Kinto/kinto.py/pulls/3","id":39057891,"html_url":"https://github.com/Kinto/kinto.py/pull/3","diff_url":"https://github.com/Kinto/kinto.py/pull/3.diff","patch_url":"https://github.com/Kinto/kinto.py/pull/3.patch","issue_url":"https://api.github.com/repos/Kinto/kinto.py/issues/3","number":3,"state":"open","locked":false,"title":"First implementation","user":{"login":"ametaireau","id":67073,"avatar_url":"https://avatars.githubusercontent.com/u/67073?v=3","gravatar_id":"","url":"https://api.github.com/users/ametaireau","html_url":"https://github.com/ametaireau","followers_url":"https://api.github.com/users/ametaireau/followers","following_url":"https://api.github.com/users/ametaireau/following{/other_user}","gists_url":"https://api.github.com/users/ametaireau/gists{/gist_id}","starred_url":"https://api.github.com/users/ametaireau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ametaireau/subscriptions","organizations_url":"https://api.github.com/users/ametaireau/orgs","repos_url":"https://api.github.com/users/ametaireau/repos","events_url":"https://api.github.com/users/ametaireau/events{/privacy}","received_events_url":"https://api.github.com/users/ametaireau/received_events","type":"User","site_admin":false},"body":"Based on top of #1 \r\n\r\n- [x] Session handling;\r\n- [x] Bucket handling;\r\n- [x] Permissions handling;\r\n- [x] Collection handling;\r\n- [x] Records handling;","created_at":"2015-07-02T08:14:27Z","updated_at":"2015-08-06T15:43:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"63c7d6024ca5a37fe3c8375ef892fbc3d6588041","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Kinto/kinto.py/pulls/3/commits","review_comments_url":"https://api.github.com/repos/Kinto/kinto.py/pulls/3/comments","review_comment_url":"https://api.github.com/repos/Kinto/kinto.py/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Kinto/kinto.py/issues/3/comments","statuses_url":"https://api.github.com/repos/Kinto/kinto.py/statuses/eac878230dd992eca1ecaf2bbbcbf4087a8f90e4","head":{"label":"Kinto:first-implementation","ref":"first-implementation","sha":"eac878230dd992eca1ecaf2bbbcbf4087a8f90e4","user":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"repo":{"id":37655419,"name":"kinto.py","full_name":"Kinto/kinto.py","owner":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Kinto/kinto.py","description":"Python library to interact with Kinto","fork":false,"url":"https://api.github.com/repos/Kinto/kinto.py","forks_url":"https://api.github.com/repos/Kinto/kinto.py/forks","keys_url":"https://api.github.com/repos/Kinto/kinto.py/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kinto/kinto.py/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kinto/kinto.py/teams","hooks_url":"https://api.github.com/repos/Kinto/kinto.py/hooks","issue_events_url":"https://api.github.com/repos/Kinto/kinto.py/issues/events{/number}","events_url":"https://api.github.com/repos/Kinto/kinto.py/events","assignees_url":"https://api.github.com/repos/Kinto/kinto.py/assignees{/user}","branches_url":"https://api.github.com/repos/Kinto/kinto.py/branches{/branch}","tags_url":"https://api.github.com/repos/Kinto/kinto.py/tags","blobs_url":"https://api.github.com/repos/Kinto/kinto.py/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kinto/kinto.py/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kinto/kinto.py/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kinto/kinto.py/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kinto/kinto.py/statuses/{sha}","languages_url":"https://api.github.com/repos/Kinto/kinto.py/languages","stargazers_url":"https://api.github.com/repos/Kinto/kinto.py/stargazers","contributors_url":"https://api.github.com/repos/Kinto/kinto.py/contributors","subscribers_url":"https://api.github.com/repos/Kinto/kinto.py/subscribers","subscription_url":"https://api.github.com/repos/Kinto/kinto.py/subscription","commits_url":"https://api.github.com/repos/Kinto/kinto.py/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kinto/kinto.py/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kinto/kinto.py/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kinto/kinto.py/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kinto/kinto.py/contents/{+path}","compare_url":"https://api.github.com/repos/Kinto/kinto.py/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kinto/kinto.py/merges","archive_url":"https://api.github.com/repos/Kinto/kinto.py/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kinto/kinto.py/downloads","issues_url":"https://api.github.com/repos/Kinto/kinto.py/issues{/number}","pulls_url":"https://api.github.com/repos/Kinto/kinto.py/pulls{/number}","milestones_url":"https://api.github.com/repos/Kinto/kinto.py/milestones{/number}","notifications_url":"https://api.github.com/repos/Kinto/kinto.py/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kinto/kinto.py/labels{/name}","releases_url":"https://api.github.com/repos/Kinto/kinto.py/releases{/id}","created_at":"2015-06-18T11:24:34Z","updated_at":"2015-08-04T23:47:56Z","pushed_at":"2015-08-04T20:19:39Z","git_url":"git://github.com/Kinto/kinto.py.git","ssh_url":"git@github.com:Kinto/kinto.py.git","clone_url":"https://github.com/Kinto/kinto.py.git","svn_url":"https://github.com/Kinto/kinto.py","homepage":null,"size":296,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":1,"default_branch":"master"}},"base":{"label":"Kinto:master","ref":"master","sha":"68d32ae4e135eac17a4883e094b9f54df96d37aa","user":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"repo":{"id":37655419,"name":"kinto.py","full_name":"Kinto/kinto.py","owner":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Kinto/kinto.py","description":"Python library to interact with Kinto","fork":false,"url":"https://api.github.com/repos/Kinto/kinto.py","forks_url":"https://api.github.com/repos/Kinto/kinto.py/forks","keys_url":"https://api.github.com/repos/Kinto/kinto.py/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kinto/kinto.py/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kinto/kinto.py/teams","hooks_url":"https://api.github.com/repos/Kinto/kinto.py/hooks","issue_events_url":"https://api.github.com/repos/Kinto/kinto.py/issues/events{/number}","events_url":"https://api.github.com/repos/Kinto/kinto.py/events","assignees_url":"https://api.github.com/repos/Kinto/kinto.py/assignees{/user}","branches_url":"https://api.github.com/repos/Kinto/kinto.py/branches{/branch}","tags_url":"https://api.github.com/repos/Kinto/kinto.py/tags","blobs_url":"https://api.github.com/repos/Kinto/kinto.py/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kinto/kinto.py/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kinto/kinto.py/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kinto/kinto.py/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kinto/kinto.py/statuses/{sha}","languages_url":"https://api.github.com/repos/Kinto/kinto.py/languages","stargazers_url":"https://api.github.com/repos/Kinto/kinto.py/stargazers","contributors_url":"https://api.github.com/repos/Kinto/kinto.py/contributors","subscribers_url":"https://api.github.com/repos/Kinto/kinto.py/subscribers","subscription_url":"https://api.github.com/repos/Kinto/kinto.py/subscription","commits_url":"https://api.github.com/repos/Kinto/kinto.py/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kinto/kinto.py/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kinto/kinto.py/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kinto/kinto.py/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kinto/kinto.py/contents/{+path}","compare_url":"https://api.github.com/repos/Kinto/kinto.py/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kinto/kinto.py/merges","archive_url":"https://api.github.com/repos/Kinto/kinto.py/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kinto/kinto.py/downloads","issues_url":"https://api.github.com/repos/Kinto/kinto.py/issues{/number}","pulls_url":"https://api.github.com/repos/Kinto/kinto.py/pulls{/number}","milestones_url":"https://api.github.com/repos/Kinto/kinto.py/milestones{/number}","notifications_url":"https://api.github.com/repos/Kinto/kinto.py/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kinto/kinto.py/labels{/name}","releases_url":"https://api.github.com/repos/Kinto/kinto.py/releases{/id}","created_at":"2015-06-18T11:24:34Z","updated_at":"2015-08-04T23:47:56Z","pushed_at":"2015-08-04T20:19:39Z","git_url":"git://github.com/Kinto/kinto.py.git","ssh_url":"git@github.com:Kinto/kinto.py.git","clone_url":"https://github.com/Kinto/kinto.py.git","svn_url":"https://github.com/Kinto/kinto.py","homepage":null,"size":296,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":2,"forks":0,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Kinto/kinto.py/pulls/3"},"html":{"href":"https://github.com/Kinto/kinto.py/pull/3"},"issue":{"href":"https://api.github.com/repos/Kinto/kinto.py/issues/3"},"comments":{"href":"https://api.github.com/repos/Kinto/kinto.py/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/Kinto/kinto.py/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/Kinto/kinto.py/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Kinto/kinto.py/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/Kinto/kinto.py/statuses/eac878230dd992eca1ecaf2bbbcbf4087a8f90e4"}}}}