)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"723911382c367d52ee2c070e3b8641c0fce7c72a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[CLI] Display task errors in human-friendly form"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Improved CLI for tasks by adding error ouput in"},{"line_number":10,"context_line":"\"task detailed\"  for displaying errors emerged"},{"line_number":11,"context_line":"during task run in human-friendly form."},{"line_number":12,"context_line":"Once task is finished, errors along with traceback"},{"line_number":13,"context_line":"will be showed to user in task detailed report."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I72120c287c4c67d0e038b90e9ed36d214b6dae13"},{"line_number":16,"context_line":"Closes-Bug: #1381103"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"9a061dce_0c36d0e5","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":47},"updated":"2016-04-06 07:22:33.000000000","message":"Keep it simple / non-redundant, something like-\nImprove \"rally task detailed\" command by displaying errors along with traceback in human friendly form during task run.","commit_id":"9b1456acd72a6a1b932c1fdc535cdd13caf1ad4b"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"2c8f35e25e3a4ed37f5d7165063107bba247227c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[CLI] Display task errors in human-friendly form"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Improved CLI for tasks by adding error ouput in"},{"line_number":10,"context_line":"\"task detailed\"  for displaying errors emerged"},{"line_number":11,"context_line":"during task run in human-friendly form."},{"line_number":12,"context_line":"Once task is finished, errors along with traceback"},{"line_number":13,"context_line":"will be showed to user in task detailed report."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I72120c287c4c67d0e038b90e9ed36d214b6dae13"},{"line_number":16,"context_line":"Closes-Bug: #1381103"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"9a061dce_ccf97882","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":47},"in_reply_to":"9a061dce_0c36d0e5","updated":"2016-04-06 07:29:18.000000000","message":"Done","commit_id":"9b1456acd72a6a1b932c1fdc535cdd13caf1ad4b"}],"rally/cli/commands/task.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"605400fe8b30d8a8a2cf87197f394031cb29eabc","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                        output.append(output_table)"},{"line_number":378,"context_line":"                    output[idx].add_iteration(additive[\"data\"])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"            self.errors(task_id)"},{"line_number":381,"context_line":"            cols \u003d plot.charts.MainStatsTable.columns"},{"line_number":382,"context_line":"            float_cols \u003d cols[1:7]"},{"line_number":383,"context_line":"            formatters \u003d dict(zip(float_cols,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_caa749a5","line":380,"updated":"2016-03-18 18:29:22.000000000","message":"I think that its bad idea to call one cli function from other.","commit_id":"836d6d8a660a7e4d2411ece506575658beb73b5c"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"c5e12f6f3d6a9bfb3fd8dbd59e8a56aea2af08ff","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                        output.append(output_table)"},{"line_number":378,"context_line":"                    output[idx].add_iteration(additive[\"data\"])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"            self.errors(task_id)"},{"line_number":381,"context_line":"            cols \u003d plot.charts.MainStatsTable.columns"},{"line_number":382,"context_line":"            float_cols \u003d cols[1:7]"},{"line_number":383,"context_line":"            formatters \u003d dict(zip(float_cols,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_3fb3760b","line":380,"in_reply_to":"1af94dfe_caa749a5","updated":"2016-03-19 21:38:00.000000000","message":"Done","commit_id":"836d6d8a660a7e4d2411ece506575658beb73b5c"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"a2637e4793d07dcca7a5d56fa15d3f2aa561af36","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        for result in results:"},{"line_number":710,"context_line":"            for data in result[\"data\"][\"raw\"]:"},{"line_number":711,"context_line":"                if \"error\" in data.keys() and len(data[\"error\"]) \u003e 0:"},{"line_number":712,"context_line":"                    error_type \u003d \"\""},{"line_number":713,"context_line":"                    error_message \u003d \"\""},{"line_number":714,"context_line":"                    error_traceback \u003d \"No traceback available\""},{"line_number":715,"context_line":"                    try:"},{"line_number":716,"context_line":"                        error_type \u003d data[\"error\"][0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_dbf5c0cb","line":713,"range":{"start_line":712,"start_character":20,"end_line":713,"end_character":38},"updated":"2016-03-22 17:25:46.000000000","message":"would like to leave \"Unknown type\" and \"Rally doesn\u0027t catch something yet.\" which will be helpful on L723 if we hit index error.","commit_id":"9f7ab6cf26c48b5457a96c8af84521fc83fa5ea7"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"4cfe24f94e55756f3f6e17617dd1d2de6790222c","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        for result in results:"},{"line_number":710,"context_line":"            for data in result[\"data\"][\"raw\"]:"},{"line_number":711,"context_line":"                if \"error\" in data.keys() and len(data[\"error\"]) \u003e 0:"},{"line_number":712,"context_line":"                    error_type \u003d \"\""},{"line_number":713,"context_line":"                    error_message \u003d \"\""},{"line_number":714,"context_line":"                    error_traceback \u003d \"No traceback available\""},{"line_number":715,"context_line":"                    try:"},{"line_number":716,"context_line":"                        error_type \u003d data[\"error\"][0]"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_1ba73850","line":713,"range":{"start_line":712,"start_character":20,"end_line":713,"end_character":38},"in_reply_to":"fa0719c6_dbf5c0cb","updated":"2016-03-22 17:35:09.000000000","message":"Done","commit_id":"9f7ab6cf26c48b5457a96c8af84521fc83fa5ea7"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"7a80bbd6edc0a385e82ab6c00078c7a5ec91a753","unresolved":false,"context_lines":[{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    @staticmethod"},{"line_number":706,"context_line":"    def _show_errors(task_id):"},{"line_number":707,"context_line":"        results \u003d api.Task.get(task_id).get_results()"},{"line_number":708,"context_line":"        print(\"Task %s: errors\" % task_id)"},{"line_number":709,"context_line":"        for result in results:"},{"line_number":710,"context_line":"            for data in result[\"data\"][\"raw\"]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_e9e8f37e","line":707,"updated":"2016-03-25 16:49:10.000000000","message":"This query looks like a problem, because:\n\n- this is yet another results query, but, for example, in self.detailed() we already have all these results so we can simply collect all errors somewhere at https://github.com/openstack/rally/blob/master/rally/cli/commands/task.py#L351\n\n- keep in mind that there can be a huge amount of results (thousands of iterations) in some tasks so we should avoid such duplicated queries\n\n- this results format is actually deprecated - take a look at results() and extend_results() at https://github.com/openstack/rally/blob/master/rally/common/objects/task.py#L353-L357\n\nWe should use extended results whenever possible since we are on our way to database refactoring (extended results will become the only format). But self.detailed() already uses extended results format - find \"extended_results\u003dTrue\" at L303\n\nSo it is better to use existing detailed data to show errors by command \"rally task detailed\". And use api.Task.get_detailed(task_id, extended_results\u003dTrue) for obtaining data in separate command \"rally task errors\"","commit_id":"ae7bf9818cebbc605393ceff4e10972e540f0c8f"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"e1d2897f4765e4064343e3525a308ef0de0764fb","unresolved":false,"context_lines":[{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    @staticmethod"},{"line_number":706,"context_line":"    def _show_errors(task_id):"},{"line_number":707,"context_line":"        results \u003d api.Task.get(task_id).get_results()"},{"line_number":708,"context_line":"        print(\"Task %s: errors\" % task_id)"},{"line_number":709,"context_line":"        for result in results:"},{"line_number":710,"context_line":"            for data in result[\"data\"][\"raw\"]:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_a4dbe71a","line":707,"in_reply_to":"da0c15f0_e9e8f37e","updated":"2016-03-29 17:42:01.000000000","message":"Done","commit_id":"ae7bf9818cebbc605393ceff4e10972e540f0c8f"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"7a80bbd6edc0a385e82ab6c00078c7a5ec91a753","unresolved":false,"context_lines":[{"line_number":705,"context_line":"    @staticmethod"},{"line_number":706,"context_line":"    def _show_errors(task_id):"},{"line_number":707,"context_line":"        results \u003d api.Task.get(task_id).get_results()"},{"line_number":708,"context_line":"        print(\"Task %s: errors\" % task_id)"},{"line_number":709,"context_line":"        for result in results:"},{"line_number":710,"context_line":"            for data in result[\"data\"][\"raw\"]:"},{"line_number":711,"context_line":"                if \"error\" in data.keys() and len(data[\"error\"]) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_e9359346","line":708,"updated":"2016-03-25 16:49:10.000000000","message":"This is actually a header but it looks confusing (http://paste.openstack.org/show/491920/).\n\nPlease make something like this:\n\n errors_num \u003d ...\n print(\"Task %s has %d errors\" % (task_id, errors_num))","commit_id":"ae7bf9818cebbc605393ceff4e10972e540f0c8f"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"e1d2897f4765e4064343e3525a308ef0de0764fb","unresolved":false,"context_lines":[{"line_number":705,"context_line":"    @staticmethod"},{"line_number":706,"context_line":"    def _show_errors(task_id):"},{"line_number":707,"context_line":"        results \u003d api.Task.get(task_id).get_results()"},{"line_number":708,"context_line":"        print(\"Task %s: errors\" % task_id)"},{"line_number":709,"context_line":"        for result in results:"},{"line_number":710,"context_line":"            for data in result[\"data\"][\"raw\"]:"},{"line_number":711,"context_line":"                if \"error\" in data.keys() and len(data[\"error\"]) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba0121b8_64d1cffb","line":708,"in_reply_to":"da0c15f0_e9359346","updated":"2016-03-29 17:42:01.000000000","message":"Done","commit_id":"ae7bf9818cebbc605393ceff4e10972e540f0c8f"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"72e562a9a618f912a22f1738e1d026c321990722","unresolved":false,"context_lines":[{"line_number":786,"context_line":"    @staticmethod"},{"line_number":787,"context_line":"    def _format_task_error(data):"},{"line_number":788,"context_line":"        error_type \u003d \"Unknown type\""},{"line_number":789,"context_line":"        error_message \u003d \"Rally doesn\u0027t catch something yet.\""},{"line_number":790,"context_line":"        error_traceback \u003d \"No traceback available.\""},{"line_number":791,"context_line":"        try:"},{"line_number":792,"context_line":"            error_type \u003d data[\"error\"][0]"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c45abff1","line":789,"range":{"start_line":789,"start_character":25,"end_line":789,"end_character":58},"updated":"2016-03-31 10:52:45.000000000","message":"Rally didn\u0027t catch anything yet.","commit_id":"86777722a9e5392c7665472965d72eaaac4c5fe7"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"72e562a9a618f912a22f1738e1d026c321990722","unresolved":false,"context_lines":[{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @staticmethod"},{"line_number":787,"context_line":"    def _format_task_error(data):"},{"line_number":788,"context_line":"        error_type \u003d \"Unknown type\""},{"line_number":789,"context_line":"        error_message \u003d \"Rally doesn\u0027t catch something yet.\""},{"line_number":790,"context_line":"        error_traceback \u003d \"No traceback available.\""},{"line_number":791,"context_line":"        try:"},{"line_number":792,"context_line":"            error_type \u003d data[\"error\"][0]"},{"line_number":793,"context_line":"            error_message \u003d data[\"error\"][1]"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_840ba7d5","line":790,"range":{"start_line":788,"start_character":22,"end_line":790,"end_character":49},"updated":"2016-03-31 10:52:45.000000000","message":"Please wrap strings into l10n macro _(...)","commit_id":"86777722a9e5392c7665472965d72eaaac4c5fe7"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"291d1509c4de7fb4468d8a9f4923d9fc13279072","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task.\")"},{"line_number":760,"context_line":"    @envutils.with_default_task_id"},{"line_number":761,"context_line":"    @cliutils.suppress_warnings"},{"line_number":762,"context_line":"    def errors(self, task_id\u003dNone):"},{"line_number":763,"context_line":"        \"\"\"Display errors for given task"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        :param task_id: Task uuid"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_508b0568","line":762,"range":{"start_line":762,"start_character":3,"end_line":762,"end_character":35},"updated":"2016-03-31 12:07:36.000000000","message":"I think about reducing number of commands to display task results(we already have `task detailed`, `task results`, `task report`), so I\u0027m -1 for this new command.","commit_id":"1f5293a102c340921c476dc54c10fe01468ff9f1"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"8130b7894679420e11d0e1f288c54542ebf92231","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task.\")"},{"line_number":760,"context_line":"    @envutils.with_default_task_id"},{"line_number":761,"context_line":"    @cliutils.suppress_warnings"},{"line_number":762,"context_line":"    def errors(self, task_id\u003dNone):"},{"line_number":763,"context_line":"        \"\"\"Display errors for given task"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        :param task_id: Task uuid"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_d697478e","line":762,"range":{"start_line":762,"start_character":3,"end_line":762,"end_character":35},"in_reply_to":"ba0121b8_508b0568","updated":"2016-04-06 06:49:50.000000000","message":"Done","commit_id":"1f5293a102c340921c476dc54c10fe01468ff9f1"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"f2be66d391968f78bd301bc1933bcad32f0ec8af","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task.\")"},{"line_number":760,"context_line":"    @envutils.with_default_task_id"},{"line_number":761,"context_line":"    @cliutils.suppress_warnings"},{"line_number":762,"context_line":"    def errors(self, task_id\u003dNone):"},{"line_number":763,"context_line":"        \"\"\"Display errors for given task"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        :param task_id: Task uuid"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_9050fd33","line":762,"range":{"start_line":762,"start_character":3,"end_line":762,"end_character":35},"in_reply_to":"ba0121b8_508b0568","updated":"2016-03-31 12:14:35.000000000","message":"I think that it is good idea to have separate command to display errors only. For example this will be using for debugging. Printing errors and tracebacks along with other information would be inconvenient.","commit_id":"1f5293a102c340921c476dc54c10fe01468ff9f1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"291d1509c4de7fb4468d8a9f4923d9fc13279072","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            print(\"-\" * 80)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @staticmethod"},{"line_number":787,"context_line":"    def _format_task_error(data):"},{"line_number":788,"context_line":"        error_type \u003d _(\"Unknown type\")"},{"line_number":789,"context_line":"        error_message \u003d _(\"Rally doesn\u0027t catch something yet.\")"},{"line_number":790,"context_line":"        error_traceback \u003d _(\"No traceback available.\")"},{"line_number":791,"context_line":"        try:"},{"line_number":792,"context_line":"            error_type \u003d data[\"error\"][0]"},{"line_number":793,"context_line":"            error_message \u003d data[\"error\"][1]"},{"line_number":794,"context_line":"            error_traceback \u003d data[\"error\"][2]"},{"line_number":795,"context_line":"        except IndexError:"},{"line_number":796,"context_line":"            pass"},{"line_number":797,"context_line":"        return (\"%(error_type)s: %(error_message)s\\n\" %"},{"line_number":798,"context_line":"                {\"error_type\": error_type, \"error_message\": error_message},"},{"line_number":799,"context_line":"                error_traceback)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_90647db9","line":799,"range":{"start_line":787,"start_character":3,"end_line":799,"end_character":32},"updated":"2016-03-31 12:07:36.000000000","message":"Does it possible to print iteration number for error?","commit_id":"1f5293a102c340921c476dc54c10fe01468ff9f1"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"f2be66d391968f78bd301bc1933bcad32f0ec8af","unresolved":false,"context_lines":[{"line_number":784,"context_line":"            print(\"-\" * 80)"},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"    @staticmethod"},{"line_number":787,"context_line":"    def _format_task_error(data):"},{"line_number":788,"context_line":"        error_type \u003d _(\"Unknown type\")"},{"line_number":789,"context_line":"        error_message \u003d _(\"Rally doesn\u0027t catch something yet.\")"},{"line_number":790,"context_line":"        error_traceback \u003d _(\"No traceback available.\")"},{"line_number":791,"context_line":"        try:"},{"line_number":792,"context_line":"            error_type \u003d data[\"error\"][0]"},{"line_number":793,"context_line":"            error_message \u003d data[\"error\"][1]"},{"line_number":794,"context_line":"            error_traceback \u003d data[\"error\"][2]"},{"line_number":795,"context_line":"        except IndexError:"},{"line_number":796,"context_line":"            pass"},{"line_number":797,"context_line":"        return (\"%(error_type)s: %(error_message)s\\n\" %"},{"line_number":798,"context_line":"                {\"error_type\": error_type, \"error_message\": error_message},"},{"line_number":799,"context_line":"                error_traceback)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_50d665f1","line":799,"range":{"start_line":787,"start_character":3,"end_line":799,"end_character":32},"in_reply_to":"ba0121b8_90647db9","updated":"2016-03-31 12:14:35.000000000","message":"I tried to print out it, but it looks confusing. But It is possible If you insist","commit_id":"1f5293a102c340921c476dc54c10fe01468ff9f1"},{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"723911382c367d52ee2c070e3b8641c0fce7c72a","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                  task[\"uuid\"])"},{"line_number":441,"context_line":"            print(_(\"* To get raw JSON output of task results, run:\"))"},{"line_number":442,"context_line":"            print(\"\\trally task results %s\\n\" % task[\"uuid\"])"},{"line_number":443,"context_line":"            print(_(\"* To get only task errors in human friendly form, run:\"))"},{"line_number":444,"context_line":"            print(\"\\trally task errors %s\\n\" % task[\"uuid\"])"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task.\")"},{"line_number":447,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_59a248af","line":444,"range":{"start_line":443,"start_character":0,"end_line":444,"end_character":60},"updated":"2016-04-06 07:22:33.000000000","message":"This is not needed since we do not have \"rally task errors\" command anymore.","commit_id":"9b1456acd72a6a1b932c1fdc535cdd13caf1ad4b"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"2c8f35e25e3a4ed37f5d7165063107bba247227c","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                  task[\"uuid\"])"},{"line_number":441,"context_line":"            print(_(\"* To get raw JSON output of task results, run:\"))"},{"line_number":442,"context_line":"            print(\"\\trally task results %s\\n\" % task[\"uuid\"])"},{"line_number":443,"context_line":"            print(_(\"* To get only task errors in human friendly form, run:\"))"},{"line_number":444,"context_line":"            print(\"\\trally task errors %s\\n\" % task[\"uuid\"])"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    @cliutils.args(\"--uuid\", type\u003dstr, dest\u003d\"task_id\", help\u003d\"UUID of task.\")"},{"line_number":447,"context_line":"    @envutils.with_default_task_id"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_ec727c48","line":444,"range":{"start_line":443,"start_character":0,"end_line":444,"end_character":60},"in_reply_to":"9a061dce_59a248af","updated":"2016-04-06 07:29:18.000000000","message":"Done","commit_id":"9b1456acd72a6a1b932c1fdc535cdd13caf1ad4b"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"b4cdb04cdb51b0637bde1b649c5c0a71c6bf7d18","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                        output.append(output_table)"},{"line_number":382,"context_line":"                    output[idx].add_iteration(additive[\"data\"])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"                if \"error\" in itr.keys() and len(itr[\"error\"]) \u003e 0:"},{"line_number":385,"context_line":"                    task_errors.append(TaskCommands._format_task_error(itr))"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            TaskCommands._print_task_errors(task_id, task_errors)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_b74c0dc9","line":384,"range":{"start_line":384,"start_character":40,"end_line":384,"end_character":41},"updated":"2016-04-07 07:45:01.000000000","message":"if itr.get(\"error\"):\n  task_errors.append...\n\nThe first line stated this way will both check that \"error\" key exists and that itr[\"error\"] is non-empty line (and not None)\nAnd it is easier to read and more pythonic, as for me.","commit_id":"a1a57b22eb1a5daa1f1c857cd678b374dad7dba1"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"359f59f5c08af6c62ea3e1be66e381b0a8da279b","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                        output.append(output_table)"},{"line_number":382,"context_line":"                    output[idx].add_iteration(additive[\"data\"])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"                if \"error\" in itr.keys() and len(itr[\"error\"]) \u003e 0:"},{"line_number":385,"context_line":"                    task_errors.append(TaskCommands._format_task_error(itr))"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            TaskCommands._print_task_errors(task_id, task_errors)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_63d3d704","line":384,"range":{"start_line":384,"start_character":40,"end_line":384,"end_character":41},"in_reply_to":"9a061dce_b74c0dc9","updated":"2016-04-07 08:53:31.000000000","message":"Done","commit_id":"a1a57b22eb1a5daa1f1c857cd678b374dad7dba1"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ffe9fd6d99ccc10927a60252933dd6c10cf6bc27","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                if itr.get(\"error\"):"},{"line_number":385,"context_line":"                    task_errors.append(TaskCommands._format_task_error(itr))"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            TaskCommands._print_task_errors(task_id, task_errors)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            cols \u003d plot.charts.MainStatsTable.columns"},{"line_number":390,"context_line":"            float_cols \u003d cols[1:7]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_de11d153","line":387,"updated":"2016-04-07 10:21:52.000000000","message":"self._print_task_errors(task_id, task_errors)","commit_id":"bbd9a52568da77b5bda35049c4b572f1f6e224d4"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"eed8758bb47491c2ba58222afa6a441116857f1d","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                if itr.get(\"error\"):"},{"line_number":385,"context_line":"                    task_errors.append(TaskCommands._format_task_error(itr))"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"            TaskCommands._print_task_errors(task_id, task_errors)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"            cols \u003d plot.charts.MainStatsTable.columns"},{"line_number":390,"context_line":"            float_cols \u003d cols[1:7]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_49934dfa","line":387,"in_reply_to":"9a061dce_de11d153","updated":"2016-04-07 10:38:19.000000000","message":"Done","commit_id":"bbd9a52568da77b5bda35049c4b572f1f6e224d4"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"ffe9fd6d99ccc10927a60252933dd6c10cf6bc27","unresolved":false,"context_lines":[{"line_number":765,"context_line":"    @staticmethod"},{"line_number":766,"context_line":"    def _format_task_error(data):"},{"line_number":767,"context_line":"        error_type \u003d _(\"Unknown type\")"},{"line_number":768,"context_line":"        error_message \u003d _(\"Rally doesn\u0027t catch something yet.\")"},{"line_number":769,"context_line":"        error_traceback \u003d _(\"No traceback available.\")"},{"line_number":770,"context_line":"        try:"},{"line_number":771,"context_line":"            error_type \u003d data[\"error\"][0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_9e84790b","line":768,"updated":"2016-04-07 10:21:52.000000000","message":"Rally hasn\u0027t caught anything yet","commit_id":"bbd9a52568da77b5bda35049c4b572f1f6e224d4"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"eed8758bb47491c2ba58222afa6a441116857f1d","unresolved":false,"context_lines":[{"line_number":765,"context_line":"    @staticmethod"},{"line_number":766,"context_line":"    def _format_task_error(data):"},{"line_number":767,"context_line":"        error_type \u003d _(\"Unknown type\")"},{"line_number":768,"context_line":"        error_message \u003d _(\"Rally doesn\u0027t catch something yet.\")"},{"line_number":769,"context_line":"        error_traceback \u003d _(\"No traceback available.\")"},{"line_number":770,"context_line":"        try:"},{"line_number":771,"context_line":"            error_type \u003d data[\"error\"][0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a061dce_698e112f","line":768,"in_reply_to":"9a061dce_9e84790b","updated":"2016-04-07 10:38:19.000000000","message":"Done","commit_id":"bbd9a52568da77b5bda35049c4b572f1f6e224d4"}],"tests/unit/cli/commands/test_task.py":[{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"bc8e82b2e790e7d38c33b979875a706eed1e5f98","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import copy"},{"line_number":18,"context_line":"import datetime as dt"},{"line_number":19,"context_line":"import os.path"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_af3b5637","line":16,"updated":"2016-04-06 07:56:12.000000000","message":"A small nit. I dont think we need the extra space","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"bc8e82b2e790e7d38c33b979875a706eed1e5f98","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        err_traceback \u003d \"test\\nerror\\ntraceback\""},{"line_number":787,"context_line":"        data \u003d [err_type, err_msg, err_traceback]"},{"line_number":788,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":789,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    @mock.patch(\"rally.cli.commands.task.sys.stdout\")"},{"line_number":792,"context_line":"    @mock.patch(\"rally.cli.commands.task.api.Task\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_0f788229","line":789,"updated":"2016-04-06 07:56:12.000000000","message":"data \u003d [err_type, err_msg, err_traceback]. Ww are already passing err_type, err_msg to the function call. No need of adding another argument \"data\"","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"fc0dc9f5db846b3a9a2c1661bf4c72d3bd129d80","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        err_traceback \u003d \"test\\nerror\\ntraceback\""},{"line_number":787,"context_line":"        data \u003d [err_type, err_msg, err_traceback]"},{"line_number":788,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":789,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    @mock.patch(\"rally.cli.commands.task.sys.stdout\")"},{"line_number":792,"context_line":"    @mock.patch(\"rally.cli.commands.task.api.Task\")"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_6572ffae","line":789,"in_reply_to":"9a061dce_0f788229","updated":"2016-04-06 10:20:56.000000000","message":"Done","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"bc8e82b2e790e7d38c33b979875a706eed1e5f98","unresolved":false,"context_lines":[{"line_number":778,"context_line":"            mock.call(\"\\n\")])"},{"line_number":779,"context_line":"        mock_task_exporter_get.assert_called_once_with(\"file-exporter\")"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"    @mock.patch(\"rally.cli.commands.task.sys.stdout\")"},{"line_number":782,"context_line":"    @mock.patch(\"rally.cli.commands.task.api.Task\")"},{"line_number":783,"context_line":"    def test_show_task_errors(self, mock_task, mock_stdout):"},{"line_number":784,"context_line":"        err_type \u003d \"test_error_type\""},{"line_number":785,"context_line":"        err_msg \u003d \"test_error_message\""},{"line_number":786,"context_line":"        err_traceback \u003d \"test\\nerror\\ntraceback\""},{"line_number":787,"context_line":"        data \u003d [err_type, err_msg, err_traceback]"},{"line_number":788,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":789,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    @mock.patch(\"rally.cli.commands.task.sys.stdout\")"},{"line_number":792,"context_line":"    @mock.patch(\"rally.cli.commands.task.api.Task\")"},{"line_number":793,"context_line":"    def test_show_task_errors_no_trace(self, mock_task, mock_stdout):"},{"line_number":794,"context_line":"        err_type \u003d \"test_no_trace_type\""},{"line_number":795,"context_line":"        err_msg \u003d \"no_trace_error_message\""},{"line_number":796,"context_line":"        err_traceback \u003d \"No traceback available.\""},{"line_number":797,"context_line":"        data \u003d [err_type, err_msg]"},{"line_number":798,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":799,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _test_show_task_error(self, mock_task, mock_stdout,"},{"line_number":802,"context_line":"                              error_type, error_message, error_traceback,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_0fafe281","line":799,"range":{"start_line":781,"start_character":0,"end_line":799,"end_character":74},"updated":"2016-04-06 07:56:12.000000000","message":"Both the functions test_show_task_errors() and test_show_task_errors_no_trace() have almost same code. We can de-duplicate using ddt for err_type, err_msg, err_traceback and keep a single function _test_show_task_error()","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"bc8e82b2e790e7d38c33b979875a706eed1e5f98","unresolved":false,"context_lines":[{"line_number":796,"context_line":"        err_traceback \u003d \"No traceback available.\""},{"line_number":797,"context_line":"        data \u003d [err_type, err_msg]"},{"line_number":798,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":799,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _test_show_task_error(self, mock_task, mock_stdout,"},{"line_number":802,"context_line":"                              error_type, error_message, error_traceback,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_cfa4caa7","line":799,"updated":"2016-04-06 07:56:12.000000000","message":"Same as in line 789","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"fc0dc9f5db846b3a9a2c1661bf4c72d3bd129d80","unresolved":false,"context_lines":[{"line_number":778,"context_line":"            mock.call(\"\\n\")])"},{"line_number":779,"context_line":"        mock_task_exporter_get.assert_called_once_with(\"file-exporter\")"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"    @mock.patch(\"rally.cli.commands.task.sys.stdout\")"},{"line_number":782,"context_line":"    @mock.patch(\"rally.cli.commands.task.api.Task\")"},{"line_number":783,"context_line":"    def test_show_task_errors(self, mock_task, mock_stdout):"},{"line_number":784,"context_line":"        err_type \u003d \"test_error_type\""},{"line_number":785,"context_line":"        err_msg \u003d \"test_error_message\""},{"line_number":786,"context_line":"        err_traceback \u003d \"test\\nerror\\ntraceback\""},{"line_number":787,"context_line":"        data \u003d [err_type, err_msg, err_traceback]"},{"line_number":788,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":789,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    @mock.patch(\"rally.cli.commands.task.sys.stdout\")"},{"line_number":792,"context_line":"    @mock.patch(\"rally.cli.commands.task.api.Task\")"},{"line_number":793,"context_line":"    def test_show_task_errors_no_trace(self, mock_task, mock_stdout):"},{"line_number":794,"context_line":"        err_type \u003d \"test_no_trace_type\""},{"line_number":795,"context_line":"        err_msg \u003d \"no_trace_error_message\""},{"line_number":796,"context_line":"        err_traceback \u003d \"No traceback available.\""},{"line_number":797,"context_line":"        data \u003d [err_type, err_msg]"},{"line_number":798,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":799,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _test_show_task_error(self, mock_task, mock_stdout,"},{"line_number":802,"context_line":"                              error_type, error_message, error_traceback,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_c5694bc0","line":799,"range":{"start_line":781,"start_character":0,"end_line":799,"end_character":74},"in_reply_to":"9a061dce_0fafe281","updated":"2016-04-06 10:20:56.000000000","message":"Done","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"fc0dc9f5db846b3a9a2c1661bf4c72d3bd129d80","unresolved":false,"context_lines":[{"line_number":796,"context_line":"        err_traceback \u003d \"No traceback available.\""},{"line_number":797,"context_line":"        data \u003d [err_type, err_msg]"},{"line_number":798,"context_line":"        self._test_show_task_error(mock_task, mock_stdout,"},{"line_number":799,"context_line":"                                   err_type, err_msg, err_traceback, data)"},{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _test_show_task_error(self, mock_task, mock_stdout,"},{"line_number":802,"context_line":"                              error_type, error_message, error_traceback,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_a56417e5","line":799,"in_reply_to":"9a061dce_cfa4caa7","updated":"2016-04-06 10:20:56.000000000","message":"Done","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":20196,"name":"Piyush","email":"piyush2011257@gmail.com","username":"pirsriva"},"change_message_id":"bc8e82b2e790e7d38c33b979875a706eed1e5f98","unresolved":false,"context_lines":[{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _test_show_task_error(self, mock_task, mock_stdout,"},{"line_number":802,"context_line":"                              error_type, error_message, error_traceback,"},{"line_number":803,"context_line":"                              error_data):"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        test_uuid \u003d \"test_task_id\""},{"line_number":806,"context_line":"        mock_task.get_detailed.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_2fbaa6c0","line":803,"updated":"2016-04-06 07:56:12.000000000","message":"No need of error_data in function arguments.","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"fc0dc9f5db846b3a9a2c1661bf4c72d3bd129d80","unresolved":false,"context_lines":[{"line_number":800,"context_line":""},{"line_number":801,"context_line":"    def _test_show_task_error(self, mock_task, mock_stdout,"},{"line_number":802,"context_line":"                              error_type, error_message, error_traceback,"},{"line_number":803,"context_line":"                              error_data):"},{"line_number":804,"context_line":""},{"line_number":805,"context_line":"        test_uuid \u003d \"test_task_id\""},{"line_number":806,"context_line":"        mock_task.get_detailed.return_value \u003d {"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_0564e3e1","line":803,"in_reply_to":"9a061dce_2fbaa6c0","updated":"2016-04-06 10:20:56.000000000","message":"Done","commit_id":"24cf3d11816bc743bd2c8b72d40214c291e97ac0"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"88281eea8de47d54c514bc2d6afdcd57b77d9bb6","unresolved":false,"context_lines":[{"line_number":841,"context_line":"            mock.call(\"\\n\"), mock.call(\"\\n\"),"},{"line_number":842,"context_line":"            mock.call(header), mock.call(\"\\n\"),"},{"line_number":843,"context_line":"            mock.call(err_report), mock.call(\"\\n\"),"},{"line_number":844,"context_line":"            mock.call(error_traceback or \"No traceback available.\"),"},{"line_number":845,"context_line":"            mock.call(\"\\n\"), mock.call(\"-\" * 80), mock.call(\"\\n\"),"},{"line_number":846,"context_line":"            mock.call(\"\\n\"), mock.call(\"Load duration: 3.2\"),"},{"line_number":847,"context_line":"            mock.call(\"\\n\"), mock.call(\"Full duration: 3.5\"),"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_f080348d","line":844,"updated":"2016-04-07 14:20:43.000000000","message":"It seems only this line is needed here. All other outputs are tested by other tests.\n\nAlso it would be nice to have cli test for this. Please take a look: https://github.com/openstack/rally/blob/ffc51e8e0025c83dcc8d04ac718faaa486632b9c/tests/functional/test_cli_task.py","commit_id":"b197efdf43a73deefe47faec80f34c9fe3f07980"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"330bb91719722cfb89dc9d0a4abba90c13457261","unresolved":false,"context_lines":[{"line_number":841,"context_line":"            mock.call(\"\\n\"), mock.call(\"\\n\"),"},{"line_number":842,"context_line":"            mock.call(header), mock.call(\"\\n\"),"},{"line_number":843,"context_line":"            mock.call(err_report), mock.call(\"\\n\"),"},{"line_number":844,"context_line":"            mock.call(error_traceback or \"No traceback available.\"),"},{"line_number":845,"context_line":"            mock.call(\"\\n\"), mock.call(\"-\" * 80), mock.call(\"\\n\"),"},{"line_number":846,"context_line":"            mock.call(\"\\n\"), mock.call(\"Load duration: 3.2\"),"},{"line_number":847,"context_line":"            mock.call(\"\\n\"), mock.call(\"Full duration: 3.5\"),"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a061dce_2b985677","line":844,"in_reply_to":"9a061dce_f080348d","updated":"2016-04-08 06:24:53.000000000","message":"+1","commit_id":"b197efdf43a73deefe47faec80f34c9fe3f07980"}]}
