)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"dfbf127aa900564ae7d1704c4037610861d99e1e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Dynamic workflow name evaluation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Evaluate workflow names dynamically, so zaql expression is now allowed in sub-workflow name."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa31d9ce_bf0b087c","line":9,"range":{"start_line":9,"start_character":40,"end_line":9,"end_character":44},"updated":"2017-02-15 08:19:42.000000000","message":"zaql -\u003e yaql\n\nAlso, keep in mind that we can also use jinja.","commit_id":"9d3804c2212c33bd8da383d15f3dda86c953172a"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"dfbf127aa900564ae7d1704c4037610861d99e1e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Dynamic workflow name evaluation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Evaluate workflow names dynamically, so zaql expression is now allowed in sub-workflow name."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"fa31d9ce_9f7f24df","line":10,"updated":"2017-02-15 08:19:42.000000000","message":"Please link with the blueprint.","commit_id":"9d3804c2212c33bd8da383d15f3dda86c953172a"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Dynamic workflow name evaluation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Evaluate workflow names dynamically, so zaql expression is now allowed in sub-workflow name."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ffe62b97_748c3b35","line":9,"range":{"start_line":9,"start_character":71,"end_line":9,"end_character":73},"updated":"2017-03-30 06:03:12.000000000","message":"Please try to keep lines within 80 chars.","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Dynamic workflow name evaluation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Evaluate workflow names dynamically, so zaql expression is now allowed in sub-workflow name."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ffe62b97_14b72ff7","line":9,"range":{"start_line":9,"start_character":40,"end_line":9,"end_character":44},"updated":"2017-03-30 06:03:12.000000000","message":"yaql","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Dynamic workflow name evaluation."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Evaluate workflow names dynamically, so zaql expression is now allowed in sub-workflow name."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ffe62b97_3497d33c","line":10,"updated":"2017-03-30 06:03:12.000000000","message":"Please link it to the blueprint  https://blueprints.launchpad.net/mistral/+spec/mistral-dynamic-actions","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"124be82d309a56bae853d5b81ee506f09f7e2351","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Evaluate workflow names dynamically, so yaql or jinja expression"},{"line_number":10,"context_line":"is allowed as sub-workflow name."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint: mistral-dynamic-actions"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"dfeb2761_9d3c09c9","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":9},"updated":"2017-04-04 07:09:39.000000000","message":"The proper format is either\n\nPartially implements: blueprint mistral-dynamic-actions\n\nor\n\nImplements: blueprint mistral-dynamic-actions\n\n\nBased on that gerrit may close the BP automatically.","commit_id":"aaface1418e0baa9eefe0480c4c9991bebb1beb6"},{"author":{"_account_id":20863,"name":"Sharat Sharma","email":"sharat.sharma@in.ibm.com","username":"sharat.sharma"},"change_message_id":"62f4e369f5dd46dc5192724ea74f679e5aa64bce","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Evaluate workflow names dynamically, so yaql or jinja expression"},{"line_number":10,"context_line":"is allowed as sub-workflow name."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"blueprint: mistral-dynamic-actions"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Icfe591e27a4f45c2e3dcfa83512217f3b2122189"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5ff73747_a7248f0e","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":9},"in_reply_to":"dfeb2761_9d3c09c9","updated":"2017-04-25 09:42:10.000000000","message":"+1","commit_id":"aaface1418e0baa9eefe0480c4c9991bebb1beb6"}],"doc/source/user/dsl_v2.rst":[{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":191,"context_line":"-  **action** - Name of the action associated with the task."},{"line_number":192,"context_line":"   *Mutually exclusive with* **workflow**. If neither action nor workflow are"},{"line_number":193,"context_line":"   provided then the action \u0027std.noop\u0027 will be used."},{"line_number":194,"context_line":"-  **workflow** - Name of the workflow associated with the task. It could be"},{"line_number":195,"context_line":"   static or evaluated from the given expression."},{"line_number":196,"context_line":"   *Mutually exclusive with* **action**."},{"line_number":197,"context_line":"-  **input** - Actual input parameter values of the task. *Optional*."},{"line_number":198,"context_line":"   Value of each parameter is a JSON-compliant type such as number,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_262010ac","line":195,"range":{"start_line":194,"start_character":68,"end_line":195,"end_character":9},"updated":"2017-08-15 15:03:49.000000000","message":"May be better: can be a static value or an expression (for example,  \"{{ _.subworkflow_name }}\" ).","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":200,"context_line":"   retrieve value from task context or any of the mentioned types"},{"line_number":201,"context_line":"   containing inline expressions (for example, string \"\u003c%"},{"line_number":202,"context_line":"   $.movie_name %\u003e is a cool movie!\") Additionally the whole input could"},{"line_number":203,"context_line":"   be an expression which evaluates to a JSON."},{"line_number":204,"context_line":"-  **publish** - Dictionary of variables to publish to the workflow"},{"line_number":205,"context_line":"   context. Any JSON-compatible data structure optionally containing"},{"line_number":206,"context_line":"   expression to select precisely what needs to be published."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_d197bc47","line":203,"updated":"2017-08-15 15:03:49.000000000","message":"proposal: can be an expression that evaluates to a JSON dictionary.","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Workflow"},{"line_number":232,"context_line":"\u0027\u0027\u0027\u0027\u0027\u0027\u0027\u0027"},{"line_number":233,"context_line":"It synchronously starts a sub-workflow with the given name."},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Example static workflow call:"},{"line_number":236,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_5192ac4d","line":233,"range":{"start_line":233,"start_character":0,"end_line":233,"end_character":3},"updated":"2017-08-15 15:03:49.000000000","message":"delete","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":237,"context_line":".. code-block:: mistral"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    my_task:"},{"line_number":240,"context_line":"      workflow: my_workflow"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"Example dynamic workflow selection:"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_51e06ccd","line":240,"range":{"start_line":240,"start_character":16,"end_line":240,"end_character":27},"updated":"2017-08-15 15:03:49.000000000","message":"name_of_my_workflow ?? Is this influenced by the namespacing feature?","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":".. code-block:: mistral"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    my_task:"},{"line_number":247,"context_line":"      workflow: \u003c% $.my_workflow %\u003e"},{"line_number":248,"context_line":"      input: \u003c% $.input_for_my_workflow %\u003e"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Note: Typical usage of dynamic workflow selection if user would like to do"},{"line_number":251,"context_line":"some common stuff before and after of any workflow. With dynamic sub-workflow"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_b13c382f","line":248,"range":{"start_line":246,"start_character":3,"end_line":248,"end_character":42},"updated":"2017-08-15 15:03:49.000000000","message":"Would be better to have a full workflow definition with my_workflow input with default value. I think, the input part can be deleted from here as it is detailed later.","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":247,"context_line":"      workflow: \u003c% $.my_workflow %\u003e"},{"line_number":248,"context_line":"      input: \u003c% $.input_for_my_workflow %\u003e"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"Note: Typical usage of dynamic workflow selection if user would like to do"},{"line_number":251,"context_line":"some common stuff before and after of any workflow. With dynamic sub-workflow"},{"line_number":252,"context_line":"selection feature user could write frame workflow easily which could"},{"line_number":253,"context_line":"encapsulate any sub-workflow task."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"Policies"},{"line_number":256,"context_line":"\u0027\u0027\u0027\u0027\u0027\u0027\u0027\u0027"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_113ae4e5","line":253,"range":{"start_line":250,"start_character":0,"end_line":253,"end_character":34},"updated":"2017-08-15 15:03:49.000000000","message":"Note: Typical use for the dynamic workflow selection is when parts of a workflow can be customized. E.g. collect some weather data and then execute some custom workflow on it.\n\n  weather_data:\n    action: std.http url\u003d\"http://get.example.weather/data\"\n    publish:\n      weather_data: \u003c% task(weather_data).result%\u003e\n\n  do_magic:\n    workflow: \u003c% $.magic_workflow_name %\u003e\n    input: \u003c% $.weather_data %\u003e","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":360,"context_line":""},{"line_number":361,"context_line":".. code-block:: mistral"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    my_task:"},{"line_number":364,"context_line":"      action: std.http"},{"line_number":365,"context_line":"      input: \u003c% $.http_request_parameters %\u003e"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"The same rules apply to tasks associated with workflows."}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_8c347bdf","line":365,"range":{"start_line":363,"start_character":0,"end_line":365,"end_character":44},"updated":"2017-08-15 15:03:49.000000000","message":"Would be great to show the whole workflow definition with a default value for http_request_parameters.","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":391,"context_line":"    my_task:"},{"line_number":392,"context_line":"      workflow: std.http"},{"line_number":393,"context_line":"      input: \u003c% $.http_request_parameters %\u003e"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"**NOTE**: It\u0027s also possible to merge these two approaches and specify a part"},{"line_number":396,"context_line":"of parameters using simplified key-value pairs syntax and using keyword *input*."},{"line_number":397,"context_line":"In this case all the parameters will be effectively merged. If the same"}],"source_content_type":"text/x-rst","patch_set":12,"id":"9f436f4f_6c5dd713","line":394,"updated":"2017-08-15 15:03:49.000000000","message":"Emphasize that the http_request_parameters must be a map.","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"}],"mistral/engine/actions.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def __init__(self, wf_name, **kwargs):"},{"line_number":460,"context_line":"        super(WorkflowAction, self).__init__(None, **kwargs)"},{"line_number":461,"context_line":"        self.wf_name \u003d wf_name"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    @profiler.trace(\u0027workflow-action-complete\u0027, hide_args\u003dTrue)"},{"line_number":464,"context_line":"    def complete(self, result):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_6f010405","line":461,"range":{"start_line":461,"start_character":13,"end_line":461,"end_character":20},"updated":"2017-03-30 06:03:12.000000000","message":"May be we should explicitly call this variable \"wf_spec_name\" because there can be slightly different names: fully qualified name containing workbook name) and name as it\u0027s exposed in the DSL. For the method resolve_workflow_definition() on line 477 it\u0027s very important to take exactly the latter. Please think how to make it clearer.","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    def __init__(self, wf_name, **kwargs):"},{"line_number":460,"context_line":"        super(WorkflowAction, self).__init__(None, **kwargs)"},{"line_number":461,"context_line":"        self.wf_name \u003d wf_name"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    @profiler.trace(\u0027workflow-action-complete\u0027, hide_args\u003dTrue)"},{"line_number":464,"context_line":"    def complete(self, result):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_7408bb90","line":461,"updated":"2017-03-30 06:03:12.000000000","message":"Soft: we usually put a blank line after a call to a super class.","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"}],"mistral/engine/tasks.py":[{"author":{"_account_id":9408,"name":"Michal Gershenzon","email":"michal.gershenzon@gmail.com","username":"Mgershen"},"change_message_id":"c8b22844bf73362c908bf811cea6199eec5486f5","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        wf_name \u003d self.task_spec.get_workflow_name()"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"        if wf_name:"},{"line_number":397,"context_line":"            return actions.WorkflowAction(wf_name\u003dself._evaluate_expression(wf_name),"},{"line_number":398,"context_line":"                                          task_ex\u003dself.task_ex)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        if not action_name:"},{"line_number":401,"context_line":"            action_name \u003d \u0027std.noop\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_18dfcad9","line":398,"range":{"start_line":397,"start_character":0,"end_line":398,"end_character":63},"updated":"2017-02-15 09:23:45.000000000","message":"should be \n            return actions.WorkflowAction(\n                wf_name\u003dself._evaluate_expression(wf_name),\n                task_ex\u003dself.task_ex\n            )","commit_id":"9d3804c2212c33bd8da383d15f3dda86c953172a"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":383,"context_line":"            self.wf_ex.context,"},{"line_number":384,"context_line":"            self.wf_ex.input"},{"line_number":385,"context_line":"        )"},{"line_number":386,"context_line":"        input_dict \u003d expr.evaluate_recursively("},{"line_number":387,"context_line":"            expression,"},{"line_number":388,"context_line":"            ctx_view"},{"line_number":389,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_5467f74d","line":386,"range":{"start_line":386,"start_character":8,"end_line":386,"end_character":18},"updated":"2017-03-30 06:03:12.000000000","message":"Why is it called \u0027input_dict\u0027? I guess it\u0027s just left after refactoring by mistake.\n\nI\u0027d get rid of this variable at all and just return a result of  expr.evaluate_recursively() immediately. I think in this case it would even fit into one line.","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            expression,"},{"line_number":388,"context_line":"            ctx_view"},{"line_number":389,"context_line":"        )"},{"line_number":390,"context_line":"        return input_dict"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def _build_action(self):"},{"line_number":393,"context_line":"        action_name \u003d self.task_spec.get_action_name()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_547ed7e3","line":390,"range":{"start_line":390,"start_character":8,"end_line":390,"end_character":14},"updated":"2017-03-30 06:03:12.000000000","message":"Soft: we usually put a blank line before \u0027return\u0027","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":23211,"name":"Kupai József","email":"jozsef.kupai@nokia.com","username":"kupsef"},"change_message_id":"6bd82274342d8ce09be379f054edc46a28e1f2a8","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        if not isinstance(input_dict, dict):"},{"line_number":422,"context_line":"            raise exc.InputException("},{"line_number":423,"context_line":"                \"Wrong dynamic input for task: %s. Dict type is expected. \""},{"line_number":424,"context_line":"                \"Actual value: %s\" % (self.task_spec.get_name(), input_dict)"},{"line_number":425,"context_line":"            )"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        return utils.merge_dicts("}],"source_content_type":"text/x-python","patch_set":13,"id":"9f436f4f_a6a509a4","line":424,"updated":"2017-08-16 08:40:21.000000000","message":"We could include the actual type as well.","commit_id":"ecd93718eaaf07f32bf96c52e984c5119848a267"}],"mistral/expressions/jinja_expression.py":[{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"7c54622c38afd3997787fac9a2c5abef284fc15c","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"ANY_JINJA_REGEXP \u003d \"{{.*}}|{%.*%}\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"JINJA_REGEXP \u003d \u0027({{(.*)}})\u0027"},{"line_number":33,"context_line":"JINJA_BLOCK_REGEXP \u003d \u0027({%(.*)%})\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"9f436f4f_a7fba7bb","line":30,"updated":"2017-08-17 10:06:04.000000000","message":"Missing comment blocks {# foo #} \n\nhttp://jinja.pocoo.org/docs/2.9/templates/#comments","commit_id":"ff78d7f65919d42e4afeaf13f16335a7bcf2a792"}],"mistral/lang/base.py":[{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"8ae7e9c2d3691aeb2bb0513796254e6fa53ae4d0","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from mistral import utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CMD_PTRN \u003d re.compile(\"^([\\w\\.]+[^\u003d\\(\\s\\\"]*|\u003c%.*%\u003e|{{.*}}|{%.*%})\")"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"EXPRESSION \u003d \u0027|\u0027.join([expr.patterns[name] for name in expr.patterns])"},{"line_number":31,"context_line":"_ALL_IN_BRACKETS \u003d \"\\[.*\\]\\s*\""}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_de180d1f","line":28,"range":{"start_line":28,"start_character":12,"end_line":28,"end_character":67},"updated":"2017-08-14 11:15:37.000000000","message":"While regex is great, it\u0027s practically write only (hard to interpret) Would be better if this string was reformulated from smaller building blocks. Check this for an example: https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2631f855c21b477a5f557dd7f3711cce5305ff72","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from mistral.lang import types"},{"line_number":25,"context_line":"from mistral import utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"ACTION_PATTRENS \u003d {"},{"line_number":28,"context_line":"    \"command\": \"[\\w\\.]+[^\u003d\\(\\s\\\"]*\","},{"line_number":29,"context_line":"    \"yaql_expression\": \"\u003c%.*%\u003e\","},{"line_number":30,"context_line":"    \"jinja_expression\": \"{{.*}}|{%.*%}\","}],"source_content_type":"text/x-python","patch_set":13,"id":"9f436f4f_269eb9b8","line":27,"updated":"2017-08-16 08:29:49.000000000","message":"I guess we must have these patterns somewhere else? Would it be better to not duplicate them?","commit_id":"ecd93718eaaf07f32bf96c52e984c5119848a267"}],"mistral/lang/v2/tasks.py":[{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"8ae7e9c2d3691aeb2bb0513796254e6fa53ae4d0","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \"input\": {"},{"line_number":54,"context_line":"                \"oneOf\": ["},{"line_number":55,"context_line":"                    types.NONEMPTY_DICT,"},{"line_number":56,"context_line":"                    types.NONEMPTY_STRING"},{"line_number":57,"context_line":"                ]"},{"line_number":58,"context_line":"            },"},{"line_number":59,"context_line":"            \"with-items\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_9ea285ad","line":56,"range":{"start_line":56,"start_character":20,"end_line":56,"end_character":41},"updated":"2017-08-14 11:15:37.000000000","message":"Can you please explain why is it needed to modify the input field?","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":23271,"name":"Istvan Imre","email":"istvan.imre@nokia.com","username":"istvan.imre"},"change_message_id":"94157f572ab94378848488eee6d2f5218142da04","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            \"input\": {"},{"line_number":54,"context_line":"                \"oneOf\": ["},{"line_number":55,"context_line":"                    types.NONEMPTY_DICT,"},{"line_number":56,"context_line":"                    types.NONEMPTY_STRING"},{"line_number":57,"context_line":"                ]"},{"line_number":58,"context_line":"            },"},{"line_number":59,"context_line":"            \"with-items\": {"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_aa2ce301","line":56,"range":{"start_line":56,"start_character":20,"end_line":56,"end_character":41},"in_reply_to":"9f436f4f_9ea285ad","updated":"2017-08-14 14:17:43.000000000","message":"This is needed to able to pass input parameters in dynamic way like:\n\ninput: \u003c% $.input_for_dynamic_workflow %\u003e\n\nCurrently it is not possible, and you need to specify parameters for input like:\ninput:\n  param1: \u003c% $.param1 %\u003e\n  param2: \u003c% $.param2 %\u003e\n...\n\nAnd this way is too static for dynamic wokrflow selection with different parameter lists.","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"}],"mistral/tests/unit/engine/test_subworkflows.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        with db_api.transaction():"},{"line_number":305,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":306,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027wf2_out\u0027}, ex.output)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def test_dynamic_subworkflow_wf3(self):"},{"line_number":309,"context_line":"        ex \u003d self.engine.start_workflow(\u0027wb3.wf1\u0027, {\u0027wf_name\u0027: \u0027wf3\u0027})"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_34b6b38b","line":306,"range":{"start_line":306,"start_character":12,"end_line":306,"end_character":16},"updated":"2017-03-30 06:03:12.000000000","message":"Soft: please separate assertion blocks with blank lines.","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"26221c7fd7ac18231b605d91ab13f94660e96e7e","unresolved":false,"context_lines":[{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        with db_api.transaction():"},{"line_number":314,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":315,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027wf3_out\u0027}, ex.output)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ffe62b97_f4b3ab96","line":315,"range":{"start_line":315,"start_character":12,"end_line":315,"end_character":16},"updated":"2017-03-30 06:03:12.000000000","message":"Same","commit_id":"fee7bac45c9088d2245d943442cc482335c2c89e"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"8ae7e9c2d3691aeb2bb0513796254e6fa53ae4d0","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":380,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027wf2_out\u0027}, ex.output)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_dynamic_subworkflow_wf3(self):"},{"line_number":383,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":384,"context_line":"            wf_identifier\u003d\u0027wb3.wf1\u0027,"},{"line_number":385,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf3\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_beb2e947","line":382,"range":{"start_line":382,"start_character":8,"end_line":382,"end_character":36},"updated":"2017-08-14 11:15:37.000000000","message":"Would be better if wf3 did not exist and this run would generate an error. It simplifies the test and provides a negative test case.","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":23271,"name":"Istvan Imre","email":"istvan.imre@nokia.com","username":"istvan.imre"},"change_message_id":"94157f572ab94378848488eee6d2f5218142da04","unresolved":false,"context_lines":[{"line_number":379,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":380,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027wf2_out\u0027}, ex.output)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_dynamic_subworkflow_wf3(self):"},{"line_number":383,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":384,"context_line":"            wf_identifier\u003d\u0027wb3.wf1\u0027,"},{"line_number":385,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf3\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_caf72759","line":382,"range":{"start_line":382,"start_character":8,"end_line":382,"end_character":36},"in_reply_to":"9f436f4f_beb2e947","updated":"2017-08-14 14:17:43.000000000","message":"Ok, This one could be a negative test and the next two going to test the success case.","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"8ae7e9c2d3691aeb2bb0513796254e6fa53ae4d0","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":392,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027wf3_out\u0027}, ex.output)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def test_dynamic_subworkflow_with_generic_input_wf2(self):"},{"line_number":395,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":396,"context_line":"            wf_identifier\u003d\u0027wb4.wf1\u0027,"},{"line_number":397,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf2\u0027, \u0027inp\u0027: {\u0027inp\u0027: \u0027abc\u0027}}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_1ec7b598","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":55},"updated":"2017-08-14 11:15:37.000000000","message":"Is this test needed? I guess there exist a couple of tests for input data structures.","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":23271,"name":"Istvan Imre","email":"istvan.imre@nokia.com","username":"istvan.imre"},"change_message_id":"94157f572ab94378848488eee6d2f5218142da04","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":392,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027wf3_out\u0027}, ex.output)"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def test_dynamic_subworkflow_with_generic_input_wf2(self):"},{"line_number":395,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":396,"context_line":"            wf_identifier\u003d\u0027wb4.wf1\u0027,"},{"line_number":397,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf2\u0027, \u0027inp\u0027: {\u0027inp\u0027: \u0027abc\u0027}}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_aac86321","line":394,"range":{"start_line":394,"start_character":8,"end_line":394,"end_character":55},"in_reply_to":"9f436f4f_1ec7b598","updated":"2017-08-14 14:17:43.000000000","message":"This tests the custom input structure. See: mistral/lang/base.py","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"8ae7e9c2d3691aeb2bb0513796254e6fa53ae4d0","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":404,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027abc\u0027}, ex.output)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def test_dynamic_subworkflow_with_jinja(self):"},{"line_number":407,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":408,"context_line":"            wf_identifier\u003d\u0027wb5.wf1\u0027,"},{"line_number":409,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf2\u0027, \u0027inp\u0027: {\u0027inp\u0027: \u0027abc\u0027}}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_1e4c5540","line":406,"range":{"start_line":406,"start_character":8,"end_line":406,"end_character":43},"updated":"2017-08-14 11:15:37.000000000","message":"The jinja ans jaql workflow should be executed the same way. IMHO it would be better if a single test code could be parameterized with the different workflow definitions.","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":23271,"name":"Istvan Imre","email":"istvan.imre@nokia.com","username":"istvan.imre"},"change_message_id":"94157f572ab94378848488eee6d2f5218142da04","unresolved":false,"context_lines":[{"line_number":403,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":404,"context_line":"            self.assertEqual({\u0027sub_wf_out\u0027: \u0027abc\u0027}, ex.output)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def test_dynamic_subworkflow_with_jinja(self):"},{"line_number":407,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":408,"context_line":"            wf_identifier\u003d\u0027wb5.wf1\u0027,"},{"line_number":409,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf2\u0027, \u0027inp\u0027: {\u0027inp\u0027: \u0027abc\u0027}}"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f436f4f_8af6bf62","line":406,"range":{"start_line":406,"start_character":8,"end_line":406,"end_character":43},"in_reply_to":"9f436f4f_1e4c5540","updated":"2017-08-14 14:17:43.000000000","message":"You have right i will extract the common part of these last two tests.","commit_id":"2ad64ae17111d5b84ecf644ba2e062e36e284998"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    def test_dynamic_subworkflow_wf3(self):"},{"line_number":375,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":376,"context_line":"            wf_identifier\u003d\u0027wb3.wf1\u0027,"},{"line_number":377,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027none_existing_wf\u0027}"},{"line_number":378,"context_line":"        )"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        self.await_workflow_error(ex.id)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_6cb2774b","line":377,"range":{"start_line":377,"start_character":34,"end_line":377,"end_character":38},"updated":"2017-08-15 15:03:49.000000000","message":"s/none/not","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        with db_api.transaction():"},{"line_number":383,"context_line":"            ex \u003d db_api.get_workflow_execution(ex.id)"},{"line_number":384,"context_line":"            self.assertIn(\u0027none_existing_wf\u0027, ex.state_info)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def test_dynamic_subworkflow_with_generic_input(self):"},{"line_number":387,"context_line":"        self._test_dynamic_workflow_with_generic_input(\u0027wb4.wf1\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_0c7d2b6d","line":384,"range":{"start_line":384,"start_character":27,"end_line":384,"end_character":31},"updated":"2017-08-15 15:03:49.000000000","message":"s/none/not","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":384,"context_line":"            self.assertIn(\u0027none_existing_wf\u0027, ex.state_info)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def test_dynamic_subworkflow_with_generic_input(self):"},{"line_number":387,"context_line":"        self._test_dynamic_workflow_with_generic_input(\u0027wb4.wf1\u0027)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    def test_dynamic_subworkflow_with_jinja(self):"},{"line_number":390,"context_line":"        self._test_dynamic_workflow_with_generic_input(\u0027wb5.wf1\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_2c346f92","line":387,"range":{"start_line":387,"start_character":41,"end_line":387,"end_character":54},"updated":"2017-08-15 15:03:49.000000000","message":"s/generic_input/dict_param","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"a88258dd8dc43bf835c90c72b9379c9c8dedbb10","unresolved":false,"context_lines":[{"line_number":389,"context_line":"    def test_dynamic_subworkflow_with_jinja(self):"},{"line_number":390,"context_line":"        self._test_dynamic_workflow_with_generic_input(\u0027wb5.wf1\u0027)"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    def _test_dynamic_workflow_with_generic_input(self, wf_identifier):"},{"line_number":393,"context_line":"        ex \u003d self.engine.start_workflow("},{"line_number":394,"context_line":"            wf_identifier\u003dwf_identifier,"},{"line_number":395,"context_line":"            wf_input\u003d{\u0027wf_name\u0027: \u0027wf2\u0027, \u0027inp\u0027: {\u0027inp\u0027: \u0027abc\u0027}}"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f436f4f_6cc39758","line":392,"range":{"start_line":392,"start_character":3,"end_line":392,"end_character":71},"updated":"2017-08-15 15:03:49.000000000","message":"maybe having a negative test with string input instead of map would be beneficial","commit_id":"505ce9de767a337acd2e929f498892af1f3b4f62"}]}
