)]}'
{"shade/_tasks.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1e3579c33783014c3c20f7401f0255d6ddd503a2","unresolved":false,"context_lines":[{"line_number":729,"context_line":""},{"line_number":730,"context_line":"class StackOutputsGet(task_manager.Task):"},{"line_number":731,"context_line":"    def main(self, client):"},{"line_number":732,"context_line":"        return client.heat_client.stacks.get(self.args[\u0027id\u0027])"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"class StackDelete(task_manager.Task):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_4da24a9a","line":732,"updated":"2016-03-10 02:58:57.000000000","message":"should this be a client.heat_client.stacks.output_list with a fallback to client.heat_client.stacks.get().to_dict() on NotFound? Just like http://git.openstack.org/cgit/openstack/python-heatclient/tree/heatclient/v1/shell.py#n680","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f0123f2605c9019288767bc1cb107d288c209617","unresolved":false,"context_lines":[{"line_number":729,"context_line":""},{"line_number":730,"context_line":"class StackOutputsGet(task_manager.Task):"},{"line_number":731,"context_line":"    def main(self, client):"},{"line_number":732,"context_line":"        return client.heat_client.stacks.get(self.args[\u0027id\u0027])"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"class StackDelete(task_manager.Task):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_659e3eba","line":732,"in_reply_to":"5aef4532_0db96279","updated":"2016-03-10 03:21:27.000000000","message":"Yes, output_list is a new API call, and is more efficient from the server side than doing a full get, so calling output_list first then falling back to get on NotFound is our recommended approach","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"b101909b81c4e666d93df50428f82a7e2a593368","unresolved":false,"context_lines":[{"line_number":729,"context_line":""},{"line_number":730,"context_line":"class StackOutputsGet(task_manager.Task):"},{"line_number":731,"context_line":"    def main(self, client):"},{"line_number":732,"context_line":"        return client.heat_client.stacks.get(self.args[\u0027id\u0027])"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"class StackDelete(task_manager.Task):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_0db96279","line":732,"in_reply_to":"5aef4532_4da24a9a","updated":"2016-03-10 03:09:25.000000000","message":"Well the different cloud I tried all needed to call get. Is output_list the correct non-deprecated method to use for collecting stack outputs ?","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"1c9257af1a3681ce9470899b0e2ea5b4e94fc3b0","unresolved":false,"context_lines":[{"line_number":729,"context_line":""},{"line_number":730,"context_line":"class StackOutputsGet(task_manager.Task):"},{"line_number":731,"context_line":"    def main(self, client):"},{"line_number":732,"context_line":"        return client.heat_client.stacks.get(self.args[\u0027id\u0027])"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"class StackDelete(task_manager.Task):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_85f54aee","line":732,"in_reply_to":"5aef4532_659e3eba","updated":"2016-03-10 03:24:31.000000000","message":"Oh, thanks for the explanation, I\u0027ll do that in patchset 4 then.","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"}],"shade/openstackcloud.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"26b0bba0dd9307eab1e541012a6413abb669185f","unresolved":false,"context_lines":[{"line_number":1592,"context_line":""},{"line_number":1593,"context_line":"        :returns: a dict containing the stack and its outputs description"},{"line_number":1594,"context_line":"        \"\"\""},{"line_number":1595,"context_line":"        return self.manager.submitTask(_tasks.StackOutputsGet(id\u003did))"},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"    def get_stack(self, name_or_id, filters\u003dNone):"},{"line_number":1598,"context_line":"        \"\"\"Get exactly one Heat stack."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_03c97a78","line":1595,"updated":"2016-02-10 14:32:05.000000000","message":"This needs to be wrapped with _utils.shade_exceptions(), otherwise a heat exception could be thrown.","commit_id":"7b83aa7279c5a6ca608c76a705b526361bed34a8"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c5a305b62e06ab95ee02ba114c5a0b20bd371c66","unresolved":false,"context_lines":[{"line_number":1592,"context_line":""},{"line_number":1593,"context_line":"        :returns: a dict containing the stack and its outputs description"},{"line_number":1594,"context_line":"        \"\"\""},{"line_number":1595,"context_line":"        return self.manager.submitTask(_tasks.StackOutputsGet(id\u003did))"},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"    def get_stack(self, name_or_id, filters\u003dNone):"},{"line_number":1598,"context_line":"        \"\"\"Get exactly one Heat stack."}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_170d793e","line":1595,"in_reply_to":"3a57f1b5_03c97a78","updated":"2016-03-02 01:41:42.000000000","message":"Done","commit_id":"7b83aa7279c5a6ca608c76a705b526361bed34a8"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"790be783557660c8be6bdcc707e58c5dbaf52a4e","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        \"\"\""},{"line_number":1626,"context_line":"        return _utils._get_entity(self.search_floating_ips, id, filters)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def get_stack_outputs(self, id):"},{"line_number":1629,"context_line":"        \"\"\"Get a stack outputs."},{"line_number":1630,"context_line":""},{"line_number":1631,"context_line":"        :param id: id of the desired stack."}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_7a62bdae","line":1628,"updated":"2016-03-02 14:41:33.000000000","message":"Any reason to not have this do name_or_id like other places?","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"b101909b81c4e666d93df50428f82a7e2a593368","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        \"\"\""},{"line_number":1626,"context_line":"        return _utils._get_entity(self.search_floating_ips, id, filters)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def get_stack_outputs(self, id):"},{"line_number":1629,"context_line":"        \"\"\"Get a stack outputs."},{"line_number":1630,"context_line":""},{"line_number":1631,"context_line":"        :param id: id of the desired stack."}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_edc87624","line":1628,"in_reply_to":"5aef4532_cd8e5a2d","updated":"2016-03-10 03:09:25.000000000","message":"Done","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1e3579c33783014c3c20f7401f0255d6ddd503a2","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        \"\"\""},{"line_number":1626,"context_line":"        return _utils._get_entity(self.search_floating_ips, id, filters)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def get_stack_outputs(self, id):"},{"line_number":1629,"context_line":"        \"\"\"Get a stack outputs."},{"line_number":1630,"context_line":""},{"line_number":1631,"context_line":"        :param id: id of the desired stack."}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_cd8e5a2d","line":1628,"in_reply_to":"7af24918_5050755d","updated":"2016-03-10 02:58:57.000000000","message":"name or id should work","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"467c6b54e65529909c24d2941b761d62a1e11640","unresolved":false,"context_lines":[{"line_number":1625,"context_line":"        \"\"\""},{"line_number":1626,"context_line":"        return _utils._get_entity(self.search_floating_ips, id, filters)"},{"line_number":1627,"context_line":""},{"line_number":1628,"context_line":"    def get_stack_outputs(self, id):"},{"line_number":1629,"context_line":"        \"\"\"Get a stack outputs."},{"line_number":1630,"context_line":""},{"line_number":1631,"context_line":"        :param id: id of the desired stack."}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_5050755d","line":1628,"in_reply_to":"7af24918_7a62bdae","updated":"2016-03-02 17:10:59.000000000","message":"I followed that code http://git.openstack.org/cgit/openstack/python-heatclient/tree/heatclient/v1/shell.py#n680 , unsure if it supports name.\n\nThe reasoning is that a typical use-case is to create a stack, wait for complete and get the outputs which is using id after stack creation to avoid lookups.\n\nI\u0027ll have a look if this works with name as well.","commit_id":"fcfc7c63086e26a1159c1b3c87ee17428077af52"},{"author":{"_account_id":1106,"name":"Ricardo Carrillo Cruz","email":"ricardo.carrillo.cruz@gmail.com","username":"rcc"},"change_message_id":"b478fa6d786191511a72ed4b416b5e6786af286f","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"        with _utils.shade_exceptions("},{"line_number":1665,"context_line":"                \"Error in getting stack output {id}\".format(id\u003dname_or_id)):"},{"line_number":1666,"context_line":"            try:"},{"line_number":1667,"context_line":"                outputs \u003d self.manager.submitTask("},{"line_number":1668,"context_line":"                    _tasks.StackOutputsGet(id\u003dname_or_id))"},{"line_number":1669,"context_line":"            except heatclient.exc.HTTPNotFound:"},{"line_number":1670,"context_line":"                # Foldback to legacy method when output_list is not implemented"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_8e98c21d","line":1667,"range":{"start_line":1667,"start_character":49,"end_line":1667,"end_character":50},"updated":"2016-03-10 08:37:53.000000000","message":"You are passing name_or_id parameter, but then you pass it directly to _tasks.StackOutputGet, which expects an ID.\nThis will fail if the user passes a name.\n\nYou want to do a search_stacks, as get_stack method does, in order to effectively find the stack by either a name or an id.","commit_id":"617ab07864ec3152f75abc171a3199ff67f15a67"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"1a26dd4272f22f8ca1c496e2c23a2feeb969639b","unresolved":false,"context_lines":[{"line_number":1664,"context_line":"        with _utils.shade_exceptions("},{"line_number":1665,"context_line":"                \"Error in getting stack output {id}\".format(id\u003dname_or_id)):"},{"line_number":1666,"context_line":"            try:"},{"line_number":1667,"context_line":"                outputs \u003d self.manager.submitTask("},{"line_number":1668,"context_line":"                    _tasks.StackOutputsGet(id\u003dname_or_id))"},{"line_number":1669,"context_line":"            except heatclient.exc.HTTPNotFound:"},{"line_number":1670,"context_line":"                # Foldback to legacy method when output_list is not implemented"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_d08c17dc","line":1667,"range":{"start_line":1667,"start_character":49,"end_line":1667,"end_character":50},"in_reply_to":"5aef4532_8e98c21d","updated":"2016-03-10 14:47:19.000000000","message":"This is confusing, first I proposed to only use id, but then Steve mentioned the api could take an id or name (even though the heatclient takes an \u0027id\u0027 parameter).\n\nAre you sure we need to use search_stacks if the id is a name ?","commit_id":"617ab07864ec3152f75abc171a3199ff67f15a67"}],"shade/tests/unit/test_stack.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"26b0bba0dd9307eab1e541012a6413abb669185f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        mock_heat.stacks.get.return_value \u003d stack"},{"line_number":165,"context_line":"        stack \u003d self.cloud.get_stack_outputs(\u0027stack\u0027)"},{"line_number":166,"context_line":"        self.assertIsNotNone(stack)"},{"line_number":167,"context_line":"        self.assertEqual(stack.outputs, outputs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_83356a47","line":167,"updated":"2016-02-10 14:32:05.000000000","message":"Add a test to validate that an OpenStackCloudException is properly thrown if the heat client call tosses up an exception. See test_list_stacks_exception() for an example.","commit_id":"7b83aa7279c5a6ca608c76a705b526361bed34a8"},{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c5a305b62e06ab95ee02ba114c5a0b20bd371c66","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        mock_heat.stacks.get.return_value \u003d stack"},{"line_number":165,"context_line":"        stack \u003d self.cloud.get_stack_outputs(\u0027stack\u0027)"},{"line_number":166,"context_line":"        self.assertIsNotNone(stack)"},{"line_number":167,"context_line":"        self.assertEqual(stack.outputs, outputs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_5707011c","line":167,"in_reply_to":"3a57f1b5_83356a47","updated":"2016-03-02 01:41:42.000000000","message":"Done","commit_id":"7b83aa7279c5a6ca608c76a705b526361bed34a8"}]}
