)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5caa3c37ccd80ee2976a61affad187f00143f843","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Added wrapper classes which are inherited from base data types str,"},{"line_number":10,"context_line":"list, tuple and dict. Each of these wrapper classes and"},{"line_number":11,"context_line":"the Resource class contain a \u0027request_ids\u0027 attribute"},{"line_number":12,"context_line":"which is populated with a \u0027x-compute-request-id\u0027 or"},{"line_number":13,"context_line":"a \u0027x-openstack-request-id\u0027 received in a header from a response body."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change is required to return \u0027request_id\u0027 from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a5de9d1_46e1f528","line":12,"range":{"start_line":12,"start_character":26,"end_line":12,"end_character":48},"updated":"2016-02-02 08:04:31.000000000","message":"\u0027x-compute-request-id\u0027 is returned by nova only.\nkeystone returns \u0027x-openstack-request-id\u0027 only.","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"255ae35d0cd3df24cea5c00fc2fd7f13dd80c827","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Added wrapper classes which are inherited from base data types str,"},{"line_number":10,"context_line":"list, tuple and dict. Each of these wrapper classes and"},{"line_number":11,"context_line":"the Resource class contain a \u0027request_ids\u0027 attribute"},{"line_number":12,"context_line":"which is populated with a \u0027x-compute-request-id\u0027 or"},{"line_number":13,"context_line":"a \u0027x-openstack-request-id\u0027 received in a header from a response body."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change is required to return \u0027request_id\u0027 from"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5a5ae5dd_2a1c65c0","line":12,"range":{"start_line":12,"start_character":26,"end_line":12,"end_character":48},"in_reply_to":"7a5de9d1_46e1f528","updated":"2016-02-04 10:31:57.000000000","message":"Done","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"in a header from a response body."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change is required to return \u0027request_id\u0027 from"},{"line_number":16,"context_line":"client to log request_id mappings of cross projects."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch is one of a series of patches for implementing"},{"line_number":19,"context_line":"return-request-id-to-caller."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"dae33548_38ee81ec","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":51},"updated":"2016-02-16 15:08:53.000000000","message":"cross-project requests.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"in a header from a response body."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change is required to return \u0027request_id\u0027 from"},{"line_number":16,"context_line":"client to log request_id mappings of cross projects."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch is one of a series of patches for implementing"},{"line_number":19,"context_line":"return-request-id-to-caller."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bae84128_08233d57","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":51},"in_reply_to":"dae33548_38ee81ec","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"client to log request_id mappings of cross projects."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch is one of a series of patches for implementing"},{"line_number":19,"context_line":"return-request-id-to-caller."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ib8fe51d1e98dc59a4c14d07570011e5ab864cd11"},{"line_number":22,"context_line":"Co-authored-by: Ankit Agrawal \u003cankit11.agrawal@nttdata.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"dae33548_98a22dad","line":19,"updated":"2016-02-16 15:08:53.000000000","message":"This is already covered by line 23 so remove this paragraph.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"client to log request_id mappings of cross projects."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"This patch is one of a series of patches for implementing"},{"line_number":19,"context_line":"return-request-id-to-caller."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Change-Id: Ib8fe51d1e98dc59a4c14d07570011e5ab864cd11"},{"line_number":22,"context_line":"Co-authored-by: Ankit Agrawal \u003cankit11.agrawal@nttdata.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bae84128_e81ff905","line":19,"in_reply_to":"dae33548_98a22dad","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"}],"doc/source/using-api-v3.rst":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"125c583ebefdae8b46cd115210d2d62ea26edbe5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \u003e\u003e\u003e resp \u003d keystone.projects.list()"},{"line_number":121,"context_line":"    \u003e\u003e\u003e resp.request_id"},{"line_number":122,"context_line":"    req-1234-5678-..."},{"line_number":123,"context_line":"    \u003e\u003e\u003e resp.data"},{"line_number":124,"context_line":"    [\u003cProject ...\u003e, \u003cProject ...\u003e, ...]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Non-Session Authentication (deprecated)"}],"source_content_type":"text/x-rst","patch_set":18,"id":"1aa78d24_bcec76f4","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":17},"updated":"2016-07-14 05:43:11.000000000","message":"We use wrapt.ObjectProxy, so I don\u0027t think this is resp.data.\nShould it be resp?","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"53bc5eaf193af5cc8ac7ae2b460d2b62f3291857","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \u003e\u003e\u003e resp \u003d keystone.projects.list()"},{"line_number":121,"context_line":"    \u003e\u003e\u003e resp.request_id"},{"line_number":122,"context_line":"    req-1234-5678-..."},{"line_number":123,"context_line":"    \u003e\u003e\u003e resp.data"},{"line_number":124,"context_line":"    [\u003cProject ...\u003e, \u003cProject ...\u003e, ...]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Non-Session Authentication (deprecated)"}],"source_content_type":"text/x-rst","patch_set":18,"id":"dada55a8_1e94c288","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":17},"in_reply_to":"1aa78d24_3cb9a67a","updated":"2016-07-22 06:19:26.000000000","message":"Sorry, it is my mistake. Done.","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"6f0531c9219f66059a9ba7c18fc557dedf1bc8f2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    \u003e\u003e\u003e resp \u003d keystone.projects.list()"},{"line_number":121,"context_line":"    \u003e\u003e\u003e resp.request_id"},{"line_number":122,"context_line":"    req-1234-5678-..."},{"line_number":123,"context_line":"    \u003e\u003e\u003e resp.data"},{"line_number":124,"context_line":"    [\u003cProject ...\u003e, \u003cProject ...\u003e, ...]"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Non-Session Authentication (deprecated)"}],"source_content_type":"text/x-rst","patch_set":18,"id":"1aa78d24_3cb9a67a","line":123,"range":{"start_line":123,"start_character":8,"end_line":123,"end_character":17},"in_reply_to":"1aa78d24_bcec76f4","updated":"2016-07-14 05:47:45.000000000","message":"I think this is actually the documentation from my patch. Definitely wong for this review.","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":108,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":109,"context_line":":py:class:`keystoneclient.utils.RequestIdProxy` instead of just the data."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_da55ccc6","line":108,"range":{"start_line":108,"start_character":29,"end_line":108,"end_character":42},"updated":"2016-07-25 01:25:32.000000000","message":"change to \"cause the manager\" (add \"the\")","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":105,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":108,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":109,"context_line":":py:class:`keystoneclient.utils.RequestIdProxy` instead of just the data."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_ba50d8d5","line":108,"range":{"start_line":108,"start_character":55,"end_line":108,"end_character":61},"updated":"2016-07-25 01:25:32.000000000","message":"change to \"return a\" (add \"a\")","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":105,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":108,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":109,"context_line":":py:class:`keystoneclient.utils.RequestIdProxy` instead of just the data."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_5ae71ce4","line":108,"range":{"start_line":108,"start_character":55,"end_line":108,"end_character":61},"in_reply_to":"dada55a8_ba50d8d5","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":105,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":108,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":109,"context_line":":py:class:`keystoneclient.utils.RequestIdProxy` instead of just the data."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_3aea28ad","line":108,"range":{"start_line":108,"start_character":29,"end_line":108,"end_character":42},"in_reply_to":"dada55a8_da55ccc6","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":108,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":109,"context_line":":py:class:`keystoneclient.utils.RequestIdProxy` instead of just the data."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"},{"line_number":112,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_1a5e44e9","line":109,"range":{"start_line":109,"start_character":48,"end_line":109,"end_character":55},"updated":"2016-07-25 01:25:32.000000000","message":"change to \"object instead\"","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":108,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":109,"context_line":":py:class:`keystoneclient.utils.RequestIdProxy` instead of just the data."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"},{"line_number":112,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_bad618ef","line":109,"range":{"start_line":109,"start_character":48,"end_line":109,"end_character":55},"in_reply_to":"dada55a8_1a5e44e9","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    ...                    user_id\u003d\u0027myuserid\u0027,"},{"line_number":116,"context_line":"    ...                    password\u003d\u0027mypassword\u0027,"},{"line_number":117,"context_line":"    ...                    project_id\u003d\u0027myprojectid\u0027)"},{"line_number":118,"context_line":"    \u003e\u003e\u003e sess \u003d session.Session(auth\u003dauth)"},{"line_number":119,"context_line":"    \u003e\u003e\u003e keystone \u003d client.Client(session\u003dsess, include_metadata\u003dTrue)"},{"line_number":120,"context_line":"    \u003e\u003e\u003e proxy \u003d keystone.projects.list()"},{"line_number":121,"context_line":"    \u003e\u003e\u003e proxy.request_ids"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_5a58bcfa","line":118,"updated":"2016-07-25 01:25:32.000000000","message":"rather than copy-paste this and leave it to everybody to maintain it, remove this duplicated stuff. To someone reading this I think it will be obvious that they should refer to the code in the previous paragraph.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    ...                    user_id\u003d\u0027myuserid\u0027,"},{"line_number":116,"context_line":"    ...                    password\u003d\u0027mypassword\u0027,"},{"line_number":117,"context_line":"    ...                    project_id\u003d\u0027myprojectid\u0027)"},{"line_number":118,"context_line":"    \u003e\u003e\u003e sess \u003d session.Session(auth\u003dauth)"},{"line_number":119,"context_line":"    \u003e\u003e\u003e keystone \u003d client.Client(session\u003dsess, include_metadata\u003dTrue)"},{"line_number":120,"context_line":"    \u003e\u003e\u003e proxy \u003d keystone.projects.list()"},{"line_number":121,"context_line":"    \u003e\u003e\u003e proxy.request_ids"}],"source_content_type":"text/x-rst","patch_set":19,"id":"dada55a8_1a600435","line":118,"in_reply_to":"dada55a8_5a58bcfa","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"}],"keystoneclient/base.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":160,"context_line":"        resp.status_code \u003d\u003d 204"},{"line_number":161,"context_line":"        return StrWithMeta(resp.status_code, resp)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _create(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Deprecated. Use `_post` instead."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_d0ed1ab8","line":161,"updated":"2015-12-27 17:12:31.000000000","message":"This used to return a boolean now it returns a string...","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":160,"context_line":"        resp.status_code \u003d\u003d 204"},{"line_number":161,"context_line":"        return StrWithMeta(resp.status_code, resp)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _create(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Deprecated. Use `_post` instead."}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_bb9b4c17","line":161,"in_reply_to":"1a7b0d38_d0ed1ab8","updated":"2016-01-15 10:19:08.000000000","message":"Done","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            else:"},{"line_number":201,"context_line":"                return self.resource_class(self, body, resp\u003dresp)"},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            return StrWithMeta(body, resp)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _patch(self, url, body\u003dNone, response_key\u003dNone, **kwargs):"},{"line_number":206,"context_line":"        \"\"\"Update an object with PATCH method."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_702d46fd","line":203,"updated":"2015-12-27 17:12:31.000000000","message":"Shouldn\u0027t this be NoneWithMeta?","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            else:"},{"line_number":201,"context_line":"                return self.resource_class(self, body, resp\u003dresp)"},{"line_number":202,"context_line":"        else:"},{"line_number":203,"context_line":"            return StrWithMeta(body, resp)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _patch(self, url, body\u003dNone, response_key\u003dNone, **kwargs):"},{"line_number":206,"context_line":"        \"\"\"Update an object with PATCH method."}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_8e664428","line":203,"in_reply_to":"1a7b0d38_702d46fd","updated":"2016-01-15 10:19:08.000000000","message":"I changed Str to Tuple. When update methods don\u0027t return value, we use TupleWithMeta.\nhttps://specs.openstack.org/openstack/openstack-specs/specs/return-request-id.html#proposed-change","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            return rl[0]"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class RequestIdMixin(object):"},{"line_number":456,"context_line":"    \"\"\"Wrapper class to expose x-openstack-request-id to the caller.\"\"\""},{"line_number":457,"context_line":"    def request_ids_setup(self):"},{"line_number":458,"context_line":"        self.x_openstack_request_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_10a3a29e","line":455,"updated":"2015-12-27 17:12:31.000000000","message":"Isn\u0027t there an oslo class for this? Seems like keystoneclient and keystoneauth should both be able to use the same functions.\n\nAlso, this needs to be internal (prefix with _)","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            return rl[0]"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class RequestIdMixin(object):"},{"line_number":456,"context_line":"    \"\"\"Wrapper class to expose x-openstack-request-id to the caller.\"\"\""},{"line_number":457,"context_line":"    def request_ids_setup(self):"},{"line_number":458,"context_line":"        self.x_openstack_request_ids \u003d []"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_cc576424","line":455,"in_reply_to":"1a7b0d38_10a3a29e","updated":"2016-01-15 10:19:08.000000000","message":"This time, we weren\u0027t thinking oslo. If there is no problem of this class, I want to leave it here for now.","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":455,"context_line":"class RequestIdMixin(object):"},{"line_number":456,"context_line":"    \"\"\"Wrapper class to expose x-openstack-request-id to the caller.\"\"\""},{"line_number":457,"context_line":"    def request_ids_setup(self):"},{"line_number":458,"context_line":"        self.x_openstack_request_ids \u003d []"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    @property"},{"line_number":461,"context_line":"    def request_ids(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_50384a3d","line":458,"updated":"2015-12-27 17:12:31.000000000","message":"prefix internal members with _\n\nAlso, suggest remove \"x_openstack\" from the name.","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":455,"context_line":"class RequestIdMixin(object):"},{"line_number":456,"context_line":"    \"\"\"Wrapper class to expose x-openstack-request-id to the caller.\"\"\""},{"line_number":457,"context_line":"    def request_ids_setup(self):"},{"line_number":458,"context_line":"        self.x_openstack_request_ids \u003d []"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    @property"},{"line_number":461,"context_line":"    def request_ids(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_f166c5b9","line":458,"in_reply_to":"1a7b0d38_50384a3d","updated":"2016-01-15 10:19:08.000000000","message":"Done","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":461,"context_line":"    def request_ids(self):"},{"line_number":462,"context_line":"        return self.x_openstack_request_ids"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def append_request_ids(self, resp):"},{"line_number":465,"context_line":"        \"\"\"Add request_ids as an attribute to the object"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        :param resp: Response object or list of Response objects"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_7014669f","line":464,"updated":"2015-12-27 17:12:31.000000000","message":"This method should be internal (prefix with _)","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":461,"context_line":"    def request_ids(self):"},{"line_number":462,"context_line":"        return self.x_openstack_request_ids"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    def append_request_ids(self, resp):"},{"line_number":465,"context_line":"        \"\"\"Add request_ids as an attribute to the object"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        :param resp: Response object or list of Response objects"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_510eb1e5","line":464,"in_reply_to":"1a7b0d38_7014669f","updated":"2016-01-15 10:19:08.000000000","message":"Done","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        if isinstance(resp, Response):"},{"line_number":479,"context_line":"            # Extract \u0027x-openstack-request-id\u0027 from headers if"},{"line_number":480,"context_line":"            # response is a Response object."},{"line_number":481,"context_line":"            request_id \u003d (resp.headers.get(\u0027x-openstack-request-id\u0027))"},{"line_number":482,"context_line":"        else:"},{"line_number":483,"context_line":"            # If resp is of type string or None."},{"line_number":484,"context_line":"            request_id \u003d resp"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_30333e64","line":481,"updated":"2015-12-27 17:12:31.000000000","message":"remove extra ()\n\nalso, document where x-openstack-request-id is defined.","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        if isinstance(resp, Response):"},{"line_number":479,"context_line":"            # Extract \u0027x-openstack-request-id\u0027 from headers if"},{"line_number":480,"context_line":"            # response is a Response object."},{"line_number":481,"context_line":"            request_id \u003d (resp.headers.get(\u0027x-openstack-request-id\u0027))"},{"line_number":482,"context_line":"        else:"},{"line_number":483,"context_line":"            # If resp is of type string or None."},{"line_number":484,"context_line":"            request_id \u003d resp"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_51b3110a","line":481,"in_reply_to":"1a7b0d38_30333e64","updated":"2016-01-15 10:19:08.000000000","message":"Done. x-openstack-request-id is defined in keystoneclient/tests/unit/utils.py","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":489,"context_line":"class Resource(RequestIdMixin):"},{"line_number":490,"context_line":"    \"\"\"Base class for OpenStack resources (tenant, user, etc.)."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    This is pretty much just a bag for attributes."},{"line_number":493,"context_line":"    \"\"\""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    HUMAN_ID \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_103f2225","line":492,"updated":"2015-12-27 17:12:31.000000000","message":"The documentation needs to be updated to describe how to use the request IDs.","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":489,"context_line":"class Resource(RequestIdMixin):"},{"line_number":490,"context_line":"    \"\"\"Base class for OpenStack resources (tenant, user, etc.)."},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    This is pretty much just a bag for attributes."},{"line_number":493,"context_line":"    \"\"\""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    HUMAN_ID \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_11d27928","line":492,"in_reply_to":"1a7b0d38_103f2225","updated":"2016-01-15 10:19:08.000000000","message":"Done","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        return self.manager.delete(self)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"class ListWithMeta(list, RequestIdMixin):"},{"line_number":592,"context_line":"    def __init__(self, values, resp):"},{"line_number":593,"context_line":"        super(ListWithMeta, self).__init__(values)"},{"line_number":594,"context_line":"        self.request_ids_setup()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_30aede81","line":591,"updated":"2015-12-27 17:12:31.000000000","message":"these need to be private (prefix name with _)","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        return self.manager.delete(self)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"class ListWithMeta(list, RequestIdMixin):"},{"line_number":592,"context_line":"    def __init__(self, values, resp):"},{"line_number":593,"context_line":"        super(ListWithMeta, self).__init__(values)"},{"line_number":594,"context_line":"        self.request_ids_setup()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_d1c70162","line":591,"in_reply_to":"1a7b0d38_30aede81","updated":"2016-01-15 10:19:08.000000000","message":"Done","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c347ea817a76ed5def5c967bfa56d463daa2e54","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":160,"context_line":"        resp.status_code \u003d\u003d 204"},{"line_number":161,"context_line":"        return _BoolWithMeta(body, resp)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_46f6d55d","line":161,"range":{"start_line":161,"start_character":29,"end_line":161,"end_character":33},"updated":"2016-02-03 02:53:46.000000000","message":"Why is body returned?\nIMO, the code should looks like this:\n############################################\nxxx \u003d resp.status_code \u003d\u003d 204\nreturn _BoolWithMeta(xxx, resp)\n############################################","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"835b560f5b13896c28d508694ab418d3396707e4","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":160,"context_line":"        resp.status_code \u003d\u003d 204"},{"line_number":161,"context_line":"        return _BoolWithMeta(body, resp)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_55cf067f","line":161,"range":{"start_line":161,"start_character":29,"end_line":161,"end_character":33},"in_reply_to":"7a5de9d1_46f6d55d","updated":"2016-02-04 10:36:47.000000000","message":"Done","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c347ea817a76ed5def5c967bfa56d463daa2e54","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            else:"},{"line_number":215,"context_line":"                return self.resource_class(self, body, resp\u003dresp)"},{"line_number":216,"context_line":"        else:"},{"line_number":217,"context_line":"            return _StrWithMeta(body, resp)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _delete(self, url, **kwargs):"},{"line_number":220,"context_line":"        \"\"\"Delete an object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_3f4b97b2","line":217,"range":{"start_line":217,"start_character":19,"end_line":217,"end_character":31},"updated":"2016-02-03 02:53:46.000000000","message":"What\u0027s the difference between _put and _patch?\nWhy _put returns _TupleWithMeta but _patch returns _StrWithMeta?\nMay be worth a comment?\nNo -1 vote with this, I just don\u0027t understand it.\nThanks.","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"835b560f5b13896c28d508694ab418d3396707e4","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            else:"},{"line_number":215,"context_line":"                return self.resource_class(self, body, resp\u003dresp)"},{"line_number":216,"context_line":"        else:"},{"line_number":217,"context_line":"            return _StrWithMeta(body, resp)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _delete(self, url, **kwargs):"},{"line_number":220,"context_line":"        \"\"\"Delete an object."}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_95ab3e89","line":217,"range":{"start_line":217,"start_character":19,"end_line":217,"end_character":31},"in_reply_to":"5a5ae5dd_3f4b97b2","updated":"2016-02-04 10:36:47.000000000","message":"In case of to return None, I use _TupleWithMeta. The _put is it. But, it was not applied except for _put in this patch .\nSo, like novaclient, I changed the code to use convert_into_with_meta .\nSee:\nhttps://github.com/openstack/python-novaclient/blob/master/novaclient/base.py#L380","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9c347ea817a76ed5def5c967bfa56d463daa2e54","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        reprkeys \u003d sorted(k"},{"line_number":511,"context_line":"                          for k in self.__dict__.keys()"},{"line_number":512,"context_line":"                          if k[0] !\u003d \u0027_\u0027 and"},{"line_number":513,"context_line":"                          k not in [\u0027manager\u0027, \u0027request_ids\u0027])"},{"line_number":514,"context_line":"        info \u003d \", \".join(\"%s\u003d%s\" % (k, getattr(self, k)) for k in reprkeys)"},{"line_number":515,"context_line":"        return \"\u003c%s %s\u003e\" % (self.__class__.__name__, info)"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_59db13ee","line":513,"range":{"start_line":513,"start_character":48,"end_line":513,"end_character":59},"updated":"2016-02-03 02:53:46.000000000","message":"\u0027request_ids\u0027 is a function not a property, this is not necessary.","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"835b560f5b13896c28d508694ab418d3396707e4","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        reprkeys \u003d sorted(k"},{"line_number":511,"context_line":"                          for k in self.__dict__.keys()"},{"line_number":512,"context_line":"                          if k[0] !\u003d \u0027_\u0027 and"},{"line_number":513,"context_line":"                          k not in [\u0027manager\u0027, \u0027request_ids\u0027])"},{"line_number":514,"context_line":"        info \u003d \", \".join(\"%s\u003d%s\" % (k, getattr(self, k)) for k in reprkeys)"},{"line_number":515,"context_line":"        return \"\u003c%s %s\u003e\" % (self.__class__.__name__, info)"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_15a0ae9e","line":513,"range":{"start_line":513,"start_character":48,"end_line":513,"end_character":59},"in_reply_to":"5a5ae5dd_59db13ee","updated":"2016-02-04 10:36:47.000000000","message":"Done","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5caa3c37ccd80ee2976a61affad187f00143f843","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"class _TupleWithMeta(tuple, _RequestIdMixin):"},{"line_number":600,"context_line":"    def __new__(cls, values, resp):"},{"line_number":601,"context_line":"        return super(_TupleWithMeta, cls).__new__(cls, (resp, values))"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def __init__(self, values, resp):"},{"line_number":604,"context_line":"        self.request_ids_setup()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_4ba4a049","line":601,"updated":"2016-02-02 08:04:31.000000000","message":"This line should be changed like python-novaclient.\n\nSee\n\nhttps://github.com/openstack/python-novaclient/blob/master/novaclient/base.py#L524","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"255ae35d0cd3df24cea5c00fc2fd7f13dd80c827","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"class _TupleWithMeta(tuple, _RequestIdMixin):"},{"line_number":600,"context_line":"    def __new__(cls, values, resp):"},{"line_number":601,"context_line":"        return super(_TupleWithMeta, cls).__new__(cls, (resp, values))"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"    def __init__(self, values, resp):"},{"line_number":604,"context_line":"        self.request_ids_setup()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_4a6e8130","line":601,"in_reply_to":"7a5de9d1_4ba4a049","updated":"2016-02-04 10:31:57.000000000","message":"Done","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"6f25a6379407d29979379574e14bde4559797353","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        else:"},{"line_number":284,"context_line":"            return rl[0]"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def findall(self, **kwargs):"},{"line_number":287,"context_line":"        \"\"\"Find all items with attributes matching ``**kwargs``."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        This isn\u0027t very efficient: it loads the entire list then filters on"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_1e78d3f1","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":32},"updated":"2016-02-04 09:20:26.000000000","message":"Change this method, too.\nself.list()\u0027s result has request ID.","commit_id":"2fac145674890b692261ef6059388b354fcc874c"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"d46ac6396b59b6e944a5de28dcc64896ade78eb6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        else:"},{"line_number":284,"context_line":"            return rl[0]"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def findall(self, **kwargs):"},{"line_number":287,"context_line":"        \"\"\"Find all items with attributes matching ``**kwargs``."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        This isn\u0027t very efficient: it loads the entire list then filters on"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_b55afa28","line":286,"range":{"start_line":286,"start_character":0,"end_line":286,"end_character":32},"in_reply_to":"5a5ae5dd_1e78d3f1","updated":"2016-02-04 10:39:10.000000000","message":"Done","commit_id":"2fac145674890b692261ef6059388b354fcc874c"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"143a7d51baee48a6056ad6a527be3cf9de086483","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        resp, body \u003d self.client.delete(url, **kwargs)"},{"line_number":226,"context_line":"        return self.convert_into_with_meta(body, resp)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _update(self, url, body\u003dNone, response_key\u003dNone, method\u003d\"PUT\","},{"line_number":229,"context_line":"                **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_1adb841c","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":54},"updated":"2016-02-08 01:28:08.000000000","message":"When body is none:\nPreviously it returns a tuple, (resp, body), and resp is returned to user.\nBut now,it returns (body,) with meta _request_ids. And resp is gone?","commit_id":"8d5e5513b46b3d6b864105da0a0e8696b77b6a52"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f5992c999461dc6238d56e87025997ff6c76952e","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        resp, body \u003d self.client.delete(url, **kwargs)"},{"line_number":226,"context_line":"        return self.convert_into_with_meta(body, resp)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _update(self, url, body\u003dNone, response_key\u003dNone, method\u003d\"PUT\","},{"line_number":229,"context_line":"                **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_ccac0af0","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":54},"in_reply_to":"5a5ae5dd_1adb841c","updated":"2016-02-10 06:34:29.000000000","message":"Yes, now, it returns (body), because I changed the code of _TupleWithMeta class (Line 617).","commit_id":"8d5e5513b46b3d6b864105da0a0e8696b77b6a52"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"3700d9e5e3cbe9ed164260b24ea7cb9cffb76411","unresolved":false,"context_lines":[{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        :param resp: Response object or list of Response objects"},{"line_number":480,"context_line":"        \"\"\""},{"line_number":481,"context_line":"        if isinstance(resp, list):"},{"line_number":482,"context_line":"            # Add list of request_ids if response is of type list."},{"line_number":483,"context_line":"            for resp_obj in resp:"},{"line_number":484,"context_line":"                self._append_request_id(resp_obj)"},{"line_number":485,"context_line":"        elif resp is not None:"},{"line_number":486,"context_line":"            # Add request_ids if response contains single object."},{"line_number":487,"context_line":"            self._append_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_863c64e3","line":484,"range":{"start_line":481,"start_character":8,"end_line":484,"end_character":49},"updated":"2016-02-04 15:42:11.000000000","message":"Why do we handle list in a special way? I don\u0027t think we want request id to be in each User, returned by a call to /users/. If we want, it should be done not here.","commit_id":"8d5e5513b46b3d6b864105da0a0e8696b77b6a52"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"7ec974d81c9f63062c69c388fe17dc4b4a9f0ae7","unresolved":false,"context_lines":[{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        :param resp: Response object or list of Response objects"},{"line_number":480,"context_line":"        \"\"\""},{"line_number":481,"context_line":"        if isinstance(resp, list):"},{"line_number":482,"context_line":"            # Add list of request_ids if response is of type list."},{"line_number":483,"context_line":"            for resp_obj in resp:"},{"line_number":484,"context_line":"                self._append_request_id(resp_obj)"},{"line_number":485,"context_line":"        elif resp is not None:"},{"line_number":486,"context_line":"            # Add request_ids if response contains single object."},{"line_number":487,"context_line":"            self._append_request_id(resp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_cc3e4ab8","line":484,"range":{"start_line":481,"start_character":8,"end_line":484,"end_character":49},"in_reply_to":"5a5ae5dd_863c64e3","updated":"2016-02-10 06:32:01.000000000","message":"Done","commit_id":"8d5e5513b46b3d6b864105da0a0e8696b77b6a52"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"143a7d51baee48a6056ad6a527be3cf9de086483","unresolved":false,"context_lines":[{"line_number":631,"context_line":""},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"class _BoolWithMeta(int, _RequestIdMixin):"},{"line_number":634,"context_line":"    def __new__(cls, value, resp):"},{"line_number":635,"context_line":"        return super(_BoolWithMeta, cls).__new__(cls, bool(value))"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"    def __init__(self, values, resp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a5ae5dd_fa7f88dd","line":634,"range":{"start_line":634,"start_character":21,"end_line":634,"end_character":26},"updated":"2016-02-08 01:28:08.000000000","message":"What\u0027s the difference between \"value\" and \"values\" ?\nIn __new__() function, value is used, and in __init__() function values is used.\nIMO, these value/values is the same thing.","commit_id":"8d5e5513b46b3d6b864105da0a0e8696b77b6a52"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f5992c999461dc6238d56e87025997ff6c76952e","unresolved":false,"context_lines":[{"line_number":631,"context_line":""},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"class _BoolWithMeta(int, _RequestIdMixin):"},{"line_number":634,"context_line":"    def __new__(cls, value, resp):"},{"line_number":635,"context_line":"        return super(_BoolWithMeta, cls).__new__(cls, bool(value))"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"    def __init__(self, values, resp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_ac966e92","line":634,"range":{"start_line":634,"start_character":21,"end_line":634,"end_character":26},"in_reply_to":"5a5ae5dd_fa7f88dd","updated":"2016-02-10 06:34:29.000000000","message":"Exactly. I changed to \"value\" at __init__ because bool is single response. This is the same as _StrWithMeta.","commit_id":"8d5e5513b46b3d6b864105da0a0e8696b77b6a52"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            request (GET will be sent by default)"},{"line_number":169,"context_line":"        :param response_key: the key to be looked up in response dictionary,"},{"line_number":170,"context_line":"            e.g., \u0027servers\u0027"},{"line_number":171,"context_line":"        :param return_raw: flag to force returning raw JSON instead of"},{"line_number":172,"context_line":"            Python object of self.resource_class"},{"line_number":173,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":174,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_78676925","line":171,"range":{"start_line":171,"start_character":41,"end_line":171,"end_character":67},"updated":"2016-02-16 15:08:53.000000000","message":"this isn\u0027t correct anymore since it doesn\u0027t return raw JSON.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            request (GET will be sent by default)"},{"line_number":169,"context_line":"        :param response_key: the key to be looked up in response dictionary,"},{"line_number":170,"context_line":"            e.g., \u0027servers\u0027"},{"line_number":171,"context_line":"        :param return_raw: flag to force returning raw JSON instead of"},{"line_number":172,"context_line":"            Python object of self.resource_class"},{"line_number":173,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":174,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_c8db154e","line":171,"range":{"start_line":171,"start_character":41,"end_line":171,"end_character":67},"in_reply_to":"dae33548_78676925","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"f604a9f9a06470c15a7af61c62227165d12fe2ae","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        resp, body \u003d self.client.delete(url, **kwargs)"},{"line_number":226,"context_line":"        return self.convert_into_with_meta(body, resp)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _update(self, url, body\u003dNone, response_key\u003dNone, method\u003d\"PUT\","},{"line_number":229,"context_line":"                **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a57f1b5_07819b4a","line":226,"range":{"start_line":226,"start_character":20,"end_line":226,"end_character":42},"updated":"2016-02-10 07:24:51.000000000","message":"Hi, Maho Koshiya:\nThank you for you explanation.\nSo, you intended to break backward compatibility?\nI don\u0027t think it\u0027s a good idea, are you sure this will not cause any problems?\nAny solution without breaking  backward compatibility?","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        resp, body \u003d self.client.delete(url, **kwargs)"},{"line_number":226,"context_line":"        return self.convert_into_with_meta(body, resp)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _update(self, url, body\u003dNone, response_key\u003dNone, method\u003d\"PUT\","},{"line_number":229,"context_line":"                **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_3bb67b3d","line":226,"range":{"start_line":226,"start_character":20,"end_line":226,"end_character":42},"in_reply_to":"3a57f1b5_07819b4a","updated":"2016-02-16 15:08:53.000000000","message":"I agree this breaks backwards compatibility which we don\u0027t want to do just to add a field. Find another way that\u0027s backwards compatible.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        resp, body \u003d self.client.delete(url, **kwargs)"},{"line_number":226,"context_line":"        return self.convert_into_with_meta(body, resp)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def _update(self, url, body\u003dNone, response_key\u003dNone, method\u003d\"PUT\","},{"line_number":229,"context_line":"                **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_08ea1ddb","line":226,"range":{"start_line":226,"start_character":20,"end_line":226,"end_character":42},"in_reply_to":"dae33548_3bb67b3d","updated":"2016-02-23 04:24:05.000000000","message":"I changed it, like https://review.openstack.org/#/c/276639/2/novaclient/v2/servers.py@939","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            return self.convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def convert_into_with_meta(self, item, resp):"},{"line_number":246,"context_line":"        if isinstance(item, six.string_types):"},{"line_number":247,"context_line":"            if six.PY2 and isinstance(item, six.text_type):"},{"line_number":248,"context_line":"                return _UnicodeWithMeta(item, resp)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_b89d715b","line":245,"updated":"2016-02-16 15:08:53.000000000","message":"This needs to be prefixed with _ since it\u0027s not public.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            return self.convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def convert_into_with_meta(self, item, resp):"},{"line_number":246,"context_line":"        if isinstance(item, six.string_types):"},{"line_number":247,"context_line":"            if six.PY2 and isinstance(item, six.text_type):"},{"line_number":248,"context_line":"                return _UnicodeWithMeta(item, resp)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_28ed61ef","line":245,"in_reply_to":"dae33548_b89d715b","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"class _RequestIdMixin(object):"},{"line_number":471,"context_line":"    \"\"\"Wrapper class to expose x-openstack-request-id to the caller.\"\"\""},{"line_number":472,"context_line":"    def request_ids_setup(self):"},{"line_number":473,"context_line":"        self._request_ids \u003d []"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_7b30039f","line":472,"updated":"2016-02-16 15:08:53.000000000","message":"Prefix with _. This should not be public since applications shouldn\u0027t be calling it.\n\nAlso, this should be __init__","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":469,"context_line":""},{"line_number":470,"context_line":"class _RequestIdMixin(object):"},{"line_number":471,"context_line":"    \"\"\"Wrapper class to expose x-openstack-request-id to the caller.\"\"\""},{"line_number":472,"context_line":"    def request_ids_setup(self):"},{"line_number":473,"context_line":"        self._request_ids \u003d []"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_c8b2f505","line":472,"in_reply_to":"dae33548_7b30039f","updated":"2016-02-23 04:24:05.000000000","message":"I deleted request_ids_setup . Instead, I moved \"self._request_ids \u003d []\" to _append_request_ids .","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        self._request_ids \u003d []"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    @property"},{"line_number":476,"context_line":"    def request_ids(self):"},{"line_number":477,"context_line":"        return self._request_ids"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def _append_request_ids(self, resp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_5bf37fd6","line":476,"updated":"2016-02-16 15:08:53.000000000","message":"public APIs need a docstring.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":473,"context_line":"        self._request_ids \u003d []"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    @property"},{"line_number":476,"context_line":"    def request_ids(self):"},{"line_number":477,"context_line":"        return self._request_ids"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def _append_request_ids(self, resp):"}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_28c4415d","line":476,"in_reply_to":"dae33548_5bf37fd6","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            # Add request_ids if response contains single object."},{"line_number":486,"context_line":"            self._append_request_id(resp)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _append_request_id(self, resp):"},{"line_number":489,"context_line":"        if isinstance(resp, Response):"},{"line_number":490,"context_line":"            # Extract \u0027x-openstack-request-id\u0027 from headers if"},{"line_number":491,"context_line":"            # response is a Response object."}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_bb860b11","line":488,"updated":"2016-02-16 15:08:53.000000000","message":"why have 2 functions?","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":485,"context_line":"            # Add request_ids if response contains single object."},{"line_number":486,"context_line":"            self._append_request_id(resp)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _append_request_id(self, resp):"},{"line_number":489,"context_line":"        if isinstance(resp, Response):"},{"line_number":490,"context_line":"            # Extract \u0027x-openstack-request-id\u0027 from headers if"},{"line_number":491,"context_line":"            # response is a Response object."}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_c8a95592","line":488,"in_reply_to":"dae33548_bb860b11","updated":"2016-02-23 04:24:05.000000000","message":"I combined _append_request_ids and _append_request_id, and amended.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":499,"context_line":"class Resource(_RequestIdMixin):"},{"line_number":500,"context_line":"    \"\"\"Base class for OpenStack resources (tenant, user, etc.)."},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    Inherited the _RequestIdMixin Class, and get request IDs"},{"line_number":503,"context_line":"    from headers. This is pretty much just a bag for attributes."},{"line_number":504,"context_line":"    This is pretty much just a bag for attributes."},{"line_number":505,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_bbb8cbe6","line":502,"updated":"2016-02-16 15:08:53.000000000","message":"References to private classes like _RequestIdMixin should not be done in docstrings since application developers aren\u0027t going to know what it is.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":499,"context_line":"class Resource(_RequestIdMixin):"},{"line_number":500,"context_line":"    \"\"\"Base class for OpenStack resources (tenant, user, etc.)."},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    Inherited the _RequestIdMixin Class, and get request IDs"},{"line_number":503,"context_line":"    from headers. This is pretty much just a bag for attributes."},{"line_number":504,"context_line":"    This is pretty much just a bag for attributes."},{"line_number":505,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_e8941944","line":502,"in_reply_to":"dae33548_bbb8cbe6","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    Inherited the _RequestIdMixin Class, and get request IDs"},{"line_number":503,"context_line":"    from headers. This is pretty much just a bag for attributes."},{"line_number":504,"context_line":"    This is pretty much just a bag for attributes."},{"line_number":505,"context_line":"    \"\"\""},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    HUMAN_ID \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_3bc5db5a","line":504,"updated":"2016-02-16 15:08:53.000000000","message":"this sentence is duplicated.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    Inherited the _RequestIdMixin Class, and get request IDs"},{"line_number":503,"context_line":"    from headers. This is pretty much just a bag for attributes."},{"line_number":504,"context_line":"    This is pretty much just a bag for attributes."},{"line_number":505,"context_line":"    \"\"\""},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"    HUMAN_ID \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_489ee563","line":504,"in_reply_to":"dae33548_3bc5db5a","updated":"2016-02-23 04:24:05.000000000","message":"Done","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self._add_details(info)"},{"line_number":521,"context_line":"        self._loaded \u003d loaded"},{"line_number":522,"context_line":"        self.request_ids_setup()"},{"line_number":523,"context_line":"        self._append_request_ids(resp)"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def __repr__(self):"},{"line_number":526,"context_line":"        reprkeys \u003d sorted(k"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_5bafff80","line":523,"updated":"2016-02-16 15:08:53.000000000","message":"rather than always require 2 calls there could be 1. e.g., self.request_ids_setup(resp)","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        self._add_details(info)"},{"line_number":521,"context_line":"        self._loaded \u003d loaded"},{"line_number":522,"context_line":"        self.request_ids_setup()"},{"line_number":523,"context_line":"        self._append_request_ids(resp)"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"    def __repr__(self):"},{"line_number":526,"context_line":"        reprkeys \u003d sorted(k"}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_688f692a","line":523,"in_reply_to":"dae33548_5bafff80","updated":"2016-02-23 04:24:05.000000000","message":"By line 472, I use only \"self._append_request_ids(resp)\" .","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1f0be566a765b15f1324957dd4e5ad4448e5fef5","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"if six.PY2:"},{"line_number":645,"context_line":"    class _UnicodeWithMeta(six.text_type, _RequestIdMixin):"},{"line_number":646,"context_line":"        def __new__(cls, value, resp):"},{"line_number":647,"context_line":"            return super(_UnicodeWithMeta, cls).__new__(cls, value)"},{"line_number":648,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_3bbb1b10","line":645,"updated":"2016-02-16 15:08:53.000000000","message":"This isn\u0027t used as far as I can tell.","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"4ab0891821bdbee58032b571be7e8f3d308be5f6","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"if six.PY2:"},{"line_number":645,"context_line":"    class _UnicodeWithMeta(six.text_type, _RequestIdMixin):"},{"line_number":646,"context_line":"        def __new__(cls, value, resp):"},{"line_number":647,"context_line":"            return super(_UnicodeWithMeta, cls).__new__(cls, value)"},{"line_number":648,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"bae84128_a885f107","line":645,"in_reply_to":"dae33548_3bbb1b10","updated":"2016-02-23 04:24:05.000000000","message":"It is used to test. (e.g, https://review.openstack.org/#/c/267449/6/keystoneclient/v2_0/certificates.py@28 )","commit_id":"cc2255bd942b033479196d1484182bfd5710db48"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        except (KeyError, TypeError):"},{"line_number":136,"context_line":"            pass"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        items \u003d [obj_class(self, res, loaded\u003dTrue) for res in data if res]"},{"line_number":139,"context_line":"        return self._convert_into_with_meta(items, resp)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _get(self, url, response_key, **kwargs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_28ec08f2","line":138,"updated":"2016-02-24 01:19:44.000000000","message":"This should really be changed into a generator expression so that we only loop over the list once.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        except (KeyError, TypeError):"},{"line_number":136,"context_line":"            pass"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        items \u003d [obj_class(self, res, loaded\u003dTrue) for res in data if res]"},{"line_number":139,"context_line":"        return self._convert_into_with_meta(items, resp)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _get(self, url, response_key, **kwargs):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_79be7900","line":138,"in_reply_to":"bae84128_28ec08f2","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"4ea351dc47fae24ac7e8bf5a3078bcbafcfecc3c","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        found \u003d _ListWithMeta([], None)"},{"line_number":297,"context_line":"        searches \u003d kwargs.items()"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        found._append_request_ids(self.list().request_ids)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        for obj in self.list():"},{"line_number":302,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_43504dd4","line":299,"range":{"start_line":299,"start_character":34,"end_line":299,"end_character":57},"updated":"2016-02-24 02:00:59.000000000","message":"This is strange, self.list() function is called twice.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        found \u003d _ListWithMeta([], None)"},{"line_number":297,"context_line":"        searches \u003d kwargs.items()"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        found._append_request_ids(self.list().request_ids)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        for obj in self.list():"},{"line_number":302,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_08a784aa","line":299,"updated":"2016-02-24 01:19:44.000000000","message":"We should not be calling a protected method. It\u0027s either part of the interface or it\u0027s not.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        found \u003d _ListWithMeta([], None)"},{"line_number":297,"context_line":"        searches \u003d kwargs.items()"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        found._append_request_ids(self.list().request_ids)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        for obj in self.list():"},{"line_number":302,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_993b859c","line":299,"range":{"start_line":299,"start_character":34,"end_line":299,"end_character":57},"in_reply_to":"bae84128_43504dd4","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"4ea351dc47fae24ac7e8bf5a3078bcbafcfecc3c","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        found._append_request_ids(self.list().request_ids)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        for obj in self.list():"},{"line_number":302,"context_line":"            try:"},{"line_number":303,"context_line":"                if all(getattr(obj, attr) \u003d\u003d value"},{"line_number":304,"context_line":"                       for (attr, value) in searches):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_033e4527","line":301,"range":{"start_line":301,"start_character":19,"end_line":301,"end_character":30},"updated":"2016-02-24 02:00:59.000000000","message":"This second call of self.list().","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        found._append_request_ids(self.list().request_ids)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        for obj in self.list():"},{"line_number":302,"context_line":"            try:"},{"line_number":303,"context_line":"                if all(getattr(obj, attr) \u003d\u003d value"},{"line_number":304,"context_line":"                       for (attr, value) in searches):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_394b512d","line":301,"range":{"start_line":301,"start_character":19,"end_line":301,"end_character":30},"in_reply_to":"bae84128_033e4527","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        :param resp: Response object"},{"line_number":484,"context_line":"        \"\"\""},{"line_number":485,"context_line":"        self._request_ids \u003d []"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        if resp is not None:"},{"line_number":488,"context_line":"            # Add request_ids if response contains single object."}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_88e0b4ce","line":485,"updated":"2016-02-24 01:19:44.000000000","message":"Why is this not in the __init__? Are you clearing this list on purpose when this method is called?","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        :param resp: Response object"},{"line_number":484,"context_line":"        \"\"\""},{"line_number":485,"context_line":"        self._request_ids \u003d []"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        if resp is not None:"},{"line_number":488,"context_line":"            # Add request_ids if response contains single object."}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_59529dde","line":485,"in_reply_to":"bae84128_88e0b4ce","updated":"2016-03-07 07:07:48.000000000","message":"We have followed this design in all other clients and reason for this is, Mixins are considered as collection of functions hence generally they should not contain init. \nThe initialize functionality can be placed under a function like setUp(), however, I deleted setUp() by comment of PS8. So, this initialize functionality is here.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"4771e5643438b445d88c5475a563eaf1a78b1890","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                request_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":493,"context_line":"            else:"},{"line_number":494,"context_line":"                # If resp is of type string or None."},{"line_number":495,"context_line":"                request_id \u003d resp"},{"line_number":496,"context_line":"            if request_id not in self._request_ids:"},{"line_number":497,"context_line":"                self._request_ids.append(request_id)"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_9a6c6809","line":495,"range":{"start_line":495,"start_character":16,"end_line":495,"end_character":26},"updated":"2016-02-24 09:13:04.000000000","message":"If request_id is a list, we need a loop to deal with it, or it will looks like this:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\u003e\u003e\u003e l \u003d [1,2]\n\u003e\u003e\u003e l.append([3,4])\n\u003e\u003e\u003e l\n[1, 2, [3, 4]]\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                request_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":493,"context_line":"            else:"},{"line_number":494,"context_line":"                # If resp is of type string or None."},{"line_number":495,"context_line":"                request_id \u003d resp"},{"line_number":496,"context_line":"            if request_id not in self._request_ids:"},{"line_number":497,"context_line":"                self._request_ids.append(request_id)"},{"line_number":498,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_b95da1ee","line":495,"range":{"start_line":495,"start_character":16,"end_line":495,"end_character":26},"in_reply_to":"bae84128_9a6c6809","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        :param manager: BaseManager object"},{"line_number":513,"context_line":"        :param info: dictionary representing resource attributes"},{"line_number":514,"context_line":"        :param loaded: prevent lazy-loading if set to True"},{"line_number":515,"context_line":"        :param resp: Response or list of Response objects"},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        self.manager \u003d manager"},{"line_number":518,"context_line":"        self._info \u003d info"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_68661052","line":515,"updated":"2016-02-24 01:19:44.000000000","message":"I think this is a strange design choice.  What used to be just about the data has to understand HTTP responses. It seems like this would be better in the calling class.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        :param manager: BaseManager object"},{"line_number":513,"context_line":"        :param info: dictionary representing resource attributes"},{"line_number":514,"context_line":"        :param loaded: prevent lazy-loading if set to True"},{"line_number":515,"context_line":"        :param resp: Response or list of Response objects"},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        self.manager \u003d manager"},{"line_number":518,"context_line":"        self._info \u003d info"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_f95729c8","line":515,"in_reply_to":"bae84128_68661052","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"615851013d70a9a275de311ede5fa1b47989f202","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        :param info: dictionary representing resource attributes"},{"line_number":514,"context_line":"        :param loaded: prevent lazy-loading if set to True"},{"line_number":515,"context_line":"        :param resp: Response or list of Response objects"},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        self.manager \u003d manager"},{"line_number":518,"context_line":"        self._info \u003d info"},{"line_number":519,"context_line":"        self._add_details(info)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_ef0f8d86","line":516,"updated":"2016-02-24 19:01:41.000000000","message":"this needs to call super(Resource, self).__init__() to call the mixin\u0027s init.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        :param info: dictionary representing resource attributes"},{"line_number":514,"context_line":"        :param loaded: prevent lazy-loading if set to True"},{"line_number":515,"context_line":"        :param resp: Response or list of Response objects"},{"line_number":516,"context_line":"        \"\"\""},{"line_number":517,"context_line":"        self.manager \u003d manager"},{"line_number":518,"context_line":"        self._info \u003d info"},{"line_number":519,"context_line":"        self._add_details(info)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_99d70523","line":516,"in_reply_to":"bae84128_ef0f8d86","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":595,"context_line":"        return self.manager.delete(self)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"class _ListWithMeta(list, _RequestIdMixin):"},{"line_number":599,"context_line":"    def __init__(self, values, resp):"},{"line_number":600,"context_line":"        super(_ListWithMeta, self).__init__(values)"},{"line_number":601,"context_line":"        self._append_request_ids(resp)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_08066451","line":598,"updated":"2016-02-24 01:19:44.000000000","message":"I don\u0027t like the Meta in the name because I think metaclasses, but I don\u0027t have a better suggestion right now.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":595,"context_line":"        return self.manager.delete(self)"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"class _ListWithMeta(list, _RequestIdMixin):"},{"line_number":599,"context_line":"    def __init__(self, values, resp):"},{"line_number":600,"context_line":"        super(_ListWithMeta, self).__init__(values)"},{"line_number":601,"context_line":"        self._append_request_ids(resp)"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_9909c5e0","line":598,"in_reply_to":"bae84128_08066451","updated":"2016-03-07 07:07:48.000000000","message":"I want to not change class name, because it has been already defined in specs and also followed at other clients...","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":635,"context_line":""},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"if six.PY2:"},{"line_number":638,"context_line":"    class _UnicodeWithMeta(six.text_type, _RequestIdMixin):"},{"line_number":639,"context_line":"        def __new__(cls, value, resp):"},{"line_number":640,"context_line":"            return super(_UnicodeWithMeta, cls).__new__(cls, value)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_772ef2fb","line":638,"updated":"2016-02-24 01:19:44.000000000","message":"Why not just declare two types? A TextWithMeta and a BytesWithMeta and don\u0027t even check for six.PY2 here.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"615851013d70a9a275de311ede5fa1b47989f202","unresolved":false,"context_lines":[{"line_number":635,"context_line":""},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"if six.PY2:"},{"line_number":638,"context_line":"    class _UnicodeWithMeta(six.text_type, _RequestIdMixin):"},{"line_number":639,"context_line":"        def __new__(cls, value, resp):"},{"line_number":640,"context_line":"            return super(_UnicodeWithMeta, cls).__new__(cls, value)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_af98e51c","line":638,"in_reply_to":"bae84128_772ef2fb","updated":"2016-02-24 19:01:41.000000000","message":"Rather than BytesWithMeta use BinaryWithMeta, this matches what six calls the two types.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":635,"context_line":""},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"if six.PY2:"},{"line_number":638,"context_line":"    class _UnicodeWithMeta(six.text_type, _RequestIdMixin):"},{"line_number":639,"context_line":"        def __new__(cls, value, resp):"},{"line_number":640,"context_line":"            return super(_UnicodeWithMeta, cls).__new__(cls, value)"},{"line_number":641,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_790319b9","line":638,"in_reply_to":"bae84128_af98e51c","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"73521c9e94d1f6fe120acc32b7c4da2699e859e7","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            pass"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        gen \u003d (obj_class(self, res, loaded\u003dTrue) for res in data if res)"},{"line_number":139,"context_line":"        items \u003d list(gen)"},{"line_number":140,"context_line":"        return self._convert_into_with_meta(items, resp)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _get(self, url, response_key, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_fd08e72a","line":139,"range":{"start_line":139,"start_character":7,"end_line":139,"end_character":25},"updated":"2016-03-07 08:45:25.000000000","message":"We still do an extra loop by this expression.\nI think David means this:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\ngen \u003d (obj_class(self, res, loaded\u003dTrue) for res in data if res)\nreturn self._convert_into_with_meta(gen, resp)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"15fc60de67223db075bbeee8ac2fe7c52dd2cd08","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            pass"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        gen \u003d (obj_class(self, res, loaded\u003dTrue) for res in data if res)"},{"line_number":139,"context_line":"        items \u003d list(gen)"},{"line_number":140,"context_line":"        return self._convert_into_with_meta(items, resp)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _get(self, url, response_key, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_3b2177a0","line":139,"range":{"start_line":139,"start_character":7,"end_line":139,"end_character":25},"in_reply_to":"5aef4532_b84c6d71","updated":"2016-03-08 08:27:34.000000000","message":"Done","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"8b863eafe33ed4ecd5cb96ce0d3d8e992560265f","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            pass"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        gen \u003d (obj_class(self, res, loaded\u003dTrue) for res in data if res)"},{"line_number":139,"context_line":"        items \u003d list(gen)"},{"line_number":140,"context_line":"        return self._convert_into_with_meta(items, resp)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _get(self, url, response_key, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_b84c6d71","line":139,"range":{"start_line":139,"start_character":7,"end_line":139,"end_character":25},"in_reply_to":"5aef4532_fd08e72a","updated":"2016-03-08 07:15:26.000000000","message":"Sorry,I made a mistake here, I mean this:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d \ngen \u003d (obj_class(self, res, loaded\u003dTrue) for res in data if res)\nreturn _ListWithMeta(gen, resp)\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n_convert_into_with_meta doesn\u0027t support Generator directly.","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"73521c9e94d1f6fe120acc32b7c4da2699e859e7","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    def _append_request_ids(self, resp):"},{"line_number":485,"context_line":"        \"\"\"Add request_ids as an attribute to the object"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        :param resp: Response object or list of Response objects"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        self._request_ids \u003d []"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_a3163ea5","line":487,"range":{"start_line":487,"start_character":8,"end_line":487,"end_character":64},"updated":"2016-03-07 08:45:25.000000000","message":"I have never see list of Response objects passed here.\nBut I see list of strings like [1], so I prefer this:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n:param resp: Response object or list of strings\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n[1] :https://review.openstack.org/#/c/261188/10/keystoneclient/base.py@303","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"15fc60de67223db075bbeee8ac2fe7c52dd2cd08","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    def _append_request_ids(self, resp):"},{"line_number":485,"context_line":"        \"\"\"Add request_ids as an attribute to the object"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        :param resp: Response object or list of Response objects"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        self._request_ids \u003d []"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_a474529c","line":487,"range":{"start_line":487,"start_character":8,"end_line":487,"end_character":64},"in_reply_to":"5aef4532_a3163ea5","updated":"2016-03-08 08:27:34.000000000","message":"Done","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"73521c9e94d1f6fe120acc32b7c4da2699e859e7","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        :param resp: Response object or list of Response objects"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        self._request_ids \u003d []"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        if isinstance(resp, list):"},{"line_number":492,"context_line":"            # Add list of request_ids if response is of type list."}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_20098432","line":489,"range":{"start_line":489,"start_character":8,"end_line":489,"end_character":30},"updated":"2016-03-07 08:45:25.000000000","message":"This is still not fixed, we can\u0027t clear the original list of request_ids.\nAlso, it looks like the comment in PS8 didn\u0027t want to delete the request_ids_setup function.","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"15fc60de67223db075bbeee8ac2fe7c52dd2cd08","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        :param resp: Response object or list of Response objects"},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        self._request_ids \u003d []"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        if isinstance(resp, list):"},{"line_number":492,"context_line":"            # Add list of request_ids if response is of type list."}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_240de23e","line":489,"range":{"start_line":489,"start_character":8,"end_line":489,"end_character":30},"in_reply_to":"5aef4532_20098432","updated":"2016-03-08 08:27:34.000000000","message":"I added the _request_ids_setup function again. And, in PS9 comment, I described the reason of not use the __init__ .","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"73521c9e94d1f6fe120acc32b7c4da2699e859e7","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if isinstance(resp, list):"},{"line_number":492,"context_line":"            # Add list of request_ids if response is of type list."},{"line_number":493,"context_line":"            for resp_obj in resp:"},{"line_number":494,"context_line":"                self._append_request_id(resp_obj)"},{"line_number":495,"context_line":"        elif resp is not None:"},{"line_number":496,"context_line":"            # Add request_ids if response contains single object."},{"line_number":497,"context_line":"            if isinstance(resp, Response):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_6355561c","line":494,"range":{"start_line":494,"start_character":21,"end_line":494,"end_character":39},"updated":"2016-03-07 08:45:25.000000000","message":"Where is this function defined?","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"15fc60de67223db075bbeee8ac2fe7c52dd2cd08","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        if isinstance(resp, list):"},{"line_number":492,"context_line":"            # Add list of request_ids if response is of type list."},{"line_number":493,"context_line":"            for resp_obj in resp:"},{"line_number":494,"context_line":"                self._append_request_id(resp_obj)"},{"line_number":495,"context_line":"        elif resp is not None:"},{"line_number":496,"context_line":"            # Add request_ids if response contains single object."},{"line_number":497,"context_line":"            if isinstance(resp, Response):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_a4c73211","line":494,"range":{"start_line":494,"start_character":21,"end_line":494,"end_character":39},"in_reply_to":"5aef4532_6355561c","updated":"2016-03-08 08:27:34.000000000","message":"Done","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"73521c9e94d1f6fe120acc32b7c4da2699e859e7","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            else:"},{"line_number":502,"context_line":"                # If resp is of type string or None."},{"line_number":503,"context_line":"                request_id \u003d resp"},{"line_number":504,"context_line":"            if request_id not in self._request_ids:"},{"line_number":505,"context_line":"                self._request_ids.append(request_id)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_c6dc381b","line":504,"range":{"start_line":504,"start_character":12,"end_line":504,"end_character":51},"updated":"2016-03-07 08:45:25.000000000","message":"I don\u0027t think this test is necessary, further more, why wouldn\u0027t you test it in line 494.","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"15fc60de67223db075bbeee8ac2fe7c52dd2cd08","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            else:"},{"line_number":502,"context_line":"                # If resp is of type string or None."},{"line_number":503,"context_line":"                request_id \u003d resp"},{"line_number":504,"context_line":"            if request_id not in self._request_ids:"},{"line_number":505,"context_line":"                self._request_ids.append(request_id)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_7bd2df01","line":504,"range":{"start_line":504,"start_character":12,"end_line":504,"end_character":51},"in_reply_to":"5aef4532_c6dc381b","updated":"2016-03-08 08:27:34.000000000","message":"Done","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"73521c9e94d1f6fe120acc32b7c4da2699e859e7","unresolved":false,"context_lines":[{"line_number":514,"context_line":"    HUMAN_ID \u003d False"},{"line_number":515,"context_line":"    NAME_ATTR \u003d \u0027name\u0027"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def __init__(self, manager, info, loaded\u003dFalse, resp\u003dNone):"},{"line_number":518,"context_line":"        \"\"\"Populate and bind to a manager."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        :param manager: BaseManager object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_51dd846f","line":517,"range":{"start_line":517,"start_character":52,"end_line":517,"end_character":56},"updated":"2016-03-07 08:45:25.000000000","message":"Where is the docstring of the param?\nI suggest this:\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n:param resp: Response object or list of strings\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"15fc60de67223db075bbeee8ac2fe7c52dd2cd08","unresolved":false,"context_lines":[{"line_number":514,"context_line":"    HUMAN_ID \u003d False"},{"line_number":515,"context_line":"    NAME_ATTR \u003d \u0027name\u0027"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def __init__(self, manager, info, loaded\u003dFalse, resp\u003dNone):"},{"line_number":518,"context_line":"        \"\"\"Populate and bind to a manager."},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        :param manager: BaseManager object"}],"source_content_type":"text/x-python","patch_set":10,"id":"5aef4532_b8cf56af","line":517,"range":{"start_line":517,"start_character":52,"end_line":517,"end_character":56},"in_reply_to":"5aef4532_51dd846f","updated":"2016-03-08 08:27:34.000000000","message":"Done","commit_id":"9d4e57f4b579d162be7fd91b8207f28cf55a4937"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9862a639d791c1bfe6f1e08c1434993d1e7f5d63","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import warnings"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from oslo_utils import strutils"},{"line_number":28,"context_line":"from requests import Response"},{"line_number":29,"context_line":"import six"},{"line_number":30,"context_line":"from six.moves import urllib"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_1a99bec4","line":28,"updated":"2016-03-09 15:31:45.000000000","message":"we usually don\u0027t import Classes like this: \n\n    import requests\n    ...\n    requests.Response","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import warnings"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from oslo_utils import strutils"},{"line_number":28,"context_line":"from requests import Response"},{"line_number":29,"context_line":"import six"},{"line_number":30,"context_line":"from six.moves import urllib"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_f306af1a","line":28,"in_reply_to":"5aef4532_1a99bec4","updated":"2016-03-09 19:17:57.000000000","message":"++","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import warnings"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from oslo_utils import strutils"},{"line_number":28,"context_line":"from requests import Response"},{"line_number":29,"context_line":"import six"},{"line_number":30,"context_line":"from six.moves import urllib"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_ea4a62ab","line":28,"in_reply_to":"5aef4532_f306af1a","updated":"2016-03-29 04:20:09.000000000","message":"Done","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":209,"context_line":"        \"\"\""},{"line_number":210,"context_line":"        resp, body \u003d self.client.patch(url, body\u003dbody, **kwargs)"},{"line_number":211,"context_line":"        if body is not None:"},{"line_number":212,"context_line":"            if response_key is not None:"},{"line_number":213,"context_line":"                return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":214,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_ce0666cd","line":211,"updated":"2016-03-09 19:17:57.000000000","message":"Why do we now need an explicit check here?","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":209,"context_line":"        \"\"\""},{"line_number":210,"context_line":"        resp, body \u003d self.client.patch(url, body\u003dbody, **kwargs)"},{"line_number":211,"context_line":"        if body is not None:"},{"line_number":212,"context_line":"            if response_key is not None:"},{"line_number":213,"context_line":"                return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":214,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_2578fb8e","line":211,"in_reply_to":"5aef4532_ce0666cd","updated":"2016-03-29 04:20:09.000000000","message":"I deleted it.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                                             % method)"},{"line_number":239,"context_line":"        # PUT requests may not return a body"},{"line_number":240,"context_line":"        if body:"},{"line_number":241,"context_line":"            return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            return self._convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_33049748","line":241,"updated":"2016-03-09 19:17:57.000000000","message":"No metadata here?","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                                             % method)"},{"line_number":239,"context_line":"        # PUT requests may not return a body"},{"line_number":240,"context_line":"        if body:"},{"line_number":241,"context_line":"            return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            return self._convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_f21ed0b9","line":241,"in_reply_to":"5aef4532_33049748","updated":"2016-03-29 04:20:09.000000000","message":"It is not use Meta classes when it returns self.resource_class(self, body) at original code. When return no body at original code, we use Meta classes.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        if body:"},{"line_number":241,"context_line":"            return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            return self._convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":246,"context_line":"        if isinstance(item, six.string_types):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_13887bc4","line":243,"updated":"2016-03-09 19:17:57.000000000","message":"Won\u0027t this always be None? Or at least it was in the original code. I think this may break the API.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        if body:"},{"line_number":241,"context_line":"            return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":242,"context_line":"        else:"},{"line_number":243,"context_line":"            return self._convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":246,"context_line":"        if isinstance(item, six.string_types):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_e568d389","line":243,"in_reply_to":"5aef4532_13887bc4","updated":"2016-03-29 04:20:09.000000000","message":"As you say, it was in the original code. But, it may not return a body. So, I changed it, like L226.\nreturn _TupleWithMeta((resp, body), resp)","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            return self._convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":246,"context_line":"        if isinstance(item, six.string_types):"},{"line_number":247,"context_line":"            if six.PY2 and isinstance(item, six.text_type):"},{"line_number":248,"context_line":"                return _TextWithMeta(item, resp)"},{"line_number":249,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_13951b86","line":246,"updated":"2016-03-09 19:17:57.000000000","message":"Why not just use _TextWithMeta and _BytesWithMeta and simplify this?","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            return self._convert_into_with_meta(body, resp)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":246,"context_line":"        if isinstance(item, six.string_types):"},{"line_number":247,"context_line":"            if six.PY2 and isinstance(item, six.text_type):"},{"line_number":248,"context_line":"                return _TextWithMeta(item, resp)"},{"line_number":249,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_c57dd71d","line":246,"in_reply_to":"5aef4532_13951b86","updated":"2016-03-29 04:20:09.000000000","message":"Done","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        elif isinstance(item, tuple):"},{"line_number":258,"context_line":"            return _TupleWithMeta(item, resp)"},{"line_number":259,"context_line":"        elif item is None:"},{"line_number":260,"context_line":"            return _TupleWithMeta((), resp)"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            return _DictWithMeta(item, resp)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_0ea32e01","line":260,"updated":"2016-03-09 19:17:57.000000000","message":"Does this break backward compatibility? Originally the code would just return None, so any existing \u0027if rv is None\u0027 checks will fail.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        elif isinstance(item, tuple):"},{"line_number":258,"context_line":"            return _TupleWithMeta(item, resp)"},{"line_number":259,"context_line":"        elif item is None:"},{"line_number":260,"context_line":"            return _TupleWithMeta((), resp)"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            return _DictWithMeta(item, resp)"},{"line_number":263,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_e0a9e17c","line":260,"in_reply_to":"5aef4532_0ea32e01","updated":"2016-03-29 04:20:09.000000000","message":"I deleted it.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            # response is a Response object."},{"line_number":504,"context_line":"            request_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":505,"context_line":"            self._request_ids.append(request_id)"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            # If resp is of type string or None."},{"line_number":508,"context_line":"            self._request_ids.append(resp)"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_eeb6c2f7","line":506,"updated":"2016-03-09 19:17:57.000000000","message":"Do we have tests for this case? Tests that show how the system can get into this state and not ones that manually pass None.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            # response is a Response object."},{"line_number":504,"context_line":"            request_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":505,"context_line":"            self._request_ids.append(request_id)"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            # If resp is of type string or None."},{"line_number":508,"context_line":"            self._request_ids.append(resp)"},{"line_number":509,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_d1aa1170","line":506,"in_reply_to":"5aef4532_eeb6c2f7","updated":"2016-03-29 04:20:09.000000000","message":"This case is pass through part of the test (keystoneclient.tests.unit.test_shell) .","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            request_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":505,"context_line":"            self._request_ids.append(request_id)"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            # If resp is of type string or None."},{"line_number":508,"context_line":"            self._request_ids.append(resp)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_4ed0961f","line":507,"updated":"2016-03-09 19:17:57.000000000","message":"Do we want Nones here?","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":504,"context_line":"            request_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":505,"context_line":"            self._request_ids.append(request_id)"},{"line_number":506,"context_line":"        else:"},{"line_number":507,"context_line":"            # If resp is of type string or None."},{"line_number":508,"context_line":"            self._request_ids.append(resp)"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da0c15f0_a230a902","line":507,"in_reply_to":"5aef4532_4ed0961f","updated":"2016-03-29 04:20:09.000000000","message":"I deleted \"or None\".","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9862a639d791c1bfe6f1e08c1434993d1e7f5d63","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        :param loaded: prevent lazy-loading if set to True"},{"line_number":526,"context_line":"        :param resp: Response object or list of strings"},{"line_number":527,"context_line":"        \"\"\""},{"line_number":528,"context_line":"        super(Resource, self).__init__()"},{"line_number":529,"context_line":"        self.manager \u003d manager"},{"line_number":530,"context_line":"        self._info \u003d info"},{"line_number":531,"context_line":"        self._add_details(info)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_ba124a07","line":528,"updated":"2016-03-09 15:31:45.000000000","message":"have this use the requests namespace: \n\n    requests.Resource","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        :param loaded: prevent lazy-loading if set to True"},{"line_number":526,"context_line":"        :param resp: Response object or list of strings"},{"line_number":527,"context_line":"        \"\"\""},{"line_number":528,"context_line":"        super(Resource, self).__init__()"},{"line_number":529,"context_line":"        self.manager \u003d manager"},{"line_number":530,"context_line":"        self._info \u003d info"},{"line_number":531,"context_line":"        self._add_details(info)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_afd06520","line":528,"in_reply_to":"5aef4532_ba124a07","updated":"2016-03-29 04:20:09.000000000","message":"I think that it should not fix because it use base.Resource.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b81d16f93569f47e8b7f918b3bfccbc3257e4b92","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        self._request_ids_setup(resp)"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"class _StrWithMeta(str, _RequestIdMixin):"},{"line_number":630,"context_line":"    def __new__(cls, value, resp):"},{"line_number":631,"context_line":"        return super(_StrWithMeta, cls).__new__(cls, value)"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5aef4532_73b73f3a","line":629,"updated":"2016-03-09 19:17:57.000000000","message":"Is this necessary?","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"215ef82ff9363521a8b1f064fde686d4e3c6d1a9","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        self._request_ids_setup(resp)"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"class _StrWithMeta(str, _RequestIdMixin):"},{"line_number":630,"context_line":"    def __new__(cls, value, resp):"},{"line_number":631,"context_line":"        return super(_StrWithMeta, cls).__new__(cls, value)"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3afc51ec_ac74f367","line":629,"in_reply_to":"5aef4532_73b73f3a","updated":"2016-03-29 04:20:09.000000000","message":"I deleted it.","commit_id":"467247958a73cceb754b0bd0641cf7f456876285"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"2796a748dd566ecdc0acc93f0963feedbe6fed16","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            else:"},{"line_number":196,"context_line":"                return self.resource_class(self, body, resp\u003dresp)"},{"line_number":197,"context_line":"        else:"},{"line_number":198,"context_line":"            return _TupleWithMeta((resp, body), resp)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _patch(self, url, body\u003dNone, response_key\u003dNone, **kwargs):"},{"line_number":201,"context_line":"        \"\"\"Update an object with PATCH method."}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c1604638","line":198,"range":{"start_line":198,"start_character":12,"end_line":198,"end_character":53},"updated":"2016-03-30 03:50:02.000000000","message":"Originally, it returns None, but not it returns resp.\nSo, I prefer a _TupleWithMeta((),resp).","commit_id":"15d6512cb59db3cf00d35f1cd96bcf165eea7f07"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"6897ecdd313f58ae8716b2c31e6b1f8518fd4f87","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            else:"},{"line_number":196,"context_line":"                return self.resource_class(self, body, resp\u003dresp)"},{"line_number":197,"context_line":"        else:"},{"line_number":198,"context_line":"            return _TupleWithMeta((resp, body), resp)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _patch(self, url, body\u003dNone, response_key\u003dNone, **kwargs):"},{"line_number":201,"context_line":"        \"\"\"Update an object with PATCH method."}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_cd50740d","line":198,"range":{"start_line":198,"start_character":12,"end_line":198,"end_character":53},"in_reply_to":"ba0121b8_c1604638","updated":"2016-03-30 06:51:02.000000000","message":"Done","commit_id":"15d6512cb59db3cf00d35f1cd96bcf165eea7f07"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"2796a748dd566ecdc0acc93f0963feedbe6fed16","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        if body:"},{"line_number":238,"context_line":"            return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            return _TupleWithMeta((resp, body), resp)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":243,"context_line":"        if isinstance(item, six.text_type):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_81948ee2","line":240,"range":{"start_line":240,"start_character":34,"end_line":240,"end_character":46},"updated":"2016-03-30 03:50:02.000000000","message":"ditto","commit_id":"15d6512cb59db3cf00d35f1cd96bcf165eea7f07"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"6897ecdd313f58ae8716b2c31e6b1f8518fd4f87","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        if body:"},{"line_number":238,"context_line":"            return self.resource_class(self, body[response_key], resp\u003dresp)"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            return _TupleWithMeta((resp, body), resp)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":243,"context_line":"        if isinstance(item, six.text_type):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_2d581032","line":240,"range":{"start_line":240,"start_character":34,"end_line":240,"end_character":46},"in_reply_to":"ba0121b8_81948ee2","updated":"2016-03-30 06:51:02.000000000","message":"Done","commit_id":"15d6512cb59db3cf00d35f1cd96bcf165eea7f07"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        :param response_key: the key to be looked up in response dictionary,"},{"line_number":170,"context_line":"            e.g., \u0027servers\u0027"},{"line_number":171,"context_line":"        :param return_raw: flag to force returning raw JSON of converted"},{"line_number":172,"context_line":"            with metadata instead of Python object of self.resource_class"},{"line_number":173,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":174,"context_line":"        \"\"\""},{"line_number":175,"context_line":"        resp, body \u003d self.client.post(url, body\u003dbody, **kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_86a8d821","line":172,"updated":"2016-04-06 18:35:47.000000000","message":"If somebody does return_raw\u003dTrue then I\u0027d assume they don\u0027t want the metadata and just want the raw result.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b294b55e3c2cad662e953518f7936a278a915ae6","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            return _TupleWithMeta((), resp)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def _convert_into_with_meta(self, item, resp):"},{"line_number":243,"context_line":"        if isinstance(item, six.text_type):"},{"line_number":244,"context_line":"            return _TextWithMeta(item, resp)"},{"line_number":245,"context_line":"        elif isinstance(item, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_b7954434","line":242,"updated":"2016-04-06 18:47:48.000000000","message":"Why even use this method if you know the type you are returning?","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b294b55e3c2cad662e953518f7936a278a915ae6","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        elif num \u003e 1:"},{"line_number":279,"context_line":"            raise exceptions.NoUniqueMatch"},{"line_number":280,"context_line":"        else:"},{"line_number":281,"context_line":"            rl[0]._append_request_ids(rl.request_ids)"},{"line_number":282,"context_line":"            return rl[0]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def findall(self, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_37c9345a","line":281,"updated":"2016-04-06 18:47:48.000000000","message":"We shouldn\u0027t be calling an internal method.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        searches \u003d kwargs.items()"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        listing \u003d self.list()"},{"line_number":294,"context_line":"        found._append_request_ids(listing.request_ids)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        for obj in listing:"},{"line_number":297,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_6c464350","line":294,"updated":"2016-04-06 18:35:47.000000000","message":"an internal method shouldn\u0027t be called from outside the class.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    @property"},{"line_number":472,"context_line":"    def request_ids(self):"},{"line_number":473,"context_line":"        \"\"\"Return request id from APIs process"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        :param resp: Request id"},{"line_number":476,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_ac885b72","line":473,"range":{"start_line":473,"start_character":26,"end_line":473,"end_character":28},"updated":"2016-04-06 18:35:47.000000000","message":"ids","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    def request_ids(self):"},{"line_number":473,"context_line":"        \"\"\"Return request id from APIs process"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        :param resp: Request id"},{"line_number":476,"context_line":"        \"\"\""},{"line_number":477,"context_line":"        return self._request_ids"},{"line_number":478,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_ec7ed368","line":475,"updated":"2016-04-06 18:35:47.000000000","message":"there\u0027s no resp param to this function","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        return self._request_ids"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    def _append_request_ids(self, resp):"},{"line_number":480,"context_line":"        \"\"\"Add request_ids as an attribute to the object"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        :param resp: Response object or list of strings"},{"line_number":483,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_ec437311","line":480,"updated":"2016-04-06 18:35:47.000000000","message":"This isn\u0027t what the function does, since the object already has a request_ids attribute.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":482,"context_line":"        :param resp: Response object or list of strings"},{"line_number":483,"context_line":"        \"\"\""},{"line_number":484,"context_line":"        if isinstance(resp, list):"},{"line_number":485,"context_line":"            # Add list of request_ids if response is of type list."},{"line_number":486,"context_line":"            for resp_obj in resp:"},{"line_number":487,"context_line":"                self._append_request_id(resp_obj)"},{"line_number":488,"context_line":"        elif resp is not None:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_6ce2c330","line":485,"updated":"2016-04-06 18:35:47.000000000","message":"comments should say why the code is here rather than what it\u0027s doing, since we can see from the code what it\u0027s doing already. This applies to all these comments.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"27a5085b643ef075498eb96b55efd69085f003fe","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self._request_ids_setup(resp)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"class _DictWithMeta(dict, _RequestIdMixin):"},{"line_number":608,"context_line":"    def __init__(self, values, resp):"},{"line_number":609,"context_line":"        super(_DictWithMeta, self).__init__(values)"},{"line_number":610,"context_line":"        self._request_ids_setup(resp)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_1e651b1d","line":607,"range":{"start_line":607,"start_character":6,"end_line":607,"end_character":19},"updated":"2016-04-07 03:47:15.000000000","message":"I realized that this class is used here[1], so this should not be an internal class.\nAlso, in case that we may use all ****WithMeta classes in other submodules in the \nfuture, so I suggest that we make these classes public.\n\n[1]: https://review.openstack.org/#/c/267449/9/keystoneclient/v2_0/tokens.py@97","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c34d9ba783217b1f89d8d006745e487bb65393d","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self._request_ids_setup(resp)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"class _DictWithMeta(dict, _RequestIdMixin):"},{"line_number":608,"context_line":"    def __init__(self, values, resp):"},{"line_number":609,"context_line":"        super(_DictWithMeta, self).__init__(values)"},{"line_number":610,"context_line":"        self._request_ids_setup(resp)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_40949689","line":607,"range":{"start_line":607,"start_character":6,"end_line":607,"end_character":19},"in_reply_to":"9a061dce_1e651b1d","updated":"2016-04-07 21:40:18.000000000","message":"I\u0027d prefer it if the class remained private so we don\u0027t have to document it to users.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"40835680e5dfade939c468279f03c3112e428232","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        self._request_ids_setup(resp)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"class _DictWithMeta(dict, _RequestIdMixin):"},{"line_number":608,"context_line":"    def __init__(self, values, resp):"},{"line_number":609,"context_line":"        super(_DictWithMeta, self).__init__(values)"},{"line_number":610,"context_line":"        self._request_ids_setup(resp)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a18252c_480f0f88","line":607,"range":{"start_line":607,"start_character":6,"end_line":607,"end_character":19},"in_reply_to":"9a061dce_40949689","updated":"2016-04-14 02:11:26.000000000","message":"Hi, Brant:\nSorry to bother you.\nAll of novaclient, neuternclient and cinderclient make these ***WithMeta public.\nAnd this DictWithMeta is used in other submodules.\nI still prefer to make these class public.\nThanks","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9b894cdd4892ec26439c82658a6ddf98d346becc","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        This isn\u0027t very efficient: it loads the entire list then filters on"},{"line_number":264,"context_line":"        the Python side."},{"line_number":265,"context_line":"        \"\"\""},{"line_number":266,"context_line":"        resp, rl \u003d self.findall(**kwargs)"},{"line_number":267,"context_line":"        num \u003d len(rl)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        if num \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_54788bc4","line":266,"range":{"start_line":266,"start_character":24,"end_line":266,"end_character":31},"updated":"2016-06-07 05:14:38.000000000","message":"Does findall() function return a tuple?","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"61ea1a15f18224ac83e15e3b8b10f357e0469e8b","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        This isn\u0027t very efficient: it loads the entire list then filters on"},{"line_number":264,"context_line":"        the Python side."},{"line_number":265,"context_line":"        \"\"\""},{"line_number":266,"context_line":"        resp, rl \u003d self.findall(**kwargs)"},{"line_number":267,"context_line":"        num \u003d len(rl)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"        if num \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_39ef88ea","line":266,"range":{"start_line":266,"start_character":24,"end_line":266,"end_character":31},"in_reply_to":"7aa08908_54788bc4","updated":"2016-06-13 08:09:40.000000000","message":"I changed return values of findall() function.","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9b894cdd4892ec26439c82658a6ddf98d346becc","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        This isn\u0027t very efficient: it loads the entire list then filters on"},{"line_number":282,"context_line":"        the Python side."},{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        found \u003d utils.add_request_ids([], None)"},{"line_number":285,"context_line":"        searches \u003d kwargs.items()"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        for obj in self.list():"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_4fc5948c","line":284,"range":{"start_line":284,"start_character":42,"end_line":284,"end_character":46},"updated":"2016-06-07 05:14:38.000000000","message":"Will it result in an error if we pass None to this add_request_ids?\n\nWe will call this if we pass None:\nNone.headers.get(\u0027x-openstack-request-id\u0027)\nhttps://review.openstack.org/#/c/261188/14/keystoneclient/utils.py@71","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"61ea1a15f18224ac83e15e3b8b10f357e0469e8b","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        This isn\u0027t very efficient: it loads the entire list then filters on"},{"line_number":282,"context_line":"        the Python side."},{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        found \u003d utils.add_request_ids([], None)"},{"line_number":285,"context_line":"        searches \u003d kwargs.items()"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        for obj in self.list():"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_3918281e","line":284,"range":{"start_line":284,"start_character":42,"end_line":284,"end_character":46},"in_reply_to":"7aa08908_4fc5948c","updated":"2016-06-13 08:09:40.000000000","message":"As you say, it result in an error. I fixed it.","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"9b894cdd4892ec26439c82658a6ddf98d346becc","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            try:"},{"line_number":289,"context_line":"                if all(getattr(obj, attr) \u003d\u003d value"},{"line_number":290,"context_line":"                       for (attr, value) in searches):"},{"line_number":291,"context_line":"                    found.append(obj)"},{"line_number":292,"context_line":"            except AttributeError:"},{"line_number":293,"context_line":"                continue"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_b498cf1c","line":291,"range":{"start_line":291,"start_character":20,"end_line":291,"end_character":37},"updated":"2016-06-07 05:14:38.000000000","message":"Has this append the request_id correctly?","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"61ea1a15f18224ac83e15e3b8b10f357e0469e8b","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            try:"},{"line_number":289,"context_line":"                if all(getattr(obj, attr) \u003d\u003d value"},{"line_number":290,"context_line":"                       for (attr, value) in searches):"},{"line_number":291,"context_line":"                    found.append(obj)"},{"line_number":292,"context_line":"            except AttributeError:"},{"line_number":293,"context_line":"                continue"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_1401b106","line":291,"range":{"start_line":291,"start_character":20,"end_line":291,"end_character":37},"in_reply_to":"7aa08908_b498cf1c","updated":"2016-06-13 08:09:40.000000000","message":"I added reauest id.","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"96c0f9784fd821c50377bd9112d687025a0b06d6","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        found \u003d []"},{"line_number":285,"context_line":"        searches \u003d kwargs.items()"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        resp, listing \u003d self.list()"},{"line_number":288,"context_line":"        utils.add_request_ids(found, resp)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        for obj in listing:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_ba45fc43","line":287,"range":{"start_line":287,"start_character":24,"end_line":287,"end_character":35},"updated":"2016-06-14 02:37:10.000000000","message":"I don\u0027t think this list() function returns a tuple.\nI think we should read request_id from list() function by this:\n\nobjs \u003d self.list()\nrequest_id \u003d objs.request_ids\n\nreference:\nhttps://review.openstack.org/#/c/261188/15/keystoneclient/utils.py@64","commit_id":"1c0d46619fe8b0f45688331d9a9577be0c837495"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"72cb24429d27654d3f8e8305516b0ae5b67f3e88","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        found \u003d []"},{"line_number":285,"context_line":"        searches \u003d kwargs.items()"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        resp, listing \u003d self.list()"},{"line_number":288,"context_line":"        utils.add_request_ids(found, resp)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        for obj in listing:"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_a1702b41","line":287,"range":{"start_line":287,"start_character":24,"end_line":287,"end_character":35},"in_reply_to":"7aa08908_ba45fc43","updated":"2016-06-14 06:21:33.000000000","message":"Done","commit_id":"1c0d46619fe8b0f45688331d9a9577be0c837495"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"96c0f9784fd821c50377bd9112d687025a0b06d6","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            except AttributeError:"},{"line_number":296,"context_line":"                continue"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        return resp, found"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"class CrudManager(Manager):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_978a99bd","line":298,"range":{"start_line":298,"start_character":15,"end_line":298,"end_character":26},"updated":"2016-06-14 02:37:10.000000000","message":"Sorry, I didn\u0027t say it clearly.\nThe findall() function is a public lib interface, so we can\u0027t break the backward compatibility of this function.\n\nIMO, we should also return utils.add_request_ids(found, request_id) here.","commit_id":"1c0d46619fe8b0f45688331d9a9577be0c837495"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"72cb24429d27654d3f8e8305516b0ae5b67f3e88","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            except AttributeError:"},{"line_number":296,"context_line":"                continue"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        return resp, found"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"class CrudManager(Manager):"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_e194f337","line":298,"range":{"start_line":298,"start_character":15,"end_line":298,"end_character":26},"in_reply_to":"7aa08908_978a99bd","updated":"2016-06-14 06:21:33.000000000","message":"Done","commit_id":"1c0d46619fe8b0f45688331d9a9577be0c837495"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"125c583ebefdae8b46cd115210d2d62ea26edbe5","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        elif num \u003e 1:"},{"line_number":283,"context_line":"            raise exceptions.NoUniqueMatch"},{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            return utils.wrap_with_request_ids(rl[0], rl.request_ids)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def findall(self, **kwargs):"},{"line_number":288,"context_line":"        \"\"\"Find all items with attributes matching ``**kwargs``."}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_1cb4aad2","line":285,"range":{"start_line":285,"start_character":19,"end_line":285,"end_character":69},"updated":"2016-07-14 05:43:11.000000000","message":"Why not check self.client.include_metadata here?","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"53bc5eaf193af5cc8ac7ae2b460d2b62f3291857","unresolved":false,"context_lines":[{"line_number":282,"context_line":"        elif num \u003e 1:"},{"line_number":283,"context_line":"            raise exceptions.NoUniqueMatch"},{"line_number":284,"context_line":"        else:"},{"line_number":285,"context_line":"            return utils.wrap_with_request_ids(rl[0], rl.request_ids)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def findall(self, **kwargs):"},{"line_number":288,"context_line":"        \"\"\"Find all items with attributes matching ``**kwargs``."}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_a30abfcf","line":285,"range":{"start_line":285,"start_character":19,"end_line":285,"end_character":69},"in_reply_to":"1aa78d24_1cb4aad2","updated":"2016-07-22 06:19:26.000000000","message":"Done","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"125c583ebefdae8b46cd115210d2d62ea26edbe5","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        searches \u003d kwargs.items()"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        objs \u003d self.list()"},{"line_number":297,"context_line":"        request_id \u003d objs.request_ids"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        for obj in objs:"},{"line_number":300,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_5c97523a","line":297,"range":{"start_line":297,"start_character":21,"end_line":297,"end_character":37},"updated":"2016-07-14 05:43:11.000000000","message":"If objs doesn\u0027t have a request_ids attribute.\nWill it raise AttributeError?","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"53bc5eaf193af5cc8ac7ae2b460d2b62f3291857","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        searches \u003d kwargs.items()"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        objs \u003d self.list()"},{"line_number":297,"context_line":"        request_id \u003d objs.request_ids"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        for obj in objs:"},{"line_number":300,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_63a4474a","line":297,"range":{"start_line":297,"start_character":21,"end_line":297,"end_character":37},"in_reply_to":"1aa78d24_5c97523a","updated":"2016-07-22 06:19:26.000000000","message":"I added \"try\" and \"except\".","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"125c583ebefdae8b46cd115210d2d62ea26edbe5","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            except AttributeError:"},{"line_number":305,"context_line":"                continue"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        return utils.wrap_with_request_ids(found, request_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"class CrudManager(Manager):"}],"source_content_type":"text/x-python","patch_set":18,"id":"1aa78d24_7cc5ee3b","line":307,"range":{"start_line":307,"start_character":14,"end_line":307,"end_character":61},"updated":"2016-07-14 05:43:11.000000000","message":"Why not check self.client.include_metadata here?","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"53bc5eaf193af5cc8ac7ae2b460d2b62f3291857","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            except AttributeError:"},{"line_number":305,"context_line":"                continue"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        return utils.wrap_with_request_ids(found, request_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"class CrudManager(Manager):"}],"source_content_type":"text/x-python","patch_set":18,"id":"dada55a8_030e2be4","line":307,"range":{"start_line":307,"start_character":14,"end_line":307,"end_character":61},"in_reply_to":"1aa78d24_7cc5ee3b","updated":"2016-07-22 06:19:26.000000000","message":"Done","commit_id":"922b7d737f139752abbab6b3e32f2ec27f9bc3d1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            if self.client.include_metadata:"},{"line_number":113,"context_line":"                return utils.wrap_with_request_ids(data, http_response)"},{"line_number":114,"context_line":"        except AttributeError:"},{"line_number":115,"context_line":"            pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_da6cac9e","line":114,"updated":"2016-07-25 01:25:32.000000000","message":"Add a comment why this code needs to catch AttributeError.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        try:"},{"line_number":112,"context_line":"            if self.client.include_metadata:"},{"line_number":113,"context_line":"                return utils.wrap_with_request_ids(data, http_response)"},{"line_number":114,"context_line":"        except AttributeError:"},{"line_number":115,"context_line":"            pass"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        return data"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_c4468b4e","line":114,"in_reply_to":"dada55a8_da6cac9e","updated":"2016-07-26 10:53:53.000000000","message":"This code is unnecessary, because all clients use the _KeystoneAdapter class[1] and have include_metadata. I deleted it.\n[1]: https://review.openstack.org/#/c/337835/","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            e.g., \u0027server\u0027"},{"line_number":159,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        resp, body \u003d self.client.get(url, **kwargs)"},{"line_number":162,"context_line":"        return self._prepare_return_value("},{"line_number":163,"context_line":"            self.resource_class(self, body[response_key], loaded\u003dTrue), resp)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_ba1578e6","line":161,"updated":"2016-07-25 01:25:32.000000000","message":"The client.get, client.head, etc., methods should be changed to return a proxy object. We want applications that do client.post() directly to be able to get the request IDs.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"580e2f05a4952c07c2da7b05efc14602e0d2d480","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            e.g., \u0027server\u0027"},{"line_number":159,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        resp, body \u003d self.client.get(url, **kwargs)"},{"line_number":162,"context_line":"        return self._prepare_return_value("},{"line_number":163,"context_line":"            self.resource_class(self, body[response_key], loaded\u003dTrue), resp)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_bf9b5465","line":161,"in_reply_to":"dada55a8_87b734d7","updated":"2016-07-26 13:12:31.000000000","message":"The changes should be in https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/session.py#L497 . Actually, the change should be made to _send_request() ( https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/session.py#L423 ) since that\u0027s what all the .get(), etc., calls go to.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            e.g., \u0027server\u0027"},{"line_number":159,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        resp, body \u003d self.client.get(url, **kwargs)"},{"line_number":162,"context_line":"        return self._prepare_return_value("},{"line_number":163,"context_line":"            self.resource_class(self, body[response_key], loaded\u003dTrue), resp)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_87b734d7","line":161,"in_reply_to":"dada55a8_ba1578e6","updated":"2016-07-26 10:53:53.000000000","message":"I\u0027m sorry to bother you, I want to confirm this comment.\nDoes it mean that I should make these changes in [1] and [2] head, post, get method, instead of making changes in base.py?\nI think that minimum of the functions of the request id is satisfied now. Is this an improvement comment?\n\n[1] https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/session.py#L497\n[2] https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/httpclient.py#L758","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"59a448ffe9b3bb1178bdf70a91d0b9d501309493","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            e.g., \u0027server\u0027"},{"line_number":159,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        resp, body \u003d self.client.get(url, **kwargs)"},{"line_number":162,"context_line":"        return self._prepare_return_value("},{"line_number":163,"context_line":"            self.resource_class(self, body[response_key], loaded\u003dTrue), resp)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_5358ab32","line":161,"in_reply_to":"dada55a8_bf9b5465","updated":"2016-08-16 03:46:10.000000000","message":"Sorry, I can\u0027t agree with your comment, based on the following two reasons.\n\n1) We need to add request id to the object generated from response information, not to the response object itself. \nEven if we add some changes to _send_request to add request id to the response object, we need to change some codes in object generation (maybe in Manager), to parse request id in request object and add it to the object to be returned.\nI think maintenance will not be easy because the amount of code increases.\n\n2) IMO, Session class should be just a general function to manage http request, and should not include openstack specific processing.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"}],"keystoneclient/tests/unit/test_base.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystoneclient.v2_0 import roles"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"REQUEST_ID \u003d \u0027req-test-request-id\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_response_obj_with_header():"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_b0c2ce32","line":22,"updated":"2015-12-27 17:12:31.000000000","message":"suggest use a random value like uuid.uuid4().hex","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystoneclient.v2_0 import roles"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"REQUEST_ID \u003d \u0027req-test-request-id\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_response_obj_with_header():"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_9d0bd8d5","line":22,"in_reply_to":"1a7b0d38_b0c2ce32","updated":"2016-01-15 10:19:08.000000000","message":"Done. It defined in keystoneclient/tests/unit/utils.py .","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"REQUEST_ID \u003d \u0027req-test-request-id\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_response_obj_with_header():"},{"line_number":26,"context_line":"    resp \u003d Response()"},{"line_number":27,"context_line":"    resp.headers[\u0027x-openstack-request-id\u0027] \u003d REQUEST_ID"},{"line_number":28,"context_line":"    return resp"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_10cac24e","line":25,"updated":"2015-12-27 17:12:31.000000000","message":"suggest create_response_with_request_id_header","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"REQUEST_ID \u003d \u0027req-test-request-id\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_response_obj_with_header():"},{"line_number":26,"context_line":"    resp \u003d Response()"},{"line_number":27,"context_line":"    resp.headers[\u0027x-openstack-request-id\u0027] \u003d REQUEST_ID"},{"line_number":28,"context_line":"    return resp"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_bdc33c37","line":25,"in_reply_to":"1a7b0d38_10cac24e","updated":"2016-01-15 10:19:08.000000000","message":"Done","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"40ba01bd37afa000b7e01763a17d370a94e8571e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_response_obj_with_header():"},{"line_number":26,"context_line":"    resp \u003d Response()"},{"line_number":27,"context_line":"    resp.headers[\u0027x-openstack-request-id\u0027] \u003d REQUEST_ID"},{"line_number":28,"context_line":"    return resp"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_90e472e1","line":27,"updated":"2015-12-27 17:12:31.000000000","message":"document why x-openstack-request-id was chosen.","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"eefad86ddf3723711e4e23279a26161cc07863a2","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def create_response_obj_with_header():"},{"line_number":26,"context_line":"    resp \u003d Response()"},{"line_number":27,"context_line":"    resp.headers[\u0027x-openstack-request-id\u0027] \u003d REQUEST_ID"},{"line_number":28,"context_line":"    return resp"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_fdde94db","line":27,"in_reply_to":"1a7b0d38_90e472e1","updated":"2016-01-15 10:19:08.000000000","message":"Done. It defined in utils.py .","commit_id":"735907020ac2717e4f69b067b667a16aff560b2a"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5caa3c37ccd80ee2976a61affad187f00143f843","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    def test_tuple_with_meta(self):"},{"line_number":219,"context_line":"        resp \u003d create_response_with_request_id_header()"},{"line_number":220,"context_line":"        obj \u003d base._TupleWithMeta(None, resp)"},{"line_number":221,"context_line":"        self.assertIsInstance(obj, tuple)"},{"line_number":222,"context_line":"        # Check request_ids attribute is added to obj"},{"line_number":223,"context_line":"        self.assertTrue(hasattr(obj, \u0027request_ids\u0027))"},{"line_number":224,"context_line":"        self.assertEqual([utils.REQUEST_ID], obj.request_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_a6a309ff","line":221,"updated":"2016-02-02 08:04:31.000000000","message":"Add the assertion(assertEqual) for checking 2 \u0027tuple\u0027 values.\n\nSee\nhttps://github.com/openstack/python-novaclient/blob/master/novaclient/tests/unit/test_base.py#L122","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"255ae35d0cd3df24cea5c00fc2fd7f13dd80c827","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    def test_tuple_with_meta(self):"},{"line_number":219,"context_line":"        resp \u003d create_response_with_request_id_header()"},{"line_number":220,"context_line":"        obj \u003d base._TupleWithMeta(None, resp)"},{"line_number":221,"context_line":"        self.assertIsInstance(obj, tuple)"},{"line_number":222,"context_line":"        # Check request_ids attribute is added to obj"},{"line_number":223,"context_line":"        self.assertTrue(hasattr(obj, \u0027request_ids\u0027))"},{"line_number":224,"context_line":"        self.assertEqual([utils.REQUEST_ID], obj.request_ids)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_aa5db57a","line":221,"in_reply_to":"7a5de9d1_a6a309ff","updated":"2016-02-04 10:31:57.000000000","message":"Done","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d7f5e9ddba443c7b3816517c8ec8a05655e1341f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Unless required by applicable law or agreed to in writing, software"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_48e50ca6","line":4,"updated":"2016-02-24 01:19:44.000000000","message":"You should add a test somewhere that calls an API, gets one of these objects and inspects it.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Unless required by applicable law or agreed to in writing, software"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_d92a2d2c","line":4,"in_reply_to":"bae84128_48e50ca6","updated":"2016-03-07 07:07:48.000000000","message":"We have creating tests at each API. (e.g. test_xxx.py at\nhttps://review.openstack.org/#/c/267449/ )\nI think that these tests are sufficient for this patch, now.\nNot only these tests, is it necessary to add the other tests?\nSorry, if my understanding is mistaken, please tell me.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        resp \u003d create_response_with_request_id_header()"},{"line_number":200,"context_line":"        obj \u003d base._ListWithMeta([], resp)"},{"line_number":201,"context_line":"        self.assertEqual([], obj)"},{"line_number":202,"context_line":"        # Check request_ids attribute is added to obj"},{"line_number":203,"context_line":"        self.assertTrue(hasattr(obj, \u0027request_ids\u0027))"},{"line_number":204,"context_line":"        self.assertEqual([self.TEST_REQUEST_ID], obj.request_ids)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_cc130fb7","line":202,"updated":"2016-04-06 18:35:47.000000000","message":"Maybe at some point request_ids wasn\u0027t always present but the way the code is written now the attribute is always there, so this comment is confusing. Also, there\u0027s no test if request_ids isn\u0027t added to the obj.","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"30df2167e0152374830ca5a33c1e2a22b9b5449e","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        obj \u003d base._ListWithMeta([], resp)"},{"line_number":201,"context_line":"        self.assertEqual([], obj)"},{"line_number":202,"context_line":"        # Check request_ids attribute is added to obj"},{"line_number":203,"context_line":"        self.assertTrue(hasattr(obj, \u0027request_ids\u0027))"},{"line_number":204,"context_line":"        self.assertEqual([self.TEST_REQUEST_ID], obj.request_ids)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_aca7bbbb","line":203,"updated":"2016-04-06 18:35:47.000000000","message":"no need for this since the next line will fail if there\u0027s no request_ids attr. (This comment applies to all these tests.)","commit_id":"383f79d09b4ee2749f27d99fa6b21ad364c2aec7"}],"keystoneclient/tests/unit/utils.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5caa3c37ccd80ee2976a61affad187f00143f843","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([REQUEST_ID], obj.request_ids)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_4b002002","line":121,"updated":"2016-02-02 08:04:31.000000000","message":"I could not find where calling this function in this patch...","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"255ae35d0cd3df24cea5c00fc2fd7f13dd80c827","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([REQUEST_ID], obj.request_ids)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a5ae5dd_9509fe2e","line":121,"in_reply_to":"7a5de9d1_4b002002","updated":"2016-02-04 10:31:57.000000000","message":"I move this code to https://review.openstack.org/#/c/267449/ .","commit_id":"8512c8cf5161aca9bfb4069fa48a07fba1edd23e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"615851013d70a9a275de311ede5fa1b47989f202","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from keystoneclient.tests.unit import client_fixtures"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"REQUEST_ID \u003d \u0027req-bffd0a0c-5670-4752-bf8e-c8569531e0a7\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestCase(testtools.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_2f2175b5","line":29,"updated":"2016-02-24 19:01:41.000000000","message":"this should follow the pattern used below for other symbols TEST_DOMAIN_ID, etc. and be a class member and a random value.","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"b993ad58b2719f7f618a3e00c7f103023d4d6119","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from keystoneclient.tests.unit import client_fixtures"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"REQUEST_ID \u003d \u0027req-bffd0a0c-5670-4752-bf8e-c8569531e0a7\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestCase(testtools.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_d9e18d00","line":29,"in_reply_to":"bae84128_2f2175b5","updated":"2016-03-07 07:07:48.000000000","message":"Done","commit_id":"1f767db327110963501966dc1d9381ad28ef6e95"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9df91e0520e3795e554db83a2312a887c4df5c53","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            headers \u003d kwargs.setdefault(\u0027headers\u0027, {})"},{"line_number":61,"context_line":"            headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Set the TEST_REQUEST_ID to reponse header."},{"line_number":64,"context_line":"        headers[\u0027x-openstack-request-id\u0027] \u003d self.TEST_REQUEST_ID"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if parts:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_13cbb254","line":63,"updated":"2016-06-10 19:56:10.000000000","message":"response*","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"61ea1a15f18224ac83e15e3b8b10f357e0469e8b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            headers \u003d kwargs.setdefault(\u0027headers\u0027, {})"},{"line_number":61,"context_line":"            headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        # Set the TEST_REQUEST_ID to reponse header."},{"line_number":64,"context_line":"        headers[\u0027x-openstack-request-id\u0027] \u003d self.TEST_REQUEST_ID"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        if parts:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_3e8e4e2e","line":63,"in_reply_to":"7aa08908_13cbb254","updated":"2016-06-13 08:09:40.000000000","message":"Done","commit_id":"40838ba4890f5254d3f0443e86cede89802a7f75"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            url \u003d base_url"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        url \u003d url.replace(\"/?\", \"?\")"},{"line_number":72,"context_line":"        if kwargs.get(\u0027response_list\u0027):"},{"line_number":73,"context_line":"            self.requests_mock.register_uri(method, url,"},{"line_number":74,"context_line":"                                            kwargs[\u0027response_list\u0027])"},{"line_number":75,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_1abac4e1","line":72,"updated":"2016-07-25 01:25:32.000000000","message":"this code could use a comment. Why does this need to be here? The original could would have just passed the response_list on anyways. All this does is ignore all other kwargs if kwargs includes response_list.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            url \u003d base_url"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        url \u003d url.replace(\"/?\", \"?\")"},{"line_number":72,"context_line":"        if kwargs.get(\u0027response_list\u0027):"},{"line_number":73,"context_line":"            self.requests_mock.register_uri(method, url,"},{"line_number":74,"context_line":"                                            kwargs[\u0027response_list\u0027])"},{"line_number":75,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_53386ca0","line":72,"in_reply_to":"dada55a8_1abac4e1","updated":"2016-07-26 10:53:53.000000000","message":"This code is inappropriate. If kwargs includes response_list, the header is created in each stub. So I fixed it. see:keystoneclient/tests/unit/utils.py@67","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if json:"},{"line_number":81,"context_line":"            if last_request_body is not None:"},{"line_number":82,"context_line":"                val \u003d jsonutils.loads(last_request_body)"},{"line_number":83,"context_line":"                self.assertEqual(json, val)"},{"line_number":84,"context_line":"        elif body:"},{"line_number":85,"context_line":"            self.assertEqual(body, last_request_body)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_3ab7c8f6","line":83,"updated":"2016-07-25 01:25:32.000000000","message":"There should be an else leg to handle the case when last_request_body is None.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if json:"},{"line_number":81,"context_line":"            if last_request_body is not None:"},{"line_number":82,"context_line":"                val \u003d jsonutils.loads(last_request_body)"},{"line_number":83,"context_line":"                self.assertEqual(json, val)"},{"line_number":84,"context_line":"        elif body:"},{"line_number":85,"context_line":"            self.assertEqual(body, last_request_body)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_2e662b51","line":83,"in_reply_to":"dada55a8_3ab7c8f6","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"}],"keystoneclient/utils.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"96c0f9784fd821c50377bd9112d687025a0b06d6","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def add_request_ids(obj, resp):"},{"line_number":70,"context_line":"    proxy \u003d RequestIdProxy(obj)"},{"line_number":71,"context_line":"    req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":72,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":73,"context_line":"    return proxy"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_7a94348a","line":72,"range":{"start_line":71,"start_character":4,"end_line":72,"end_character":34},"updated":"2016-06-14 02:37:10.000000000","message":"IMO, it would be more convenient if we support a \"resp\" argument to be a string here.\nWe may use it here:\nhttps://review.openstack.org/#/c/261188/15/keystoneclient/base.py@298","commit_id":"1c0d46619fe8b0f45688331d9a9577be0c837495"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"72cb24429d27654d3f8e8305516b0ae5b67f3e88","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def add_request_ids(obj, resp):"},{"line_number":70,"context_line":"    proxy \u003d RequestIdProxy(obj)"},{"line_number":71,"context_line":"    req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":72,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":73,"context_line":"    return proxy"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_61a12394","line":72,"range":{"start_line":71,"start_character":4,"end_line":72,"end_character":34},"in_reply_to":"7aa08908_7a94348a","updated":"2016-06-14 06:21:33.000000000","message":"Done","commit_id":"1c0d46619fe8b0f45688331d9a9577be0c837495"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"d7688037b43287fdf49bf21d22b68998ac6cc740","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import hashlib"},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":"import wrapt"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_utils import timeutils"},{"line_number":20,"context_line":"# NOTE(stevemar): do not remove positional. We need this to stay for a while"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_9c5c781a","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":12},"updated":"2016-06-14 06:28:15.000000000","message":"Hi Maho Koshiya:\n    Let\u0027s add this to file requirements.txt\n\nThanks.","commit_id":"e8b7d090c74312d6156d0016f281f43544348838"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"33af33eec636ba9a41c5f9b0a17f50d91cd352ae","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import hashlib"},{"line_number":15,"context_line":"import logging"},{"line_number":16,"context_line":"import sys"},{"line_number":17,"context_line":"import wrapt"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_utils import timeutils"},{"line_number":20,"context_line":"# NOTE(stevemar): do not remove positional. We need this to stay for a while"}],"source_content_type":"text/x-python","patch_set":16,"id":"7aa08908_1c6fe8fc","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":12},"in_reply_to":"7aa08908_9c5c781a","updated":"2016-06-14 06:50:48.000000000","message":"Done","commit_id":"e8b7d090c74312d6156d0016f281f43544348838"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66755f9276abcc8915ef43c1bf3cf9439f237bd4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self._self_request_ids \u003d []"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _set_request_ids(self, request_ids):"},{"line_number":62,"context_line":"        self._self_request_ids.append(request_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"},{"line_number":65,"context_line":"    def request_ids(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_711c476a","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":50},"updated":"2016-06-14 11:00:17.000000000","message":"Is this expected to not be a flat list ?\n\n    \u003e\u003e\u003e x \u003d [1]\n    \u003e\u003e\u003e x.append([2,3])\n    \u003e\u003e\u003e x\n    [1, [2, 3]]","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"819d5f88a3cb8dae51b1703ca6ef170a20f806ff","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self._self_request_ids \u003d []"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _set_request_ids(self, request_ids):"},{"line_number":62,"context_line":"        self._self_request_ids.append(request_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"},{"line_number":65,"context_line":"    def request_ids(self):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_bfa6a3be","line":62,"range":{"start_line":62,"start_character":8,"end_line":62,"end_character":50},"in_reply_to":"7aa08908_711c476a","updated":"2016-07-12 09:21:47.000000000","message":"I added codes of list pattern in wrap_with_request_ids","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"b43a2fcf6e33e6083ded0c33feebf55c9ad7e284","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self._self_request_ids"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def add_request_ids(obj, resp):"},{"line_number":70,"context_line":"    proxy \u003d RequestIdProxy(obj)"},{"line_number":71,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":72,"context_line":"        req_id \u003d resp"}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_cce92081","line":69,"range":{"start_line":69,"start_character":4,"end_line":69,"end_character":19},"updated":"2016-06-14 11:21:38.000000000","message":"Does \u0027wrap_with_request_ids\u0027 look clear for you too ? Also, please add a python doc saying what are the \u0027obj\u0027 and \u0027resp\u0027 arguments","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"819d5f88a3cb8dae51b1703ca6ef170a20f806ff","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return self._self_request_ids"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def add_request_ids(obj, resp):"},{"line_number":70,"context_line":"    proxy \u003d RequestIdProxy(obj)"},{"line_number":71,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":72,"context_line":"        req_id \u003d resp"}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_3b53e83a","line":69,"range":{"start_line":69,"start_character":4,"end_line":69,"end_character":19},"in_reply_to":"7aa08908_cce92081","updated":"2016-07-12 09:21:47.000000000","message":"Done","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66755f9276abcc8915ef43c1bf3cf9439f237bd4","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":72,"context_line":"        req_id \u003d resp"},{"line_number":73,"context_line":"    else:"},{"line_number":74,"context_line":"        req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":75,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":76,"context_line":"    return proxy"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_b1beaf62","line":74,"range":{"start_line":74,"start_character":8,"end_line":74,"end_character":14},"updated":"2016-06-14 11:00:17.000000000","message":"Can this be more than a single request-id ? _set_request_ids\u0027s parameter is called request_ids (plural)","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a4d198b165e278e57f594ddeed09a060ccbf9a7a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":72,"context_line":"        req_id \u003d resp"},{"line_number":73,"context_line":"    else:"},{"line_number":74,"context_line":"        req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":75,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":76,"context_line":"    return proxy"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_2cea64db","line":74,"range":{"start_line":74,"start_character":35,"end_line":74,"end_character":57},"updated":"2016-06-14 11:10:01.000000000","message":"Shouldn\u0027t this be \u0027X-Openstack-Request-Id\u0027 (as written in the blueprint [1]) ? \n\n[1] https://blueprints.launchpad.net/python-keystoneclient/+spec/return-request-id-to-caller","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"819d5f88a3cb8dae51b1703ca6ef170a20f806ff","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":72,"context_line":"        req_id \u003d resp"},{"line_number":73,"context_line":"    else:"},{"line_number":74,"context_line":"        req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":75,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":76,"context_line":"    return proxy"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_7fec3bbb","line":74,"range":{"start_line":74,"start_character":35,"end_line":74,"end_character":57},"in_reply_to":"7aa08908_10d2a134","updated":"2016-07-12 09:21:47.000000000","message":"\"x-openstack-request-id\" is correct.","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"23dee9df868bea7205a79f39316f6220841a51df","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":72,"context_line":"        req_id \u003d resp"},{"line_number":73,"context_line":"    else:"},{"line_number":74,"context_line":"        req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":75,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":76,"context_line":"    return proxy"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_10d2a134","line":74,"range":{"start_line":74,"start_character":35,"end_line":74,"end_character":57},"in_reply_to":"7aa08908_2cea64db","updated":"2016-06-16 11:37:15.000000000","message":"Hi Samuel de Medeiros Queiroz:\n    I believe this is \"x-openstack-request-id\"\n\nhttps://github.com/openstack/oslo.middleware/blob/master/oslo_middleware/request_id.py#L23\nThanks","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"66755f9276abcc8915ef43c1bf3cf9439f237bd4","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        req_id \u003d resp"},{"line_number":73,"context_line":"    else:"},{"line_number":74,"context_line":"        req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":75,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":76,"context_line":"    return proxy"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7aa08908_b1eb4f12","line":75,"range":{"start_line":75,"start_character":10,"end_line":75,"end_character":26},"updated":"2016-06-14 11:00:17.000000000","message":"Why is this calling a private method?","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"819d5f88a3cb8dae51b1703ca6ef170a20f806ff","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        req_id \u003d resp"},{"line_number":73,"context_line":"    else:"},{"line_number":74,"context_line":"        req_id \u003d resp.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":75,"context_line":"    proxy._set_request_ids(req_id)"},{"line_number":76,"context_line":"    return proxy"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1aa78d24_5f421f3f","line":75,"range":{"start_line":75,"start_character":10,"end_line":75,"end_character":26},"in_reply_to":"7aa08908_b1eb4f12","updated":"2016-07-12 09:21:47.000000000","message":"I changed to public method.","commit_id":"3a0185247c47883f6271ba514256c863dfff40fe"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        super(RequestIdProxy, self).__init__(wrapped)"},{"line_number":59,"context_line":"        self._self_request_ids \u003d []"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def set_request_ids(self, request_ids):"},{"line_number":62,"context_line":"        self._self_request_ids.append(request_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_9a7cf421","line":61,"updated":"2016-07-25 01:25:32.000000000","message":"this should be called append_request_ids(self, request_ids)","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        super(RequestIdProxy, self).__init__(wrapped)"},{"line_number":59,"context_line":"        self._self_request_ids \u003d []"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def set_request_ids(self, request_ids):"},{"line_number":62,"context_line":"        self._self_request_ids.append(request_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_d3dbf719","line":61,"in_reply_to":"dada55a8_9a7cf421","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"def wrap_with_request_ids(obj, resp):"},{"line_number":70,"context_line":"    \"\"\"Wrap response object with request_ids."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    :param obj: the returned objects from CRUD requests."},{"line_number":73,"context_line":"    :param resp: the API response or the request id (string)."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    proxy \u003d RequestIdProxy(obj)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_dac82c77","line":72,"range":{"start_line":72,"start_character":42,"end_line":72,"end_character":46},"updated":"2016-07-25 01:25:32.000000000","message":"remove \"CRUD\". There are no other kinds of requests as far as I know.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":69,"context_line":"def wrap_with_request_ids(obj, resp):"},{"line_number":70,"context_line":"    \"\"\"Wrap response object with request_ids."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    :param obj: the returned objects from CRUD requests."},{"line_number":73,"context_line":"    :param resp: the API response or the request id (string)."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    proxy \u003d RequestIdProxy(obj)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_f3143ba0","line":72,"range":{"start_line":72,"start_character":42,"end_line":72,"end_character":46},"in_reply_to":"dada55a8_dac82c77","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    \"\"\"Wrap response object with request_ids."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    :param obj: the returned objects from CRUD requests."},{"line_number":73,"context_line":"    :param resp: the API response or the request id (string)."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    proxy \u003d RequestIdProxy(obj)"},{"line_number":76,"context_line":"    if isinstance(resp, six.string_types):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_1aa124aa","line":73,"updated":"2016-07-25 01:25:32.000000000","message":"is \"(string)\" the type? I don\u0027t understand what this means. If it\u0027s the type then it should be done as\n\n :type resp: str","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    \"\"\"Wrap response object with request_ids."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    :param obj: the returned objects from CRUD requests."},{"line_number":73,"context_line":"    :param resp: the API response or the request id (string)."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    proxy \u003d RequestIdProxy(obj)"},{"line_number":76,"context_line":"    if isinstance(resp, six.string_types):"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_df4bf657","line":73,"in_reply_to":"dada55a8_1aa124aa","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"8fc623efa5ff837d184ad57c9cb9f224b43d7caf","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":77,"context_line":"        req_id \u003d resp"},{"line_number":78,"context_line":"        proxy.set_request_ids(req_id)"},{"line_number":79,"context_line":"    if isinstance(resp, list):"},{"line_number":80,"context_line":"        for resp_obj in resp:"},{"line_number":81,"context_line":"            req_id \u003d resp_obj.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":82,"context_line":"            proxy.set_request_ids(req_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_d04bed57","line":79,"range":{"start_line":79,"start_character":4,"end_line":79,"end_character":6},"updated":"2016-07-25 03:41:34.000000000","message":"nit: Let\u0027s use \"elif\" here.","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    if isinstance(resp, six.string_types):"},{"line_number":77,"context_line":"        req_id \u003d resp"},{"line_number":78,"context_line":"        proxy.set_request_ids(req_id)"},{"line_number":79,"context_line":"    if isinstance(resp, list):"},{"line_number":80,"context_line":"        for resp_obj in resp:"},{"line_number":81,"context_line":"            req_id \u003d resp_obj.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":82,"context_line":"            proxy.set_request_ids(req_id)"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_73216bfc","line":79,"range":{"start_line":79,"start_character":4,"end_line":79,"end_character":6},"in_reply_to":"dada55a8_d04bed57","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4772010b45e464ec56449881ceb8d400b4f63cf7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        req_id \u003d resp"},{"line_number":78,"context_line":"        proxy.set_request_ids(req_id)"},{"line_number":79,"context_line":"    if isinstance(resp, list):"},{"line_number":80,"context_line":"        for resp_obj in resp:"},{"line_number":81,"context_line":"            req_id \u003d resp_obj.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":82,"context_line":"            proxy.set_request_ids(req_id)"},{"line_number":83,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_9a951442","line":80,"updated":"2016-07-25 01:25:32.000000000","message":"This could use a comment. Is resp is actually a list of responses and not a list of dicts?","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"},{"author":{"_account_id":11704,"name":"Maho Koshiya","email":"koshiya.maho@po.ntt-tx.co.jp","username":"koshi-m"},"change_message_id":"f6275a07dfa96fbcd3a0104a14b8f344dd6b0bb3","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        req_id \u003d resp"},{"line_number":78,"context_line":"        proxy.set_request_ids(req_id)"},{"line_number":79,"context_line":"    if isinstance(resp, list):"},{"line_number":80,"context_line":"        for resp_obj in resp:"},{"line_number":81,"context_line":"            req_id \u003d resp_obj.headers.get(\u0027x-openstack-request-id\u0027)"},{"line_number":82,"context_line":"            proxy.set_request_ids(req_id)"},{"line_number":83,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"dada55a8_62498eb7","line":80,"in_reply_to":"dada55a8_9a951442","updated":"2016-07-26 10:53:53.000000000","message":"Done","commit_id":"27da8f55e7b91510e6815f521f24dc1f6e536393"}],"requirements.txt":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd973ab23671c9ba97ca9d0812b9bf1dba0b8861","unresolved":false,"context_lines":[{"line_number":14,"context_line":"requests\u003e\u003d2.10.0 # Apache-2.0"},{"line_number":15,"context_line":"six\u003e\u003d1.9.0 # MIT"},{"line_number":16,"context_line":"stevedore\u003e\u003d1.17.1 # Apache-2.0"},{"line_number":17,"context_line":"wrapt\u003e\u003d1.7.0 # BSD License"}],"source_content_type":"text/plain","patch_set":23,"id":"9a30ddce_cfccc86c","line":17,"updated":"2017-03-09 16:39:17.000000000","message":"I like that David\u0027s approach doesn\u0027t require this.","commit_id":"f52a7fe2b1d9200e2b0fb6e628d18cea3e519afd"}]}
