)]}'
{"keystoneclient/access.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c1ee2984ab7ec357b2aaeb8a197defdb045d315","unresolved":false,"context_lines":[{"line_number":28,"context_line":"STALE_TOKEN_DURATION \u003d 30"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class AccessInfo(dict):"},{"line_number":32,"context_line":"    \"\"\"Encapsulates a raw authentication token from keystone."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    Provides helper methods for extracting useful values from that token."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_295b8bf7","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":16},"updated":"2016-04-07 03:47:51.000000000","message":"I am not very sure here.\nBut for me, I prefer that make this class inheritance from base._RequestIdMixin.\nclass AccessInfo(dict, _RequestIdMixin):\n\n\nPS: If you chose this way, _RequestIdMixin should be a public class then.","commit_id":"be7b547c0b6687626de630bbcaa8bf61f44e0ba1"}],"keystoneclient/tests/unit/utils.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e730c004149426d148df959933594a13a5acd760","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        headers \u003d self.requests_mock.last_request.headers"},{"line_number":119,"context_line":"        self.assertEqual(headers.get(name), val)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _assert_request_id(self, obj):"},{"line_number":122,"context_line":"        self.assertTrue(hasattr(obj, \u0027request_ids\u0027))"},{"line_number":123,"context_line":"        self.assertEqual([self.TEST_REQUEST_ID], obj.request_ids)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_9e2689b8","line":121,"updated":"2016-06-10 19:59:23.000000000","message":"All the other assert methods defined here are named publicly and follow unittest\u0027s naming conventions... and I don\u0027t see any reason for this one to be different:\n\n  def assertRequestIds(self, obj):","commit_id":"49258665c7db1a144f2424bb4e018e2a008e3499"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"54b77382f5d5c7ad9b28ab3c5d4fe5bf440e698b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        headers \u003d self.requests_mock.last_request.headers"},{"line_number":119,"context_line":"        self.assertEqual(headers.get(name), val)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _assert_request_id(self, obj):"},{"line_number":122,"context_line":"        self.assertTrue(hasattr(obj, \u0027request_ids\u0027))"},{"line_number":123,"context_line":"        self.assertEqual([self.TEST_REQUEST_ID], obj.request_ids)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_65f016fe","line":121,"in_reply_to":"7aa08908_9e2689b8","updated":"2016-06-14 01:26:08.000000000","message":"Done","commit_id":"49258665c7db1a144f2424bb4e018e2a008e3499"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"b2b96ed2246d481c8db96a015f2cbe35126c5d29","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.assertEqual(headers.get(name), val)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def assertRequestIds(self, obj):"},{"line_number":126,"context_line":"        if hasattr(obj, \u0027request_ids\u0027):"},{"line_number":127,"context_line":"            self.assertEqual([self.TEST_REQUEST_ID], obj.request_ids)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_c97b9af3","line":126,"range":{"start_line":126,"start_character":11,"end_line":126,"end_character":38},"updated":"2016-08-24 11:15:03.000000000","message":"You may try \"isinstance(obj,wrapt.Objectproxy)\" to see whether it will pass py34 test.\n\nNow py34 fails because hasattr() will call the __getattr__() function of Resource[1].\n\n[1]: http://logs.openstack.org/49/267449/12/check/gate-python-keystoneclient-python34/b08c5a2/console.html#_2016-08-19_08_04_55_371677","commit_id":"e0960f5d8445098bd7c26ab5ac0771c32e81c61b"}],"keystoneclient/tests/unit/v2_0/test_certificates.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"e7150d23332752ee8e8dcb2a736aae7b24e8628f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027certificates\u0027, \u0027ca\u0027],"},{"line_number":26,"context_line":"                      headers\u003d{\u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027},"},{"line_number":27,"context_line":"                      text\u003dself.examples.SIGNING_CA)"},{"line_number":28,"context_line":"        res \u003d self.client.certificates.get_ca_certificate()"},{"line_number":29,"context_line":"        self._assert_request_id(res[0])"},{"line_number":30,"context_line":"        self.assertEqual(self.examples.SIGNING_CA, res[1])"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_get_signing_certificate(self):"},{"line_number":33,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027certificates\u0027, \u0027signing\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_a6e16000","line":30,"range":{"start_line":28,"start_character":8,"end_line":30,"end_character":58},"updated":"2016-02-04 15:34:41.000000000","message":"Do I understand it right, that before the change is not a list, and after the change it becomes a list?\n\nIf yes, we probably cannot change types like this.","commit_id":"b58818dbe18808d5982d944b2f1ada15b7b5929f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"c9d01a98312826812a248207e36acbbcad43ac64","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027certificates\u0027, \u0027ca\u0027],"},{"line_number":26,"context_line":"                      headers\u003d{\u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027},"},{"line_number":27,"context_line":"                      text\u003dself.examples.SIGNING_CA)"},{"line_number":28,"context_line":"        res \u003d self.client.certificates.get_ca_certificate()"},{"line_number":29,"context_line":"        self._assert_request_id(res[0])"},{"line_number":30,"context_line":"        self.assertEqual(self.examples.SIGNING_CA, res[1])"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_get_signing_certificate(self):"},{"line_number":33,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027certificates\u0027, \u0027signing\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_2cd35e3a","line":30,"range":{"start_line":28,"start_character":8,"end_line":30,"end_character":58},"in_reply_to":"5a5ae5dd_a6e16000","updated":"2016-02-10 06:45:43.000000000","message":"I restored certificates\u0027s type.\nand, I added _UnicodeWithMeta class to base.py. : https://review.openstack.org/#/c/261188/8/keystoneclient/base.py@644","commit_id":"b58818dbe18808d5982d944b2f1ada15b7b5929f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61098f0342545918267ec9776412cc0e6e35617b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                      headers\u003d{\u0027Content-Type\u0027: \u0027text/html; charset\u003dUTF-8\u0027},"},{"line_number":27,"context_line":"                      text\u003dself.examples.SIGNING_CA)"},{"line_number":28,"context_line":"        res \u003d self.client.certificates.get_ca_certificate()"},{"line_number":29,"context_line":"        self.assertRequestIds(res)"},{"line_number":30,"context_line":"        self.assertEqual(self.examples.SIGNING_CA, res)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def test_get_signing_certificate(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a30ddce_aa0ce23b","line":29,"updated":"2017-03-09 16:47:40.000000000","message":"We would need to set include_metadata to true in order for this to actually assert something because it\u0027s conditional on the type? Since the default is False we don\u0027t really have any clear way of determining if the test case is actually asserting this or not. It would be nice to have a set of test cases that explicitly say they are testing with metadata and asserting responses include request_ids.","commit_id":"a33668c2058dbef2f76a21d39c8fc8b7a4ece8b9"}],"keystoneclient/tests/unit/v2_0/test_tenants.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e730c004149426d148df959933594a13a5acd760","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            tenant \u003d self.client.tenants.create("},{"line_number":119,"context_line":"                req_body[\u0027tenant\u0027][\u0027name\u0027],"},{"line_number":120,"context_line":"                req_body[\u0027tenant\u0027][\u0027description\u0027],"},{"line_number":121,"context_line":"                req_body[\u0027tenant\u0027][\u0027enabled\u0027])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            self._assert_request_id(tenant)"},{"line_number":124,"context_line":"        self.assertRaises(exceptions.Conflict, create_duplicate_tenant)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_7e775d9f","line":121,"updated":"2016-06-10 19:59:23.000000000","message":"Not exactly a related change, but you remove this indentation here...","commit_id":"49258665c7db1a144f2424bb4e018e2a008e3499"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"54b77382f5d5c7ad9b28ab3c5d4fe5bf440e698b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            tenant \u003d self.client.tenants.create("},{"line_number":119,"context_line":"                req_body[\u0027tenant\u0027][\u0027name\u0027],"},{"line_number":120,"context_line":"                req_body[\u0027tenant\u0027][\u0027description\u0027],"},{"line_number":121,"context_line":"                req_body[\u0027tenant\u0027][\u0027enabled\u0027])"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"            self._assert_request_id(tenant)"},{"line_number":124,"context_line":"        self.assertRaises(exceptions.Conflict, create_duplicate_tenant)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_e59c066c","line":121,"in_reply_to":"7aa08908_7e775d9f","updated":"2016-06-14 01:26:08.000000000","message":"I remove the indentation because these lines to exceed 79 characters.","commit_id":"49258665c7db1a144f2424bb4e018e2a008e3499"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e730c004149426d148df959933594a13a5acd760","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                      status_code\u003d204)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        tenant \u003d self.client.tenants.remove_user(self.EXTRAS_ID,"},{"line_number":257,"context_line":"                                                 \u0027foo\u0027, \u0027barrr\u0027)"},{"line_number":258,"context_line":"        self._assert_request_id(tenant)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def test_tenant_add_user(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_be71c5aa","line":257,"updated":"2016-06-10 19:59:23.000000000","message":"And then add the same indentation here.","commit_id":"49258665c7db1a144f2424bb4e018e2a008e3499"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"54b77382f5d5c7ad9b28ab3c5d4fe5bf440e698b","unresolved":false,"context_lines":[{"line_number":254,"context_line":"                      status_code\u003d204)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        tenant \u003d self.client.tenants.remove_user(self.EXTRAS_ID,"},{"line_number":257,"context_line":"                                                 \u0027foo\u0027, \u0027barrr\u0027)"},{"line_number":258,"context_line":"        self._assert_request_id(tenant)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def test_tenant_add_user(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_45851acd","line":257,"in_reply_to":"7aa08908_be71c5aa","updated":"2016-06-14 01:26:08.000000000","message":"Like L119, I removed the indentation.","commit_id":"49258665c7db1a144f2424bb4e018e2a008e3499"}],"keystoneclient/v2_0/certificates.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"e7150d23332752ee8e8dcb2a736aae7b24e8628f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        resp, body \u003d self._client.get(\u0027/certificates/ca\u0027, authenticated\u003dFalse)"},{"line_number":32,"context_line":"        return [base._StrWithMeta(body, resp), resp.text]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def get_signing_certificate(self):"},{"line_number":35,"context_line":"        \"\"\"Get signing certificate."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_86830404","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":57},"updated":"2016-02-04 15:34:41.000000000","message":"we cannot do it. Other clients rely on the fact that get_ca_certificate will return text, not a list.","commit_id":"b58818dbe18808d5982d944b2f1ada15b7b5929f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"c9d01a98312826812a248207e36acbbcad43ac64","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        \"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        resp, body \u003d self._client.get(\u0027/certificates/ca\u0027, authenticated\u003dFalse)"},{"line_number":32,"context_line":"        return [base._StrWithMeta(body, resp), resp.text]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def get_signing_certificate(self):"},{"line_number":35,"context_line":"        \"\"\"Get signing certificate."}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_cce40a0f","line":32,"range":{"start_line":32,"start_character":8,"end_line":32,"end_character":57},"in_reply_to":"5a5ae5dd_86830404","updated":"2016-02-10 06:45:43.000000000","message":"Done","commit_id":"b58818dbe18808d5982d944b2f1ada15b7b5929f"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"e7150d23332752ee8e8dcb2a736aae7b24e8628f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        resp, body \u003d self._client.get(\u0027/certificates/signing\u0027,"},{"line_number":43,"context_line":"                                      authenticated\u003dFalse)"},{"line_number":44,"context_line":"        return [base._StrWithMeta(body, resp), resp.text]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_66a04891","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":57},"updated":"2016-02-04 15:34:41.000000000","message":"same here","commit_id":"b58818dbe18808d5982d944b2f1ada15b7b5929f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"c9d01a98312826812a248207e36acbbcad43ac64","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        resp, body \u003d self._client.get(\u0027/certificates/signing\u0027,"},{"line_number":43,"context_line":"                                      authenticated\u003dFalse)"},{"line_number":44,"context_line":"        return [base._StrWithMeta(body, resp), resp.text]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_6cf156cd","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":57},"in_reply_to":"5a5ae5dd_66a04891","updated":"2016-02-10 06:45:43.000000000","message":"Done","commit_id":"b58818dbe18808d5982d944b2f1ada15b7b5929f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"460f1c397b53b4870b10adba0644fb349669b5b4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    def __init__(self, client):"},{"line_number":23,"context_line":"        self._client \u003d client"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def convert_into_with_meta(self, item, resp):"},{"line_number":26,"context_line":"        if isinstance(resp.text, six.string_types):"},{"line_number":27,"context_line":"            if six.PY2 and isinstance(resp.text, six.text_type):"},{"line_number":28,"context_line":"                return base._UnicodeWithMeta(resp.text, resp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bae84128_e910985b","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":30},"updated":"2016-02-25 01:24:16.000000000","message":"This should not be public.\nAlso it\u0027s duplicating functionality, there is a _convert_into_with_meta() function in your other patch set[1].\n\n[1]: https://review.openstack.org/#/c/261188/9/keystoneclient/base.py@245","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"a8084d0c636ca76cd9246362c341fe91512dbc47","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    def __init__(self, client):"},{"line_number":23,"context_line":"        self._client \u003d client"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def convert_into_with_meta(self, item, resp):"},{"line_number":26,"context_line":"        if isinstance(resp.text, six.string_types):"},{"line_number":27,"context_line":"            if six.PY2 and isinstance(resp.text, six.text_type):"},{"line_number":28,"context_line":"                return base._UnicodeWithMeta(resp.text, resp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_34806146","line":25,"range":{"start_line":25,"start_character":8,"end_line":25,"end_character":30},"in_reply_to":"bae84128_e910985b","updated":"2016-03-08 11:17:31.000000000","message":"Done","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c1ee2984ab7ec357b2aaeb8a197defdb045d315","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        \"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        resp, body \u003d self._client.get(\u0027/certificates/ca\u0027, authenticated\u003dFalse)"},{"line_number":33,"context_line":"        return self.mgr._convert_into_with_meta(resp.text, resp)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def get_signing_certificate(self):"},{"line_number":36,"context_line":"        \"\"\"Get signing certificate."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_8943b741","line":33,"range":{"start_line":33,"start_character":24,"end_line":33,"end_character":47},"updated":"2016-04-07 03:47:51.000000000","message":"Internal function _convert_into_with_meta should not be called here.\nIf we are sure about the return type, we can avoid using this function here.\nI think we should just return base.XXXXWithMeta() here.","commit_id":"be7b547c0b6687626de630bbcaa8bf61f44e0ba1"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c1ee2984ab7ec357b2aaeb8a197defdb045d315","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        resp, body \u003d self._client.get(\u0027/certificates/signing\u0027,"},{"line_number":44,"context_line":"                                      authenticated\u003dFalse)"},{"line_number":45,"context_line":"        return self.mgr._convert_into_with_meta(resp.text, resp)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_097687a3","line":45,"range":{"start_line":45,"start_character":24,"end_line":45,"end_character":47},"updated":"2016-04-07 03:47:51.000000000","message":"Same as previous.","commit_id":"be7b547c0b6687626de630bbcaa8bf61f44e0ba1"}],"keystoneclient/v2_0/tokens.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"460f1c397b53b4870b10adba0644fb349669b5b4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        url \u003d \u0027/tokens/%s\u0027 % token"},{"line_number":95,"context_line":"        resp, body \u003d self.client.get(url)"},{"line_number":96,"context_line":"        return body"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def validate_access_info(self, token):"},{"line_number":99,"context_line":"        \"\"\"Validate a token."}],"source_content_type":"text/x-python","patch_set":7,"id":"bae84128_d6c3b287","line":96,"range":{"start_line":96,"start_character":15,"end_line":96,"end_character":19},"updated":"2016-02-25 01:24:16.000000000","message":"This doesn\u0027t contains reqeust_ids.","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"a8084d0c636ca76cd9246362c341fe91512dbc47","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\""},{"line_number":94,"context_line":"        url \u003d \u0027/tokens/%s\u0027 % token"},{"line_number":95,"context_line":"        resp, body \u003d self.client.get(url)"},{"line_number":96,"context_line":"        return body"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def validate_access_info(self, token):"},{"line_number":99,"context_line":"        \"\"\"Validate a token."}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_74c6694a","line":96,"range":{"start_line":96,"start_character":15,"end_line":96,"end_character":19},"in_reply_to":"bae84128_d6c3b287","updated":"2016-03-08 11:17:31.000000000","message":"Done","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"460f1c397b53b4870b10adba0644fb349669b5b4","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        token_id \u003d calc_id(token)"},{"line_number":115,"context_line":"        body \u003d self.get_token_data(token_id)"},{"line_number":116,"context_line":"        return access.AccessInfo.factory(auth_token\u003dtoken_id, body\u003dbody)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_revoked(self):"},{"line_number":119,"context_line":"        \"\"\"Returns the revoked tokens response."}],"source_content_type":"text/x-python","patch_set":7,"id":"bae84128_36765e06","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":72},"updated":"2016-02-25 01:24:16.000000000","message":"This doesn\u0027t contains request_ids, since I didn\u0027t see any change in access.py from your other patch sets.","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"d5875569bbe0a92760a361a85b5e68d3ac0610c3","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        token_id \u003d calc_id(token)"},{"line_number":115,"context_line":"        body \u003d self.get_token_data(token_id)"},{"line_number":116,"context_line":"        return access.AccessInfo.factory(auth_token\u003dtoken_id, body\u003dbody)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_revoked(self):"},{"line_number":119,"context_line":"        \"\"\"Returns the revoked tokens response."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_79148e43","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":72},"in_reply_to":"5aef4532_341061a8","updated":"2016-03-30 04:05:46.000000000","message":"But the request_id in body doesn\u0027t exposed to user,IMO.\nUser can\u0027t get request_id from the returned value.","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b73fd5e14173281bd990d018777daee58a6290ca","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        token_id \u003d calc_id(token)"},{"line_number":115,"context_line":"        body \u003d self.get_token_data(token_id)"},{"line_number":116,"context_line":"        return access.AccessInfo.factory(auth_token\u003dtoken_id, body\u003dbody)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_revoked(self):"},{"line_number":119,"context_line":"        \"\"\"Returns the revoked tokens response."}],"source_content_type":"text/x-python","patch_set":7,"id":"ba0121b8_9a0b897d","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":72},"in_reply_to":"ba0121b8_79148e43","updated":"2016-04-04 05:14:43.000000000","message":"I fixed it in access.py.","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"a8084d0c636ca76cd9246362c341fe91512dbc47","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        token_id \u003d calc_id(token)"},{"line_number":115,"context_line":"        body \u003d self.get_token_data(token_id)"},{"line_number":116,"context_line":"        return access.AccessInfo.factory(auth_token\u003dtoken_id, body\u003dbody)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def get_revoked(self):"},{"line_number":119,"context_line":"        \"\"\"Returns the revoked tokens response."}],"source_content_type":"text/x-python","patch_set":7,"id":"5aef4532_341061a8","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":72},"in_reply_to":"bae84128_36765e06","updated":"2016-03-08 11:17:31.000000000","message":"the body(@115) contains request_ids.","commit_id":"edf2ce8db99e0e348710e7e5d76825b2b733192f"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c1ee2984ab7ec357b2aaeb8a197defdb045d315","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        \"\"\""},{"line_number":95,"context_line":"        url \u003d \u0027/tokens/%s\u0027 % token"},{"line_number":96,"context_line":"        resp, body \u003d self.client.get(url)"},{"line_number":97,"context_line":"        return base._DictWithMeta(body, resp)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def validate_access_info(self, token):"},{"line_number":100,"context_line":"        \"\"\"Validate a token."}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_490d1fe7","line":97,"range":{"start_line":97,"start_character":20,"end_line":97,"end_character":33},"updated":"2016-04-07 03:47:51.000000000","message":"_DictWithMeta should be public class then.","commit_id":"be7b547c0b6687626de630bbcaa8bf61f44e0ba1"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c1ee2984ab7ec357b2aaeb8a197defdb045d315","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":"        resp, body \u003d self.client.get(\u0027/tokens/revoked\u0027)"},{"line_number":127,"context_line":"        return base._DictWithMeta(body, resp)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_89fbb7c0","line":127,"range":{"start_line":127,"start_character":20,"end_line":127,"end_character":33},"updated":"2016-04-07 03:47:51.000000000","message":"Same as previous.","commit_id":"be7b547c0b6687626de630bbcaa8bf61f44e0ba1"}]}
