)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"462c401f4be60994c0831710a6f0390d7977897e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[Verify] Adding \"xfail\" mechanism for Tempest tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This mechanism allows us to list some tests, that are expected to fail,"},{"line_number":10,"context_line":"in a YAML file and these tests will have \"x-fail\" status instead of \"fail\"."},{"line_number":11,"context_line":"Tests that are in the YAML file and at the same time have \"success\" status"},{"line_number":12,"context_line":"will be marked as \"uxseccess\"."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba8a016a_d1982c6d","line":10,"updated":"2015-11-16 16:43:01.000000000","message":"Why not just \"skipped\" status? In code xfail_file looks strange. I suggest to rename it to skip_file etc.","commit_id":"408b23f24d4e8eb0364cf896ba666a3616e69699"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"930b4bed89b083ab09e5297cbf6860dd233dc01c","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This mechanism allows us to list some tests, that are expected to fail,"},{"line_number":10,"context_line":"in a YAML file and these tests will have \"x-fail\" status instead of \"fail\"."},{"line_number":11,"context_line":"Tests that are in the YAML file and at the same time have \"success\" status"},{"line_number":12,"context_line":"will be marked as \"uxseccess\"."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Representation of test reports was slightly changed:"},{"line_number":15,"context_line":"    1. the HTML report represents \"x-fail\" and \"uxsuccess\" tests as well."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1a26ad4f_a7adb685","line":12,"updated":"2015-11-02 16:52:22.000000000","message":"s/uxseccess/uxsuccess/","commit_id":"408b23f24d4e8eb0364cf896ba666a3616e69699"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"462c401f4be60994c0831710a6f0390d7977897e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"will be marked as \"uxseccess\"."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Representation of test reports was slightly changed:"},{"line_number":15,"context_line":"    1. the HTML report represents \"x-fail\" and \"uxsuccess\" tests as well."},{"line_number":16,"context_line":"    2. now we can see the reason why a test was skipped."},{"line_number":17,"context_line":"    3. info about total execution time of tests was added."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba8a016a_29d6f0c5","line":15,"updated":"2015-11-16 16:43:01.000000000","message":"\"x-fail\" and \"uxsuccess\" - I think that such naming is unclear. We should change it. For example \"skipped-fail\" and \"skipped-success\". At least, from name,  we could understand that the test was skipped.","commit_id":"408b23f24d4e8eb0364cf896ba666a3616e69699"}],"rally/cli/commands/verify.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"00f7f1b25f1ef3465c2ed868ca0643c2515731b2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        :param deployment: UUID or name of a deployment"},{"line_number":72,"context_line":"        :param regex: Regular expression of test"},{"line_number":73,"context_line":"        :param tempest_config: User specified Tempest config file location"},{"line_number":74,"context_line":"        :param xfail_file: A file in YAML format with a list of tests"},{"line_number":75,"context_line":"                           that are expected to fail"},{"line_number":76,"context_line":"        :param do_use: Use new task as default for future operations"},{"line_number":77,"context_line":"        :param system_wide_install: Use virtualenv else run tests in"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_57041114","line":74,"updated":"2015-10-19 11:49:20.000000000","message":"I\u0027d better write A file path rather then file. Under word file I expect to see file descriptor.","commit_id":"5e8c2af33701e6dd1a4ca14d6450d4545b1bdf14"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"91090ec18bb84b2f00de60faa0c194fb7182312d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        :param deployment: UUID or name of a deployment"},{"line_number":72,"context_line":"        :param regex: Regular expression of test"},{"line_number":73,"context_line":"        :param tempest_config: User specified Tempest config file location"},{"line_number":74,"context_line":"        :param xfail_file: A file in YAML format with a list of tests"},{"line_number":75,"context_line":"                           that are expected to fail"},{"line_number":76,"context_line":"        :param do_use: Use new task as default for future operations"},{"line_number":77,"context_line":"        :param system_wide_install: Use virtualenv else run tests in"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_3f81244b","line":74,"in_reply_to":"3a29b11f_57041114","updated":"2015-10-19 12:32:45.000000000","message":"Will do.","commit_id":"5e8c2af33701e6dd1a4ca14d6450d4545b1bdf14"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"462c401f4be60994c0831710a6f0390d7977897e","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if xfail_file and not os.path.exists(xfail_file):"},{"line_number":112,"context_line":"            print(\"File \u0027%s\u0027 not found\" % xfail_file)"},{"line_number":113,"context_line":"            return"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        verification \u003d api.Verification.verify(deployment, set_name, regex,"},{"line_number":116,"context_line":"                                               tests_file, tempest_config,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_6c52c615","line":113,"updated":"2015-11-16 16:43:01.000000000","message":"I think we should terminate program (return (1)) if file not found. For consistency.","commit_id":"408b23f24d4e8eb0364cf896ba666a3616e69699"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"efd4b2d36b23707c3f1df64dd7e22f78c1c30da7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @cliutils.args(\"--tempest-config\", dest\u003d\"tempest_config\", type\u003dstr,"},{"line_number":56,"context_line":"                   required\u003dFalse,"},{"line_number":57,"context_line":"                   help\u003d\"User specified Tempest config file location\")"},{"line_number":58,"context_line":"    @cliutils.args(\"--xfails-file\", dest\u003d\"xfails_file\", type\u003dstr,"},{"line_number":59,"context_line":"                   required\u003dFalse,"},{"line_number":60,"context_line":"                   help\u003d\"Path to a file in YAML format with a list of tests \""},{"line_number":61,"context_line":"                        \"that are expected to fail\")"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_edd11b24","line":58,"updated":"2015-11-19 15:48:35.000000000","message":"You can use type argparse.FileType(\"r\") .","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"d6b564620c5155e9832b9dcb44c53b3b81cd4ecd","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    @cliutils.args(\"--tempest-config\", dest\u003d\"tempest_config\", type\u003dstr,"},{"line_number":56,"context_line":"                   required\u003dFalse,"},{"line_number":57,"context_line":"                   help\u003d\"User specified Tempest config file location\")"},{"line_number":58,"context_line":"    @cliutils.args(\"--xfails-file\", dest\u003d\"xfails_file\", type\u003dstr,"},{"line_number":59,"context_line":"                   required\u003dFalse,"},{"line_number":60,"context_line":"                   help\u003d\"Path to a file in YAML format with a list of tests \""},{"line_number":61,"context_line":"                        \"that are expected to fail\")"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a8ffd7b_ea23cfa5","line":58,"in_reply_to":"ba8a016a_edd11b24","updated":"2015-11-25 11:05:30.000000000","message":"I tried your suggestion and it works as follows:\n\nIf we specify non-existing file, we will not get some exception or something what will tell us that file doesn\u0027t exist. It looks like Rally throws help message when any exceptions happens if we don\u0027t rise it ourselves. \n\n$ rally --rally-debug verify start --regex tempest.thirdparty --xfails-file /12.04/home/ylobankov/Rally/shouldfail/rally/non-existing-file\nusage: rally verify start [-h] [--deployment ACTION_KWARG_DEPLOYMENT]\n                          [--set ACTION_KWARG_SET_NAME]\n                          [--regex ACTION_KWARG_REGEX]\n                          [--tests-file ACTION_KWARG_TESTS_FILE]\n                          [--tempest-config ACTION_KWARG_TEMPEST_CONFIG]\n                          [--xfails-file ACTION_KWARG_XFAILS_FILE] [--no-use]\n                          [--system-wide-install]\n                          [action_args [action_args ...]]\n\nStart set of tests.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --deployment ACTION_KWARG_DEPLOYMENT\n                        UUID or name of a deployment.\n  --set ACTION_KWARG_SET_NAME\n                        Name of tempest test set. Available sets: full,\n                        scenario, smoke, baremetal, compute, database,\n                        data_processing, identity, image, messaging, network,\n                        object_storage, orchestration, telemetry, volume\n  --regex ACTION_KWARG_REGEX\n                        Regular expression of test.\n  --tests-file ACTION_KWARG_TESTS_FILE\n                        Path to a file with a list of Tempest tests\n  --tempest-config ACTION_KWARG_TEMPEST_CONFIG\n                        User specified Tempest config file location\n  --xfails-file ACTION_KWARG_XFAILS_FILE\n                        Path to a file in YAML format with a list of tests\n                        that are expected to fail\n  --no-use              Don\u0027t set new task as default for future operations\n  --system-wide-install\n                        Use virtualenv else run tests in local environment","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"efd4b2d36b23707c3f1df64dd7e22f78c1c30da7","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            print(\"File \u0027%s\u0027 not found\" % tests_file)"},{"line_number":109,"context_line":"            return 1"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        if xfails_file and not os.path.exists(xfails_file):"},{"line_number":112,"context_line":"            print(\"File \u0027%s\u0027 not found\" % xfails_file)"},{"line_number":113,"context_line":"            return 1"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_93d98c59","line":111,"updated":"2015-11-19 15:48:35.000000000","message":"this check is not required","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"efd4b2d36b23707c3f1df64dd7e22f78c1c30da7","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            return 1"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        verification \u003d api.Verification.verify("},{"line_number":116,"context_line":"            deployment, set_name, regex, tests_file, tempest_config,"},{"line_number":117,"context_line":"            xfails_file, system_wide_install)"},{"line_number":118,"context_line":"        if do_use:"},{"line_number":119,"context_line":"            self.use(verification[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_73074882","line":116,"updated":"2015-11-19 15:48:35.000000000","message":"Imo, we should move from a billion of args(there is a separate patch which adds one more argument) to something like dict \"context\" with all verification-related arguments.","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"52c1058429c920f694e00e1aa3db91bd75b1caff","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            return 1"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        verification \u003d api.Verification.verify("},{"line_number":116,"context_line":"            deployment, set_name, regex, tests_file, tempest_config,"},{"line_number":117,"context_line":"            xfails_file, system_wide_install)"},{"line_number":118,"context_line":"        if do_use:"},{"line_number":119,"context_line":"            self.use(verification[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_c5fbc345","line":116,"in_reply_to":"ba8a016a_73074882","updated":"2015-11-19 18:09:12.000000000","message":"I think we should make a separate patch for such refactoring :)","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"1729c52a15324ecdec6f85c9a89d688357a9c5ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            return 1"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        verification \u003d api.Verification.verify("},{"line_number":116,"context_line":"            deployment, set_name, regex, tests_file, tempest_config,"},{"line_number":117,"context_line":"            xfails_file, system_wide_install)"},{"line_number":118,"context_line":"        if do_use:"},{"line_number":119,"context_line":"            self.use(verification[\"uuid\"])"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_2f0f653a","line":116,"in_reply_to":"ba8a016a_c5fbc345","updated":"2015-11-24 09:59:05.000000000","message":"sure)","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"}],"rally/ui/templates/verification/report.mako":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"930b4bed89b083ab09e5297cbf6860dd233dc01c","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"\u003c%block name\u003d\"libs\"\u003e"},{"line_number":7,"context_line":"  \u003cscript type\u003d\"text/javascript\" src\u003d\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js\"\u003e\u003c/script\u003e"},{"line_number":8,"context_line":"  \u003cstyle\u003e"},{"line_number":9,"context_line":"    .status-ux-pass, .status-ux-pass td { color:orange }"},{"line_number":10,"context_line":"    .status-x-fail, .status-x-fail td { color:darkkhaki }"},{"line_number":11,"context_line":"  \u003c/style\u003e"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"1a26ad4f_273206f3","line":8,"updated":"2015-11-02 16:52:22.000000000","message":"There is a dedicated block `css\u0027 below for custom styles","commit_id":"408b23f24d4e8eb0364cf896ba666a3616e69699"}],"rally/verification/tempest/json2html.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"efd4b2d36b23707c3f1df64dd7e22f78c1c30da7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                            \"tags\": \", \".join(test[\"tags\"])}"},{"line_number":31,"context_line":"        output \u003d \"\""},{"line_number":32,"context_line":"        if \"reason\" in test:"},{"line_number":33,"context_line":"            matcher \u003d SKIP_RE.match(test[\"reason\"])"},{"line_number":34,"context_line":"            if matcher:"},{"line_number":35,"context_line":"                href \u003d LAUNCHPAD_BUG_LINK.format(matcher.group(\"bug_number\"))"},{"line_number":36,"context_line":"                output \u003d re.sub(matcher.group(\"bug_number\"), href,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_1bb4e77d","line":33,"updated":"2015-11-19 15:48:35.000000000","message":"It would be nice to split \"reason\" and \"trace\" in html:\n\n    if test[\"status\"] \u003d\u003d \"xfail\":\n        output +\u003d \"\u003cb\u003eReason: \u003c/b\u003e\\n\"","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"efd4b2d36b23707c3f1df64dd7e22f78c1c30da7","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            else:"},{"line_number":39,"context_line":"                output \u003d utils.escape(test[\"reason\"])"},{"line_number":40,"context_line":"        if \"traceback\" in test:"},{"line_number":41,"context_line":"            output +\u003d ((\"\\n\\n\" if output else \"\") +"},{"line_number":42,"context_line":"                       utils.escape(test[\"traceback\"]))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        tests.append({\"id\": i,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_9e50c50c","line":41,"updated":"2015-11-19 15:48:35.000000000","message":"if output:\n        output +\u003d \"\\n\\n\u003cb\u003eTraceback:\u003c/b\u003e\\n\"","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"d6b564620c5155e9832b9dcb44c53b3b81cd4ecd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            else:"},{"line_number":39,"context_line":"                output \u003d utils.escape(test[\"reason\"])"},{"line_number":40,"context_line":"        if \"traceback\" in test:"},{"line_number":41,"context_line":"            output +\u003d ((\"\\n\\n\" if output else \"\") +"},{"line_number":42,"context_line":"                       utils.escape(test[\"traceback\"]))"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        tests.append({\"id\": i,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a8ffd7b_30006b34","line":41,"in_reply_to":"ba8a016a_9e50c50c","updated":"2015-11-25 11:05:30.000000000","message":"test[\"traceback\"] already contains \"Traceback (most recent call last):\". So it is redundant.","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"}],"rally/verification/tempest/tools/colorizer.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"00f7f1b25f1ef3465c2ed868ca0643c2515731b2","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        self.stream.write(\"\\x1b[%s;1m%s\\x1b[0m\" % (color, text))"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class _Win32Colorizer(object):"},{"line_number":107,"context_line":"    \"\"\"See _AnsiColorizer docstring.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __init__(self, stream):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_273da02b","line":106,"updated":"2015-10-19 11:49:20.000000000","message":"Do we maintain development on Windows?)","commit_id":"5e8c2af33701e6dd1a4ca14d6450d4545b1bdf14"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"91090ec18bb84b2f00de60faa0c194fb7182312d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        self.stream.write(\"\\x1b[%s;1m%s\\x1b[0m\" % (color, text))"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class _Win32Colorizer(object):"},{"line_number":107,"context_line":"    \"\"\"See _AnsiColorizer docstring.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def __init__(self, stream):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_5f9bc0c9","line":106,"in_reply_to":"3a29b11f_273da02b","updated":"2015-10-19 12:32:45.000000000","message":"Roman, this file was taken from Tempest (https://github.com/openstack/tempest/blob/master/tools/colorizer.py) and changed a little bit.  Please, read L42-45 above. Maybe you are right, we should delete this piece of code :)","commit_id":"5e8c2af33701e6dd1a4ca14d6450d4545b1bdf14"}],"rally/verification/tempest/xfails_filter.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"efd4b2d36b23707c3f1df64dd7e22f78c1c30da7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2015: Mirantis Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_9eb8b32b","line":1,"updated":"2015-11-19 15:48:35.000000000","message":"I dislike additional filter for this stuff. It can be implemented simplier, just do something like :\n\n    # preprocess\n    with open(\"some_file_with_list_of_tests\") as f:\n        xfail_tests \u003d dict([test.split(\" \") for testf.readlines() if test])\n    # I suppose that testr accept a file without reason string\n    with open(tempfile.NamedTemporaryFile(delete\u003dFalse)) as f:\n        f.write(\"\\n\".join(xfail_tests.keys()))\n\n    # launch verification\n    run(...)\n    # post-process(can be done in Tempest class or in subunit parser)\n    for test in results.test:\n        if test in xfail_tests:\n             xfail_tests[\"reason\"] \u003d xfail_tests[test]","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"3083ceb692ed732ff403e107d41f0f59c778f989","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2015: Mirantis Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_0f014138","line":1,"in_reply_to":"ba8a016a_9eb8b32b","updated":"2015-11-24 09:51:34.000000000","message":"Agreed with Andrey","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"52c1058429c920f694e00e1aa3db91bd75b1caff","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2015: Mirantis Inc."},{"line_number":4,"context_line":"# All Rights Reserved."}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_256c0f34","line":1,"in_reply_to":"ba8a016a_9eb8b32b","updated":"2015-11-19 18:09:12.000000000","message":"Andrey, I don\u0027t think that it will be easier to implement. This code is an approximate model and in the reality it may get complicated. Anyway, I would like to listen to opinions of other reviewers :)","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"492dc4a3b8bfd34cdcc2454553a4f0bd279cb76a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               mime_type\u003dNone, route_code\u003dNone, timestamp\u003dNone):"},{"line_number":36,"context_line":"        if (test_id in self.expected_failures"},{"line_number":37,"context_line":"                and test_status in (\"fail\", \"success\")):"},{"line_number":38,"context_line":"            test_status \u003d \"xfail\" if test_status \u003d\u003d \"fail\" else \"uxsuccess\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"            if self.expected_failures[test_id] and test_status \u003d\u003d \"xfail\":"},{"line_number":41,"context_line":"                self.stream.status(test_id\u003dtest_id,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba8a016a_3a5481fc","line":38,"updated":"2015-11-24 09:58:04.000000000","message":"test_status \u003d test_status and \"xfail\" or \"uxs\"","commit_id":"4a1df5b51b19a631830afd6aa78163683ae673ac"}]}
