)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0227e9f967b70c2214156a64341cc1994e211525","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make context plugins decide how to map their data for scenario"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previously to have only one user and it\u0027s context during the run"},{"line_number":10,"context_line":"of scenario we had hack inside base runner to map full context"},{"line_number":11,"context_line":"for scenario."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_762a1780","line":9,"updated":"2015-07-21 21:08:38.000000000","message":"Grammar Nazi: \"its context\"","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"57ffb29c2698fb2e84373e0a46ac895320f8a977","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make context plugins decide how to map their data for scenario"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Previously to have only one user and it\u0027s context during the run"},{"line_number":10,"context_line":"of scenario we had hack inside base runner to map full context"},{"line_number":11,"context_line":"for scenario."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_6a9aeb63","line":9,"in_reply_to":"3a50d1a3_762a1780","updated":"2015-07-28 22:19:15.000000000","message":"Done","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"62b66d70d3284359416dbaeb8d2d6c3f82f997eb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"There are 3 great benifits of this change:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- You don\u0027t need hacks to map resources created by context"},{"line_number":20,"context_line":"  for scenarios, which will be curcial for other projects"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"- You don\u0027t need hacks to make mapping strategies configurable"},{"line_number":23,"context_line":"  e.g. pick users randomly or 1 by 1 and so on"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_67ca071d","line":20,"updated":"2015-07-23 10:19:52.000000000","message":"*crucial","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"57ffb29c2698fb2e84373e0a46ac895320f8a977","unresolved":false,"context_lines":[{"line_number":17,"context_line":"There are 3 great benifits of this change:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"- You don\u0027t need hacks to map resources created by context"},{"line_number":20,"context_line":"  for scenarios, which will be curcial for other projects"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"- You don\u0027t need hacks to make mapping strategies configurable"},{"line_number":23,"context_line":"  e.g. pick users randomly or 1 by 1 and so on"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a50d1a3_0aa6c7ad","line":20,"in_reply_to":"3a50d1a3_67ca071d","updated":"2015-07-28 22:19:15.000000000","message":"Done","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"}],"rally/plugins/openstack/context/keystone/users.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"212d19c6f13a95647beb23fbac5a7e2d7100c575","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            if key not in [\"users\", \"tenants\"]:"},{"line_number":69,"context_line":"                scenario_ctx[key] \u003d value"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        user \u003d random.choice(context_obj[\"users\"])"},{"line_number":72,"context_line":"        tenant \u003d context_obj[\"tenants\"][user[\"tenant_id\"]]"},{"line_number":73,"context_line":"        scenario_ctx[\"user\"], scenario_ctx[\"tenant\"] \u003d user, tenant"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_8b7ef4e2","line":71,"updated":"2015-08-04 08:27:09.000000000","message":"Why choosing random? It is better to have \"round robin\" approach by default.","commit_id":"7a3c10e23222f35b0834ca6b5c1a11bd2836849b"}],"rally/task/context.py":[{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"f0b8ab2011750c63c3e5db6aff7d5aa166ff7c1d","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # NOTE(boris-42): Passing to scenario context will make sure that"},{"line_number":168,"context_line":"        #                 scenario won\u0027t be able to change context object."},{"line_number":169,"context_line":"        return copy.deepcopy(context_obj)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __enter__(self):"},{"line_number":172,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_7f956be2","line":169,"updated":"2015-08-04 03:34:21.000000000","message":"actually I don\u0027t understand this piece of codes :(\n\nwhy return the only the last context obj?","commit_id":"95ca9a3606c76be1874729b8ce0a3897826ad111"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c3716e1ca0415f6f8436e2eab91f1b3d56fc9aeb","unresolved":false,"context_lines":[{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        # NOTE(boris-42): Passing to scenario context will make sure that"},{"line_number":168,"context_line":"        #                 scenario won\u0027t be able to change context object."},{"line_number":169,"context_line":"        return copy.deepcopy(context_obj)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __enter__(self):"},{"line_number":172,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_797343b2","line":169,"in_reply_to":"1a4dcd0f_7f956be2","updated":"2015-08-04 07:03:22.000000000","message":"Actually it\u0027s better to make copy before starting translation of global context to scenario context. \n\nSo I refacotred this I hope now it\u0027s clear.","commit_id":"95ca9a3606c76be1874729b8ce0a3897826ad111"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"212d19c6f13a95647beb23fbac5a7e2d7100c575","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        \"\"\"Returns scenario\u0027s specific context from full context."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        Each context class is able to map context object data as it want."},{"line_number":157,"context_line":"        E.g. users context will pick one user and it\u0027s tenant for each"},{"line_number":158,"context_line":"        scenario run."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        This method iterates over all context classes used in task"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_6bdda813","line":157,"updated":"2015-08-04 08:27:09.000000000","message":"I guess you wanted to say \"its tenant\"? it is different than \"it\u0027s\".","commit_id":"7a3c10e23222f35b0834ca6b5c1a11bd2836849b"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"212d19c6f13a95647beb23fbac5a7e2d7100c575","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        and performs transformation of each of them to full context, order of"},{"line_number":162,"context_line":"        transformation is the same as order of context creation."},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":"        # NOTE(boris-42): Orignial context_object is read only and should"},{"line_number":165,"context_line":"        #                 not be modified"},{"line_number":166,"context_line":"        context_obj \u003d copy.deepcopy(context_obj)"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_cbd87c20","line":164,"updated":"2015-08-04 08:27:09.000000000","message":"s/Orignial/Original/\n\nalso \"context_object\" is not consistent with param name \"context_obj\"","commit_id":"7a3c10e23222f35b0834ca6b5c1a11bd2836849b"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"a5e8f882b01a91db6fed40abcb9d5ec409217e26","unresolved":false,"context_lines":[{"line_number":165,"context_line":"        #                 not be modified"},{"line_number":166,"context_line":"        context_obj \u003d copy.deepcopy(context_obj)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"        for ctx in sorted(map(Context.get, context_obj[\"config\"])):"},{"line_number":169,"context_line":"            context_obj \u003d ctx.map_for_scenario(context_obj)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        return context_obj"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_2857a603","line":168,"updated":"2015-08-04 07:52:51.000000000","message":"is same to use _get_sorted_context_lst (at L127) here?","commit_id":"7a3c10e23222f35b0834ca6b5c1a11bd2836849b"}],"rally/task/runner.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6fbd46171b2f22c01f6c584a354f28336744f9e0","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def _get_scenario_context(context_obj):"},{"line_number":47,"context_line":"    return context.ContextManager(context_obj).map_for_scenario()"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def _run_scenario_once(args):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_5a5bc654","line":47,"updated":"2015-08-10 11:10:21.000000000","message":"maybe we will rename map_for_scenario in _get_scenario_context. map_for_scenario is a bit abstract","commit_id":"d9b1d64dbc59ab3f77716b25f429ba98bb3df321"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"6fbd46171b2f22c01f6c584a354f28336744f9e0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"             {\"task\": context_obj[\"task\"][\"uuid\"], \"iteration\": iteration})"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    context_obj[\"iteration\"] \u003d iteration"},{"line_number":57,"context_line":"    scenario \u003d cls(context_obj)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    error \u003d []"},{"line_number":60,"context_line":"    scenario_output \u003d {\"errors\": \"\", \"data\": {}}"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_bd2be432","line":57,"updated":"2015-08-10 11:10:21.000000000","message":"Is it good to get rid from \u0027context\u003d\u0027? As for me no.","commit_id":"d9b1d64dbc59ab3f77716b25f429ba98bb3df321"}],"tests/unit/fakes.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"7d4de0e23060c2b513c66e85925dcba672406cc3","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"        },"},{"line_number":1508,"context_line":"        \"additionalProperties\": False"},{"line_number":1509,"context_line":"    }"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"    def __init__(self, context_obj\u003dNone):"},{"line_number":1512,"context_line":"        context_obj \u003d context_obj or {}"},{"line_number":1513,"context_line":"        context_obj.setdefault(\"config\", {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_4a6872b9","line":1510,"updated":"2015-07-22 11:33:44.000000000","message":"It seems reasonable to add method `map_for_scenario\u0027 here","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"57ffb29c2698fb2e84373e0a46ac895320f8a977","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"        },"},{"line_number":1508,"context_line":"        \"additionalProperties\": False"},{"line_number":1509,"context_line":"    }"},{"line_number":1510,"context_line":""},{"line_number":1511,"context_line":"    def __init__(self, context_obj\u003dNone):"},{"line_number":1512,"context_line":"        context_obj \u003d context_obj or {}"},{"line_number":1513,"context_line":"        context_obj.setdefault(\"config\", {})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_4a0a8f7a","line":1510,"in_reply_to":"3a50d1a3_4a6872b9","updated":"2015-07-28 22:19:15.000000000","message":"I am not sure why it is reasonable? I mean it will repeat functionality of superclass method","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"}],"tests/unit/plugins/common/runners/test_serial.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"212d19c6f13a95647beb23fbac5a7e2d7100c575","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class SerialScenarioRunnerTestCase(test.TestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(SerialScenarioRunnerTestCase, self).setUp()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    @mock.patch(\"rally.task.runner._run_scenario_once\")"},{"line_number":29,"context_line":"    def test__run_scenario(self, mock__run_scenario_once):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_0b93c45c","side":"PARENT","line":26,"updated":"2015-08-04 08:27:09.000000000","message":"This is not related to the goal of commit.","commit_id":"cda2dbcbd0811fb7bd8209405121d463802faa4c"}],"tests/unit/plugins/openstack/context/keystone/test_users.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0227e9f967b70c2214156a64341cc1994e211525","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class UserContextMixinTestCase(test.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @mock.patch(\"%s.random.choice\" % CTX, side_effect\u003dlambda x: x[1])"},{"line_number":30,"context_line":"    def test_map_for_scenario(self, mock_choice):"},{"line_number":31,"context_line":"        users_ \u003d []"},{"line_number":32,"context_line":"        tenants \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_76ba17c2","line":29,"updated":"2015-07-21 21:08:38.000000000","message":"This lambda could be replaced with operator.itemgetter(1), if you felt like it.","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"57ffb29c2698fb2e84373e0a46ac895320f8a977","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class UserContextMixinTestCase(test.TestCase):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @mock.patch(\"%s.random.choice\" % CTX, side_effect\u003dlambda x: x[1])"},{"line_number":30,"context_line":"    def test_map_for_scenario(self, mock_choice):"},{"line_number":31,"context_line":"        users_ \u003d []"},{"line_number":32,"context_line":"        tenants \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_8a62d73c","line":29,"in_reply_to":"3a50d1a3_76ba17c2","updated":"2015-07-28 22:19:15.000000000","message":"Real not sure, lambda seems simpler\u003d)","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"0227e9f967b70c2214156a64341cc1994e211525","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        tenants \u003d {}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        for i in range(2):"},{"line_number":35,"context_line":"            tenants[str(i)] \u003d dict(name\u003dstr(i))"},{"line_number":36,"context_line":"            for j in range(3):"},{"line_number":37,"context_line":"                users_.append({\"id\": \"%s_%s\" % (i, j),"},{"line_number":38,"context_line":"                              \"tenant_id\": str(i), \"endpoint\": \"endpoint\"})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_56891b25","line":35,"updated":"2015-07-21 21:08:38.000000000","message":"Use {} instead of dict()","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"57ffb29c2698fb2e84373e0a46ac895320f8a977","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        tenants \u003d {}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        for i in range(2):"},{"line_number":35,"context_line":"            tenants[str(i)] \u003d dict(name\u003dstr(i))"},{"line_number":36,"context_line":"            for j in range(3):"},{"line_number":37,"context_line":"                users_.append({\"id\": \"%s_%s\" % (i, j),"},{"line_number":38,"context_line":"                              \"tenant_id\": str(i), \"endpoint\": \"endpoint\"})"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_aa655345","line":35,"in_reply_to":"3a50d1a3_56891b25","updated":"2015-07-28 22:19:15.000000000","message":"okk","commit_id":"cb1012b3a02b48790c26fa3f7ce80c6a7e142447"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"bce8a6fd59a0d402ce4a7b20d0971d81e548d6df","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        nova_admin.networks.get \u003d fake_get_network"},{"line_number":213,"context_line":"        nova_admin.networks.disassociate.side_effect \u003d Exception()"},{"line_number":214,"context_line":"        user_generator \u003d users.UserGenerator(self.context)"},{"line_number":215,"context_line":"        user_generator.context[\"tenants\"] \u003d {\"t1\": {\"id\": \"t1\", \"name\": \"t1\"},"},{"line_number":216,"context_line":"                                             \"t2\": {\"id\": \"t2\", \"name\": \"t2\"}}"},{"line_number":217,"context_line":"        user_generator._remove_associated_networks()"},{"line_number":218,"context_line":"        mock_check_service_status.assert_called_once_with(mock.ANY,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_82f38172","line":215,"updated":"2015-07-29 12:27:21.000000000","message":"Same value for both `id\u0027 and `name\u0027 reduces test efficiency","commit_id":"95ca9a3606c76be1874729b8ce0a3897826ad111"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"212d19c6f13a95647beb23fbac5a7e2d7100c575","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        nova_admin.networks.list.return_value \u003d networks"},{"line_number":186,"context_line":"        nova_admin.networks.get \u003d fake_get_network"},{"line_number":187,"context_line":"        user_generator \u003d users.UserGenerator(self.context)"},{"line_number":188,"context_line":"        user_generator.context[\"tenants\"] \u003d {\"t1\": {\"id\": \"t1\", \"name\": \"t1\"},"},{"line_number":189,"context_line":"                                             \"t2\": {\"id\": \"t2\", \"name\": \"t2\"}}"},{"line_number":190,"context_line":"        user_generator._remove_associated_networks()"},{"line_number":191,"context_line":"        mock_check_service_status.assert_called_once_with(mock.ANY,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_4b878c0f","line":188,"updated":"2015-08-04 08:27:09.000000000","message":"This and all below changes are out of scope for this change. It should be in separate commit. Same for below.","commit_id":"7a3c10e23222f35b0834ca6b5c1a11bd2836849b"}]}
