)]}'
{"mistral/engine/workflow_handler.py":[{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        wf.stop(state, msg)"},{"line_number":56,"context_line":"    except exc.MistralException:"},{"line_number":57,"context_line":"        # TODO(rakhmerov):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def fail_workflow(wf_ex, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_ed90faee","line":59,"range":{"start_line":56,"start_character":0,"end_line":59,"end_character":12},"updated":"2016-06-06 13:36:52.000000000","message":"Soft: I see that this is TODO, but why not just log the exception for now instead of pass?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    try:"},{"line_number":55,"context_line":"        wf.stop(state, msg)"},{"line_number":56,"context_line":"    except exc.MistralException:"},{"line_number":57,"context_line":"        # TODO(rakhmerov):"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def fail_workflow(wf_ex, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_f4aed796","line":59,"range":{"start_line":56,"start_character":0,"end_line":59,"end_character":12},"in_reply_to":"7aa08908_ed90faee","updated":"2016-06-07 11:36:15.000000000","message":"Ok, I\u0027ll add it.","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    try:"},{"line_number":75,"context_line":"        wf.on_task_complete(task_ex)"},{"line_number":76,"context_line":"    except exc.MistralException:"},{"line_number":77,"context_line":"        # TODO(rakhmerov):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def pause_workflow(wf_ex, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_8db69688","line":79,"range":{"start_line":76,"start_character":0,"end_line":79,"end_character":12},"updated":"2016-06-06 13:36:52.000000000","message":"ditto","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    try:"},{"line_number":75,"context_line":"        wf.on_task_complete(task_ex)"},{"line_number":76,"context_line":"    except exc.MistralException:"},{"line_number":77,"context_line":"        # TODO(rakhmerov):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        pass"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def pause_workflow(wf_ex, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_34917f53","line":79,"range":{"start_line":76,"start_character":0,"end_line":79,"end_character":12},"in_reply_to":"7aa08908_8db69688","updated":"2016-06-07 11:36:15.000000000","message":"Ok","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"332257e1eb2d059beb98bda42c93b8f91a18db70","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    # TODO(rakhmerov): Refactor, move most of it to Workflow."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def resume_workflow(wf_ex, env\u003dNone):"},{"line_number":113,"context_line":"    if (not states.is_paused(wf_ex.state) and"},{"line_number":114,"context_line":"            not states.is_idle(wf_ex.state)):"},{"line_number":115,"context_line":"        return wf_ex.get_clone()"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_8c17a650","line":112,"updated":"2016-06-06 16:26:06.000000000","message":"What is the difference between rerun and resume? We can rerun wf from the task where is was paused and we got resume actions, don\u0027t we?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    # TODO(rakhmerov): Refactor, move most of it to Workflow."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def resume_workflow(wf_ex, env\u003dNone):"},{"line_number":113,"context_line":"    if (not states.is_paused(wf_ex.state) and"},{"line_number":114,"context_line":"            not states.is_idle(wf_ex.state)):"},{"line_number":115,"context_line":"        return wf_ex.get_clone()"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_74c4a75e","line":112,"in_reply_to":"7aa08908_8c17a650","updated":"2016-06-07 11:36:15.000000000","message":"Well, yes, they are similar but not the same. In case of rerun we shouldn\u0027t be resuming all tasks that paused/failed. We just need to clean up one given task and rerun it, so essentially we\u0027re rerunning one branch vs multiple branches in case of resume. That\u0027s why inside wf.continue_workflow(env\u003denv) we have to pass task_ex and reset to workflow controller. In case if task_ex is given it won\u0027t be doing a regular search of next workflow tasks, it will just take that one task and make analysis based on it. Btw, I don\u0027t like this place because I think it should be rather one more method on workflow controller (rerun_task) instead of having this weird if condition in continue_workflow(). I\u0027ll refactor that too but not in this patch.","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def resume_workflow(wf_ex, env\u003dNone):"},{"line_number":113,"context_line":"    if (not states.is_paused(wf_ex.state) and"},{"line_number":114,"context_line":"            not states.is_idle(wf_ex.state)):"},{"line_number":115,"context_line":"        return wf_ex.get_clone()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    wf \u003d workflows.Workflow("}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_2d7e82e4","line":114,"range":{"start_line":113,"start_character":7,"end_line":114,"end_character":45},"updated":"2016-06-06 13:36:52.000000000","message":"Soft: Why not create new method in states.py like \u0027is_paused_or_idle\u0027 and use it here?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def resume_workflow(wf_ex, env\u003dNone):"},{"line_number":113,"context_line":"    if (not states.is_paused(wf_ex.state) and"},{"line_number":114,"context_line":"            not states.is_idle(wf_ex.state)):"},{"line_number":115,"context_line":"        return wf_ex.get_clone()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    wf \u003d workflows.Workflow("}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_54fa4bbe","line":114,"range":{"start_line":113,"start_character":7,"end_line":114,"end_character":45},"in_reply_to":"7aa08908_2d7e82e4","updated":"2016-06-07 11:36:15.000000000","message":"Ok","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":159,"context_line":"def set_workflow_state(wf_ex, state, msg\u003dNone):"},{"line_number":160,"context_line":"    if states.is_completed(state):"},{"line_number":161,"context_line":"        stop_workflow(wf_ex, state, msg)"},{"line_number":162,"context_line":"    elif state \u003d\u003d states.PAUSED:"},{"line_number":163,"context_line":"        pause_workflow(wf_ex, msg)"},{"line_number":164,"context_line":"    else:"},{"line_number":165,"context_line":"        raise exc.MistralError("}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_e35f690c","line":162,"range":{"start_line":162,"start_character":9,"end_line":162,"end_character":31},"updated":"2016-06-06 13:36:52.000000000","message":"Soft: states.is_paused(state) should be use to be consistent with rest of this file","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":159,"context_line":"def set_workflow_state(wf_ex, state, msg\u003dNone):"},{"line_number":160,"context_line":"    if states.is_completed(state):"},{"line_number":161,"context_line":"        stop_workflow(wf_ex, state, msg)"},{"line_number":162,"context_line":"    elif state \u003d\u003d states.PAUSED:"},{"line_number":163,"context_line":"        pause_workflow(wf_ex, msg)"},{"line_number":164,"context_line":"    else:"},{"line_number":165,"context_line":"        raise exc.MistralError("}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_9404b3c0","line":162,"range":{"start_line":162,"start_character":9,"end_line":162,"end_character":31},"in_reply_to":"7aa08908_e35f690c","updated":"2016-06-07 11:36:15.000000000","message":"Ok, fully agree.","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"aac715afd33326f658b933533f34c208f7b7f47a","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def resume_workflow(wf_ex, env\u003dNone):"},{"line_number":113,"context_line":"    if states.is_paused_or_idle(wf_ex.state):"},{"line_number":114,"context_line":"        return wf_ex.get_clone()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    wf \u003d workflows.Workflow("}],"source_content_type":"text/x-python","patch_set":28,"id":"7aa08908_85947be2","line":113,"range":{"start_line":113,"start_character":7,"end_line":113,"end_character":44},"updated":"2016-06-07 06:49:08.000000000","message":"You forgot \u0027not\u0027 at the beginning and it changes logic compare with patch 27","commit_id":"edd9e7776824c47c5095c92744f1d03a08790541"}],"mistral/engine/workflows.py":[{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        dispatcher.dispatch_workflow_commands(self.wf_ex, cmds)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def stop(self, state\u003dstates.PAUSED, msg\u003dNone):"},{"line_number":87,"context_line":"        \"\"\"Stop workflow."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        :param state: New workflow state."}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_5e0e1635","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":50},"updated":"2016-06-06 13:36:52.000000000","message":"Is it intended that with default value of \u0027state\u0027 this method would do nothing? If so, it should be described in comment. \n\nAnd if not, maybe state should have another default value, or no default value at all?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        dispatcher.dispatch_workflow_commands(self.wf_ex, cmds)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def stop(self, state\u003dstates.PAUSED, msg\u003dNone):"},{"line_number":87,"context_line":"        \"\"\"Stop workflow."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        :param state: New workflow state."}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_f4ea57ab","line":86,"range":{"start_line":86,"start_character":4,"end_line":86,"end_character":50},"in_reply_to":"7aa08908_5e0e1635","updated":"2016-06-07 11:36:15.000000000","message":"Hm, this is good point. I think that actually came from the old code base but it\u0027s not an excuse for me.\n\nI\u0027ll fix it, good catch!","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"332257e1eb2d059beb98bda42c93b8f91a18db70","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                )"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            return self._succeed_workflow(final_context, msg)"},{"line_number":106,"context_line":"        elif state \u003d\u003d states.ERROR:"},{"line_number":107,"context_line":"            return self._fail_workflow(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def on_task_complete(self, task_ex):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_11bc7104","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":12},"updated":"2016-06-06 16:26:06.000000000","message":"I don\u0027t understand why there are only two branches in this \"if\", there are more wf states? Who can call this method that he knows only about two states?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                )"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            return self._succeed_workflow(final_context, msg)"},{"line_number":106,"context_line":"        elif state \u003d\u003d states.ERROR:"},{"line_number":107,"context_line":"            return self._fail_workflow(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def on_task_complete(self, task_ex):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_94e673b2","line":106,"range":{"start_line":106,"start_character":8,"end_line":106,"end_character":12},"in_reply_to":"7aa08908_11bc7104","updated":"2016-06-07 11:36:15.000000000","message":"Only SUCCESS and ERROR are terminal states. Others are not considered such, even PAUSED. This method is for switching a workflow into a terminal state. I\u0027m actually planning to add a number of \"assert\" statements across the code so that we validate method parameters (contract-based programming). But I wanted to do it in a separate patch.","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        elif state \u003d\u003d states.ERROR:"},{"line_number":107,"context_line":"            return self._fail_workflow(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def on_task_complete(self, task_ex):"},{"line_number":110,"context_line":"        \"\"\"Handle task completion event."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        :param task_ex: Task execution that\u0027s completed."}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_9eacfeee","line":109,"range":{"start_line":109,"start_character":31,"end_line":109,"end_character":38},"updated":"2016-06-06 13:36:52.000000000","message":"Soft: task_ex is not used","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        elif state \u003d\u003d states.ERROR:"},{"line_number":107,"context_line":"            return self._fail_workflow(msg)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def on_task_complete(self, task_ex):"},{"line_number":110,"context_line":"        \"\"\"Handle task completion event."},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        :param task_ex: Task execution that\u0027s completed."}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_34221f02","line":109,"range":{"start_line":109,"start_character":31,"end_line":109,"end_character":38},"in_reply_to":"7aa08908_9eacfeee","updated":"2016-06-07 11:36:15.000000000","message":"Yes, this is ok because we show here that logically task is completed and here\u0027s its execution object. I actually may add some logic that will be using this parameter.","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":19206,"name":"Dawid Deja","email":"dawdej@gmail.com","username":"ddeja"},"change_message_id":"44a9f4e44b557800df23c573ac7d5230e116ce42","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        :param task_ex: Task execution that the workflow needs to rerun from."},{"line_number":129,"context_line":"        :param env: Environment."},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        # TODO(rakhmerov): Do we need both methods resume and rerun or we can"},{"line_number":132,"context_line":"        # combine into one?"},{"line_number":133,"context_line":"        # TODO(rakhmerov): Implement."},{"line_number":134,"context_line":"        raise NotImplementedError"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_7e5832fb","line":132,"range":{"start_line":131,"start_character":8,"end_line":132,"end_character":27},"updated":"2016-06-06 13:36:52.000000000","message":"I guess that both method would look similar, so it is safe to combine them as one. Or resume could only do:\n\nreturn self.rerun(None, env)","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"332257e1eb2d059beb98bda42c93b8f91a18db70","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"            wf_trace.info("},{"line_number":175,"context_line":"                self.wf_ex,"},{"line_number":176,"context_line":"                \"Execution of workflow \u0027%s\u0027 [%s -\u003e %s]\""},{"line_number":177,"context_line":"                % (self.wf_ex.workflow_name, cur_state, state)"},{"line_number":178,"context_line":"            )"},{"line_number":179,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_2c91529a","line":176,"range":{"start_line":176,"start_character":17,"end_line":176,"end_character":38},"updated":"2016-06-06 16:26:06.000000000","message":"Soft: maybe it would be better to say \"Changing of \u0027%s\u0027 wf state  [%s -\u003e %s]\" ?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"332257e1eb2d059beb98bda42c93b8f91a18db70","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            self._schedule_send_result_to_parent_workflow()"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def _fail_workflow(self, msg):"},{"line_number":257,"context_line":"        if states.is_paused_or_completed(self.wf_ex.state):"},{"line_number":258,"context_line":"            return"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        self.set_state(states.ERROR, state_info\u003dmsg)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_2cdcb211","line":258,"range":{"start_line":257,"start_character":8,"end_line":258,"end_character":18},"updated":"2016-06-06 16:26:06.000000000","message":"Why do we need this check again? Take a look at lines 217-218","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":7700,"name":"Nikolay Mahotkin","email":"nikolay.makhotkin@gmail.com","username":"nmakhotkin"},"change_message_id":"fed9e02128d273cbd2705078f3890cdd60f8a59f","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            parent_wf.lock()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"            parent_wf.set_state(state)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # TODO(rakhmerov): It\u0027d be better to use instance of Task here."},{"line_number":212,"context_line":"            parent_task_ex.state \u003d state"}],"source_content_type":"text/x-python","patch_set":33,"id":"7aa08908_542fddf5","line":209,"range":{"start_line":209,"start_character":12,"end_line":209,"end_character":38},"updated":"2016-06-07 09:48:50.000000000","message":"Shouldn\u0027t we pass flag \u0027recursive\u0027 to next \u0027set_state\u0027?","commit_id":"8da18e7b5d74e8d18c86c020e6d249590846abc5"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"125b8416c24e38ecf48045db8655e1f634e2c03b","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"            parent_wf.lock()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"            parent_wf.set_state(state)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"            # TODO(rakhmerov): It\u0027d be better to use instance of Task here."},{"line_number":212,"context_line":"            parent_task_ex.state \u003d state"}],"source_content_type":"text/x-python","patch_set":33,"id":"7aa08908_1455551c","line":209,"range":{"start_line":209,"start_character":12,"end_line":209,"end_character":38},"in_reply_to":"7aa08908_542fddf5","updated":"2016-06-07 09:53:31.000000000","message":"Yes, good catch.","commit_id":"8da18e7b5d74e8d18c86c020e6d249590846abc5"},{"author":{"_account_id":7700,"name":"Nikolay Mahotkin","email":"nikolay.makhotkin@gmail.com","username":"nmakhotkin"},"change_message_id":"fed9e02128d273cbd2705078f3890cdd60f8a59f","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if not cmds:"},{"line_number":240,"context_line":"            self.check_workflow_completion()"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def check_workflow_completion(self):"},{"line_number":243,"context_line":"        if states.is_paused_or_completed(self.wf_ex.state):"},{"line_number":244,"context_line":"            return"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"7aa08908_54087d91","line":242,"range":{"start_line":242,"start_character":7,"end_line":242,"end_character":33},"updated":"2016-06-07 09:48:50.000000000","message":"I think the name of this method doesn\u0027t reflect what it is doing. Actually, it doesn\u0027t only check workflow completion, it decides how to finish workflow (err or succeed it) in case of completion.","commit_id":"8da18e7b5d74e8d18c86c020e6d249590846abc5"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"125b8416c24e38ecf48045db8655e1f634e2c03b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if not cmds:"},{"line_number":240,"context_line":"            self.check_workflow_completion()"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def check_workflow_completion(self):"},{"line_number":243,"context_line":"        if states.is_paused_or_completed(self.wf_ex.state):"},{"line_number":244,"context_line":"            return"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"7aa08908_872475af","line":242,"range":{"start_line":242,"start_character":7,"end_line":242,"end_character":33},"in_reply_to":"7aa08908_54087d91","updated":"2016-06-07 09:53:31.000000000","message":"Yes, agree. I\u0027ll change it.","commit_id":"8da18e7b5d74e8d18c86c020e6d249590846abc5"}],"mistral/exceptions.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"332257e1eb2d059beb98bda42c93b8f91a18db70","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    like transaction rollback, deleting temporary files etc."},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    message \u003d \"An unknown exception occurred\""},{"line_number":31,"context_line":"    http_code \u003d 500"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, message\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_e65e46e8","line":30,"range":{"start_line":30,"start_character":27,"end_line":30,"end_character":35},"updated":"2016-06-06 16:26:06.000000000","message":"Probably there should be \"error\"?","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"30bd56fcdd4b3fa7af02b1c0ceb1d9a07ee35fa4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    like transaction rollback, deleting temporary files etc."},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    message \u003d \"An unknown exception occurred\""},{"line_number":31,"context_line":"    http_code \u003d 500"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def __init__(self, message\u003dNone):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7aa08908_cf74e49d","line":30,"range":{"start_line":30,"start_character":27,"end_line":30,"end_character":35},"in_reply_to":"7aa08908_e65e46e8","updated":"2016-06-07 11:36:15.000000000","message":"Yes!","commit_id":"095280b49b53008f3b8e1a9eb9ebc24980bef284"}]}
