)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8f886f2be06ad9d901b85af6a3b6e450e48f9bfa","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the alternate solution to [1]."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"[1] https://review.openstack.org/#/c/261188/"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-author: Dinesh Bhor \u003cdinesh.bhor@nttdata.com\u003e"},{"line_number":14,"context_line":"Change-Id: Ibefaa484158ff08bfcacc1e2802d87fc26fd76a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"df140735_ca6e142e","line":11,"updated":"2017-06-05 08:16:14.000000000","message":"If it\u0027s decided that this patch is superceding 261188 then the description and rationale should be included in this commit message.","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"77fd7d2db41032d60b6654e8ba399e4e2f76a6aa","unresolved":false,"context_lines":[{"line_number":20,"context_line":"parameter \u0027include_metadata\u003dTrue\u0027 to client in order to get the"},{"line_number":21,"context_line":"request_id returned."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Co-author: Dinesh Bhor \u003cdinesh.bhor@nttdata.com\u003e"},{"line_number":24,"context_line":"Partially Implements: blueprint return-request-id-to-caller"},{"line_number":25,"context_line":"Change-Id: Ibefaa484158ff08bfcacc1e2802d87fc26fd76a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"bf659307_8c00ac69","line":23,"updated":"2018-03-27 12:24:46.000000000","message":"nit - I think this should be Co-authored-by instead of Co-author, it\u0027s more standard and it might be recognized by our stats tools","commit_id":"b2e9caee38ca66147552a8f677468becf812e16e"}],"doc/source/using-api-v3.rst":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"7c206016f9187ef6ca7ebe189b4da572fa4acfba","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":109,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":110,"context_line":":py:class:`keystoneclient.base.Response` instead of just the data."},{"line_number":111,"context_line":"TODO(dstanek): Yada, yada, what does this mean?"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"},{"line_number":114,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df140735_d267d3b6","line":111,"updated":"2017-06-04 01:29:25.000000000","message":"So we are changing the type of our responses? Does that means this is not a backward compatible change?","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8f886f2be06ad9d901b85af6a3b6e450e48f9bfa","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Instantiating :py:class:`keystoneclient.v3.client.Client` using"},{"line_number":109,"context_line":"`include_metadata\u003dTrue` will cause manager response to return"},{"line_number":110,"context_line":":py:class:`keystoneclient.base.Response` instead of just the data."},{"line_number":111,"context_line":"TODO(dstanek): Yada, yada, what does this mean?"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    \u003e\u003e\u003e from keystoneauth1.identity import v3"},{"line_number":114,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"}],"source_content_type":"text/x-rst","patch_set":4,"id":"df140735_ea10b8aa","line":111,"updated":"2017-06-05 08:16:14.000000000","message":"This should probably be explained instead of left as a TODO.\n\n\u003e Does that means this is not a backward compatible change?\n\nSince the user has to set a new parameter in order to get this returned I think it\u0027s backwards compatible.","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"}],"keystoneclient/base.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6e83b55d5427bc0ebccc29231b7d7b3549aea9fd","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _prepare_return_value(self, http_response, data):"},{"line_number":117,"context_line":"        if self.client.include_metadata:"},{"line_number":118,"context_line":"            return Response(http_response, data)"},{"line_number":119,"context_line":"        return data"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _list(self, url, response_key, obj_class\u003dNone, body\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_a5a8e278","line":118,"range":{"start_line":118,"start_character":19,"end_line":118,"end_character":27},"updated":"2016-06-15 13:21:32.000000000","message":"Does this break backward compatibility?","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2574244a8ca9dca00c859309e6f5948fc2312d4c","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def _prepare_return_value(self, http_response, data):"},{"line_number":117,"context_line":"        if self.client.include_metadata:"},{"line_number":118,"context_line":"            return Response(http_response, data)"},{"line_number":119,"context_line":"        return data"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def _list(self, url, response_key, obj_class\u003dNone, body\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_05c57609","line":118,"range":{"start_line":118,"start_character":19,"end_line":118,"end_character":27},"in_reply_to":"7aa08908_a5a8e278","updated":"2016-06-15 13:25:54.000000000","message":"No. Unless you ask for it explicitly you will get the old behavior.","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"47170eb553e968b4c7b9b4bfcef2eada864f78bd","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":173,"context_line":"        return self._prepare_return_value(resp, resp.status_code \u003d\u003d 204)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_50729ee4","line":173,"range":{"start_line":173,"start_character":48,"end_line":173,"end_character":71},"updated":"2016-06-15 13:43:33.000000000","message":"Hi David:\n    Sorry that I can\u0027t understand your idea totally.\nPreviously, it return a boolean.\nNow It returns a new defined object Response().\n\n\u003e\u003e\u003e class Response(object):\n...     def __init__(self, request_id, data):\n...         self.data \u003d data\n...         self.request_id \u003d request_id\n... \n\u003e\u003e\u003e b \u003d Response(\u0027req_xxxx\u0027, False)\n\u003e\u003e\u003e \n\u003e\u003e\u003e b \u003d\u003d False\nFalse\n\u003e\u003e\u003e isinstance(b, bool)\nFalse","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"20641931bea78a3515453353200953ceed0c2aee","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":173,"context_line":"        return self._prepare_return_value(resp, resp.status_code \u003d\u003d 204)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_6b3febb5","line":173,"range":{"start_line":173,"start_character":48,"end_line":173,"end_character":71},"in_reply_to":"7aa08908_50729ee4","updated":"2016-06-15 13:45:04.000000000","message":"If you don\u0027t change your code at all it will still return a boolean. You have to ask for the new return type. Come into IRC to discuss more.","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"33b2303f1107c560ed4857b783d07bcd52b94189","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":173,"context_line":"        return self._prepare_return_value(resp, resp.status_code \u003d\u003d 204)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_f1e62c49","line":173,"range":{"start_line":173,"start_character":48,"end_line":173,"end_character":71},"in_reply_to":"7aa08908_563c56bf","updated":"2016-06-15 14:16:18.000000000","message":"I can\u0027t support the other one (I won\u0027t block it though) because it\u0027s a bad design. Adding arbitrary new attributes to built in datatypes makes me sad.","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"40a0dd9cf4613189313143c94d2da63f67fafe6f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":173,"context_line":"        return self._prepare_return_value(resp, resp.status_code \u003d\u003d 204)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_563c56bf","line":173,"range":{"start_line":173,"start_character":48,"end_line":173,"end_character":71},"in_reply_to":"7aa08908_6b3febb5","updated":"2016-06-15 14:00:27.000000000","message":"Oh, I see the if logic in function _prepare_return_value.\nYeah, that works.\nBut https://review.openstack.org/#/c/261188 provide a better consistency with other client (like novaclient, cinderclient).\nI personally think we may not abandon that one unless we have some strong reason.\n\nThanks\n\n(Sorry that I can\u0027t access the IRC currently.)","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"49c099cd1332ea4c64faf48a62af6d42bd23de11","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        resp, body \u003d self.client.head(url, **kwargs)"},{"line_number":173,"context_line":"        return self._prepare_return_value(resp, resp.status_code \u003d\u003d 204)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def _post(self, url, body, response_key, return_raw\u003dFalse, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Create an object."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aa08908_636c2fd1","line":173,"range":{"start_line":173,"start_character":48,"end_line":173,"end_character":71},"in_reply_to":"7aa08908_f1e62c49","updated":"2016-06-15 14:29:25.000000000","message":"Let\u0027s wait more opinion from others. :)\nThanks","commit_id":"e4cc5e825dce0776e7ef8739850a7f3e4f6a5e22"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"7c206016f9187ef6ca7ebe189b4da572fa4acfba","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, http_response, data):"},{"line_number":38,"context_line":"        self.request_ids \u003d []"},{"line_number":39,"context_line":"        if isinstance(http_response, six.string_types):"},{"line_number":40,"context_line":"            self.request_ids.append(http_response)"},{"line_number":41,"context_line":"        elif isinstance(http_response, list):"},{"line_number":42,"context_line":"            # resp is a list of responses"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_7257e7cb","line":39,"updated":"2017-06-04 01:29:25.000000000","message":"in what case is the http_response just a string? would be nice to have a comment here for each of these cases as it is not obvious","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8f886f2be06ad9d901b85af6a3b6e450e48f9bfa","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self, http_response, data):"},{"line_number":38,"context_line":"        self.request_ids \u003d []"},{"line_number":39,"context_line":"        if isinstance(http_response, six.string_types):"},{"line_number":40,"context_line":"            self.request_ids.append(http_response)"},{"line_number":41,"context_line":"        elif isinstance(http_response, list):"},{"line_number":42,"context_line":"            # resp is a list of responses"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_1d98ae67","line":39,"in_reply_to":"df140735_7257e7cb","updated":"2017-06-05 08:16:14.000000000","message":"++","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8f886f2be06ad9d901b85af6a3b6e450e48f9bfa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def __init__(self, http_response, data):"},{"line_number":38,"context_line":"        self.request_ids \u003d []"},{"line_number":39,"context_line":"        if isinstance(http_response, six.string_types):"},{"line_number":40,"context_line":"            self.request_ids.append(http_response)"},{"line_number":41,"context_line":"        elif isinstance(http_response, list):"},{"line_number":42,"context_line":"            # resp is a list of responses"},{"line_number":43,"context_line":"            for resp_obj in http_response:"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_dd4116ab","line":40,"updated":"2017-06-05 08:16:14.000000000","message":"Is this case forgetting to add the x-openstack-request-id value? It looks like it\u0027s just making the whole string response into a list, where the other cases are only appending the headers.","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8f886f2be06ad9d901b85af6a3b6e450e48f9bfa","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        \"\"\""},{"line_number":284,"context_line":"        rl \u003d self.findall(**kwargs)"},{"line_number":285,"context_line":"        num \u003d len(rl)"},{"line_number":286,"context_line":"        request_id \u003d None"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        try:"},{"line_number":289,"context_line":"            request_id \u003d rl.request_ids"},{"line_number":290,"context_line":"        except AttributeError:"},{"line_number":291,"context_line":"            pass"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        if num \u003d\u003d 0:"},{"line_number":294,"context_line":"            msg \u003d _(\"No %(name)s matching %(kwargs)s.\") % {"}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_fd84dad4","line":291,"range":{"start_line":286,"start_character":8,"end_line":291,"end_character":16},"updated":"2017-06-05 08:16:14.000000000","message":"This needs a comment.\n\nI think this could be handled better - you could check isinstance(Response, rl) or check the include_metadata option or use request_id \u003d getattr(rl, \u0027request_ids\u0027, None). Doing it any of those ways would make it clearer and there would be less need for a comment.\n\nAlso if rl.request_ids is plural then the local variable here should be plural.","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"8f886f2be06ad9d901b85af6a3b6e450e48f9bfa","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        elif num \u003e 1:"},{"line_number":298,"context_line":"            raise ksc_exceptions.NoUniqueMatch"},{"line_number":299,"context_line":"        else:"},{"line_number":300,"context_line":"            self._prepare_return_value(request_id, rl[0])"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"    def findall(self, **kwargs):"},{"line_number":303,"context_line":"        \"\"\"Find all items with attributes matching ``**kwargs``."}],"source_content_type":"text/x-python","patch_set":4,"id":"df140735_3d52523c","line":300,"range":{"start_line":300,"start_character":39,"end_line":300,"end_character":49},"updated":"2017-06-05 08:16:14.000000000","message":"So rl.request_ids will be a list of strings, which you\u0027re then passing to the Response object which will treat it as a list of http responses with headers attributes? Or is this supposed to be just a string and fall into the first case in the Response initializer?\n\nAt the very least an explanation is needed for why this is called request_id here but the class initializer is calling the parameter http_response.","commit_id":"d020e8a98fcbbdd01d36181e1fcd8e3c5935adef"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"66095cc1a92675388d8b45b4041014c027fd5e08","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, http_response, data):"},{"line_number":39,"context_line":"        self.request_ids \u003d []"},{"line_number":40,"context_line":"        if isinstance(http_response, list):"},{"line_number":41,"context_line":"            # resp is a list of responses"},{"line_number":42,"context_line":"            for resp_obj in http_response:"},{"line_number":43,"context_line":"                if isinstance(resp_obj, requests.Response):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_fc29f09a","line":40,"updated":"2017-08-01 13:23:04.000000000","message":"I\u0027m trying to figure out in what cases this would ever be a list, please add a comment explaining it and add a test demonstrating it.","commit_id":"f7257b5e248f50e774482f94f9e2f8c142d07d04"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"ba8ac6c95cf050ba7479847984df6a6fd69a38c2","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, http_response, data):"},{"line_number":39,"context_line":"        self.request_ids \u003d []"},{"line_number":40,"context_line":"        if isinstance(http_response, list):"},{"line_number":41,"context_line":"            # resp is a list of responses"},{"line_number":42,"context_line":"            for resp_obj in http_response:"},{"line_number":43,"context_line":"                if isinstance(resp_obj, requests.Response):"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f287b81_06553cfa","line":40,"in_reply_to":"df3967d1_fc29f09a","updated":"2017-08-28 09:48:10.000000000","message":"Done,\n\u0027test_list_with_multiple_response_objects\u0027, is the test to cover this change.","commit_id":"f7257b5e248f50e774482f94f9e2f8c142d07d04"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"66095cc1a92675388d8b45b4041014c027fd5e08","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":253,"context_line":"        \"\"\""},{"line_number":254,"context_line":"        resp, body \u003d self.client.delete(url, **kwargs)"},{"line_number":255,"context_line":"        return self._prepare_return_value(resp, body)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    def _update(self, url, body\u003dNone, response_key\u003dNone, method\u003d\"PUT\","},{"line_number":258,"context_line":"                **kwargs):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_57f9f7c5","line":255,"updated":"2017-08-01 13:23:04.000000000","message":"This isn\u0027t backwards compatible. It used to return a tuple that looked like (\u003cResponse [204]\u003e, None), now it just returns the body.","commit_id":"f7257b5e248f50e774482f94f9e2f8c142d07d04"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"66095cc1a92675388d8b45b4041014c027fd5e08","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                    continue"},{"line_number":324,"context_line":"            return response_data"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        objs \u003d self.list()"},{"line_number":327,"context_line":"        if self.client.include_metadata:"},{"line_number":328,"context_line":"            # \u0027objs\u0027 is the object of \u0027Response\u0027 class."},{"line_number":329,"context_line":"            # Use the request_ids returned from list call as request_ids"}],"source_content_type":"text/x-python","patch_set":6,"id":"df3967d1_371d530f","line":326,"updated":"2017-08-01 13:23:04.000000000","message":"Since list(), when include_metadata\u003dTrue, returns a Response object and not a list anymore, this all seems unnecessary and it seems like there is no reason that _prepare_return_value needs to handle a list.","commit_id":"f7257b5e248f50e774482f94f9e2f8c142d07d04"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"fc979cdaf27e3d98f841d28eb77c1d22d081a15a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        :param kwargs: Additional arguments will be passed to the request."},{"line_number":197,"context_line":"        \"\"\""},{"line_number":198,"context_line":"        resp, body \u003d self.client.post(url, body\u003dbody, **kwargs)"},{"line_number":199,"context_line":"        if return_raw:"},{"line_number":200,"context_line":"            return self._prepare_return_value(resp, body[response_key])"},{"line_number":201,"context_line":"        return self._prepare_return_value("},{"line_number":202,"context_line":"            resp, self.resource_class(self, body[response_key]))"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_e8012708","line":200,"range":{"start_line":199,"start_character":8,"end_line":200,"end_character":71},"updated":"2017-10-05 14:26:49.000000000","message":"This seems like a slight contradiction, I think return_ raw should probably always return just a plain body and not a Response object. But this is hardly used anywhere so I won\u0027t worry too much about it.","commit_id":"284ecd07807fbec695208e79f224fc87903b14c1"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"fc979cdaf27e3d98f841d28eb77c1d22d081a15a","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        elif len(elements) \u003e 1:"},{"line_number":490,"context_line":"            raise ksc_exceptions.NoUniqueMatch"},{"line_number":491,"context_line":"        else:"},{"line_number":492,"context_line":"            return self._prepare_return_value(request_ids, elements[0])"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"class Resource(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_c3940ceb","line":492,"range":{"start_line":492,"start_character":46,"end_line":492,"end_character":57},"updated":"2017-10-05 14:26:49.000000000","message":"I think this doesn\u0027t work any more, it should probably just be the response object?","commit_id":"284ecd07807fbec695208e79f224fc87903b14c1"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"092564e74c1c1211b250317e9f21e10fdc8736a9","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self, client):"},{"line_number":55,"context_line":"        super(ResponseMixin, self).__init__()"},{"line_number":56,"context_line":"        self.client \u003d client"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def _prepare_return_value(self, http_response, data):"},{"line_number":59,"context_line":"        if self.client.include_metadata:"}],"source_content_type":"text/x-python","patch_set":10,"id":"df7087c5_c96ebdc8","line":56,"updated":"2018-03-19 15:55:28.000000000","message":"Leave this in the Manager class, there\u0027s no reason for this mixin to be responsible for initializing the client.","commit_id":"5c49864d90af3ba7f45e5dc5a71b745e0824ee1d"}],"keystoneclient/tests/unit/test_base.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"092564e74c1c1211b250317e9f21e10fdc8736a9","unresolved":false,"context_lines":[{"line_number":378,"context_line":"            side_effect\u003d[exceptions.NotFound, (request_resp, body)])"},{"line_number":379,"context_line":"        ).mock"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        mgr \u003d roles.RoleManager(self.client)"},{"line_number":382,"context_line":"        mgr.resource_class \u003d roles.Role"},{"line_number":383,"context_line":"        response \u003d base_utils.find_resource(mgr, \u0027entity_one\u0027)"},{"line_number":384,"context_line":"        get_mock.assert_called_with(\u0027/OS-KSADM/roles\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"df7087c5_49762d41","line":381,"updated":"2018-03-19 15:55:28.000000000","message":"If possible I\u0027d prefer to use the ManagerWithFind class directly instead of its child.","commit_id":"5c49864d90af3ba7f45e5dc5a71b745e0824ee1d"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"092564e74c1c1211b250317e9f21e10fdc8736a9","unresolved":false,"context_lines":[{"line_number":405,"context_line":"            self.client, \u0027get\u0027, autospec\u003dTrue,"},{"line_number":406,"context_line":"            side_effect\u003d[exceptions.NotFound, (self.request_resp, body)])"},{"line_number":407,"context_line":"        ).mock"},{"line_number":408,"context_line":"        mgr \u003d users.UserManager(self.client)"},{"line_number":409,"context_line":"        mgr.resource_class \u003d users.User"},{"line_number":410,"context_line":"        response \u003d base_utils.find_resource(mgr, \u0027entity_one\u0027)"},{"line_number":411,"context_line":"        get_mock.assert_called_with(\u0027/users?name\u003dentity_one\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"df7087c5_49ab8d74","line":408,"updated":"2018-03-19 15:55:28.000000000","message":"If possible I would rather use the CrudManager class directly instead of its child.","commit_id":"5c49864d90af3ba7f45e5dc5a71b745e0824ee1d"}]}
