)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ae37f62aeb5a36a3d83af20ecd164c198ebb9da4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"As the number of parameter grows, and many of them are taken from"},{"line_number":14,"context_line":"configuration, adding dicts with parameters that can be used"},{"line_number":15,"context_line":"when instantiating the credentials providers."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I945994580ce9a29f6fbf67183e5da4b100542386"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"da85f559_8880348d","line":16,"updated":"2015-11-13 08:17:36.000000000","message":"if you re spin, please add BP link","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"}],"tempest/common/credentials.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"083b8cfba9a6b9a3d05ab3645d18bfae24be90c6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"#    limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":"from oslo_concurrency import lockutils"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from tempest_lib import auth"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_0a6c6b06","line":14,"updated":"2015-11-12 13:22:15.000000000","message":"There should be a blank line here.","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5b240705d79bdb1b55454456aa29e097d5b2382c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"#    limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":"from oslo_concurrency import lockutils"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from tempest_lib import auth"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_37c64517","line":14,"in_reply_to":"da85f559_0a6c6b06","updated":"2015-11-13 10:17:08.000000000","message":"ok","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"f95931d52b09a6bec791909cbe781ce9df23c95c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"#    limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":"from oslo_concurrency import lockutils"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from tempest_lib import auth"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_92305fea","line":14,"in_reply_to":"da85f559_37c64517","updated":"2015-11-13 10:20:10.000000000","message":"So this is actually the same comment as in the previous patch","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"d951a5c5ee653f8689eb867e7b6703284bb5b15b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    See the License for the specific language governing permissions and"},{"line_number":12,"context_line":"#    limitations under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":"from oslo_concurrency import lockutils"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from tempest_lib import auth"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_322ad3e8","line":14,"in_reply_to":"da85f559_92305fea","updated":"2015-11-13 10:36:26.000000000","message":"Oh, sorry about this.","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"083b8cfba9a6b9a3d05ab3645d18bfae24be90c6","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def _get_dynamic_provider_params():"},{"line_number":54,"context_line":"    return _get_common_provider_params()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_ea0a4725","line":53,"updated":"2015-11-12 13:22:15.000000000","message":"I really don\u0027t understand the purpose of this function. Why cannot we use _get_common_provider_params()?","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5b240705d79bdb1b55454456aa29e097d5b2382c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def _get_dynamic_provider_params():"},{"line_number":54,"context_line":"    return _get_common_provider_params()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_f7b43d83","line":53,"in_reply_to":"da85f559_ea0a4725","updated":"2015-11-13 10:17:08.000000000","message":"I\u0027d rather keep this. Not strictly required, I agree, but nicer as dynamic provider and preprov provider each get their own function.","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"083b8cfba9a6b9a3d05ab3645d18bfae24be90c6","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            network_resources\u003dnetwork_resources,"},{"line_number":168,"context_line":"            identity_version\u003didentity_version,"},{"line_number":169,"context_line":"            admin_creds\u003dadmin_creds,"},{"line_number":170,"context_line":"            **_get_dynamic_provider_params())"},{"line_number":171,"context_line":"    else:"},{"line_number":172,"context_line":"        if (CONF.auth.test_accounts_file and"},{"line_number":173,"context_line":"                os.path.isfile(CONF.auth.test_accounts_file)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_9ee0a02a","line":170,"updated":"2015-11-12 13:22:15.000000000","message":"Here we can just call _get_common_provider_params().","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5b240705d79bdb1b55454456aa29e097d5b2382c","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            network_resources\u003dnetwork_resources,"},{"line_number":168,"context_line":"            identity_version\u003didentity_version,"},{"line_number":169,"context_line":"            admin_creds\u003dadmin_creds,"},{"line_number":170,"context_line":"            **_get_dynamic_provider_params())"},{"line_number":171,"context_line":"    else:"},{"line_number":172,"context_line":"        if (CONF.auth.test_accounts_file and"},{"line_number":173,"context_line":"                os.path.isfile(CONF.auth.test_accounts_file)):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_b776b5d6","line":170,"in_reply_to":"da85f559_9ee0a02a","updated":"2015-11-13 10:17:08.000000000","message":"I\u0027d rather keep it as it is, so we can add do the dynamic one without changing this call.","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"}],"tempest/common/credentials_factory.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"8c28f194b5a430b880e84b4287c2f4aaea7f9ad2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"def _get_preprov_provider_params():"},{"line_number":59,"context_line":"    _common_params \u003d _get_common_provider_params()"},{"line_number":60,"context_line":"    reseller_admin_role \u003d CONF.object_storage.reseller_admin_role"},{"line_number":61,"context_line":"    return dict(_common_params, **dict(["},{"line_number":62,"context_line":"        (\u0027accounts_lock_dir\u0027, lockutils.get_lock_path(CONF)),"},{"line_number":63,"context_line":"        (\u0027test_accounts_file\u0027, CONF.auth.test_accounts_file),"},{"line_number":64,"context_line":"        (\u0027object_storage_operator_role\u0027, CONF.object_storage.operator_role),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_6df8007c","line":61,"updated":"2015-11-18 18:11:26.000000000","message":"This can be written as follows:\n\n    return dict(_common_params,\n                accounts_lock_dir\u003dlockutils.get_lock_path(CONF),\n                test_accounts_file\u003dCONF.auth.test_accounts_file,\n                object_storage_operator_role\u003dCONF.object_storage.operator_role,\n                object_storage_reseller_admin_role\u003dreseller_admin_role)\n\nBut we can do this in another patch :)","commit_id":"427ec8d86a53e4867422464206e06307af8809af"}],"tempest/common/preprov_creds.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"877945af5e2af27d6e6962250eca072373e54a00","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                 object_storage_reseller_admin_role\u003dNone):"},{"line_number":45,"context_line":"        \"\"\"Credentials provider using pre-provisioned accounts"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        This credentials providers loads the details of pre-provisioned"},{"line_number":48,"context_line":"        accounts from a YAML file, in the format specified by"},{"line_number":49,"context_line":"        `etc/accounts.yaml.sample`. It locks accounts while in use, using the"},{"line_number":50,"context_line":"        external locking mechanism, allowing for multiple python processes"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a26ad4f_ce328710","line":47,"updated":"2015-10-30 03:20:52.000000000","message":"use the singular form here \u0027credentials provider\u0027","commit_id":"5a9e4a74395921905e4fa3dfcda2992756782989"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2f78020e56a61003320369c497649fbf2519d47b","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        :param identity_version: identity version of the credentials"},{"line_number":64,"context_line":"        :param admin_role: name of the admin role"},{"line_number":65,"context_line":"        :param test_accounts_file: path to the accounts YAML file"},{"line_number":66,"context_line":"        :param accounts_lock_dir: the directory for external locking"},{"line_number":67,"context_line":"        :param name: name of the hash file (optional)"},{"line_number":68,"context_line":"        :param credentials_domain: name of the domain credentials belong to"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_da8dded3","line":65,"updated":"2015-11-12 10:41:15.000000000","message":"nit: test_accounts_file should be before admin_role for fitting the arguments","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"083b8cfba9a6b9a3d05ab3645d18bfae24be90c6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                            object_storage_operator_role, temp_hash_key,"},{"line_number":130,"context_line":"                            hash_dict)"},{"line_number":131,"context_line":"                    else:"},{"line_number":132,"context_line":"                        msg \u003d \"Type \u0027operator\u0027 configured, but no \" \\"},{"line_number":133,"context_line":"                              \"object_storage_operator_role specified\""},{"line_number":134,"context_line":"                        raise lib_exc.InvalidCredentials(msg)"},{"line_number":135,"context_line":"                elif type \u003d\u003d \u0027reseller_admin\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_9e42e0ac","line":132,"updated":"2015-11-12 13:22:15.000000000","message":"I think it would be better to use parentheses to break this line instead of \"\\\".","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"083b8cfba9a6b9a3d05ab3645d18bfae24be90c6","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                            temp_hash_key,"},{"line_number":140,"context_line":"                            hash_dict)"},{"line_number":141,"context_line":"                    else:"},{"line_number":142,"context_line":"                        msg \u003d \"Type \u0027reseller_admin\u0027 configured, but no \" \\"},{"line_number":143,"context_line":"                              \"object_storage_reseller_admin_role specified\""},{"line_number":144,"context_line":"                        raise lib_exc.InvalidCredentials(msg)"},{"line_number":145,"context_line":"            # Populate the network subdict"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_de58688c","line":142,"updated":"2015-11-12 13:22:15.000000000","message":"ditto.","commit_id":"ae848461cd949a3ad7c2ac3de6449787f47324f9"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"6d9fcc71f433d03f5c830bbb11756f95054386f2","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                            object_storage_operator_role, temp_hash_key,"},{"line_number":130,"context_line":"                            hash_dict)"},{"line_number":131,"context_line":"                    else:"},{"line_number":132,"context_line":"                        msg \u003d \"Type \u0027operator\u0027 configured, but no \" \\"},{"line_number":133,"context_line":"                              \"object_storage_operator_role specified\""},{"line_number":134,"context_line":"                        raise lib_exc.InvalidCredentials(msg)"},{"line_number":135,"context_line":"                elif type \u003d\u003d \u0027reseller_admin\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_2a26c116","line":132,"updated":"2015-11-13 17:26:48.000000000","message":"Could you please use parentheses to break lines instead of \"\\\".","commit_id":"c3a9092c0afa8bd25928ac73f04e5adb1bac2c29"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"6d9fcc71f433d03f5c830bbb11756f95054386f2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                            temp_hash_key,"},{"line_number":140,"context_line":"                            hash_dict)"},{"line_number":141,"context_line":"                    else:"},{"line_number":142,"context_line":"                        msg \u003d \"Type \u0027reseller_admin\u0027 configured, but no \" \\"},{"line_number":143,"context_line":"                              \"object_storage_reseller_admin_role specified\""},{"line_number":144,"context_line":"                        raise lib_exc.InvalidCredentials(msg)"},{"line_number":145,"context_line":"            # Populate the network subdict"}],"source_content_type":"text/x-python","patch_set":12,"id":"da85f559_6a8289ca","line":142,"updated":"2015-11-13 17:26:48.000000000","message":"ditto","commit_id":"c3a9092c0afa8bd25928ac73f04e5adb1bac2c29"}],"tempest/tests/common/test_preprov_creds.py":[{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"8c28f194b5a430b880e84b4287c2f4aaea7f9ad2","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            lock_path \u003d os.path.join(self.fixed_params[\u0027accounts_lock_dir\u0027],"},{"line_number":159,"context_line":"                                     hash_list[0])"},{"line_number":160,"context_line":"            open_mock.assert_called_once_with(lock_path, \u0027w\u0027)"},{"line_number":161,"context_line":"        mkdir_path \u003d os.path.join(self.fixed_params[\u0027accounts_lock_dir\u0027])"},{"line_number":162,"context_line":"        mkdir_mock.mock.assert_called_once_with(mkdir_path)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    @mock.patch(\u0027oslo_concurrency.lockutils.lock\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba8a016a_c806ba85","line":161,"updated":"2015-11-18 18:11:26.000000000","message":"\"join\" is redundant here. But let\u0027s fix it later.","commit_id":"427ec8d86a53e4867422464206e06307af8809af"}]}
