)]}'
{"mistral/tests/unit/engine/test_commands.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"4529b1331385b1c122a3157c86cc5eea555275b5","unresolved":false,"context_lines":[{"line_number":410,"context_line":"        workflows:"},{"line_number":411,"context_line":"          wf:"},{"line_number":412,"context_line":"            type: direct"},{"line_number":413,"context_line":"            input:"},{"line_number":414,"context_line":"              - my_var"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            tasks:"},{"line_number":417,"context_line":"             task1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_f6f78ad0","line":414,"range":{"start_line":413,"start_character":0,"end_line":414,"end_character":22},"updated":"2016-02-08 16:24:31.000000000","message":"\"input\" section is not needed here.","commit_id":"14ff4bd1f421f4979e36d5c918cc0b662d6caa62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"4529b1331385b1c122a3157c86cc5eea555275b5","unresolved":false,"context_lines":[{"line_number":423,"context_line":""},{"line_number":424,"context_line":"        wb_service.create_workbook_v2(wb_only_with_msg)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb1.wf\u0027, {\u0027my_var\u0027: 1})"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        self._await(lambda: self.is_execution_error(wf_ex.id))"},{"line_number":429,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_1625865a","line":426,"range":{"start_line":426,"start_character":54,"end_line":426,"end_character":69},"updated":"2016-02-08 16:24:31.000000000","message":"See comment above","commit_id":"14ff4bd1f421f4979e36d5c918cc0b662d6caa62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"4529b1331385b1c122a3157c86cc5eea555275b5","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        workflows:"},{"line_number":448,"context_line":"          wf:"},{"line_number":449,"context_line":"            type: direct"},{"line_number":450,"context_line":"            input:"},{"line_number":451,"context_line":"              - my_var"},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"            tasks:"},{"line_number":454,"context_line":"             task1:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_36b682f9","line":451,"range":{"start_line":450,"start_character":12,"end_line":451,"end_character":22},"updated":"2016-02-08 16:24:31.000000000","message":"ditto","commit_id":"14ff4bd1f421f4979e36d5c918cc0b662d6caa62"},{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"4529b1331385b1c122a3157c86cc5eea555275b5","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        wb_service.create_workbook_v2(wb_only_with_when)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb1.wf\u0027, {\u0027my_var\u0027: 1})"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        self._await(lambda: self.is_execution_error(wf_ex.id))"},{"line_number":466,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_56a45eb8","line":463,"range":{"start_line":463,"start_character":56,"end_line":463,"end_character":69},"updated":"2016-02-08 16:24:31.000000000","message":"ditto","commit_id":"14ff4bd1f421f4979e36d5c918cc0b662d6caa62"},{"author":{"_account_id":5558,"name":"Winson Chan","email":"wcchan@stackstorm.com","username":"winson-c-chan"},"change_message_id":"4bcbda87a0310330f197aaa6dbef196623af294a","unresolved":false,"context_lines":[{"line_number":330,"context_line":"      task1:"},{"line_number":331,"context_line":"        action: std.echo output\u003d\u00271\u0027"},{"line_number":332,"context_line":"        on-complete:"},{"line_number":333,"context_line":"        - fail(msg\u003d\u0027my_var value is 1\u0027): \u003c% $.my_var \u003d 1 %\u003e"},{"line_number":334,"context_line":"        - succeed(msg\u003d\u0027my_var value is 2\u0027): \u003c% $.my_var \u003d 2 %\u003e"},{"line_number":335,"context_line":"        - pause(msg\u003d\u0027my_var value is 3\u0027): \u003c% $.my_var \u003d 3 %\u003e"},{"line_number":336,"context_line":"        - task2"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_f2971de9","line":333,"updated":"2016-05-25 01:11:57.000000000","message":"Is this how we decided to pass input args to task in task transition?  The example given in the bp at launchpad was just an example. Will we allow the same pattern for passing input args to other user defined tasks?","commit_id":"18babace9c3c819e1162db1b1bdccf0052d084de"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def test_fail(self):"},{"line_number":350,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb.wf\u0027, {\u0027my_var\u0027: 1})"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        self._await(lambda: self.is_execution_error(wf_ex.id))"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":355,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_4683cf04","line":352,"range":{"start_line":352,"start_character":8,"end_line":352,"end_character":62},"updated":"2016-05-30 08:38:53.000000000","message":"There\u0027s now method await_execution_error (and other similar methods) so we don\u0027t have to use lambdas all the time.\n\nIt\u0027s not critical but if you decide to send another patchset you can fix it.","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":365,"context_line":"    def test_succeed(self):"},{"line_number":366,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb.wf\u0027, {\u0027my_var\u0027: 2})"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        self._await(lambda: self.is_execution_success(wf_ex.id))"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":371,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_a6727b47","line":368,"range":{"start_line":368,"start_character":8,"end_line":368,"end_character":19},"updated":"2016-05-30 08:38:53.000000000","message":"Same as above.","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":381,"context_line":"    def test_pause(self):"},{"line_number":382,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb.wf\u0027, {\u0027my_var\u0027: 3})"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        self._await(lambda: self.is_execution_paused(wf_ex.id))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":387,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_269deb59","line":384,"range":{"start_line":384,"start_character":8,"end_line":384,"end_character":19},"updated":"2016-05-30 08:38:53.000000000","message":"Same as above.","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    def test_fail(self):"},{"line_number":432,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb.wf\u0027, {\u0027my_var\u0027: 1})"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        self._await(lambda: self.is_execution_error(wf_ex.id))"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":437,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_c6ae9f84","line":434,"range":{"start_line":434,"start_character":8,"end_line":434,"end_character":19},"updated":"2016-05-30 08:38:53.000000000","message":"Same","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":447,"context_line":"    def test_succeed(self):"},{"line_number":448,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb.wf\u0027, {\u0027my_var\u0027: 2})"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        self._await(lambda: self.is_execution_success(wf_ex.id))"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":453,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_06b707d9","line":450,"range":{"start_line":450,"start_character":8,"end_line":450,"end_character":19},"updated":"2016-05-30 08:38:53.000000000","message":"Same","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":463,"context_line":"    def test_pause(self):"},{"line_number":464,"context_line":"        wf_ex \u003d self.engine.start_workflow(\u0027my_wb.wf\u0027, {\u0027my_var\u0027: 3})"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        self._await(lambda: self.is_execution_paused(wf_ex.id))"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"        wf_ex \u003d db_api.get_workflow_execution(wf_ex.id)"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_26b4cbcf","line":466,"range":{"start_line":466,"start_character":8,"end_line":466,"end_character":19},"updated":"2016-05-30 08:38:53.000000000","message":"Same","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"}],"mistral/workbook/types.py":[{"author":{"_account_id":8592,"name":"Anastasia Kuznetsova","email":"akuznetsova@mirantis.com","username":"nastya-kuz"},"change_message_id":"4529b1331385b1c122a3157c86cc5eea555275b5","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    \"oneOf\": ["},{"line_number":108,"context_line":"        NONEMPTY_STRING,"},{"line_number":109,"context_line":"        YAQL_CONDITION,"},{"line_number":110,"context_line":"        RESERVED_CMD"},{"line_number":111,"context_line":"    ]"},{"line_number":112,"context_line":"}"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_d952ba66","line":110,"updated":"2016-02-08 16:24:31.000000000","message":"I am not sure that we need to add RESERVED_CMD to this type. What do you think about creating one more separate type:\n\nNEW_TYPE\u003d {\n   \"oneOf\": [\n      UNIQUE_STRING_OR_YAQL_CONDITION_LIST,\n      RESERVED_CMD\n    ]\n}\n\nBecause I think that RESERVED_CMD is quite narrowly specific type.","commit_id":"14ff4bd1f421f4979e36d5c918cc0b662d6caa62"}],"mistral/workbook/v2/task_defaults.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"708ebfdae8e6116aae759714d2176c82d498d8f1","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        [self.validate_yaql_expr(t)"},{"line_number":88,"context_line":"         for t in ([val] if isinstance(val, six.string_types) else val)]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _transform_task_clause(self, clause):"},{"line_number":91,"context_line":"        task_list_of_tuples \u003d self._as_list_of_tuples(clause)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        for i, t in enumerate(task_list_of_tuples):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_8dd0afca","line":90,"range":{"start_line":90,"start_character":8,"end_line":90,"end_character":30},"updated":"2016-05-23 04:41:20.000000000","message":"This is a duplicate of the method in tasks.py. Please refactor to get rid of one of them.","commit_id":"2bf076c30b0db81130f1586e55d6cfdb9e0568cd"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"8ff74a39f9efa3e66fff7ad1f523a8f177ee9208","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from mistral.workbook import types"},{"line_number":19,"context_line":"from mistral.workbook.v2 import base"},{"line_number":20,"context_line":"from mistral.workbook.v2 import policies"},{"line_number":21,"context_line":"from mistral.workbook.v2.tasks import \\"},{"line_number":22,"context_line":"    DirectWorkflowTaskSpec as direct_wf_ts"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_12378ae4","line":21,"range":{"start_line":21,"start_character":38,"end_line":21,"end_character":39},"updated":"2016-05-27 04:46:20.000000000","message":"There was a requirement (I need to find a link) that we should always import modules, not classes. And it\u0027s forbidden to use back slashes to break lines.","commit_id":"18babace9c3c819e1162db1b1bdccf0052d084de"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"8ff74a39f9efa3e66fff7ad1f523a8f177ee9208","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            \u0027pause-before\u0027,"},{"line_number":70,"context_line":"            \u0027concurrency\u0027"},{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        self._on_complete \u003d direct_wf_ts.process_tuples_of_task_clause("},{"line_number":73,"context_line":"            self._as_list_of_tuples(\u0027on-complete\u0027)"},{"line_number":74,"context_line":"        )"},{"line_number":75,"context_line":"        self._on_success \u003d direct_wf_ts.process_tuples_of_task_clause("}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_523112ec","line":72,"range":{"start_line":72,"start_character":28,"end_line":72,"end_character":40},"updated":"2016-05-27 04:46:20.000000000","message":"You can just import module and assign class DirectWorkflowTaskSpec to some variable for conciseness, e.g. \"cls\"","commit_id":"18babace9c3c819e1162db1b1bdccf0052d084de"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            \u0027pause-before\u0027,"},{"line_number":72,"context_line":"            \u0027concurrency\u0027"},{"line_number":73,"context_line":"        )"},{"line_number":74,"context_line":"        self._on_complete \u003d direct_wf_ts.process_tuples_of_task_clause("},{"line_number":75,"context_line":"            self._as_list_of_tuples(\u0027on-complete\u0027)"},{"line_number":76,"context_line":"        )"},{"line_number":77,"context_line":"        self._on_success \u003d direct_wf_ts.process_tuples_of_task_clause("}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_460d8f8f","line":74,"range":{"start_line":74,"start_character":41,"end_line":74,"end_character":70},"updated":"2016-05-30 08:38:53.000000000","message":"Honestly, I don\u0027t like this name \"process_tuples_of_task_clause\". I doesn\u0027t tell much when you read it (how process? what clause? why tuples?) and it\u0027s too long.\n\nMaybe an alternative could be \"process_on_clause\" or \"prepare_on_clause\" ? Word \"task\" is redundant because it\u0027s in the context of task spec. Word \"tuple\" is redundant because we ideally should never mention data types in names (data types may be changing rapidly during refactoring etc.)\n\nI suggest we rename it moving forward. Ok to address it in a separate patch.","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"}],"mistral/workbook/v2/tasks.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":269,"context_line":"         for t in ([val] if isinstance(val, six.string_types) else val)]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    @staticmethod"},{"line_number":272,"context_line":"    def process_tuples_of_task_clause(list_of_tuples):"},{"line_number":273,"context_line":"        for i, task in enumerate(list_of_tuples):"},{"line_number":274,"context_line":"            task_name, params \u003d DirectWorkflowTaskSpec._parse_cmd_and_input("},{"line_number":275,"context_line":"                task[0]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_c6fdff3b","line":272,"range":{"start_line":272,"start_character":8,"end_line":272,"end_character":37},"updated":"2016-05-30 08:38:53.000000000","message":"Same comment as in task_defaults.py. Method name doesn\u0027t look good to me.","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"}],"mistral/workflow/commands.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"708ebfdae8e6116aae759714d2176c82d498d8f1","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    cmd_cls \u003d get_command_class(cmd_name) or RunTask"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    if issubclass(cmd_cls, SetWorkflowState):"},{"line_number":152,"context_line":"        return cmd_cls(wf_ex, task_spec, ctx, ctx.get(\u0027msg\u0027))"},{"line_number":153,"context_line":"    else:"},{"line_number":154,"context_line":"        return cmd_cls(wf_ex, task_spec, ctx)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_0d495fd0","line":152,"range":{"start_line":152,"start_character":46,"end_line":152,"end_character":60},"updated":"2016-05-23 04:41:20.000000000","message":"Let\u0027s make SetWorkflowState extract \u0027msg\u0027 param in initializer. That way we don\u0027t have to have any special handling here.","commit_id":"2bf076c30b0db81130f1586e55d6cfdb9e0568cd"}],"mistral/workflow/direct_workflow.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"708ebfdae8e6116aae759714d2176c82d498d8f1","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            )"},{"line_number":309,"context_line":"        )"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    def _publish_args_for_next_task(self, task_ex):"},{"line_number":312,"context_line":"        t_state \u003d task_ex.state"},{"line_number":313,"context_line":"        t_name \u003d task_ex.name"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_4d636742","line":311,"range":{"start_line":311,"start_character":8,"end_line":311,"end_character":35},"updated":"2016-05-23 04:41:20.000000000","message":"Can you explain the idea of this method? I don\u0027t understand why workflow controller publishes something into context. By design, it should not do it because its only responsibility is to compare workflow definition with actual workflow persistent state and answer the question \"what\u0027s next?\".","commit_id":"2bf076c30b0db81130f1586e55d6cfdb9e0568cd"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"252cf326f35045382e75bfd2e14f80f81f9ba7a6","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def _find_next_task_names(self, task_ex):"},{"line_number":186,"context_line":"        return [t[0] for t in self._find_next_task_names_and_params(task_ex)]"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _find_next_task_names_and_params(self, task_ex):"},{"line_number":189,"context_line":"        t_state \u003d task_ex.state"},{"line_number":190,"context_line":"        t_name \u003d task_ex.name"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_a4cb9352","line":188,"range":{"start_line":188,"start_character":8,"end_line":188,"end_character":40},"updated":"2016-05-30 08:38:53.000000000","message":"I think we could just rename it to just _find_next_tasks(). What exactly it should return (names and params) could be just specified in docstrings (\":return\") and be understandable from method logic.\n\nOtherwise, we may want to return something else besides names and params and we\u0027ll have to change method name.","commit_id":"2714cb574975bc92e46d68a7b26b1bc7fed7239f"}]}
