)]}'
{"tempest/api/identity/admin/v3/test_credentials.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"71d8f2562c34bea53badc84652627fc94882aada","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":54,"context_line":"    @test.idempotent_id(\u00277cd59bf9-bda4-4c72-9467-d21cab278355\u0027)"},{"line_number":55,"context_line":"    def test_credentials_create_get_update_delete(self):"},{"line_number":56,"context_line":"        blob \u003d \"{\\\"access\\\": \\\"%s\\\", \\\"secret\\\": \\\"%s\\\"}\" % ("},{"line_number":57,"context_line":"            data_utils.rand_name(\u0027Access\u0027), data_utils.rand_name(\u0027Secret\u0027))"},{"line_number":58,"context_line":"        cred \u003d self.creds_client.create_credential("},{"line_number":59,"context_line":"            user_id\u003dself.user_body[\u0027id\u0027], project_id\u003dself.projects[0],"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_59cbb772","line":56,"updated":"2015-11-10 10:03:16.000000000","message":"While we are at it maybe:\n\n  blob \u003d \u0027{\"access\": \"%s\", \"secret\": \"%s\"}\u0027 % (\n\nis clearer","commit_id":"61f36251b83f9de106920a32ec5f23dcacf5588c"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"cbea1ad3454d4ac29311cca9bdc81f55ed474054","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":54,"context_line":"    @test.idempotent_id(\u00277cd59bf9-bda4-4c72-9467-d21cab278355\u0027)"},{"line_number":55,"context_line":"    def test_credentials_create_get_update_delete(self):"},{"line_number":56,"context_line":"        blob \u003d \"{\\\"access\\\": \\\"%s\\\", \\\"secret\\\": \\\"%s\\\"}\" % ("},{"line_number":57,"context_line":"            data_utils.rand_name(\u0027Access\u0027), data_utils.rand_name(\u0027Secret\u0027))"},{"line_number":58,"context_line":"        cred \u003d self.creds_client.create_credential("},{"line_number":59,"context_line":"            user_id\u003dself.user_body[\u0027id\u0027], project_id\u003dself.projects[0],"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_7aff8967","line":56,"in_reply_to":"da85f559_59cbb772","updated":"2015-11-10 10:57:52.000000000","message":"thanks, will do.","commit_id":"61f36251b83f9de106920a32ec5f23dcacf5588c"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"71d8f2562c34bea53badc84652627fc94882aada","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        fetched_cred_ids \u003d list()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        for i in range(2):"},{"line_number":92,"context_line":"            blob \u003d \"{\\\"access\\\": \\\"%s\\\", \\\"secret\\\": \\\"%s\\\"}\" % ("},{"line_number":93,"context_line":"                data_utils.rand_name(\u0027Access\u0027), data_utils.rand_name(\u0027Secret\u0027))"},{"line_number":94,"context_line":"            cred \u003d self.creds_client.create_credential("},{"line_number":95,"context_line":"                user_id\u003dself.user_body[\u0027id\u0027], project_id\u003dself.projects[0],"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_d9a567b5","line":92,"updated":"2015-11-10 10:03:16.000000000","message":"Same","commit_id":"61f36251b83f9de106920a32ec5f23dcacf5588c"}],"tempest/services/identity/v3/json/credentials_client.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"8282d210a92e84deec30ab6d75a2f72cc11ad168","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, user_id, project_id, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {"},{"line_number":27,"context_line":"            \"blob\": \"{\u0027access\u0027: \u0027%s\u0027, \u0027secret\u0027: \u0027%s\u0027}\""},{"line_number":28,"context_line":"                    % (kwargs.get(\u0027access_key\u0027), kwargs.get(\u0027secret_key\u0027)),"},{"line_number":29,"context_line":"            \"type\": kwargs.get(\u0027type\u0027, \u0027ec2\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_3edccbe3","line":26,"updated":"2015-11-09 13:15:26.000000000","message":"Moving the blob definition into post_body seems like an unrelated change. I don\u0027t mind really, but it\u0027s now inconsistent with L48-49. \nYou changed those lines in patchset2, but then dropped the change, what was the reason for that?","commit_id":"8ba7d42c6c9dd4203e726466ff213136939c888b"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"82c6eb071df381a1ee1bd6c2aa29d13e2af41e09","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, user_id, project_id, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {"},{"line_number":27,"context_line":"            \"blob\": \"{\u0027access\u0027: \u0027%s\u0027, \u0027secret\u0027: \u0027%s\u0027}\""},{"line_number":28,"context_line":"                    % (kwargs.get(\u0027access_key\u0027), kwargs.get(\u0027secret_key\u0027)),"},{"line_number":29,"context_line":"            \"type\": kwargs.get(\u0027type\u0027, \u0027ec2\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"da85f559_efbe8bfe","line":26,"in_reply_to":"da85f559_3edccbe3","updated":"2015-11-09 13:57:42.000000000","message":"Andrea, I dropped the changes in L48-49 because these changes were unrelated to this patch :)","commit_id":"8ba7d42c6c9dd4203e726466ff213136939c888b"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"6b259ebf2a497473a82c1d1b6e43062a378d051c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        body[\u0027credential\u0027][\u0027blob\u0027] \u003d json.loads(body[\u0027credential\u0027][\u0027blob\u0027])"},{"line_number":33,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def update_credential(self, credential_id, **kwargs):"},{"line_number":36,"context_line":"        \"\"\"Updates a credential.\"\"\""},{"line_number":37,"context_line":"        body \u003d self.get_credential(credential_id)[\u0027credential\u0027]"},{"line_number":38,"context_line":"        cred_type \u003d kwargs.get(\u0027type\u0027, body[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_8c97bf8f","line":35,"updated":"2015-11-09 17:04:08.000000000","message":"Should I make any changes in this method or not?","commit_id":"61f36251b83f9de106920a32ec5f23dcacf5588c"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"71d8f2562c34bea53badc84652627fc94882aada","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        body[\u0027credential\u0027][\u0027blob\u0027] \u003d json.loads(body[\u0027credential\u0027][\u0027blob\u0027])"},{"line_number":33,"context_line":"        return service_client.ResponseBody(resp, body)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def update_credential(self, credential_id, **kwargs):"},{"line_number":36,"context_line":"        \"\"\"Updates a credential.\"\"\""},{"line_number":37,"context_line":"        body \u003d self.get_credential(credential_id)[\u0027credential\u0027]"},{"line_number":38,"context_line":"        cred_type \u003d kwargs.get(\u0027type\u0027, body[\u0027type\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_d92fa7f4","line":35,"in_reply_to":"da85f559_8c97bf8f","updated":"2015-11-10 10:03:16.000000000","message":"It\u0027s up to you. It\u0027s ugly like this but it does the job and respects what we want for Tempest lib. IMO no changes are required.","commit_id":"61f36251b83f9de106920a32ec5f23dcacf5588c"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"60c82348021b7eca96da86f2a2a29fd221945d4d","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {\"type\": kwargs.pop(\u0027type\u0027, \u0027ec2\u0027)}"},{"line_number":27,"context_line":"        post_body.update(kwargs)"},{"line_number":28,"context_line":"        post_body \u003d json.dumps({\u0027credential\u0027: post_body})"},{"line_number":29,"context_line":"        resp, body \u003d self.post(\u0027credentials\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_c7c2f452","line":26,"updated":"2015-11-12 04:27:27.000000000","message":"Why don\u0027t you pass this \u0027ec2\u0027 also from caller side?\n\nThe above code seems a little magic as a library.","commit_id":"5275000480b85ac806ddfb7deb59d463e1f446c7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ddd1d7ff928e14e41617129e00474d5d68296115","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {\"type\": kwargs.pop(\u0027type\u0027, \u0027ec2\u0027)}"},{"line_number":27,"context_line":"        post_body.update(kwargs)"},{"line_number":28,"context_line":"        post_body \u003d json.dumps({\u0027credential\u0027: post_body})"},{"line_number":29,"context_line":"        resp, body \u003d self.post(\u0027credentials\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_8a6d449b","line":26,"in_reply_to":"da85f559_44b5957b","updated":"2015-11-16 03:17:27.000000000","message":"On Keystone REST API, \"ec2\" doesn\u0027t seems the default because of https://github.com/openstack/keystone/blob/master/keystone/credential/schema.py#L33\n\nSo on ec2 credential, type should be \"ec2\". but not ec2 credential, the other type is fine.","commit_id":"5275000480b85ac806ddfb7deb59d463e1f446c7"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"1234aeae1ad41775343dde54b2185869c6b3b338","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {\"type\": kwargs.pop(\u0027type\u0027, \u0027ec2\u0027)}"},{"line_number":27,"context_line":"        post_body.update(kwargs)"},{"line_number":28,"context_line":"        post_body \u003d json.dumps({\u0027credential\u0027: post_body})"},{"line_number":29,"context_line":"        resp, body \u003d self.post(\u0027credentials\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_44b5957b","line":26,"in_reply_to":"da85f559_7c663752","updated":"2015-11-12 10:09:00.000000000","message":"Ken\u0027ichi, Andrea is right actually. It sets the default value, but also we can pass it from the caller side. I like both variants. Andrea, Ken\u0027ichi, I think we can add doc links later :) What do you think about it?","commit_id":"5275000480b85ac806ddfb7deb59d463e1f446c7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ba9c7629669ca0c091ef4586cce0408a26546248","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {\"type\": kwargs.pop(\u0027type\u0027, \u0027ec2\u0027)}"},{"line_number":27,"context_line":"        post_body.update(kwargs)"},{"line_number":28,"context_line":"        post_body \u003d json.dumps({\u0027credential\u0027: post_body})"},{"line_number":29,"context_line":"        resp, body \u003d self.post(\u0027credentials\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_7c663752","line":26,"in_reply_to":"da85f559_b02e08a3","updated":"2015-11-12 08:29:36.000000000","message":"This is setting a default value for type to ec2, which I think it makes sense - one can still pass type \u003d \u0027\u0027 or type\u003dNone if needed for a negative test. The default value applies only if the parameter is not passed at all. It should be documented in the doc-string though.","commit_id":"5275000480b85ac806ddfb7deb59d463e1f446c7"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"f2537381de33d3507ca17e7c686c6c6a8c1e4a8f","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    def create_credential(self, **kwargs):"},{"line_number":25,"context_line":"        \"\"\"Creates a credential.\"\"\""},{"line_number":26,"context_line":"        post_body \u003d {\"type\": kwargs.pop(\u0027type\u0027, \u0027ec2\u0027)}"},{"line_number":27,"context_line":"        post_body.update(kwargs)"},{"line_number":28,"context_line":"        post_body \u003d json.dumps({\u0027credential\u0027: post_body})"},{"line_number":29,"context_line":"        resp, body \u003d self.post(\u0027credentials\u0027, post_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_b02e08a3","line":26,"in_reply_to":"da85f559_c7c2f452","updated":"2015-11-12 06:38:19.000000000","message":"OK, will do.","commit_id":"5275000480b85ac806ddfb7deb59d463e1f446c7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"60c82348021b7eca96da86f2a2a29fd221945d4d","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def update_credential(self, credential_id, **kwargs):"},{"line_number":36,"context_line":"        \"\"\"Updates a credential.\"\"\""},{"line_number":37,"context_line":"        post_body \u003d {\"type\": kwargs.pop(\u0027type\u0027, \u0027ec2\u0027)}"},{"line_number":38,"context_line":"        post_body.update(kwargs)"},{"line_number":39,"context_line":"        post_body \u003d json.dumps({\u0027credential\u0027: post_body})"},{"line_number":40,"context_line":"        resp, body \u003d self.patch(\u0027credentials/%s\u0027 % credential_id, post_body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da85f559_87a70cbc","line":37,"updated":"2015-11-12 04:27:27.000000000","message":"ditto","commit_id":"5275000480b85ac806ddfb7deb59d463e1f446c7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"98ce425727903dd201d70be0c76af785af8503b1","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":"\"\"\"http://developer.openstack.org/api-ref-identity-v3.html#credentials-v3\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_serialization import jsonutils as json"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_08222ea3","line":16,"updated":"2015-11-12 14:29:25.000000000","message":"Thanks for adding the link. It\u0027s ok, but I think it would be nicer to have a text in each method that says something like \"Available parameters: see [link] with a link to the specific API\".\n\nWe should get a kind of documentation template in the tracking etherpad so that we get consistent docs on all clients.","commit_id":"fb0273ec06a878825e58438d77c9456d1ca9bca8"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"c503b42f2d4430e81c985d38be924ab6ca9f9065","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":"\"\"\"http://developer.openstack.org/api-ref-identity-v3.html#credentials-v3\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_serialization import jsonutils as json"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_a638f2d3","line":16,"in_reply_to":"da85f559_08222ea3","updated":"2015-11-12 15:22:20.000000000","message":"OK, np :) I can do the etherpad as well.","commit_id":"fb0273ec06a878825e58438d77c9456d1ca9bca8"}]}
