)]}'
{"heat/engine/api.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if api.ADOPT_STACK_DATA in params:"},{"line_number":53,"context_line":"        kwargs[api.ADOPT_STACK_DATA] \u003d params.get(api.ADOPT_STACK_DATA)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    return kwargs"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Mg%3D","line":54,"updated":"2014-01-06 08:53:01.000000000","message":"This is untested.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"0c4e8664654ba9e4de5e25f4c5f964dad2da2573","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if api.ADOPT_STACK_DATA in params:"},{"line_number":53,"context_line":"        kwargs[api.ADOPT_STACK_DATA] \u003d params.get(api.ADOPT_STACK_DATA)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    return kwargs"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F7kI%3D","line":54,"in_reply_to":"AAAAUH%2F%2F9Mg%3D","updated":"2014-01-06 21:09:38.000000000","message":"added test.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"}],"heat/engine/parser.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"3772f949a4f885441b14c9879c33b1c88214b053","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":162,"context_line":"            return None"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        return data[\u0027resources\u0027].get(res_name, None)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _set_param_stackid(self):"},{"line_number":167,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F6cM%3D","line":164,"updated":"2013-12-27 09:31:05.000000000","message":"The None is unnecessary here.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"eb88232d05333fc3e844dc78516cb21225e67efa","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":162,"context_line":"            return None"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        return data[\u0027resources\u0027].get(res_name, None)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _set_param_stackid(self):"},{"line_number":167,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F5DI%3D","line":164,"in_reply_to":"AAAAT3%2F%2F6cM%3D","updated":"2013-12-27 20:02:17.000000000","message":"changed.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"3772f949a4f885441b14c9879c33b1c88214b053","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                                       post_func\u003drollback)"},{"line_number":469,"context_line":"        creator(timeout\u003dself.timeout_secs())"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def adopt_task(self, action, reverse\u003dFalse, post_func\u003dNone):"},{"line_number":472,"context_line":"        self.state_set(action, self.IN_PROGRESS,"},{"line_number":473,"context_line":"                       \u0027Stack %s started\u0027 % action)"},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F6cE%3D","line":471,"updated":"2013-12-27 09:31:05.000000000","message":"There is ton of duplication with stack_task, presumably for padding argument to adopt. It\u0027d be nice to refactor to share more code (possibly passing resource_action to stack_task?).","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"eb88232d05333fc3e844dc78516cb21225e67efa","unresolved":false,"context_lines":[{"line_number":468,"context_line":"                                       post_func\u003drollback)"},{"line_number":469,"context_line":"        creator(timeout\u003dself.timeout_secs())"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def adopt_task(self, action, reverse\u003dFalse, post_func\u003dNone):"},{"line_number":472,"context_line":"        self.state_set(action, self.IN_PROGRESS,"},{"line_number":473,"context_line":"                       \u0027Stack %s started\u0027 % action)"},{"line_number":474,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F5DA%3D","line":471,"in_reply_to":"AAAAT3%2F%2F6cE%3D","updated":"2013-12-27 20:02:17.000000000","message":"refactored.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":417,"context_line":"        # If stack_task method was called without res_action, then use default"},{"line_number":418,"context_line":"        # resource_action"},{"line_number":419,"context_line":"        if not res_action:"},{"line_number":420,"context_line":"            res_action \u003d resource_action"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        action_task \u003d scheduler.DependencyTaskGroup(self.dependencies,"},{"line_number":423,"context_line":"                                                    res_action,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Lk%3D","line":420,"updated":"2014-01-06 08:53:01.000000000","message":"The naming is a bit awkward. I\u0027d rename resource_action to default_resource_action and res_action to resource_action.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        def rollback():"},{"line_number":472,"context_line":"            if not self.disable_rollback and self.state \u003d\u003d (self.ADOPT,"},{"line_number":473,"context_line":"                                                            self.FAILED):"},{"line_number":474,"context_line":"                self.delete(action\u003dself.ROLLBACK)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"        creator \u003d scheduler.TaskRunner(self.stack_task,"},{"line_number":477,"context_line":"                                       action\u003dself.ADOPT,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9LY%3D","line":474,"updated":"2014-01-06 08:53:01.000000000","message":"This is untested.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"871fdb5a6d74fd09266f16f9b00551ab5884ddad","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        return len(self) + sum(total_nested(res) for res in self.itervalues())"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _get_res_adopt_data(self, res_name):"},{"line_number":160,"context_line":"        data \u003d self.adopt_stack_data"},{"line_number":161,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":162,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F4bA%3D","line":159,"updated":"2014-01-07 09:34:38.000000000","message":"Some other renaming bits: _get_resource_adopt_data, resource_name.","commit_id":"41850d582aabe0d1ef49d2055713337fa9cc89d7"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"c23453ad0ddf01685096e3838537a710d0c970ac","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _get_resource_adopt_data(self, resource_name):"},{"line_number":161,"context_line":"        data \u003d self.adopt_stack_data"},{"line_number":162,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return data[\u0027resources\u0027].get(resource_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FS%2BU%3D","line":162,"updated":"2014-01-15 11:14:43.000000000","message":"Could this lookup not happen in resource.Resource.adopt, so we can avoid special-casing adopt via resource_action below?","commit_id":"76b6bda59808664ac92de60a5d61972728c595c3"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"bf003a0517c728fa8733f99e3376a4f23eda75f8","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _get_resource_adopt_data(self, resource_name):"},{"line_number":161,"context_line":"        data \u003d self.adopt_stack_data"},{"line_number":162,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return data[\u0027resources\u0027].get(resource_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FNTg%3D","line":162,"in_reply_to":"AAAAUH%2F%2FOG8%3D","updated":"2014-01-16 11:32:07.000000000","message":"Ok, so here\u0027s an update of what I\u0027ve suggested following an IRC conversation with therve - he wants the adopt_stack_data lookup to remain in parser.Stack, and I want the impact on the stack_task interfaces to be minimised (as an aim of that code was to avoid special casing for specific actions, and to make it flexible enough to cope with new actions being added)\n\nSo here\u0027s an (untested) example of what I have suggested:\n\n    def _adopt_kwargs(self, resource):\n        \u0027\u0027\u0027Returns arguments required for handle_adopt calls.\u0027\u0027\u0027\n        data \u003d self.adopt_stack_data\n        if not data or not data.get(\u0027resources\u0027):\n            return None\n\n        return {\u0027resource_data\u0027: data[\u0027resources\u0027].get(resource.name)}\n\n    @scheduler.wrappertask\n    def stack_task(self, action, reverse\u003dFalse, post_func\u003dNone):\n        \u0027\u0027\u0027\n        A task to perform an action on the stack and all of the resources\n        in forward or reverse dependency order as specfifed by reverse\n        \u0027\u0027\u0027\n        self.state_set(action, self.IN_PROGRESS,\n                       \u0027Stack %s started\u0027 % action)\n\n        stack_status \u003d self.COMPLETE\n        reason \u003d \u0027Stack %s completed successfully\u0027 % action.lower()\n\n        def resource_action(r):\n            # Find e.g resource.create and call it\n            action_l \u003d action.lower()\n            handle \u003d getattr(r, \u0027%s\u0027 % action_l)\n\n            # If a local _$action_kwargs function exists, call it to get the\n            # action specific argument list, otherwise an empty arg list\n            handle_kwargs \u003d getattr(self, \u0027_%s_kwargs\u0027 % action_l, lambda: {})\n            return handle(**handle_kwargs(r))\n\n        action_task \u003d scheduler.DependencyTaskGroup(self.dependencies,\n                                                    resource_action,\n                                                    reverse)\n\nIn my view, this is cleaner than what is currently proposed, but I\u0027m happy to hear suggestions to the contrary ;)","commit_id":"76b6bda59808664ac92de60a5d61972728c595c3"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"b73b650756b8c47dfdf3c6801c937be8824106af","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _get_resource_adopt_data(self, resource_name):"},{"line_number":161,"context_line":"        data \u003d self.adopt_stack_data"},{"line_number":162,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return data[\u0027resources\u0027].get(resource_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FOG8%3D","line":162,"in_reply_to":"AAAAUH%2F%2FR7c%3D","updated":"2014-01-16 08:41:38.000000000","message":"Well the resource already has a reference to self.stack, so there would be no difference in what we pass in.  But I\u0027m not going to force the issue if this was done as review rework, I guess it could be argued it\u0027s a personal preference thing.  \n\nNevertheless, I\u0027ve always considered the stuff in stack_task to be our interface to the resource plugin API, and the issue I have is that we\u0027re not calling a resource action anymore, we\u0027re calling a function defined here, in parser.Stack and calling it, uh, resource_action.\n\nMaybe we can get some feedback from others to reach consensus (in particular from zaneb who was also involved with writing this originally)","commit_id":"76b6bda59808664ac92de60a5d61972728c595c3"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"674baa6bd11eefaca80ced5def224a8deb238aba","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _get_resource_adopt_data(self, resource_name):"},{"line_number":161,"context_line":"        data \u003d self.adopt_stack_data"},{"line_number":162,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return data[\u0027resources\u0027].get(resource_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FSCM%3D","line":162,"in_reply_to":"AAAAUH%2F%2FS%2BU%3D","updated":"2014-01-15 14:39:02.000000000","message":"Here idea is to pass only resource specific data to the resource \u0027adopt\u0027 method.\nInitially it was implemented as you suggested, but changed as per \u0027Thomas Herve\u0027 review comment. \nPlease let me know if you disagree with this implementation.","commit_id":"76b6bda59808664ac92de60a5d61972728c595c3"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"2e87a46b12c0f578900e0dae9f6b25bfdc1e052e","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _get_resource_adopt_data(self, resource_name):"},{"line_number":161,"context_line":"        data \u003d self.adopt_stack_data"},{"line_number":162,"context_line":"        if not data or not data.get(\u0027resources\u0027):"},{"line_number":163,"context_line":"            return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        return data[\u0027resources\u0027].get(resource_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FR7c%3D","line":162,"in_reply_to":"AAAAUH%2F%2FSCM%3D","updated":"2014-01-15 14:55:48.000000000","message":"Yeah and I stand by it. I don\u0027t think the special-casing is that problematic, and it decouples things in a nice way.","commit_id":"76b6bda59808664ac92de60a5d61972728c595c3"}],"heat/engine/resource.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"3772f949a4f885441b14c9879c33b1c88214b053","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            raise failure"},{"line_number":498,"context_line":"        else:"},{"line_number":499,"context_line":"            self.state_set(action, self.COMPLETE)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def handle_adopt(self, res_data):"},{"line_number":502,"context_line":"        res_id, data, metadata \u003d self._get_resource_info(res_data)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F6aw%3D","line":500,"updated":"2013-12-27 09:31:05.000000000","message":"You should remove most of this code and use _do_action instead.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"eb88232d05333fc3e844dc78516cb21225e67efa","unresolved":false,"context_lines":[{"line_number":497,"context_line":"            raise failure"},{"line_number":498,"context_line":"        else:"},{"line_number":499,"context_line":"            self.state_set(action, self.COMPLETE)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def handle_adopt(self, res_data):"},{"line_number":502,"context_line":"        res_id, data, metadata \u003d self._get_resource_info(res_data)"},{"line_number":503,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F5C8%3D","line":500,"in_reply_to":"AAAAT3%2F%2F6aw%3D","updated":"2013-12-27 20:02:17.000000000","message":"done.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    def heat(self):"},{"line_number":380,"context_line":"        return self.stack.clients.heat()"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def _do_action(self, action, pre_func\u003dNone, res_data\u003dNone):"},{"line_number":383,"context_line":"        \u0027\u0027\u0027"},{"line_number":384,"context_line":"        Perform a transition to a new state via a specified action"},{"line_number":385,"context_line":"        action should be e.g self.CREATE, self.UPDATE etc, we set"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9LQ%3D","line":382,"updated":"2014-01-06 08:53:01.000000000","message":"res_data is a bad name. What about adopt_data or resource_data?","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"0c4e8664654ba9e4de5e25f4c5f964dad2da2573","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    def heat(self):"},{"line_number":380,"context_line":"        return self.stack.clients.heat()"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def _do_action(self, action, pre_func\u003dNone, res_data\u003dNone):"},{"line_number":383,"context_line":"        \u0027\u0027\u0027"},{"line_number":384,"context_line":"        Perform a transition to a new state via a specified action"},{"line_number":385,"context_line":"        action should be e.g self.CREATE, self.UPDATE etc, we set"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F7Wk%3D","line":382,"in_reply_to":"AAAAUH%2F%2F9LQ%3D","updated":"2014-01-06 21:09:38.000000000","message":"done.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            handle_data \u003d None"},{"line_number":410,"context_line":"            if callable(handle):"},{"line_number":411,"context_line":"                handle_data \u003d handle(res_data) if res_data else handle()"},{"line_number":412,"context_line":"                yield"},{"line_number":413,"context_line":"                if callable(check):"},{"line_number":414,"context_line":"                    while not check(handle_data):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9IU%3D","line":411,"updated":"2014-01-06 08:53:01.000000000","message":"This doesn\u0027t work, as it doesn\u0027t pass the data if res_data is None, but handle_adopt always take the data. You could use a UNDEFINED\u003dobject() constant and do resource_data\u003dUNDEFINED, and check on that.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"cccffab76b219ecf0fbeba97feeaccddc0a0da46","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                                     self.t.get(\u0027Properties\u0027, {}),"},{"line_number":451,"context_line":"                                     self._resolve_runtime_data,"},{"line_number":452,"context_line":"                                     self.name)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        return self._do_action(action, self.properties.validate)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def set_deletion_policy(self, policy):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Fc%3D","line":453,"updated":"2014-01-06 09:18:41.000000000","message":"Please do not touch lines that does not related to your patch","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"0c4e8664654ba9e4de5e25f4c5f964dad2da2573","unresolved":false,"context_lines":[{"line_number":450,"context_line":"                                     self.t.get(\u0027Properties\u0027, {}),"},{"line_number":451,"context_line":"                                     self._resolve_runtime_data,"},{"line_number":452,"context_line":"                                     self.name)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        return self._do_action(action, self.properties.validate)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def set_deletion_policy(self, policy):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F7WY%3D","line":453,"in_reply_to":"AAAAUH%2F%2F9Fc%3D","updated":"2014-01-06 21:09:38.000000000","message":"done","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        return self._do_action(self.ADOPT, res_data\u003dres_data)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def handle_adopt(self, res_data):"},{"line_number":479,"context_line":"        res_id, data, metadata \u003d self._get_resource_info(res_data)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        if not res_id:"},{"line_number":482,"context_line":"            exc \u003d Exception(_(\u0027Resource ID is missing and failed to adopt \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9K8%3D","line":479,"updated":"2014-01-06 08:53:01.000000000","message":"resource_data, resource_id.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        self.resource_id_set(res_id)"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        # save the resource data"},{"line_number":491,"context_line":"        if data and type(data) is dict:"},{"line_number":492,"context_line":"            for key in data:"},{"line_number":493,"context_line":"                db_api.resource_data_set(self, key, data[key])"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9K0%3D","line":491,"updated":"2014-01-06 08:53:01.000000000","message":"isinstance(data, dict)","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        # save the resource data"},{"line_number":491,"context_line":"        if data and type(data) is dict:"},{"line_number":492,"context_line":"            for key in data:"},{"line_number":493,"context_line":"                db_api.resource_data_set(self, key, data[key])"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        # save the resource metadata"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Ko%3D","line":492,"updated":"2014-01-06 08:53:01.000000000","message":"You should use iteritems.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"cccffab76b219ecf0fbeba97feeaccddc0a0da46","unresolved":false,"context_lines":[{"line_number":771,"context_line":"        # all other transistions (other than to DELETE_COMPLETE)"},{"line_number":772,"context_line":"        # should be handled by the update_and_save above.."},{"line_number":773,"context_line":"        elif ((action, status) \u003d\u003d (self.CREATE, self.IN_PROGRESS) or"},{"line_number":774,"context_line":"              (action, status) \u003d\u003d (self.ADOPT, self.IN_PROGRESS)):"},{"line_number":775,"context_line":"            self._store()"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def _resolve_attribute(self, name):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Dk%3D","line":774,"updated":"2014-01-06 09:18:41.000000000","message":"what about \nelif (action, status)  in [(self.CREATE, self.IN_PROGRESS), (self.ADOPT, self.IN_PROGRESS)]:","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"871fdb5a6d74fd09266f16f9b00551ab5884ddad","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        self.resource_id_set(resource_id)"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        # save the resource data"},{"line_number":490,"context_line":"        if data and isinstance(data, dict):"},{"line_number":491,"context_line":"            for key, value in data.iteritems():"},{"line_number":492,"context_line":"                db_api.resource_data_set(self, key, value)"},{"line_number":493,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F4Zc%3D","line":490,"updated":"2014-01-07 09:34:38.000000000","message":"I actually wonder why we check if it\u0027s a dict. If someone pass something as a mistake nothing will tell him what went wrong.","commit_id":"41850d582aabe0d1ef49d2055713337fa9cc89d7"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"871fdb5a6d74fd09266f16f9b00551ab5884ddad","unresolved":false,"context_lines":[{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        return (resource_data.get(\u0027resource_id\u0027),"},{"line_number":502,"context_line":"                resource_data.get(\u0027resource_data\u0027),"},{"line_number":503,"context_line":"                resource_data.get(\u0027metadata\u0027))"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def update(self, after, before\u003dNone):"},{"line_number":506,"context_line":"        \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2F4Z4%3D","line":503,"updated":"2014-01-07 09:34:38.000000000","message":"There is no test passing non-empty resource_data or metadata.","commit_id":"41850d582aabe0d1ef49d2055713337fa9cc89d7"}],"heat/engine/resources/stack.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"3772f949a4f885441b14c9879c33b1c88214b053","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def handle_adopt(self):"},{"line_number":65,"context_line":"        self._create_with_template(adopt\u003dTrue)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def handle_create(self):"},{"line_number":68,"context_line":"        return self._create_with_template()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F6as%3D","line":65,"updated":"2013-12-27 09:31:05.000000000","message":"You\u0027re not upcalling handle_adopt here, isn\u0027t that a problem?","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"eb88232d05333fc3e844dc78516cb21225e67efa","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    update_allowed_keys \u003d (\u0027Properties\u0027,)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def handle_adopt(self):"},{"line_number":65,"context_line":"        self._create_with_template(adopt\u003dTrue)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def handle_create(self):"},{"line_number":68,"context_line":"        return self._create_with_template()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F5Cw%3D","line":65,"in_reply_to":"AAAAT3%2F%2F6as%3D","updated":"2013-12-27 20:02:17.000000000","message":"as per my understanding adopt/create are similar, except one difference. In created, new resource will be created, whereas in adopt existing resource will be used. (I haven\u0027t tested the nested stack adoption yet, will update the patch if required)","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"}],"heat/engine/resources/template_resource.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"3772f949a4f885441b14c9879c33b1c88214b053","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def handle_adopt(self):"},{"line_number":215,"context_line":"        return self.create_with_template(self.parsed_nested(),"},{"line_number":216,"context_line":"                                         self._to_parameters(),"},{"line_number":217,"context_line":"                                         adopt\u003dTrue)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def handle_create(self):"},{"line_number":220,"context_line":"        return self.create_with_template(self.parsed_nested(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F6ao%3D","line":217,"updated":"2013-12-27 09:31:05.000000000","message":"Same thing here, shouldn\u0027t you call handle_adopt from the base class?","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"eb88232d05333fc3e844dc78516cb21225e67efa","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    def handle_adopt(self):"},{"line_number":215,"context_line":"        return self.create_with_template(self.parsed_nested(),"},{"line_number":216,"context_line":"                                         self._to_parameters(),"},{"line_number":217,"context_line":"                                         adopt\u003dTrue)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def handle_create(self):"},{"line_number":220,"context_line":"        return self.create_with_template(self.parsed_nested(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F5Cs%3D","line":217,"in_reply_to":"AAAAT3%2F%2F6ao%3D","updated":"2013-12-27 20:02:17.000000000","message":"here create_with_template actually does stack adoption (see the last argument adopt)","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"}],"heat/engine/service.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"cccffab76b219ecf0fbeba97feeaccddc0a0da46","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            else:"},{"line_number":330,"context_line":"                stack.create()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if ((stack.action \u003d\u003d stack.CREATE or stack.action \u003d\u003d stack.ADOPT)"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9DY%3D","line":332,"updated":"2014-01-06 09:18:41.000000000","message":"what about\n\nstack.action in [stack.CREATE, stack.ADOPT]:","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if ((stack.action \u003d\u003d stack.CREATE or stack.action \u003d\u003d stack.ADOPT)"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"},{"line_number":336,"context_line":"            else:"},{"line_number":337,"context_line":"                logger.warning(_(\"Stack create failed, status %s\") %"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9KY%3D","line":334,"updated":"2014-01-06 08:53:01.000000000","message":"All these changes are untested.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8687c1a574a548b9cd4148f86d763c39a76f16ef","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            else:"},{"line_number":330,"context_line":"                stack.create()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if (stack.action in [stack.CREATE or stack.action \u003d\u003d stack.ADOPT]"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2F2ks%3D","line":332,"updated":"2014-01-07 17:22:51.000000000","message":"This is confusing to me. It looks like you\u0027re doing an \"in\" test on a list whose value is a boolean result. That seems very weird. I\u0027m pretty sure that isn\u0027t what you meant to do. Did you mean this instead:\n\n    if (stack.action in (stack.CREATE, stack.ADOPT) and stack.status \u003d\u003d stack.COMPLETE):","commit_id":"cc60d004da7818e01d48a09034f0ddfdd234bcfa"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"8d9f4b2483bc6bedce79fc48d27cc9d086ae2e5f","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            else:"},{"line_number":330,"context_line":"                stack.create()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if (stack.action in [stack.CREATE or stack.action \u003d\u003d stack.ADOPT]"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2F2XA%3D","line":332,"in_reply_to":"AAAAUH%2F%2F2ks%3D","updated":"2014-01-07 17:48:41.000000000","message":"thanks for catching this. I wanted to do if (\nstack.action in [stack.CREATE, stack.ADOPT] and stack.status \u003d\u003d stack.COMPLETE)","commit_id":"cc60d004da7818e01d48a09034f0ddfdd234bcfa"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"eb2da649b17c7c88bc2c510237caed072570c7ed","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            else:"},{"line_number":330,"context_line":"                stack.create()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if (stack.action in [stack.CREATE, stack.ADOPT]"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FZy4%3D","line":332,"updated":"2014-01-14 04:29:54.000000000","message":"This should be a tuple, not a list.","commit_id":"4a081658f7142a41a40c2238abe627e9d569bc5b"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"47d03ae1ea86fda381e024bcc657c70dbb85d40b","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            else:"},{"line_number":330,"context_line":"                stack.create()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if (stack.action in [stack.CREATE, stack.ADOPT]"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FXRU%3D","line":332,"in_reply_to":"AAAAUH%2F%2FXkI%3D","updated":"2014-01-14 16:17:33.000000000","message":"No just change the [] to () ..\n\n\n    \u003e\u003e\u003e 2 in (1,2)\n    True\n    \u003e\u003e\u003e 2 in (1,3)\n    False\n    \u003e\u003e\u003e","commit_id":"4a081658f7142a41a40c2238abe627e9d569bc5b"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"2b5dea68c9c747619fc46669ae10eb47b0fb1d3b","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            else:"},{"line_number":330,"context_line":"                stack.create()"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"            if (stack.action in [stack.CREATE, stack.ADOPT]"},{"line_number":333,"context_line":"                    and stack.status \u003d\u003d stack.COMPLETE):"},{"line_number":334,"context_line":"                # Schedule a periodic watcher task for this stack"},{"line_number":335,"context_line":"                self._start_watch_task(stack.id, cnxt)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FXkI%3D","line":332,"in_reply_to":"AAAAUH%2F%2FZy4%3D","updated":"2014-01-14 15:24:32.000000000","message":"Clint,\nshall I change it like \nif stack.state in [ (stack.CREATE, stack.COMPLETE), (stack.ADOPT, stack.COMPLETE)] \n\nother way is\n \n(if stack.state \u003d\u003d  (stack.CREATE, stack.COMPLETE) or stack.state \u003d\u003d (stack.ADOPT, stack.COMPLETE)) ?\n\nwhich one do you prefer?","commit_id":"4a081658f7142a41a40c2238abe627e9d569bc5b"}],"heat/rpc/api.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"cccffab76b219ecf0fbeba97feeaccddc0a0da46","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ENGINE_TOPIC \u003d \u0027engine\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"PARAM_KEYS \u003d ("},{"line_number":18,"context_line":"    PARAM_TIMEOUT, PARAM_DISABLE_ROLLBACK, ADOPT_STACK_DATA"},{"line_number":19,"context_line":") \u003d ("},{"line_number":20,"context_line":"    \u0027timeout_mins\u0027, \u0027disable_rollback\u0027, \u0027adopt_stack_data\u0027"},{"line_number":21,"context_line":")"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9GQ%3D","line":18,"updated":"2014-01-06 09:18:41.000000000","message":"What about name it as PARAM_ADOPT_STACK_DATA to keep consistent?","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"0c4e8664654ba9e4de5e25f4c5f964dad2da2573","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ENGINE_TOPIC \u003d \u0027engine\u0027"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"PARAM_KEYS \u003d ("},{"line_number":18,"context_line":"    PARAM_TIMEOUT, PARAM_DISABLE_ROLLBACK, ADOPT_STACK_DATA"},{"line_number":19,"context_line":") \u003d ("},{"line_number":20,"context_line":"    \u0027timeout_mins\u0027, \u0027disable_rollback\u0027, \u0027adopt_stack_data\u0027"},{"line_number":21,"context_line":")"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F63Y%3D","line":18,"in_reply_to":"AAAAUH%2F%2F9GQ%3D","updated":"2014-01-06 21:09:38.000000000","message":"done","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"8687c1a574a548b9cd4148f86d763c39a76f16ef","unresolved":false,"context_lines":[{"line_number":17,"context_line":"PARAM_KEYS \u003d ("},{"line_number":18,"context_line":"    PARAM_TIMEOUT, PARAM_DISABLE_ROLLBACK, PARAM_ADOPT_STACK_DATA"},{"line_number":19,"context_line":") \u003d ("},{"line_number":20,"context_line":"    \u0027timeout_mins\u0027, \u0027disable_rollback\u0027, \u0027adopt_stack_data\u0027"},{"line_number":21,"context_line":")"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"STACK_KEYS \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2F2dE%3D","line":20,"updated":"2014-01-07 17:22:51.000000000","message":"Doesn\u0027t a new method mean a minor RPC version bump?","commit_id":"cc60d004da7818e01d48a09034f0ddfdd234bcfa"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"8d9f4b2483bc6bedce79fc48d27cc9d086ae2e5f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"PARAM_KEYS \u003d ("},{"line_number":18,"context_line":"    PARAM_TIMEOUT, PARAM_DISABLE_ROLLBACK, PARAM_ADOPT_STACK_DATA"},{"line_number":19,"context_line":") \u003d ("},{"line_number":20,"context_line":"    \u0027timeout_mins\u0027, \u0027disable_rollback\u0027, \u0027adopt_stack_data\u0027"},{"line_number":21,"context_line":")"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"STACK_KEYS \u003d ("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAUH%2F%2F2Ws%3D","line":20,"in_reply_to":"AAAAUH%2F%2F2dE%3D","updated":"2014-01-07 17:48:41.000000000","message":"Iam not sure about version bump. could you provide some more info? probably I will catch you on IRC.","commit_id":"cc60d004da7818e01d48a09034f0ddfdd234bcfa"}],"heat/tests/test_parser.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":1272,"context_line":"        res \u003d self.stack[\u0027foo\u0027]"},{"line_number":1273,"context_line":"        self.assertEqual((self.stack.ADOPT, self.stack.FAILED),"},{"line_number":1274,"context_line":"                         self.stack.state)"},{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    @utils.stack_delete_after"},{"line_number":1277,"context_line":"    def test_update_badstate(self):"},{"line_number":1278,"context_line":"        self.stack \u003d parser.Stack(self.ctx, \u0027test_stack\u0027, parser.Template({}),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Is%3D","line":1275,"updated":"2014-01-06 08:53:01.000000000","message":"You should check status_reason here. It would show a bug in the code I commented separately.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"}],"heat/tests/test_resource.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"143fb6fa56a66258f5cbcab83acd661420e49359","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        res \u003d self.stack[\u0027foo\u0027]"},{"line_number":677,"context_line":"        adopt \u003d scheduler.TaskRunner(res.adopt, None)"},{"line_number":678,"context_line":"        self.assertRaises(exception.ResourceFailure, adopt)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"class ResourceDependenciesTest(HeatTestCase):"},{"line_number":682,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2F9Ik%3D","line":679,"updated":"2014-01-06 08:53:01.000000000","message":"Please check the message of the exception here.","commit_id":"70c8ea4d2437d107f4f264b7b4e5e1b6451d3d15"}],"heat/tests/test_stack_resource.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"3772f949a4f885441b14c9879c33b1c88214b053","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                     disable_rollback\u003dTrue,"},{"line_number":327,"context_line":"                     parent_resource\u003dself.parent_resource,"},{"line_number":328,"context_line":"                     owner_id\u003dself.parent_stack.id,"},{"line_number":329,"context_line":"                     adopt_stack_data\u003dNone)\\"},{"line_number":330,"context_line":"            .AndReturn(self.stack)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        st_set \u003d self.stack.state_set"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F6ac%3D","line":329,"updated":"2013-12-27 09:31:05.000000000","message":"That change looks unnecessary.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"eb88232d05333fc3e844dc78516cb21225e67efa","unresolved":false,"context_lines":[{"line_number":326,"context_line":"                     disable_rollback\u003dTrue,"},{"line_number":327,"context_line":"                     parent_resource\u003dself.parent_resource,"},{"line_number":328,"context_line":"                     owner_id\u003dself.parent_stack.id,"},{"line_number":329,"context_line":"                     adopt_stack_data\u003dNone)\\"},{"line_number":330,"context_line":"            .AndReturn(self.stack)"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        st_set \u003d self.stack.state_set"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAT3%2F%2F5Ck%3D","line":329,"in_reply_to":"AAAAT3%2F%2F6ac%3D","updated":"2013-12-27 20:02:17.000000000","message":"this is required change.","commit_id":"4b668d4209aac87762e1b40043d0cf675a2c9683"}]}
