)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e1b3f3064ad6bf8f4bc32abee3cf7437c6cc1ab1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[verification] Add cli interface"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ibc66ca3cdc6715363e4490d052398030b421c15a"},{"line_number":10,"context_line":"o-Authored-By: Yaroslav Lobankov \u003cylobankov@mirantis.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a6eadb0_1848332d","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":1},"updated":"2016-12-19 18:13:25.000000000","message":"Co-Authored-By","commit_id":"05f16ae254424bc3196cb656d8b0627857faa52c"}],"rally/cli/cliutils.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                row.append(formatters[field](o))"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                if normalize_field_names:"},{"line_number":131,"context_line":"                    if field in mixed_case_fields:"},{"line_number":132,"context_line":"                        field_name \u003d field.replace(\" \", \"_\").replace(\"-\", \"_\")"},{"line_number":133,"context_line":"                    else:"},{"line_number":134,"context_line":"                        field_name \u003d field.lower().replace(\" \", \"_\").replace("},{"line_number":135,"context_line":"                            \"-\", \"_\")"},{"line_number":136,"context_line":"                else:"},{"line_number":137,"context_line":"                    field_name \u003d field"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_72cd7284","line":135,"range":{"start_line":131,"start_character":20,"end_line":135,"end_character":37},"updated":"2016-12-27 20:31:47.000000000","message":"nit: code duplication detected:)\n\n    field_name \u003d field\n    if field_name not in mixed_case_fields:\n        field_name \u003d field_name.lower()\n    field_name \u003d field_name.replace(\" \", \"_\").replace(\"-\", \"_\")","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"}],"rally/cli/commands/verify.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\"Verify an OpenStack cloud via a verifier.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def _print_totals(totals):"},{"line_number":48,"context_line":"        print(\"\\n\u003d\u003d\u003d\u003d\u003d\u003d\\n\""},{"line_number":49,"context_line":"              \"Totals\\n\""},{"line_number":50,"context_line":"              \"\u003d\u003d\u003d\u003d\u003d\u003d\\n\""},{"line_number":51,"context_line":"              \"Ran: %(tests_count)s tests in %(tests_duration)s sec.\\n\""},{"line_number":52,"context_line":"              \" - Success: %(success)s\\n\""}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_724ad227","line":49,"range":{"start_line":47,"start_character":5,"end_line":49,"end_character":24},"updated":"2016-12-27 20:31:47.000000000","message":"nit: Summary sounds better to me","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"56db96e388586bef58ddcea860a4382f85709271","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\"Verify an OpenStack cloud via a verifier.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def _print_totals(totals):"},{"line_number":48,"context_line":"        print(\"\\n\u003d\u003d\u003d\u003d\u003d\u003d\\n\""},{"line_number":49,"context_line":"              \"Totals\\n\""},{"line_number":50,"context_line":"              \"\u003d\u003d\u003d\u003d\u003d\u003d\\n\""},{"line_number":51,"context_line":"              \"Ran: %(tests_count)s tests in %(tests_duration)s sec.\\n\""},{"line_number":52,"context_line":"              \" - Success: %(success)s\\n\""}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_d4a8c022","line":49,"range":{"start_line":47,"start_character":5,"end_line":49,"end_character":24},"in_reply_to":"da4df55a_724ad227","updated":"2016-12-28 09:45:46.000000000","message":"Let\u0027s use \u0027totals\u0027 since we use it everywhere.","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @cliutils.args(\"--name\", dest\u003d\"name\", type\u003dstr, required\u003dTrue,"},{"line_number":78,"context_line":"                   help\u003d\"Verifier name (for example, \u0027My verifier\u0027).\")"},{"line_number":79,"context_line":"    @cliutils.args(\"--type\", dest\u003d\"vtype\", type\u003dstr, required\u003dTrue,"},{"line_number":80,"context_line":"                   help\u003d\"Verifier plugin name. HINT: You can list all \""},{"line_number":81,"context_line":"                        \"verifier plugins, executing command `rally verify \""},{"line_number":82,"context_line":"                        \"list-plugins`.\")"},{"line_number":83,"context_line":"    @cliutils.args(\"--namespace\", dest\u003d\"namespace\", type\u003dstr, metavar\u003d\"\u003cname\u003e\","},{"line_number":84,"context_line":"                   required\u003dFalse,"},{"line_number":85,"context_line":"                   help\u003d\"Verifier plugin namespace. Should be specified when \""}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_1256e6cd","line":82,"range":{"start_line":80,"start_character":47,"end_line":82,"end_character":39},"updated":"2016-12-27 20:31:47.000000000","message":"1) should we use LIST_VERIFIERS_HINT here?\n2) hints here and in LIST_VERIFIERS_HINT are different","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"56db96e388586bef58ddcea860a4382f85709271","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @cliutils.args(\"--name\", dest\u003d\"name\", type\u003dstr, required\u003dTrue,"},{"line_number":78,"context_line":"                   help\u003d\"Verifier name (for example, \u0027My verifier\u0027).\")"},{"line_number":79,"context_line":"    @cliutils.args(\"--type\", dest\u003d\"vtype\", type\u003dstr, required\u003dTrue,"},{"line_number":80,"context_line":"                   help\u003d\"Verifier plugin name. HINT: You can list all \""},{"line_number":81,"context_line":"                        \"verifier plugins, executing command `rally verify \""},{"line_number":82,"context_line":"                        \"list-plugins`.\")"},{"line_number":83,"context_line":"    @cliutils.args(\"--namespace\", dest\u003d\"namespace\", type\u003dstr, metavar\u003d\"\u003cname\u003e\","},{"line_number":84,"context_line":"                   required\u003dFalse,"},{"line_number":85,"context_line":"                   help\u003d\"Verifier plugin namespace. Should be specified when \""}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_f4ece4f4","line":82,"range":{"start_line":80,"start_character":47,"end_line":82,"end_character":39},"in_reply_to":"da4df55a_1256e6cd","updated":"2016-12-28 09:45:46.000000000","message":"Here we are talking about verifier PLUGINS, not about verifiers.","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                        \"list-plugins`.\")"},{"line_number":83,"context_line":"    @cliutils.args(\"--namespace\", dest\u003d\"namespace\", type\u003dstr, metavar\u003d\"\u003cname\u003e\","},{"line_number":84,"context_line":"                   required\u003dFalse,"},{"line_number":85,"context_line":"                   help\u003d\"Verifier plugin namespace. Should be specified when \""},{"line_number":86,"context_line":"                        \"there are two verifier plugins with equal names but \""},{"line_number":87,"context_line":"                        \"in different namespaces.\")"},{"line_number":88,"context_line":"    @cliutils.args(\"--source\", dest\u003d\"source\", type\u003dstr, required\u003dFalse,"},{"line_number":89,"context_line":"                   help\u003d\"Path or URL to the repo to clone verifier from.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_5274ee66","line":86,"range":{"start_line":85,"start_character":72,"end_line":86,"end_character":34},"updated":"2016-12-27 20:31:47.000000000","message":"s/when there are/in case of two...","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"56db96e388586bef58ddcea860a4382f85709271","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                        \"list-plugins`.\")"},{"line_number":83,"context_line":"    @cliutils.args(\"--namespace\", dest\u003d\"namespace\", type\u003dstr, metavar\u003d\"\u003cname\u003e\","},{"line_number":84,"context_line":"                   required\u003dFalse,"},{"line_number":85,"context_line":"                   help\u003d\"Verifier plugin namespace. Should be specified when \""},{"line_number":86,"context_line":"                        \"there are two verifier plugins with equal names but \""},{"line_number":87,"context_line":"                        \"in different namespaces.\")"},{"line_number":88,"context_line":"    @cliutils.args(\"--source\", dest\u003d\"source\", type\u003dstr, required\u003dFalse,"},{"line_number":89,"context_line":"                   help\u003d\"Path or URL to the repo to clone verifier from.\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_34a82c8d","line":86,"range":{"start_line":85,"start_character":72,"end_line":86,"end_character":34},"in_reply_to":"da4df55a_5274ee66","updated":"2016-12-28 09:45:46.000000000","message":"Done","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def delete_verifier(self, api, verifier_id\u003dNone, deployment\u003dNone,"},{"line_number":168,"context_line":"                        force\u003dFalse):"},{"line_number":169,"context_line":"        \"\"\"Delete a verifier.\"\"\""},{"line_number":170,"context_line":"        verifications \u003d api.verification.list(verifier_id, deployment)"},{"line_number":171,"context_line":"        if verifications and not force:"},{"line_number":172,"context_line":"            d_msg \u003d (\" for deployment \u0027%s\u0027\" % deployment) if deployment else \"\""},{"line_number":173,"context_line":"            print(_(\"Verifier \u0027{0}\u0027 cannot be deleted because there are stored\""},{"line_number":174,"context_line":"                    \" verifier verifications{1}! Please, make sure that they \""},{"line_number":175,"context_line":"                    \"are not important to you. Use \u0027--force\u0027 argument if you \""},{"line_number":176,"context_line":"                    \"would like to delete verifications{1} as well.\")"},{"line_number":177,"context_line":"                  .format(verifier_id, d_msg))"},{"line_number":178,"context_line":"            return 1"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        api.verifier.delete(verifier_id, deployment, force)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_b2fefaab","line":177,"range":{"start_line":170,"start_character":8,"end_line":177,"end_character":46},"updated":"2016-12-27 20:31:47.000000000","message":"we have duplication \"list\" call to db here and at api layer. If you think that error message from api should be different in case of cli, you can create separate exception class and identify it here with printing a proper message","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"56db96e388586bef58ddcea860a4382f85709271","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    def delete_verifier(self, api, verifier_id\u003dNone, deployment\u003dNone,"},{"line_number":168,"context_line":"                        force\u003dFalse):"},{"line_number":169,"context_line":"        \"\"\"Delete a verifier.\"\"\""},{"line_number":170,"context_line":"        verifications \u003d api.verification.list(verifier_id, deployment)"},{"line_number":171,"context_line":"        if verifications and not force:"},{"line_number":172,"context_line":"            d_msg \u003d (\" for deployment \u0027%s\u0027\" % deployment) if deployment else \"\""},{"line_number":173,"context_line":"            print(_(\"Verifier \u0027{0}\u0027 cannot be deleted because there are stored\""},{"line_number":174,"context_line":"                    \" verifier verifications{1}! Please, make sure that they \""},{"line_number":175,"context_line":"                    \"are not important to you. Use \u0027--force\u0027 argument if you \""},{"line_number":176,"context_line":"                    \"would like to delete verifications{1} as well.\")"},{"line_number":177,"context_line":"                  .format(verifier_id, d_msg))"},{"line_number":178,"context_line":"            return 1"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        api.verifier.delete(verifier_id, deployment, force)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_7438f43d","line":177,"range":{"start_line":170,"start_character":8,"end_line":177,"end_character":46},"in_reply_to":"da4df55a_b2fefaab","updated":"2016-12-28 09:45:46.000000000","message":"Done","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        raw_report \u003d api.verification.report(verification_uuid, html)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        if output_file:"},{"line_number":596,"context_line":"            with open(output_file, \"wb\") as f:"},{"line_number":597,"context_line":"                f.write(raw_report)"},{"line_number":598,"context_line":"            if open_it:"},{"line_number":599,"context_line":"                webbrowser.open_new_tab("}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_d2bb7ee3","line":596,"range":{"start_line":596,"start_character":35,"end_line":596,"end_character":39},"updated":"2016-12-27 20:31:47.000000000","message":"there is no need to use byte mode. we are saving just raw test, so specify just \"w\"","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"56db96e388586bef58ddcea860a4382f85709271","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        raw_report \u003d api.verification.report(verification_uuid, html)"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"        if output_file:"},{"line_number":596,"context_line":"            with open(output_file, \"wb\") as f:"},{"line_number":597,"context_line":"                f.write(raw_report)"},{"line_number":598,"context_line":"            if open_it:"},{"line_number":599,"context_line":"                webbrowser.open_new_tab("}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_947e3817","line":596,"range":{"start_line":596,"start_character":35,"end_line":596,"end_character":39},"in_reply_to":"da4df55a_d2bb7ee3","updated":"2016-12-28 09:45:46.000000000","message":"Done","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e052d318b6ff133f7eb9435e3f6e06b2003ffa72","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        if not os.path.exists(file_to_parse):"},{"line_number":628,"context_line":"            print(_(\"File \u0027%s\u0027 not found.\") % file_to_parse)"},{"line_number":629,"context_line":"            return 1"},{"line_number":630,"context_line":"        with open(file_to_parse, \"rb\") as f:"},{"line_number":631,"context_line":"            data \u003d f.read()"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"        run_args \u003d yaml.safe_load(run_args) if run_args else {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_12b26606","line":630,"range":{"start_line":630,"start_character":33,"end_line":630,"end_character":37},"updated":"2016-12-27 20:31:47.000000000","message":"same here. just r","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"56db96e388586bef58ddcea860a4382f85709271","unresolved":false,"context_lines":[{"line_number":627,"context_line":"        if not os.path.exists(file_to_parse):"},{"line_number":628,"context_line":"            print(_(\"File \u0027%s\u0027 not found.\") % file_to_parse)"},{"line_number":629,"context_line":"            return 1"},{"line_number":630,"context_line":"        with open(file_to_parse, \"rb\") as f:"},{"line_number":631,"context_line":"            data \u003d f.read()"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"        run_args \u003d yaml.safe_load(run_args) if run_args else {}"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_d4744037","line":630,"range":{"start_line":630,"start_character":33,"end_line":630,"end_character":37},"in_reply_to":"da4df55a_12b26606","updated":"2016-12-28 09:45:46.000000000","message":"Done","commit_id":"9a68e52394634da56f73418e8e4d110a707f82a2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e2bafe9642516bd930e7a8e532d5befb0f5d0e95","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            version\u003dversion, system_wide\u003dsystem_wide, extra_settings\u003dextra)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        if do_use:"},{"line_number":113,"context_line":"            self.use_verifier(verifier_uuid)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    @cliutils.help_group(\"verifier\")"},{"line_number":116,"context_line":"    @cliutils.args(\"--id\", dest\u003d\"verifier_id\", type\u003dstr, required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da4df55a_776f112b","line":113,"updated":"2016-12-28 13:07:52.000000000","message":"you should transmit here api object.","commit_id":"f51604b2645566bf399f3e149a0f63fb766f9cdd"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e2bafe9642516bd930e7a8e532d5befb0f5d0e95","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        self._print_totals(results.totals)"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        if do_use:"},{"line_number":443,"context_line":"            self.use(verification.uuid)"},{"line_number":444,"context_line":"        else:"},{"line_number":445,"context_line":"            print(_(\"Verification UUID: %s.\") % verification.uuid)"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da4df55a_575dad77","line":443,"updated":"2016-12-28 13:07:52.000000000","message":"same here","commit_id":"f51604b2645566bf399f3e149a0f63fb766f9cdd"}]}
