)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":12,"context_line":"operator a method which can help debug errors which may stem from syntax errors"},{"line_number":13,"context_line":"within the workbook or reveal actual bugs, by reporting the necessary"},{"line_number":14,"context_line":"information from the execution to the client."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Icd83d0f44c58c402c7382a6de6d4acf4d24f3b33"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5f201791_98eff9af","line":15,"updated":"2017-06-20 14:02:10.000000000","message":"reference spec/blueprint.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"c2a387e4ca4067a768535977393f5880d2896dc9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"within the workbook or reveal actual bugs, by reporting the necessary"},{"line_number":14,"context_line":"information from the execution to the client."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"https://blueprints.launchpad.net/mistral/+spec/mistral-error-analysis"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icd83d0f44c58c402c7382a6de6d4acf4d24f3b33"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5f201791_a4d86352","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":69},"updated":"2017-06-28 13:08:03.000000000","message":"Please change to:\nImplements: blueprint mistral-error-analysis","commit_id":"ddc788a77f06f00318bcaa5e021e70ee2b5e4328"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"within the workbook or reveal actual bugs, by reporting the necessary"},{"line_number":14,"context_line":"information from the execution to the client."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Implements: https://blueprints.launchpad.net/mistral/+spec/mistral-error-analysis"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icd83d0f44c58c402c7382a6de6d4acf4d24f3b33"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3f1d235d_e30e3c31","line":16,"updated":"2017-06-29 08:59:27.000000000","message":"Just the BP name, not the URL should be used.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"within the workbook or reveal actual bugs, by reporting the necessary"},{"line_number":14,"context_line":"information from the execution to the client."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Implements: https://blueprints.launchpad.net/mistral/+spec/mistral-error-analysis"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icd83d0f44c58c402c7382a6de6d4acf4d24f3b33"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"3f1d235d_c31b4071","line":16,"range":{"start_line":16,"start_character":12,"end_line":16,"end_character":59},"updated":"2017-06-29 08:59:27.000000000","message":"so delete this bit.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":19853,"name":"Nguyen Hung Phuong","email":"phuongnh@vn.fujitsu.com","username":"phuongnh"},"change_message_id":"949ab7962eff2bc8a06bdf5bebcda869a0706294","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Workflow Error Analysis"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently there is not a central way or single command which can be issued to"},{"line_number":10,"context_line":"determine the root cause of an error that has occurred upon failure of a"},{"line_number":11,"context_line":"mistral workflow. The proposed functionality would give the developer and"},{"line_number":12,"context_line":"operator a method which can help debug errors which may stem from syntax errors"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3f1d235d_c9454c45","line":9,"updated":"2017-07-03 08:30:22.000000000","message":"Can you make the subsequent lines be wrapped at 72 characters?  See [0].\n\n[0] https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"555847a751a9a6ebeafa6242cf48f4aacd8e6101","unresolved":false,"context_lines":[{"line_number":13,"context_line":"within the workbook or reveal actual bugs, by reporting the necessary"},{"line_number":14,"context_line":"information from the execution to the client."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Implements: mistral-error-analysis"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icd83d0f44c58c402c7382a6de6d4acf4d24f3b33"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3f1d235d_b880f1c0","line":16,"updated":"2017-07-04 12:08:29.000000000","message":"add \"blueprint\" after colon to enable auto linking","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"}],"mistral/api/controllers/v2/inquiry.py":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class InquiryController(rest.RestController):"},{"line_number":32,"context_line":"    \"\"\"InquiryController will return information about a specific workflow.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @rest_utils.wrap_wsme_controller_exception"},{"line_number":35,"context_line":"    @wsme_pecan.wsexpose(resources.Inquiry, wtypes.text, wtypes.text)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_385b4588","line":32,"updated":"2017-06-20 14:02:10.000000000","message":"Shouldn\u0027t this be based around a workflow execution? Getting all the executions for a workflow seems like it might be confusing. I\u0027ve never had to debug multiple executions at the same time, so that a common pattern?","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class InquiryController(rest.RestController):"},{"line_number":32,"context_line":"    \"\"\"InquiryController will return information about a specific workflow."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_a3184475","line":32,"updated":"2017-06-29 08:59:27.000000000","message":"s/workflow/workflow execution/","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class InquiryController(rest.RestController):"},{"line_number":32,"context_line":"    \"\"\"InquiryController will return information about a specific workflow."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_4921874d","line":32,"in_reply_to":"3f1d235d_a3184475","updated":"2018-03-15 14:49:30.000000000","message":"Done","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :param workflow_execution_id: workflow execution id."},{"line_number":42,"context_line":"        :type workflow_execution_id: string"},{"line_number":43,"context_line":"        :param constraint: key which will expose the give tier of information."},{"line_number":44,"context_line":"        :type constraint: string"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        acl.enforce(\u0027inquiry:get\u0027, context.ctx())"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_a33164ef","line":43,"updated":"2017-06-29 08:59:27.000000000","message":"I don\u0027t understand what this means - can you explain more? or give an example?","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :param workflow_execution_id: workflow execution id."},{"line_number":42,"context_line":"        :type workflow_execution_id: string"},{"line_number":43,"context_line":"        :param constraint: key which will expose the give tier of information."},{"line_number":44,"context_line":"        :type constraint: string"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        acl.enforce(\u0027inquiry:get\u0027, context.ctx())"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_69e1e3fe","line":43,"in_reply_to":"3f1d235d_a33164ef","updated":"2018-03-15 14:49:30.000000000","message":"changed it to be a bit more clear. I will attach an example if it still seems unclear.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class InquiryController(rest.RestController):"},{"line_number":32,"context_line":"    \"\"\"InquiryController returns information about a given workflow execution."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_eb6da098","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":13},"updated":"2017-07-03 07:57:19.000000000","message":"Why Inquire? Not sure why you chose this name. I thought something like \"Report\" or \"ExecutionReport\" would fit well its purpose.","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class InquiryController(rest.RestController):"},{"line_number":32,"context_line":"    \"\"\"InquiryController returns information about a given workflow execution."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_8ae5f8aa","line":31,"range":{"start_line":31,"start_character":6,"end_line":31,"end_character":13},"in_reply_to":"3f1d235d_eb6da098","updated":"2018-03-15 14:49:30.000000000","message":"I thought you wanted to change the name from Report :).","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @rest_utils.wrap_wsme_controller_exception"},{"line_number":37,"context_line":"    @wsme_pecan.wsexpose(resources.Inquiry, wtypes.text, wtypes.text)"},{"line_number":38,"context_line":"    def get(self, workflow_execution_id, sub_workflow_exec_name\u003dNone, constraint\u003dNone):"},{"line_number":39,"context_line":"        \"\"\"Get will call SQLAlchemy query to generate a base error report."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :param workflow_execution_id: workflow execution id."}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_4be014fb","line":38,"range":{"start_line":38,"start_character":41,"end_line":38,"end_character":63},"updated":"2017-07-03 07:57:19.000000000","message":"What is this parameter for?","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @rest_utils.wrap_wsme_controller_exception"},{"line_number":37,"context_line":"    @wsme_pecan.wsexpose(resources.Inquiry, wtypes.text, wtypes.text)"},{"line_number":38,"context_line":"    def get(self, workflow_execution_id, sub_workflow_exec_name\u003dNone, constraint\u003dNone):"},{"line_number":39,"context_line":"        \"\"\"Get will call SQLAlchemy query to generate a base error report."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :param workflow_execution_id: workflow execution id."}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_6af97c4b","line":38,"range":{"start_line":38,"start_character":41,"end_line":38,"end_character":63},"in_reply_to":"3f1d235d_4be014fb","updated":"2018-03-15 14:49:30.000000000","message":"This was an initial approach to address the issue Dougal raised, but it did not prove worthy, so I am reworking the code.","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        :type workflow_execution_id: string"},{"line_number":43,"context_line":"        :param sub_workflow_exec_name: name of sub-workflow execution."},{"line_number":44,"context_line":"        :type sub_workflow_exec_name: string"},{"line_number":45,"context_line":"        :param constraint: key which will restrict the information returned."},{"line_number":46,"context_line":"        :type constraint: string"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        acl.enforce(\u0027inquiry:get\u0027, context.ctx())"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_cbc42462","line":45,"range":{"start_line":45,"start_character":15,"end_line":45,"end_character":76},"updated":"2017-07-03 07:57:19.000000000","message":"From this description it\u0027s hard to tell what it\u0027s for. Can you please explain both naming and the purpose?","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        :type workflow_execution_id: string"},{"line_number":43,"context_line":"        :param sub_workflow_exec_name: name of sub-workflow execution."},{"line_number":44,"context_line":"        :type sub_workflow_exec_name: string"},{"line_number":45,"context_line":"        :param constraint: key which will restrict the information returned."},{"line_number":46,"context_line":"        :type constraint: string"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        acl.enforce(\u0027inquiry:get\u0027, context.ctx())"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_0a6e8800","line":45,"range":{"start_line":45,"start_character":15,"end_line":45,"end_character":76},"in_reply_to":"3f1d235d_cbc42462","updated":"2018-03-15 14:49:30.000000000","message":"This option was to restrict the display of data returned to the client. So if workflow/ task/ action were specified it would limit the view to that keyword. Just a way to filter out the particular information returned.","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"}],"mistral/api/controllers/v2/report.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @rest_utils.wrap_wsme_controller_exception"},{"line_number":36,"context_line":"    @wsme_pecan.wsexpose(resources.Report, wtypes.text)"},{"line_number":37,"context_line":"    def get(self, ident):"},{"line_number":38,"context_line":"        acl.enforce(\u0027report:get\u0027, context.ctx())"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        LOG.info(\"Generating Report information \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_718e17d1","line":37,"range":{"start_line":37,"start_character":18,"end_line":37,"end_character":23},"updated":"2017-04-26 12:47:28.000000000","message":"If it\u0027s a workflow execution id we usually call it \"wf_ex_id\".","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @rest_utils.wrap_wsme_controller_exception"},{"line_number":36,"context_line":"    @wsme_pecan.wsexpose(resources.Report, wtypes.text)"},{"line_number":37,"context_line":"    def get(self, ident):"},{"line_number":38,"context_line":"        acl.enforce(\u0027report:get\u0027, context.ctx())"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        LOG.info(\"Generating Report information \""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_466cffcc","line":37,"range":{"start_line":37,"start_character":18,"end_line":37,"end_character":23},"in_reply_to":"5ff73747_718e17d1","updated":"2018-03-15 14:49:30.000000000","message":"ack, refactored.","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        LOG.info(\"Generating Report information \""},{"line_number":41,"context_line":"                 \"for execution id: {}\".format(ident))"},{"line_number":42,"context_line":"        with db_api.transaction():"},{"line_number":43,"context_line":"            tasks_list \u003d db_api.get_task_executions(task_execution_id\u003dident,"},{"line_number":44,"context_line":"                                                    state\u003d\"ERROR\")"},{"line_number":45,"context_line":"            wf_exec \u003d db_api.get_workflow_execution(ident)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_31bc0fba","line":43,"range":{"start_line":43,"start_character":52,"end_line":43,"end_character":75},"updated":"2017-04-26 12:47:28.000000000","message":"I don\u0027t understand this. Isn\u0027t \u0027ident\u0027 an id of a workflow execution? You probably intended to use \"workflow_execution_id\u003dident\".","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        LOG.info(\"Generating Report information \""},{"line_number":41,"context_line":"                 \"for execution id: {}\".format(ident))"},{"line_number":42,"context_line":"        with db_api.transaction():"},{"line_number":43,"context_line":"            tasks_list \u003d db_api.get_task_executions(task_execution_id\u003dident,"},{"line_number":44,"context_line":"                                                    state\u003d\"ERROR\")"},{"line_number":45,"context_line":"            wf_exec \u003d db_api.get_workflow_execution(ident)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_66713ba8","line":43,"range":{"start_line":43,"start_character":52,"end_line":43,"end_character":75},"in_reply_to":"5ff73747_31bc0fba","updated":"2018-03-15 14:49:30.000000000","message":"yeah, thanks for spotting that.","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        with db_api.transaction():"},{"line_number":43,"context_line":"            tasks_list \u003d db_api.get_task_executions(task_execution_id\u003dident,"},{"line_number":44,"context_line":"                                                    state\u003d\"ERROR\")"},{"line_number":45,"context_line":"            wf_exec \u003d db_api.get_workflow_execution(ident)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"            report_dict \u003d ra.get_report(wf_exec, tasks_list)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_51967bf2","line":45,"range":{"start_line":45,"start_character":22,"end_line":45,"end_character":58},"updated":"2017-04-26 12:47:28.000000000","message":"I would probably move these DB operations right into ra.get_report() function. It could take just wf_ex_id. Then the controller would become very simple (which is good IMO).","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        with db_api.transaction():"},{"line_number":43,"context_line":"            tasks_list \u003d db_api.get_task_executions(task_execution_id\u003dident,"},{"line_number":44,"context_line":"                                                    state\u003d\"ERROR\")"},{"line_number":45,"context_line":"            wf_exec \u003d db_api.get_workflow_execution(ident)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"            report_dict \u003d ra.get_report(wf_exec, tasks_list)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_86a32700","line":45,"range":{"start_line":45,"start_character":22,"end_line":45,"end_character":58},"in_reply_to":"5ff73747_51967bf2","updated":"2018-03-15 14:49:30.000000000","message":"ack.","commit_id":"51137c190b550a9555469d45887283b877aefe03"}],"mistral/api/controllers/v2/resources.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"class Report(resource.Resource):"},{"line_number":600,"context_line":"    \"\"\"Report resource. \"\"\""},{"line_number":601,"context_line":"    id \u003d wtypes.text"},{"line_number":602,"context_line":"    workflow_name \u003d wtypes.text"},{"line_number":603,"context_line":"    workflow_id \u003d types.uuid"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_11b7d3f8","line":600,"range":{"start_line":600,"start_character":7,"end_line":600,"end_character":24},"updated":"2017-04-26 12:47:28.000000000","message":"We\u0027ll need a more detailed description of what it is. \"Report\" is not clear when you look at it for the first time.","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":608,"context_line":"    workflow_state_info \u003d types.jsontype"},{"line_number":609,"context_line":"    \"state information string\""},{"line_number":610,"context_line":""},{"line_number":611,"context_line":"    workflow_traceback \u003d wtypes.text"},{"line_number":612,"context_line":"    \"an optional verbose state information\""},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"    task_name \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_719a976e","line":611,"range":{"start_line":611,"start_character":25,"end_line":611,"end_character":36},"updated":"2017-04-26 12:47:28.000000000","message":"I wonder if text type is ok for that. Maybe we could use more structured data like list?","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    task_execution_id \u003d wtypes.text"},{"line_number":616,"context_line":"    \"reference to the parent task execution\""},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"    task_state \u003d wtypes.text"},{"line_number":619,"context_line":"    \"state can be one of: SUCCESS, ERROR\""},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"    task_state_info \u003d types.jsontype"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_f1e0e7fc","line":618,"range":{"start_line":618,"start_character":4,"end_line":618,"end_character":14},"updated":"2017-04-26 12:47:28.000000000","message":"What are \"task_state\" and \"task_state_info\"? Still parent task of the workflow? If yes then it might make sense to group all 4 fields together somehow.","commit_id":"51137c190b550a9555469d45887283b877aefe03"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":602,"context_line":"    workflow_name \u003d wtypes.text"},{"line_number":603,"context_line":"    workflow_id \u003d types.uuid"},{"line_number":604,"context_line":"    workflow_state \u003d wtypes.text"},{"line_number":605,"context_line":"    \"state can take one of the following values: SUCCESS, ERROR\""},{"line_number":606,"context_line":"    workflow_state_info \u003d types.jsontype"},{"line_number":607,"context_line":"    \"state information string\""},{"line_number":608,"context_line":"    action_output \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_23af9495","line":605,"updated":"2017-06-29 08:59:27.000000000","message":"It could also be others too: https://github.com/openstack/mistral/blob/master/mistral/workflow/states.py#L18-L25","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":602,"context_line":"    workflow_name \u003d wtypes.text"},{"line_number":603,"context_line":"    workflow_id \u003d types.uuid"},{"line_number":604,"context_line":"    workflow_state \u003d wtypes.text"},{"line_number":605,"context_line":"    \"state can take one of the following values: SUCCESS, ERROR\""},{"line_number":606,"context_line":"    workflow_state_info \u003d types.jsontype"},{"line_number":607,"context_line":"    \"state information string\""},{"line_number":608,"context_line":"    action_output \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_09e6ef45","line":605,"in_reply_to":"3f1d235d_23af9495","updated":"2018-03-15 14:49:30.000000000","message":"Done","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":612,"context_line":"    task_execution_id \u003d wtypes.text"},{"line_number":613,"context_line":"    \"reference to the parent task execution\""},{"line_number":614,"context_line":"    task_state \u003d wtypes.text"},{"line_number":615,"context_line":"    \"state can be one of: SUCCESS, ERROR\""},{"line_number":616,"context_line":"    task_state_info \u003d types.jsontype"},{"line_number":617,"context_line":"    \"an optional state information string\""},{"line_number":618,"context_line":"    action_name \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_638eac2f","line":615,"updated":"2017-06-29 08:59:27.000000000","message":"same as above.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":612,"context_line":"    task_execution_id \u003d wtypes.text"},{"line_number":613,"context_line":"    \"reference to the parent task execution\""},{"line_number":614,"context_line":"    task_state \u003d wtypes.text"},{"line_number":615,"context_line":"    \"state can be one of: SUCCESS, ERROR\""},{"line_number":616,"context_line":"    task_state_info \u003d types.jsontype"},{"line_number":617,"context_line":"    \"an optional state information string\""},{"line_number":618,"context_line":"    action_name \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_49dce773","line":615,"in_reply_to":"3f1d235d_638eac2f","updated":"2018-03-15 14:49:30.000000000","message":"Done","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"5ae2944ce6ac30f59ea106a672ce1042675855cc","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                   task_state_info\u003d{\u0027action\u0027: \u0027error cause\u0027},"},{"line_number":637,"context_line":"                   action_name\u003d\u0027std.echo\u0027,"},{"line_number":638,"context_line":"                   action_execution_id\u003d\u0027343e45623-e89b-12d3-a456-426655440090\u0027,"},{"line_number":639,"context_line":"                   action_output\u003d\u0027This is where traceback info will be,\u0027"},{"line_number":640,"context_line":"                   \u0027reported.\u0027,"},{"line_number":641,"context_line":"                   created_at\u003d\u00271970-01-01T00:00:00.000000\u0027,"},{"line_number":642,"context_line":"                   updated_at\u003d\u00271970-01-01T00:00:00.000000\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_0e3eff28","line":639,"range":{"start_line":639,"start_character":70,"end_line":639,"end_character":71},"updated":"2017-06-29 09:04:18.000000000","message":"Minor nit. Useless comma at the end of the sentence. Probably better to replace it for a space","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                   task_state_info\u003d{\u0027action\u0027: \u0027error cause\u0027},"},{"line_number":637,"context_line":"                   action_name\u003d\u0027std.echo\u0027,"},{"line_number":638,"context_line":"                   action_execution_id\u003d\u0027343e45623-e89b-12d3-a456-426655440090\u0027,"},{"line_number":639,"context_line":"                   action_output\u003d\u0027This is where traceback info will be,\u0027"},{"line_number":640,"context_line":"                   \u0027reported.\u0027,"},{"line_number":641,"context_line":"                   created_at\u003d\u00271970-01-01T00:00:00.000000\u0027,"},{"line_number":642,"context_line":"                   updated_at\u003d\u00271970-01-01T00:00:00.000000\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_89f2ff05","line":639,"in_reply_to":"3f1d235d_0e3eff28","updated":"2018-03-15 14:49:30.000000000","message":"Done","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":664,"context_line":"        return e"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"class Inquiries(resource.ResourceList):"},{"line_number":668,"context_line":"    \"\"\"A collection of a Report information.\"\"\""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    inquiries \u003d [Inquiry]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_03a2589b","line":667,"updated":"2017-06-29 08:59:27.000000000","message":"Do we ever want a use to perform multiple inquiries? (for some reason I keep wanting to type enquiries)","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":664,"context_line":"        return e"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"class Inquiries(resource.ResourceList):"},{"line_number":668,"context_line":"    \"\"\"A collection of a Report information.\"\"\""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    inquiries \u003d [Inquiry]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_49f867c3","line":667,"in_reply_to":"3f1d235d_03a2589b","updated":"2018-03-15 14:49:30.000000000","message":"To be honest I can go either way. (according to Oxford enquiry is a general task while inquiry is more specific or formal, I am generally a casual person so I could change it :) )","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":596,"context_line":"        return triggers_sample"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"class Inquiry(resource.Resource):"},{"line_number":600,"context_line":"    \"\"\"Inquiry resource. \"\"\""},{"line_number":601,"context_line":"    id \u003d wtypes.text"},{"line_number":602,"context_line":"    workflow_name \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_cb4ae4aa","line":599,"range":{"start_line":599,"start_character":6,"end_line":599,"end_character":13},"updated":"2017-07-03 07:57:19.000000000","message":"What\u0027s the purpose of this resource? What is it from the user perspective? Is it like a report? Or just an entry of a report?","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":601,"context_line":"    id \u003d wtypes.text"},{"line_number":602,"context_line":"    workflow_name \u003d wtypes.text"},{"line_number":603,"context_line":"    workflow_id \u003d types.uuid"},{"line_number":604,"context_line":"    workflow_state \u003d wtypes.text"},{"line_number":605,"context_line":"    workflow_state_info \u003d types.jsontype"},{"line_number":606,"context_line":"    \"state information string\""},{"line_number":607,"context_line":"    action_output \u003d wtypes.text"},{"line_number":608,"context_line":"    \"an optional verbose state information\""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_4b5ff471","line":605,"range":{"start_line":604,"start_character":4,"end_line":605,"end_character":40},"updated":"2017-07-03 07:57:19.000000000","message":"Here we need to be accurate about naming. \"Workflow\" is usually used across the code to denote a workflow definition, not execution. If you meant workflow execution it needs to be called \"workflow_execution_state\". Or, it may be even better alternative to call the class so that it has \"WorkflowExecution\" in its name. Then you could make property names shorter.","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":607,"context_line":"    action_output \u003d wtypes.text"},{"line_number":608,"context_line":"    \"an optional verbose state information\""},{"line_number":609,"context_line":"    task_name \u003d wtypes.text"},{"line_number":610,"context_line":"    task_id \u003d wtypes.text"},{"line_number":611,"context_line":"    task_execution_id \u003d wtypes.text"},{"line_number":612,"context_line":"    \"reference to the parent task execution\""},{"line_number":613,"context_line":"    task_state \u003d wtypes.text"},{"line_number":614,"context_line":"    task_state_info \u003d types.jsontype"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_4bd494bd","line":611,"range":{"start_line":610,"start_character":4,"end_line":611,"end_character":35},"updated":"2017-07-03 07:57:19.000000000","message":"What\u0027s the difference between these two? Task definitions are in YAML so when a workflow gets uploaded they are not created as standalone DB objects so they don\u0027t have IDs. So \"task_id\" doesn\u0027t make sense to me.","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":610,"context_line":"    task_id \u003d wtypes.text"},{"line_number":611,"context_line":"    task_execution_id \u003d wtypes.text"},{"line_number":612,"context_line":"    \"reference to the parent task execution\""},{"line_number":613,"context_line":"    task_state \u003d wtypes.text"},{"line_number":614,"context_line":"    task_state_info \u003d types.jsontype"},{"line_number":615,"context_line":"    \"an optional state information string\""},{"line_number":616,"context_line":"    action_name \u003d wtypes.text"},{"line_number":617,"context_line":"    \"name of the command which was executed.\""},{"line_number":618,"context_line":"    action_execution_id \u003d wtypes.text"},{"line_number":619,"context_line":"    action_state \u003d wtypes.tetx"},{"line_number":620,"context_line":"    action_state_info \u003d wtypes.text"},{"line_number":621,"context_line":"    created_at \u003d wtypes.text"},{"line_number":622,"context_line":"    updated_at \u003d wtypes.text"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    @classmethod"},{"line_number":625,"context_line":"    def sample(cls):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_ebab601a","line":622,"range":{"start_line":613,"start_character":4,"end_line":622,"end_character":28},"updated":"2017-07-03 07:57:19.000000000","message":"I probably don\u0027t understand the idea of this resource. Can you please explain why workflows, tasks and actions are combined into one class?","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"b95c92575f9c862a82db1d9464869451ae3ebf6f","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        return triggers_sample"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"class ExecutionReport(Execution, Task, ActionExecution):"},{"line_number":671,"context_line":"    \"\"\"Execution Report resource. \"\"\""},{"line_number":672,"context_line":"    def __init__(self):"},{"line_number":673,"context_line":"        super(ExecutionReport).__init__()"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f79a3b5_55755fcb","line":670,"range":{"start_line":670,"start_character":0,"end_line":670,"end_character":21},"updated":"2018-08-18 00:05:47.000000000","message":"will change this to inherit the collections interface.","commit_id":"2f8773d5843247dd74d4e5a8bfe5d177f2b20904"}],"mistral/db/v2/api.py":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":346,"context_line":"# Inquiry call."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"def get_inquiry(workflow_id):"},{"line_number":350,"context_line":"    return IMPL.get_inquiry(workflow_id)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"# Delayed calls."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_43b170e1","line":349,"updated":"2017-06-29 08:59:27.000000000","message":"workflow_execution_id","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":346,"context_line":"# Inquiry call."},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"def get_inquiry(workflow_id):"},{"line_number":350,"context_line":"    return IMPL.get_inquiry(workflow_id)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"# Delayed calls."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_49e62719","line":349,"in_reply_to":"3f1d235d_43b170e1","updated":"2018-03-15 14:49:30.000000000","message":"Thanks...oversight.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"}],"mistral/db/v2/sqlalchemy/api.py":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":951,"context_line":""},{"line_number":952,"context_line":"@b.session_aware()"},{"line_number":953,"context_line":"def get_inquiry(workflow_id, session\u003dNone):"},{"line_number":954,"context_line":"    \"\"\"Get query information for workflow execution."},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    This function will be responsible for returning a list of tables from the"},{"line_number":957,"context_line":"    database. It also contains the ability to filter or limit the number of"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_d8ffb132","line":954,"updated":"2017-06-20 14:02:10.000000000","message":"hrm, but then you say workflow execution here. If it is a execution we are filtering by we should call it execution_id everywhere.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":968,"context_line":"        models.ActionExecution).join("},{"line_number":969,"context_line":"        models.WorkflowExecution.task_executions).join("},{"line_number":970,"context_line":"        models.TaskExecution.action_executions).filter_by("},{"line_number":971,"context_line":"        workflow_id\u003dworkflow_id, state\u003d\"ERROR\").all()"},{"line_number":972,"context_line":""},{"line_number":973,"context_line":""},{"line_number":974,"context_line":"# Delayed calls."}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_389ea507","line":971,"updated":"2017-06-20 14:02:10.000000000","message":"I think we should be comparing with the WorkflowExecution ID.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"c2a387e4ca4067a768535977393f5880d2896dc9","unresolved":false,"context_lines":[{"line_number":950,"context_line":""},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"@b.session_aware()"},{"line_number":953,"context_line":"def get_inquiry(workflow_id, session\u003dNone):"},{"line_number":954,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    This function will be responsible for returning a list of tables from the"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_9f3c9293","line":953,"range":{"start_line":953,"start_character":16,"end_line":953,"end_character":27},"updated":"2017-06-28 13:08:03.000000000","message":"As Dougal noted, the scope would be better changed to workflow execution.","commit_id":"ddc788a77f06f00318bcaa5e021e70ee2b5e4328"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"c2a387e4ca4067a768535977393f5880d2896dc9","unresolved":false,"context_lines":[{"line_number":953,"context_line":"def get_inquiry(workflow_id, session\u003dNone):"},{"line_number":954,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    This function will be responsible for returning a list of tables from the"},{"line_number":957,"context_line":"    database. It also contains the ability to filter or limit the number of"},{"line_number":958,"context_line":"    tables which are returned."},{"line_number":959,"context_line":"    :param session: database connection session through sqlalchemy."},{"line_number":960,"context_line":"    :param workflow_id: workflow id."}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_7f82d601","line":957,"range":{"start_line":956,"start_character":4,"end_line":957,"end_character":12},"updated":"2017-06-28 13:08:03.000000000","message":"The comment should better explain what is returned as it is not obvious (at least for me).","commit_id":"ddc788a77f06f00318bcaa5e021e70ee2b5e4328"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"c2a387e4ca4067a768535977393f5880d2896dc9","unresolved":false,"context_lines":[{"line_number":954,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":955,"context_line":""},{"line_number":956,"context_line":"    This function will be responsible for returning a list of tables from the"},{"line_number":957,"context_line":"    database. It also contains the ability to filter or limit the number of"},{"line_number":958,"context_line":"    tables which are returned."},{"line_number":959,"context_line":"    :param session: database connection session through sqlalchemy."},{"line_number":960,"context_line":"    :param workflow_id: workflow id."},{"line_number":961,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_dfc20a53","line":958,"range":{"start_line":957,"start_character":14,"end_line":958,"end_character":30},"updated":"2017-06-28 13:08:03.000000000","message":"Is it possible that the limitation is not implemented yet?","commit_id":"ddc788a77f06f00318bcaa5e021e70ee2b5e4328"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":952,"context_line":""},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@b.session_aware()"},{"line_number":955,"context_line":"def get_inquiry(workflow_execution_id, session\u003dNone):"},{"line_number":956,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":957,"context_line":""},{"line_number":958,"context_line":"    :param workflow_execution_id: id returned from mistral execution-list."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_e9d85d80","line":955,"updated":"2017-06-29 08:59:27.000000000","message":"We will need to make sure there is test coverage for this against a real database. Locally you will use sqlite by default and CI will test mysql and postgres.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":952,"context_line":""},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@b.session_aware()"},{"line_number":955,"context_line":"def get_inquiry(workflow_execution_id, session\u003dNone):"},{"line_number":956,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":957,"context_line":""},{"line_number":958,"context_line":"    :param workflow_execution_id: id returned from mistral execution-list."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_2991ab53","line":955,"in_reply_to":"3f1d235d_e9d85d80","updated":"2018-03-15 14:49:30.000000000","message":"ack.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@b.session_aware()"},{"line_number":955,"context_line":"def get_inquiry(workflow_execution_id, session\u003dNone):"},{"line_number":956,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":957,"context_line":""},{"line_number":958,"context_line":"    :param workflow_execution_id: id returned from mistral execution-list."},{"line_number":959,"context_line":"    :param session: database connection session through sqlalchemy."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_43e610eb","line":956,"range":{"start_line":956,"start_character":41,"end_line":956,"end_character":49},"updated":"2017-06-29 08:59:27.000000000","message":"workflow execution","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@b.session_aware()"},{"line_number":955,"context_line":"def get_inquiry(workflow_execution_id, session\u003dNone):"},{"line_number":956,"context_line":"    \"\"\"Get query information for a given workflow."},{"line_number":957,"context_line":""},{"line_number":958,"context_line":"    :param workflow_execution_id: id returned from mistral execution-list."},{"line_number":959,"context_line":"    :param session: database connection session through sqlalchemy."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_a98edb2b","line":956,"range":{"start_line":956,"start_character":41,"end_line":956,"end_character":49},"in_reply_to":"3f1d235d_43e610eb","updated":"2018-03-15 14:49:30.000000000","message":"Done","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":966,"context_line":"        ActionExecution).filter("},{"line_number":967,"context_line":"        WorkflowExecution.id \u003d\u003d TaskExecution.workflow_execution_id,"},{"line_number":968,"context_line":"        TaskExecution.id \u003d\u003d ActionExecution.task_execution_id).filter_by("},{"line_number":969,"context_line":"        id\u003dworkflow_execution_id).all()"},{"line_number":970,"context_line":""},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"# Delayed calls."}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_09739982","line":969,"updated":"2017-06-29 08:59:27.000000000","message":"I have not tested this, but I don\u0027t think that this will traverse sub-workflow executions. For example: http://paste.openstack.org/show/614013/\n\n03fcdef4-1701-4661-9049-c944b8a87760 is the main execution, but every other execution here was started by that workflow. so when I want to do analysis, I really want to look at the errors across sub-workflows. If I only want to look at a specific sub-workflow I would give you the execution-id for that and the analysis would follow the execution downwards (and never give me the parent)","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"86d0ef3d961c1074473df3c485bdd469902992b9","unresolved":false,"context_lines":[{"line_number":952,"context_line":""},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"@b.session_aware()"},{"line_number":955,"context_line":"def get_inquiry(workflow_execution_id, sub_workflow_exec_name, session\u003dNone):"},{"line_number":956,"context_line":"    \"\"\"Get query information for a given workflow execution."},{"line_number":957,"context_line":""},{"line_number":958,"context_line":"    :param sub_workflow_exec_name: name of sub-workflow execution"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_0b5b3c54","line":955,"range":{"start_line":955,"start_character":39,"end_line":955,"end_character":61},"updated":"2017-07-03 07:57:19.000000000","message":"Please explain the idea of this method and, particularly, why we need this parameter. I probably don\u0027t understand why we should specify a name of one sub workflow (btw, why name and not id?).","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"32ee7123929e4c283c47d8d986cfbd7e8eef283d","unresolved":false,"context_lines":[{"line_number":967,"context_line":""},{"line_number":968,"context_line":"    if sub_workflow_exec_name:"},{"line_number":969,"context_line":"        return session_query.filter("},{"line_number":970,"context_line":"            WorkflowExecution.description.like("},{"line_number":971,"context_line":"                \"%\" + sub_workflow_exec_name + \"%\")).filter("},{"line_number":972,"context_line":"            WorkflowExecution.id \u003d\u003d TaskExecution.workflow_execution_id,"},{"line_number":973,"context_line":"            TaskExecution.id \u003d\u003d ActionExecution.task_execution_id).filter_by("}],"source_content_type":"text/x-python","patch_set":19,"id":"3f1d235d_dfd081fa","line":970,"updated":"2017-06-30 13:31:17.000000000","message":"I don\u0027t think this will work as expected. The description always equals \"sub-workflow execution\" if the execution is a sub-workflow. It never contains a name or anything else AFAICT.","commit_id":"793c2fed93739a09f12b57b81ed65296c08c621e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"f9d9cccf07a402add45da52c901d94577159a71c","unresolved":false,"context_lines":[{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    :return list of sqlalchemy objects."},{"line_number":1020,"context_line":"    \"\"\""},{"line_number":1021,"context_line":"    query \u003d b.model_query(WorkflowExecution,"},{"line_number":1022,"context_line":"                          models.TaskExecution,"},{"line_number":1023,"context_line":"                          models.ActionExecution)"},{"line_number":1024,"context_line":"    query \u003d query.group_by(WorkflowExecution.root_execution_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_72373ee5","line":1021,"updated":"2017-08-25 15:28:54.000000000","message":"What is b?","commit_id":"be7c629fcd5b893b10b27a8765315a756b3e531f"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"51125afbc2cfc9a0204afdf47ca96319b0c64f42","unresolved":false,"context_lines":[{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    :return list of sqlalchemy objects."},{"line_number":1020,"context_line":"    \"\"\""},{"line_number":1021,"context_line":"    query \u003d b.model_query(WorkflowExecution,"},{"line_number":1022,"context_line":"                          models.TaskExecution,"},{"line_number":1023,"context_line":"                          models.ActionExecution)"},{"line_number":1024,"context_line":"    query \u003d query.group_by(WorkflowExecution.root_execution_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_c26f1626","line":1021,"in_reply_to":"7f287b81_22184173","updated":"2017-09-07 14:41:01.000000000","message":"no, that\u0027s fine. I didn\u0027t realise it was an alias. I hate one or two letter import aliases","commit_id":"be7c629fcd5b893b10b27a8765315a756b3e531f"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"47c842d1e45963191436fce913e0178c5a0cfdae","unresolved":false,"context_lines":[{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    :return list of sqlalchemy objects."},{"line_number":1020,"context_line":"    \"\"\""},{"line_number":1021,"context_line":"    query \u003d b.model_query(WorkflowExecution,"},{"line_number":1022,"context_line":"                          models.TaskExecution,"},{"line_number":1023,"context_line":"                          models.ActionExecution)"},{"line_number":1024,"context_line":"    query \u003d query.group_by(WorkflowExecution.root_execution_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_22184173","line":1021,"in_reply_to":"7f287b81_72373ee5","updated":"2017-08-25 17:32:08.000000000","message":"I thought it would be appropriate to use the helper function instead of me defining another incidence of session.\n\nb is aliased to base module of mistral.db.sqlalchemy, all it is a wrapper around creating a session object. Should I just define my own?","commit_id":"be7c629fcd5b893b10b27a8765315a756b3e531f"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"f9d9cccf07a402add45da52c901d94577159a71c","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    query \u003d b.model_query(WorkflowExecution,"},{"line_number":1022,"context_line":"                          models.TaskExecution,"},{"line_number":1023,"context_line":"                          models.ActionExecution)"},{"line_number":1024,"context_line":"    query \u003d query.group_by(WorkflowExecution.root_execution_id)"},{"line_number":1025,"context_line":"    query \u003d query.filter_by(**kwargs)"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"    return query.all()"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_12859a5a","line":1024,"updated":"2017-08-25 15:28:54.000000000","message":"Why group by? Don\u0027t we want to filter?","commit_id":"be7c629fcd5b893b10b27a8765315a756b3e531f"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"47c842d1e45963191436fce913e0178c5a0cfdae","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    query \u003d b.model_query(WorkflowExecution,"},{"line_number":1022,"context_line":"                          models.TaskExecution,"},{"line_number":1023,"context_line":"                          models.ActionExecution)"},{"line_number":1024,"context_line":"    query \u003d query.group_by(WorkflowExecution.root_execution_id)"},{"line_number":1025,"context_line":"    query \u003d query.filter_by(**kwargs)"},{"line_number":1026,"context_line":""},{"line_number":1027,"context_line":"    return query.all()"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f287b81_623769e5","line":1024,"in_reply_to":"7f287b81_12859a5a","updated":"2017-08-25 17:32:08.000000000","message":"My thinking here was to group by the root_execution_id, and filter by a given parameter such as the execution id.","commit_id":"be7c629fcd5b893b10b27a8765315a756b3e531f"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"8756aa2f435f6958af68a3c050cafcb7c93c8b55","unresolved":false,"context_lines":[{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"    :return list of sqlalchemy objects."},{"line_number":1025,"context_line":"    \"\"\""},{"line_number":1026,"context_line":"    # TODO(toure): devise a better join structure to prevent dups."},{"line_number":1027,"context_line":"    query \u003d session.query(WorkflowExecution,"},{"line_number":1028,"context_line":"                          models.TaskExecution,"},{"line_number":1029,"context_line":"                          models.ActionExecution)"},{"line_number":1030,"context_line":"    query \u003d query.join(WorkflowExecution.task_executions,"},{"line_number":1031,"context_line":"                       models.TaskExecution.action_executions)"},{"line_number":1032,"context_line":"    query \u003d query.filter(WorkflowExecution.root_execution_id)"},{"line_number":1033,"context_line":""},{"line_number":1034,"context_line":"    return query.all()"},{"line_number":1035,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7f287b81_16a672ac","line":1032,"range":{"start_line":1026,"start_character":3,"end_line":1032,"end_character":61},"updated":"2017-09-08 03:59:03.000000000","message":"need a better solution to controlling the output data, as it stand I am getting dups records when filtering by root_execution_id.","commit_id":"47973a872d7311f7d123c3bbfaa497f20e79f6fa"}],"mistral/policies/execution_report.py":[{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"b95c92575f9c862a82db1d9464869451ae3ebf6f","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            }"},{"line_number":30,"context_line":"        ]"},{"line_number":31,"context_line":"    ),"},{"line_number":32,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":33,"context_line":"        name\u003dEXECUTION_REPORT % \u0027list\u0027,"},{"line_number":34,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":35,"context_line":"        description\u003d\u0027Return all reports for a given execution.\u0027,"},{"line_number":36,"context_line":"        operations\u003d["},{"line_number":37,"context_line":"            {"},{"line_number":38,"context_line":"                \u0027path\u0027: \u0027/v2/execution_reports\u0027,"},{"line_number":39,"context_line":"                \u0027method\u0027: \u0027GET\u0027"},{"line_number":40,"context_line":"            }"},{"line_number":41,"context_line":"        ]"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"3f79a3b5_357c63b4","line":42,"range":{"start_line":32,"start_character":2,"end_line":42,"end_character":5},"updated":"2018-08-18 00:05:47.000000000","message":"need to remove this.","commit_id":"2f8773d5843247dd74d4e5a8bfe5d177f2b20904"}],"mistral/services/execution_report_manager.py":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    mapping \u003d [WORKFLOW_COLUMNS, TASK_COLUMNS, ACTION_COLUMNS]"},{"line_number":65,"context_line":"    report \u003d {}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    for index, payload in enumerate(collection):"},{"line_number":68,"context_line":"        for coll_key, coll_value in payload.items():"},{"line_number":69,"context_line":"            for remap_key, remap_value in mapping[index].items():"},{"line_number":70,"context_line":"                if coll_key \u003d\u003d remap_key:"}],"source_content_type":"text/x-python","patch_set":29,"id":"bf659307_70efade8","line":67,"range":{"start_line":67,"start_character":15,"end_line":67,"end_character":22},"updated":"2018-04-02 16:40:38.000000000","message":"it seems like this is not always a dict","commit_id":"32ef5a59600d09c5a65c382230b881d5ff2d1734"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        collection \u003d db_api.get_execution_report(execution_id, full_report)"},{"line_number":47,"context_line":"        LOG.debug(\"Modeling data...\\n\")"},{"line_number":48,"context_line":"        if len(collection) \u003e 1:"},{"line_number":49,"context_line":"            for _index, payload in enumerate(collection):"},{"line_number":50,"context_line":"                return _model_list_to_dict(payload)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            return _model_list_to_dict(collection)"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_709d6d64","line":49,"range":{"start_line":49,"start_character":35,"end_line":49,"end_character":44},"updated":"2018-04-02 16:40:38.000000000","message":"Why enumerate when you don\u0027t use the index?","commit_id":"f0913a85bf5fabf1f2b07af6356b0dbfde2c591e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        collection \u003d db_api.get_execution_report(execution_id, full_report)"},{"line_number":47,"context_line":"        LOG.debug(\"Modeling data...\\n\")"},{"line_number":48,"context_line":"        if len(collection) \u003e 1:"},{"line_number":49,"context_line":"            for _index, payload in enumerate(collection):"},{"line_number":50,"context_line":"                return _model_list_to_dict(payload)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            return _model_list_to_dict(collection)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_50a709be","line":50,"range":{"start_line":49,"start_character":0,"end_line":50,"end_character":51},"updated":"2018-04-02 16:40:38.000000000","message":"This will only ever return the first - that seems wrong?","commit_id":"f0913a85bf5fabf1f2b07af6356b0dbfde2c591e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        LOG.debug(\"Modeling data...\\n\")"},{"line_number":48,"context_line":"        if len(collection) \u003e 1:"},{"line_number":49,"context_line":"            for _index, payload in enumerate(collection):"},{"line_number":50,"context_line":"                return _model_list_to_dict(payload)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            return _model_list_to_dict(collection)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_f0a97d8f","line":50,"range":{"start_line":50,"start_character":43,"end_line":50,"end_character":50},"updated":"2018-04-02 16:40:38.000000000","message":"what exactly is payload here? one of them isn\u0027t an iterable of dics","commit_id":"f0913a85bf5fabf1f2b07af6356b0dbfde2c591e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            for _index, payload in enumerate(collection):"},{"line_number":50,"context_line":"                return _model_list_to_dict(payload)"},{"line_number":51,"context_line":"        else:"},{"line_number":52,"context_line":"            return _model_list_to_dict(collection)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def _model_list_to_dict(collection):"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_7076cd40","line":52,"range":{"start_line":52,"start_character":39,"end_line":52,"end_character":49},"updated":"2018-04-02 16:40:38.000000000","message":"what is collection here? one of them isn\u0027t an iterable of dics","commit_id":"f0913a85bf5fabf1f2b07af6356b0dbfde2c591e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    mapping \u003d [WORKFLOW_COLUMNS, TASK_COLUMNS, ACTION_COLUMNS]"},{"line_number":65,"context_line":"    report \u003d {}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    for index, payload in enumerate(collection):"},{"line_number":68,"context_line":"        for coll_key, coll_value in payload.items():"},{"line_number":69,"context_line":"            for remap_key, remap_value in mapping[index].items():"},{"line_number":70,"context_line":"                if coll_key \u003d\u003d remap_key:"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_30a4d5b9","line":67,"range":{"start_line":67,"start_character":15,"end_line":67,"end_character":22},"updated":"2018-04-02 16:40:38.000000000","message":"based on the traceback you sent payload isn\u0027t always a dict, so the next line fails","commit_id":"f0913a85bf5fabf1f2b07af6356b0dbfde2c591e"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"606b2c49a7a4c3cf933d3453be1037f3e8b98928","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    report \u003d {}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    for index, payload in enumerate(collection):"},{"line_number":68,"context_line":"        for coll_key, coll_value in payload.items():"},{"line_number":69,"context_line":"            for remap_key, remap_value in mapping[index].items():"},{"line_number":70,"context_line":"                if coll_key \u003d\u003d remap_key:"},{"line_number":71,"context_line":"                    report[remap_value] \u003d coll_value"}],"source_content_type":"text/x-python","patch_set":30,"id":"bf659307_70c80d73","line":68,"range":{"start_line":68,"start_character":36,"end_line":68,"end_character":49},"updated":"2018-04-02 16:40:38.000000000","message":"the error is here.","commit_id":"f0913a85bf5fabf1f2b07af6356b0dbfde2c591e"}],"mistral/services/inquiry_manager.py":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from mistral.db.v2 import api as db_api"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"WORKFLOW_MAPPING \u003d {"},{"line_number":18,"context_line":"    \"id\": \"execution_id\", \"workflow_name\": \"workflow_name\","},{"line_number":19,"context_line":"    \"state\": \"workflow_state\", \"workflow_id\": \"workflow_id\","},{"line_number":20,"context_line":"    \"state_info\": \"workflow_state_info\", \"created_at\": \"created_at\","}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_1b740399","line":17,"updated":"2017-06-20 14:02:10.000000000","message":"I believe this should be execution_mapping. It confuses the concepts a bit I think. i.e. workflow_state is really execution_state.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from mistral.db.v2 import api as db_api"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"WORKFLOW_MAPPING \u003d {"},{"line_number":18,"context_line":"    \"id\": \"execution_id\", \"workflow_name\": \"workflow_name\","},{"line_number":19,"context_line":"    \"state\": \"workflow_state\", \"workflow_id\": \"workflow_id\","},{"line_number":20,"context_line":"    \"state_info\": \"workflow_state_info\", \"created_at\": \"created_at\","}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_9ec12132","line":17,"in_reply_to":"5f201791_1b740399","updated":"2018-03-15 14:49:30.000000000","message":"ack.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"ACTION_MAPPING \u003d {"},{"line_number":30,"context_line":"    \"id\": \"action_id\", \"name\": \"action_execution_name\","},{"line_number":31,"context_line":"    \"state\": \"action_state\", \"state_info\": \"action_state_info\","},{"line_number":32,"context_line":"    \"output\": \"workflow_traceinfo\", \"task_execution_id\": \"task_execution_id\""},{"line_number":33,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_fb114755","line":30,"updated":"2017-06-20 14:02:10.000000000","message":"I think this should be action_name","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"ACTION_MAPPING \u003d {"},{"line_number":30,"context_line":"    \"id\": \"action_id\", \"name\": \"action_execution_name\","},{"line_number":31,"context_line":"    \"state\": \"action_state\", \"state_info\": \"action_state_info\","},{"line_number":32,"context_line":"    \"output\": \"workflow_traceinfo\", \"task_execution_id\": \"task_execution_id\""},{"line_number":33,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_dec79945","line":30,"in_reply_to":"5f201791_fb114755","updated":"2018-03-15 14:49:30.000000000","message":"ack.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"0f5ad88b5f1392aa2ede5f106ca632a166d46902","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ACTION_MAPPING \u003d {"},{"line_number":30,"context_line":"    \"id\": \"action_id\", \"name\": \"action_execution_name\","},{"line_number":31,"context_line":"    \"state\": \"action_state\", \"state_info\": \"action_state_info\","},{"line_number":32,"context_line":"    \"output\": \"workflow_traceinfo\", \"task_execution_id\": \"task_execution_id\""},{"line_number":33,"context_line":"}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_bb34efdf","line":32,"updated":"2017-06-20 14:02:10.000000000","message":"I don\u0027t think we should introduce new names/concepts. Can we call it action_output instead of workflow_traceinfo?","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ACTION_MAPPING \u003d {"},{"line_number":30,"context_line":"    \"id\": \"action_id\", \"name\": \"action_execution_name\","},{"line_number":31,"context_line":"    \"state\": \"action_state\", \"state_info\": \"action_state_info\","},{"line_number":32,"context_line":"    \"output\": \"workflow_traceinfo\", \"task_execution_id\": \"task_execution_id\""},{"line_number":33,"context_line":"}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5f201791_beabbd73","line":32,"in_reply_to":"5f201791_bb34efdf","updated":"2018-03-15 14:49:30.000000000","message":"Sure, thanks for the feedback.","commit_id":"725fc69593438a973a248f383f54cd1941921bf1"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"c2a387e4ca4067a768535977393f5880d2896dc9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def get_information(workflow_id, constraint):"},{"line_number":37,"context_line":"    return _normalize(db_api.get_inquiry(workflow_id), constraint)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_dffb2abb","line":36,"range":{"start_line":36,"start_character":20,"end_line":36,"end_character":31},"updated":"2017-06-28 13:08:03.000000000","message":"Should be execution id.","commit_id":"ddc788a77f06f00318bcaa5e021e70ee2b5e4328"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"c2a387e4ca4067a768535977393f5880d2896dc9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    if constraint \u003d\u003d \"action\":"},{"line_number":52,"context_line":"        mapping \u003d [mapping[2]]"},{"line_number":53,"context_line":"        collection \u003d [collection[2]]"},{"line_number":54,"context_line":"    if constraint is not None:"},{"line_number":55,"context_line":"        raise ValueError(\"Please specify a valid constraint.\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    for index, payload in enumerate(collection):"},{"line_number":58,"context_line":"        for coll_key, coll_value in payload.items():"}],"source_content_type":"text/x-python","patch_set":17,"id":"5f201791_1f6ac218","line":55,"range":{"start_line":54,"start_character":4,"end_line":55,"end_character":62},"updated":"2017-06-28 13:08:03.000000000","message":"This seems to be incorrect as the previous conditions are practically ignored.","commit_id":"ddc788a77f06f00318bcaa5e021e70ee2b5e4328"},{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"5ae2944ce6ac30f59ea106a672ce1042675855cc","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def get_information(workflow_execution_id, constraint):"},{"line_number":37,"context_line":"    return _normalize(db_api.get_inquiry(workflow_execution_id), constraint)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _normalize(data_model_query, constraint):"},{"line_number":41,"context_line":"    mapping \u003d [EXECUTION_MAPPING, TASK_MAPPING, ACTION_MAPPING]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_ce6c879e","line":38,"updated":"2017-06-29 09:04:18.000000000","message":"Not a huge fan of \ndef foo():\n   return _foo()\n\ndef _foo():\n   #only useful for the foo(case)\n\nUnless you feel _normalize would be used somewhere else I would consider merging both methods together","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    return _normalize(db_api.get_inquiry(workflow_execution_id), constraint)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _normalize(data_model_query, constraint):"},{"line_number":41,"context_line":"    mapping \u003d [EXECUTION_MAPPING, TASK_MAPPING, ACTION_MAPPING]"},{"line_number":42,"context_line":"    report \u003d {}"},{"line_number":43,"context_line":"    collection \u003d data_model_query[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_ae5f0b0d","line":40,"updated":"2017-06-29 08:59:27.000000000","message":"I think this function is currently broken.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"74245c3df7d515fa53cf47b93e74b08c4e1b182d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    return _normalize(db_api.get_inquiry(workflow_execution_id), constraint)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _normalize(data_model_query, constraint):"},{"line_number":41,"context_line":"    mapping \u003d [EXECUTION_MAPPING, TASK_MAPPING, ACTION_MAPPING]"},{"line_number":42,"context_line":"    report \u003d {}"},{"line_number":43,"context_line":"    collection \u003d data_model_query[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_097dd91b","line":40,"in_reply_to":"3f1d235d_ae5f0b0d","updated":"2017-06-29 09:02:05.000000000","message":"oops, I didn\u0027t finish this thought - if a constraint is passed I think it will always raise an exception on L55","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"def _normalize(data_model_query, constraint):"},{"line_number":41,"context_line":"    mapping \u003d [EXECUTION_MAPPING, TASK_MAPPING, ACTION_MAPPING]"},{"line_number":42,"context_line":"    report \u003d {}"},{"line_number":43,"context_line":"    collection \u003d data_model_query[0]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    if constraint \u003d\u003d \"workflow\":"},{"line_number":46,"context_line":"        mapping \u003d [mapping[0]]"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_2e5e5be6","line":43,"updated":"2017-06-29 08:59:27.000000000","message":"We only ever use [0] - can we just pass that in?","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    if constraint \u003d\u003d \"workflow\":"},{"line_number":46,"context_line":"        mapping \u003d [mapping[0]]"},{"line_number":47,"context_line":"        collection \u003d [collection[0]]"},{"line_number":48,"context_line":"    if constraint \u003d\u003d \"task\":"},{"line_number":49,"context_line":"        mapping \u003d [mapping[1]]"},{"line_number":50,"context_line":"        collection \u003d [collection[1]]"},{"line_number":51,"context_line":"    if constraint \u003d\u003d \"action\":"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_033ed828","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":6},"updated":"2017-06-29 08:59:27.000000000","message":"elif  ?","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    if constraint \u003d\u003d \"task\":"},{"line_number":49,"context_line":"        mapping \u003d [mapping[1]]"},{"line_number":50,"context_line":"        collection \u003d [collection[1]]"},{"line_number":51,"context_line":"    if constraint \u003d\u003d \"action\":"},{"line_number":52,"context_line":"        mapping \u003d [mapping[2]]"},{"line_number":53,"context_line":"        collection \u003d [collection[2]]"},{"line_number":54,"context_line":"    if constraint is not None:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_c347c0bc","line":51,"range":{"start_line":51,"start_character":4,"end_line":51,"end_character":6},"updated":"2017-06-29 08:59:27.000000000","message":"elif  ?","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    if constraint \u003d\u003d \"action\":"},{"line_number":52,"context_line":"        mapping \u003d [mapping[2]]"},{"line_number":53,"context_line":"        collection \u003d [collection[2]]"},{"line_number":54,"context_line":"    if constraint is not None:"},{"line_number":55,"context_line":"        raise ValueError(\"Please specify a valid constraint.\")"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    for index, payload in enumerate(collection):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_238794da","line":54,"range":{"start_line":54,"start_character":4,"end_line":54,"end_character":30},"updated":"2017-06-29 08:59:27.000000000","message":"else:  ?","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"}],"mistral/services/report_analysis.py":[{"author":{"_account_id":8731,"name":"Renat Akhmerov","email":"renat.akhmerov@gmail.com","username":"rakhmerov"},"change_message_id":"2741287ad297a334bf98a81aecbd5d6bf8468053","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def get_report(workflow_exec, tasks_list):"},{"line_number":44,"context_line":"    \"\"\"Return requested Error Analysis\"\"\""},{"line_number":45,"context_line":"    if tasks_list is None:"},{"line_number":46,"context_line":"        raise ValueError(\"Can\u0027t find any task in list.\")"},{"line_number":47,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_71ef37b0","line":44,"updated":"2017-04-26 12:47:28.000000000","message":"Just a small thing: We always make comments and docstrings compliant with regular English grammer. So please add a period in the end. Also, I\u0027m not sure if Error Analysis should start with a capital.","commit_id":"51137c190b550a9555469d45887283b877aefe03"}],"mistral/tests/unit/api/v2/test_execution_report.py":[{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"b95c92575f9c862a82db1d9464869451ae3ebf6f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"#    limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import datetime"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# from mistral.db.v2 import api as db_api"},{"line_number":19,"context_line":"from mistral.db.v2.sqlalchemy import models"},{"line_number":20,"context_line":"from mistral.services import execution_report_manager as erm"},{"line_number":21,"context_line":"from mistral.tests.unit.api import base"},{"line_number":22,"context_line":"from mistral.workflow import states"},{"line_number":23,"context_line":"# from mistral import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"WF_EX \u003d models.WorkflowExecution("},{"line_number":27,"context_line":"    id\u003d\u0027abc\u0027,"},{"line_number":28,"context_line":"    workflow_name\u003d\u0027flow\u0027,"},{"line_number":29,"context_line":"    description\u003d\u0027execution description.\u0027,"},{"line_number":30,"context_line":"    state\u003dstates.SUCCESS,"},{"line_number":31,"context_line":"    state_info\u003dNone,"},{"line_number":32,"context_line":"    created_at\u003ddatetime.datetime(1970, 1, 1),"},{"line_number":33,"context_line":"    updated_at\u003ddatetime.datetime(1970, 1, 1)"},{"line_number":34,"context_line":")"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"TASK_EX \u003d models.TaskExecution("},{"line_number":37,"context_line":"    id\u003d\u0027123e4567-e89b-12d3-a456-426655440000\u0027,"},{"line_number":38,"context_line":"    name\u003d\u0027task\u0027,"},{"line_number":39,"context_line":"    state\u003dstates.SUCCESS,"},{"line_number":40,"context_line":"    state_info\u003d\u0027None\u0027,"},{"line_number":41,"context_line":")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"ACTION_EX \u003d models.ActionExecution(output\u003d{})"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"REPORT \u003d {"},{"line_number":46,"context_line":"    \u0027id\u0027: \u0027abc\u0027,"},{"line_number":47,"context_line":"    \u0027workflow_name\u0027: \u0027flow\u0027,"},{"line_number":48,"context_line":"    \u0027workflow_id\u0027: \u0027123e4567-e89b-12d3-a456-426655441111\u0027,"},{"line_number":49,"context_line":"    \u0027workflow_state\u0027: states.SUCCESS,"},{"line_number":50,"context_line":"    \u0027task_name\u0027: \u0027task\u0027,"},{"line_number":51,"context_line":"    \u0027task_id\u0027: \u0027123e4567-e89b-12d3-a456-426655440000\u0027,"},{"line_number":52,"context_line":"    \u0027task_state\u0027: \u0027ERROR\u0027,"},{"line_number":53,"context_line":"    \u0027task_state_info\u0027: None,"},{"line_number":54,"context_line":"    \u0027action_output\u0027: {},"},{"line_number":55,"context_line":"    \u0027created_at\u0027: datetime.datetime(1970, 1, 1),"},{"line_number":56,"context_line":"    \u0027updated_at\u0027: datetime.datetime(1970, 1, 1)"},{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"MOCK_REPORT_DB \u003d mock.MagicMock(return_value\u003d(WF_EX, TASK_EX, ACTION_EX))"},{"line_number":60,"context_line":"MOCK_EMPTY \u003d mock.MagicMock(return_value\u003d[])"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class TestExecutionReportController(base.APITest):"},{"line_number":64,"context_line":"    @mock.patch.object(erm, \"get_execution_report\", MOCK_REPORT_DB)"},{"line_number":65,"context_line":"    def test_get(self):"},{"line_number":66,"context_line":"        resp \u003d self.app.get(\u0027/v2/execution_report?execution_id\u003d123\u0027)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.assertEqual(200, resp.status_int)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.assertEqual(1, len(resp.json[\u0027execution_reports\u0027][0][\u0027id\u0027]))"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertDictEqual(REPORT, resp.json[\u0027execution_reports\u0027][0])"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    @mock.patch.object(erm, \"get_execution_report\", MOCK_EMPTY)"},{"line_number":75,"context_line":"    def test_get_all_empty(self):"},{"line_number":76,"context_line":"        resp \u003d self.app.get(\u0027/v2/execution_report?execution_id\u003d\u0027\u0027\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertEqual(200, resp.status_int)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        self.assertIs(None, resp.json.get(\u0027workflow_name\u0027))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    # @mock.patch.object(db_api, \"get_execution_report\", MOCK_REPORT_DB)"},{"line_number":83,"context_line":"    # def test_get_all_pagination(self):"},{"line_number":84,"context_line":"    #     resp \u003d self.app.get("},{"line_number":85,"context_line":"    #         \u0027/v2/execution_report?limit\u003d1\u0026sort_keys\u003did,name\u0027)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    #     self.assertEqual(200, resp.status_int)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    #     self.assertIn(\u0027next\u0027, resp.json)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    #     self.assertEqual(1, len(resp.json[\u0027workflow_name\u0027]))"},{"line_number":92,"context_line":"    #     self.assertDictEqual(REPORT, resp.json[\u0027workflow_name\u0027][0])"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    #     param_dict \u003d utils.get_dict_from_string("},{"line_number":95,"context_line":"    #         resp.json[\u0027next\u0027].split(\u0027?\u0027)[1],"},{"line_number":96,"context_line":"    #         delimiter\u003d\u0027\u0026\u0027"},{"line_number":97,"context_line":"    #     )"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    #     expected_dict \u003d {"},{"line_number":100,"context_line":"    #         \u0027marker\u0027: \u0027123e4567-e89b-12d3-a456-426655441111\u0027,"},{"line_number":101,"context_line":"    #         \u0027limit\u0027: 1,"},{"line_number":102,"context_line":"    #         \u0027sort_keys\u0027: \u0027id,name\u0027,"},{"line_number":103,"context_line":"    #         \u0027sort_dirs\u0027: \u0027asc,asc\u0027,"},{"line_number":104,"context_line":"    #     }"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    #     self.assertDictEqual(expected_dict, param_dict)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    # def test_get_all_pagination_limit_negative(self):"},{"line_number":109,"context_line":"    #     resp \u003d self.app.get("},{"line_number":110,"context_line":"    #         \u0027/v2/execution_report?limit\u003d-1\u0026sort_keys\u003did,\u0027"},{"line_number":111,"context_line":"    #         \u0027name\u0026sort_dirs\u003dasc,asc\u0027,"},{"line_number":112,"context_line":"    #         expect_errors\u003dTrue"},{"line_number":113,"context_line":"    #     )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    #     self.assertEqual(400, resp.status_int)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    #     self.assertIn(\"Limit must be positive\", resp.body.decode())"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    # def test_get_all_pagination_limit_not_integer(self):"},{"line_number":120,"context_line":"    #     resp \u003d self.app.get("},{"line_number":121,"context_line":"    #         \u0027/v2/workflows?limit\u003d1.1\u0026sort_keys\u003did,name\u0026sort_dirs\u003dasc,asc\u0027,"},{"line_number":122,"context_line":"    #         expect_errors\u003dTrue"},{"line_number":123,"context_line":"    #     )"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    #     self.assertEqual(400, resp.status_int)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    #     self.assertIn(\"unable to convert to int\", resp.body.decode())"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    # def test_get_all_pagination_invalid_sort_dirs_length(self):"},{"line_number":130,"context_line":"    #     resp \u003d self.app.get("},{"line_number":131,"context_line":"    #         \u0027/v2/execution_report?limit\u003d1\u0026sort_keys\u003did,\u0027"},{"line_number":132,"context_line":"    #         \u0027name\u0026sort_dirs\u003dasc,asc,asc\u0027,"},{"line_number":133,"context_line":"    #         expect_errors\u003dTrue"},{"line_number":134,"context_line":"    #     )"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    #     self.assertEqual(400, resp.status_int)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    #     self.assertIn("},{"line_number":139,"context_line":"    #         \"Length of sort_keys must be equal or greater than sort_dirs\","},{"line_number":140,"context_line":"    #         resp.body.decode()"},{"line_number":141,"context_line":"    #     )"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    # def test_get_all_pagination_unknown_direction(self):"},{"line_number":144,"context_line":"    #     resp \u003d self.app.get("},{"line_number":145,"context_line":"    #         \u0027/v2/execution_report?limit\u003d1\u0026sort_keys\u003did\u0026sort_dirs\u003dnonexist\u0027,"},{"line_number":146,"context_line":"    #         expect_errors\u003dTrue"},{"line_number":147,"context_line":"    #     )"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    #     self.assertEqual(400, resp.status_int)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    #     self.assertIn(\"Unknown sort direction\", resp.body.decode())"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    # @mock.patch(\u0027mistral.db.v2.api.get_execution_report\u0027)"},{"line_number":154,"context_line":"    # def test_get_all_with_fields_filter(self, mock_get_db_wfs):"},{"line_number":155,"context_line":"    #     mock_get_db_wfs.return_value \u003d ["},{"line_number":156,"context_line":"    #         (\u0027123e4567-e89b-12d3-a456-426655441111\u0027, \u0027fake_name\u0027)"},{"line_number":157,"context_line":"    #     ]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    #     resp \u003d self.app.get(\u0027/v2/execution_report?fields\u003dname\u0027)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    #     self.assertEqual(200, resp.status_int)"},{"line_number":162,"context_line":"    #     self.assertEqual(1, len(resp.json[\u0027workflows\u0027]))"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    #     expected_dict \u003d {"},{"line_number":165,"context_line":"    #         \u0027id\u0027: \u0027123e4567-e89b-12d3-a456-426655441111\u0027,"},{"line_number":166,"context_line":"    #         \u0027name\u0027: \u0027fake_name\u0027"},{"line_number":167,"context_line":"    #     }"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    #     self.assertDictEqual(expected_dict, resp.json[\u0027workflows\u0027][0])"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    # def test_get_all_with_invalid_field(self):"},{"line_number":172,"context_line":"    #     resp \u003d self.app.get("},{"line_number":173,"context_line":"    #         \u0027/v2/execution_report?fields\u003dname,nonexist\u0027,"},{"line_number":174,"context_line":"    #         expect_errors\u003dTrue"},{"line_number":175,"context_line":"    #     )"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    #     self.assertEqual(400, resp.status_int)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    #     self.assertIn("},{"line_number":180,"context_line":"    #         \"nonexist are invalid\","},{"line_number":181,"context_line":"    #         resp.body.decode()"},{"line_number":182,"context_line":"    #     )"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f79a3b5_f54fcb8f","line":182,"range":{"start_line":14,"start_character":0,"end_line":182,"end_character":11},"updated":"2018-08-18 00:05:47.000000000","message":"will rework this test.","commit_id":"2f8773d5843247dd74d4e5a8bfe5d177f2b20904"}],"mistral/tests/unit/api/v2/test_inquiry.py":[{"author":{"_account_id":15895,"name":"Adriano Petrich","email":"apetrich@redhat.com","username":"apetrich"},"change_message_id":"5ae2944ce6ac30f59ea106a672ce1042675855cc","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        self.assertEqual(404, resp.status_int)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @mock.patch.object(db_api, \u0027get_inquiry\u0027, MOCK_INQUIRY_DB)"},{"line_number":136,"context_line":"    @mock.patch.object(inquiry_manager, \u0027get_information\u0027, MOCK_INQUIRY_WF)"},{"line_number":137,"context_line":"    def test_get_constraint_workflow(self):"},{"line_number":138,"context_line":"        resp \u003d self.app.get("},{"line_number":139,"context_line":"            \u0027/v2/inquiry/123?constraint\u003dworkflow\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_29453518","line":136,"updated":"2017-06-29 09:04:18.000000000","message":"I think we are over mocking here. if we mock the get_information and that is not testing if the constrain got passed to the _normalize method or even if the _normalize works.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_get_constraint_task(self):"},{"line_number":147,"context_line":"        resp \u003d self.app.get("},{"line_number":148,"context_line":"            \u0027/v2/inquiry/123?constraint\u003dtask\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.assertEqual(200, resp.status_int)"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_ce2da7a9","line":148,"updated":"2017-06-29 08:59:27.000000000","message":"I don\u0027t think I understand the constraints - when you do that are you not limiting it to what we have now? i.e. this would then be very similar to \"mistral task-list EXECUTION_ID\"\n\nIsn\u0027t the value that we are adding with the inquiry that it collects the information from multiple resources and lets you see it together?\n\n... or maybe I just don\u0027t really understand what it is doing.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":21970,"name":"Andras Kovi","email":"akovi@nokia.com","username":"andras.kovi"},"change_message_id":"e6acfd5af1ae15c46722ae626859b20f3a781974","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_get_constraint_task(self):"},{"line_number":147,"context_line":"        resp \u003d self.app.get("},{"line_number":148,"context_line":"            \u0027/v2/inquiry/123?constraint\u003dtask\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.assertEqual(200, resp.status_int)"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_74353df7","line":148,"in_reply_to":"3f1d235d_ce2da7a9","updated":"2017-06-29 11:00:01.000000000","message":"It may be useful if the blueprint was updated to contain a description of the APIs intended to be added in this change. I\u0027m not clear with the intention either.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"},{"author":{"_account_id":11085,"name":"Toure Dunnon","email":"toure@redhat.com","username":"Toure"},"change_message_id":"4d1fdbf08630a73c73b7c1ef97f1491003e658d2","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_get_constraint_task(self):"},{"line_number":147,"context_line":"        resp \u003d self.app.get("},{"line_number":148,"context_line":"            \u0027/v2/inquiry/123?constraint\u003dtask\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        self.assertEqual(200, resp.status_int)"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_61cb2f53","line":148,"in_reply_to":"3f1d235d_ce2da7a9","updated":"2018-03-15 14:49:30.000000000","message":"This additional feature was requested, as a way to restrict the view of the data being returned.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"}],"mistral/tests/unit/services/test_inquiry_manager.py":[{"author":{"_account_id":9712,"name":"Dougal Matthews","email":"dougal.matthews@canonical.com","username":"dougal"},"change_message_id":"2a20c8ba69978b35a9d3af4bbbbdc7696a971eb9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"MOCK_INQUIRY \u003d mock.MagicMock(return_value\u003dINQUIRY)"},{"line_number":113,"context_line":"MOCK_INQUIRY_WF \u003d mock.MagicMock(return_value\u003dINQUIRY_WF)"},{"line_number":114,"context_line":"MOCK_INQUIRY_TASK \u003d mock.MagicMock(return_value\u003dINQUIRY_TASK)"},{"line_number":115,"context_line":"MOCK_INQUIRY_ACTION \u003d mock.MagicMock(return_value\u003dINQUIRY_ACTION)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"class InquiryManagerTest(base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3f1d235d_497d116d","line":115,"updated":"2017-06-29 08:59:27.000000000","message":"I think most (or all) of these fixtures are the same as in the other tests, but I don\u0027t think they are all used in both - maybe some are not used yet? anyway, it would be better to put them in the same file and import them rather than duplicate.","commit_id":"303993d0e9155e011060df1871c69a901ba0c5bb"}]}
