)]}'
{"tempest/api/identity/admin/test_users.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"6c16fed43e347b4e5b5a0f6c512c47780030081b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self.assertEqual(u_email2, new_user_get[\u0027email\u0027])"},{"line_number":128,"context_line":"        self.assertEqual(\u0027false\u0027, str(new_user_get[\u0027enabled\u0027]).lower())"},{"line_number":129,"context_line":"        #Delete the user"},{"line_number":130,"context_line":"        resp, body \u003d self.client.delete_user(user[\u0027id\u0027])"},{"line_number":131,"context_line":"        self.assertEquals(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2B%2FrU%3D","line":130,"updated":"2013-09-13 21:52:44.000000000","message":"Please make this an addCleanup() if any of the above asserts fail this will leave the user dangling.","commit_id":"4c363cf725c6d5cc7c158bf16b13e212b4248aff"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"7f72f87790340f1e4b2272eef67cfcdc3c83dd1f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        self.assertEqual(u_email2, new_user_get[\u0027email\u0027])"},{"line_number":128,"context_line":"        self.assertEqual(\u0027false\u0027, str(new_user_get[\u0027enabled\u0027]).lower())"},{"line_number":129,"context_line":"        #Delete the user"},{"line_number":130,"context_line":"        resp, body \u003d self.client.delete_user(user[\u0027id\u0027])"},{"line_number":131,"context_line":"        self.assertEquals(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2B%2Fkc%3D","line":130,"in_reply_to":"AAAASn%2F%2B%2FrU%3D","updated":"2013-09-13 22:43:24.000000000","message":"Done","commit_id":"4c363cf725c6d5cc7c158bf16b13e212b4248aff"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"a6adbd732eeeeede841e39f60574e53bbf2ce207","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":105,"context_line":"    def test_update_user(self):"},{"line_number":106,"context_line":"        # Test case to check if updating of user attributes is successful."},{"line_number":107,"context_line":"        alt_user2 \u003d rand_name(\u0027alt_user_\u0027)"},{"line_number":108,"context_line":"        self.data.setup_test_tenant()"},{"line_number":109,"context_line":"        resp, user \u003d self.client.create_user(alt_user2, self.alt_password,"},{"line_number":110,"context_line":"                                             self.data.tenant[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2BrI%3D","line":107,"updated":"2013-09-16 07:56:15.000000000","message":"Personally, I think this should be named \"test_user\" instead of \"alt_user2\" as you are building a test user for this specific test","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"3cab21d4ba4f21626fb053e7de91f4e6e02842b0","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":105,"context_line":"    def test_update_user(self):"},{"line_number":106,"context_line":"        # Test case to check if updating of user attributes is successful."},{"line_number":107,"context_line":"        alt_user2 \u003d rand_name(\u0027alt_user_\u0027)"},{"line_number":108,"context_line":"        self.data.setup_test_tenant()"},{"line_number":109,"context_line":"        resp, user \u003d self.client.create_user(alt_user2, self.alt_password,"},{"line_number":110,"context_line":"                                             self.data.tenant[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2BmA%3D","line":107,"in_reply_to":"AAAAS3%2F%2F%2BrI%3D","updated":"2013-09-16 08:14:57.000000000","message":"Done","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"a6adbd732eeeeede841e39f60574e53bbf2ce207","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.assertEqual(u_email2, update_user[\u0027email\u0027])"},{"line_number":124,"context_line":"        self.assertEqual(\u0027false\u0027, str(update_user[\u0027enabled\u0027]).lower())"},{"line_number":125,"context_line":"        # GET by id after updating"},{"line_number":126,"context_line":"        resp, new_user_get \u003d self.client.get_user(user[\u0027id\u0027])"},{"line_number":127,"context_line":"        # Assert response body of GET after updating"},{"line_number":128,"context_line":"        self.assertEqual(u_name2, new_user_get[\u0027name\u0027])"},{"line_number":129,"context_line":"        self.assertEqual(u_email2, new_user_get[\u0027email\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2Bq4%3D","line":126,"updated":"2013-09-16 07:56:15.000000000","message":"also, this suppose to be \"updated_user\" and not \"new_user_get\" as the name might be misleading","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"3cab21d4ba4f21626fb053e7de91f4e6e02842b0","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.assertEqual(u_email2, update_user[\u0027email\u0027])"},{"line_number":124,"context_line":"        self.assertEqual(\u0027false\u0027, str(update_user[\u0027enabled\u0027]).lower())"},{"line_number":125,"context_line":"        # GET by id after updating"},{"line_number":126,"context_line":"        resp, new_user_get \u003d self.client.get_user(user[\u0027id\u0027])"},{"line_number":127,"context_line":"        # Assert response body of GET after updating"},{"line_number":128,"context_line":"        self.assertEqual(u_name2, new_user_get[\u0027name\u0027])"},{"line_number":129,"context_line":"        self.assertEqual(u_email2, new_user_get[\u0027email\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2Bl8%3D","line":126,"in_reply_to":"AAAAS3%2F%2F%2Bq4%3D","updated":"2013-09-16 08:14:57.000000000","message":"Done","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"a6adbd732eeeeede841e39f60574e53bbf2ce207","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":133,"context_line":"    def test_delete_user(self):"},{"line_number":134,"context_line":"        # Delete a user"},{"line_number":135,"context_line":"        alt_user2 \u003d rand_name(\u0027alt_user_\u0027)"},{"line_number":136,"context_line":"        self.data.setup_test_tenant()"},{"line_number":137,"context_line":"        resp, user \u003d self.client.create_user(alt_user2, self.alt_password,"},{"line_number":138,"context_line":"                                             self.data.tenant[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2BrE%3D","line":135,"updated":"2013-09-16 07:56:15.000000000","message":"if you can also change this while you submit that would be great :)","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"3cab21d4ba4f21626fb053e7de91f4e6e02842b0","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":133,"context_line":"    def test_delete_user(self):"},{"line_number":134,"context_line":"        # Delete a user"},{"line_number":135,"context_line":"        alt_user2 \u003d rand_name(\u0027alt_user_\u0027)"},{"line_number":136,"context_line":"        self.data.setup_test_tenant()"},{"line_number":137,"context_line":"        resp, user \u003d self.client.create_user(alt_user2, self.alt_password,"},{"line_number":138,"context_line":"                                             self.data.tenant[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2Bl4%3D","line":135,"in_reply_to":"AAAAS3%2F%2F%2BrE%3D","updated":"2013-09-16 08:14:57.000000000","message":"Done","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"}],"tempest/services/identity/json/identity_client.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9d1b1d5a0bf6e4bc1ffe041df5488393fa883c2a","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, name, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":159,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"},{"line_number":160,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2B%2B4g%3D","line":157,"updated":"2013-09-14 15:02:09.000000000","message":"How about adding \"name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])\" like the following 2 lines?","commit_id":"4920baebfc4afcad751238aacc00714ddc91dfa7"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"ea8f60a652defdcf2a878414e7230aafd855b7c0","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, name, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":159,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"},{"line_number":160,"context_line":"        put_body \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2B%2B1E%3D","line":157,"in_reply_to":"AAAASn%2F%2B%2B4g%3D","updated":"2013-09-14 15:16:41.000000000","message":"Done","commit_id":"4920baebfc4afcad751238aacc00714ddc91dfa7"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"a6adbd732eeeeede841e39f60574e53bbf2ce207","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2BpU%3D","line":157,"updated":"2013-09-16 07:56:15.000000000","message":"Why are you making this request?\nyou already send the necessary params in kwargs...","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"3cab21d4ba4f21626fb053e7de91f4e6e02842b0","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2BmE%3D","line":157,"in_reply_to":"AAAAS3%2F%2F%2BpU%3D","updated":"2013-09-16 08:14:57.000000000","message":"see dict put_body , we can\u0027t make sure user can provide every  property , for example , user only provide  name ,we need keep other properties same with original ones.","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"e4beec9004bfa3e799ea9b3a40d8b4e566bf3a71","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F%2BLU%3D","line":157,"updated":"2013-09-16 11:19:26.000000000","message":"(commented on the previous patch)\nYou do not need to specify all parameters, openstack only updates the specified parameter, thus if you remove the params from the body, it will not \"overwrite\" the original with \"None/null\", it will just keep it as it is","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"e6fca7c8ca27ed6868b0824554ff43a2017bbe97","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F9%2Fs%3D","line":157,"in_reply_to":"AAAAS3%2F%2F%2BA8%3D","updated":"2013-09-16 12:32:51.000000000","message":"Tal , Is this OK for you ?","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"5daaa4b961fb2584fa0f9b2dc0c9d453c3ef42b8","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F%2BEk%3D","line":157,"in_reply_to":"AAAAS3%2F%2F%2BFU%3D","updated":"2013-09-16 12:12:05.000000000","message":"sorry, pushed \"submit\" too soon without thinking this trough, you can remove the \"if value\" part","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"c6a8bd32bedf1d217a41061c0f9e7a1959b1f7dd","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F%2BA8%3D","line":157,"in_reply_to":"AAAAS3%2F%2F%2BFU%3D","updated":"2013-09-16 12:28:00.000000000","message":"thanks for quick suggesting :) ,  what about  kwargs is  ( name\u003d\u0027name1\u0027,  xyz\u003d\u0027xyz\u0027) , we still need  some work to filter invalide, \n\nfor key, value in kwargs.iteritems():\n     if key in [\u0027name\u0027, \u0027email\u0027, \u0027enable\u0027]:\n         put_body[key] \u003d value","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"dbe22731655c3a175d6f73dd2055a5fe3b53d895","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F%2BFU%3D","line":157,"in_reply_to":"AAAAS3%2F%2F%2BHg%3D","updated":"2013-09-16 12:07:07.000000000","message":"I haven\u0027t been here when the \"update_tenant\" was written.. probably would have \"-1\" that as well :)\nIn this case, (and in the \"update_tenant\" as well), it just creates an unnecessary overhead by issuing another request to the server, a request that is not needed.\nI would suggest that you make something like:\n\n\nfor key, value in kwargs.iteritems():\n    if value:\n        put_body[key] \u003d value\n\n\nthis way, you can create the put_body dynamically according to what the user specified","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"eb850dfc5727c95fa9c8a60257ae1f0c699a5567","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F%2BHg%3D","line":157,"in_reply_to":"AAAAS3%2F%2F%2BLU%3D","updated":"2013-09-16 11:57:27.000000000","message":"Tal , I agree with that. thanks\n\nIn this smoke test , I need construct put_body. I can\u0027t use kwargs as put_body\ndirectly ,need add additional logic  to check  valid key and determine which key has passed. Here original user information is used as default value to avoid addithonal logic  and keep same behaviour  with method update_tenant in line 124  and readable.","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"b5575288fc3d5ae3540ff76a81354a516fa1f7a1","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":156,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":157,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":158,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":159,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":160,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2F98s%3D","line":157,"in_reply_to":"AAAAS3%2F%2F9%2Fs%3D","updated":"2013-09-16 12:45:04.000000000","message":"Well, personally, when you write an API, you do not dwell in \"defensive programming\", meaning, your assumption is that the user knows what he is doing and is sending the proper parameters.\nSince this is the client side, I see no reason to make the validation as worst case, the server will return a \"Bad Request\" respond.\n\nIn case you still insist of writing the explicit parameters, simply make them required by doing: (as they did in \"create_user\" for example)\n\ndef update_user(self, user_id, u_name, u_email, enable):\n\nThough personally, I like the **kwargs approach better :)","commit_id":"15efc167530f8b8bc12d5a25e18bfbd4ccdcb381"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"610611c37df7983844d4fea65cb1449d1b30db63","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        for key, value in kwargs.iteritems():"},{"line_number":159,"context_line":"            user_attr[key] \u003d value"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        put_body \u003d json.dumps({\u0027user\u0027: user_attr})"},{"line_number":162,"context_line":"        resp, body \u003d self.put(\u0027users/%s\u0027 % user_id, put_body,"},{"line_number":163,"context_line":"                              self.headers)"},{"line_number":164,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2F9co%3D","line":161,"updated":"2013-09-16 15:18:09.000000000","message":"sorry for all the trouble I give you, but if you decided to go with this method, you can simply remove the whole \"user_attr \u003d {}...\" and just keep the:\n\nput_body \u003d json.dumps({\u0027user\u0027: kwargs})\n\nthe for loop is redundant here :)","commit_id":"a22ce6f7e0103343a2f5e317ae04286a29d4f2e8"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"097690c876317ac4ad91f0145a07822c827bada5","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        for key, value in kwargs.iteritems():"},{"line_number":159,"context_line":"            user_attr[key] \u003d value"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        put_body \u003d json.dumps({\u0027user\u0027: user_attr})"},{"line_number":162,"context_line":"        resp, body \u003d self.put(\u0027users/%s\u0027 % user_id, put_body,"},{"line_number":163,"context_line":"                              self.headers)"},{"line_number":164,"context_line":"        body \u003d json.loads(body)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2F73E%3D","line":161,"in_reply_to":"AAAAS3%2F%2F9co%3D","updated":"2013-09-16 22:31:22.000000000","message":"yes, the loop is redundant if we don\u0027t want convert input like  I did in  xml/identity_client.py. \n\nTal Kammer, thanks for your review , that\u0027s really helpful for code quality and performance .","commit_id":"a22ce6f7e0103343a2f5e317ae04286a29d4f2e8"}],"tempest/services/identity/xml/identity_client.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9d1b1d5a0bf6e4bc1ffe041df5488393fa883c2a","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def update_user(self, user_id, name, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":177,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":178,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":179,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"},{"line_number":180,"context_line":"        update_user \u003d Element(\"user\","}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2B%2B4A%3D","line":177,"updated":"2013-09-14 15:02:09.000000000","message":"the same point as json/identity_client.py","commit_id":"4920baebfc4afcad751238aacc00714ddc91dfa7"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"ea8f60a652defdcf2a878414e7230aafd855b7c0","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def update_user(self, user_id, name, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":177,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":178,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":179,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"},{"line_number":180,"context_line":"        update_user \u003d Element(\"user\","}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2B%2B1A%3D","line":177,"in_reply_to":"AAAASn%2F%2B%2B4A%3D","updated":"2013-09-14 15:16:41.000000000","message":"Done","commit_id":"4920baebfc4afcad751238aacc00714ddc91dfa7"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"a6adbd732eeeeede841e39f60574e53bbf2ce207","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":177,"context_line":"        resp, body \u003d self.get_user(user_id)"},{"line_number":178,"context_line":"        name \u003d kwargs.get(\u0027name\u0027, body[\u0027name\u0027])"},{"line_number":179,"context_line":"        email \u003d kwargs.get(\u0027email\u0027, body[\u0027email\u0027])"},{"line_number":180,"context_line":"        en \u003d kwargs.get(\u0027enabled\u0027, body[\u0027enabled\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2F%2BpI%3D","line":177,"updated":"2013-09-16 07:56:15.000000000","message":"Same as in the JSON client, why are you making this request?","commit_id":"dd0767d09d96047f8bc07a007ec765e0a2f1ecca"},{"author":{"_account_id":6578,"name":"Tal Kammer","email":"tkammer@redhat.com","username":"tkammer"},"change_message_id":"a5c54e486aef21c22c9de03767ca3ff62abe7b6c","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":177,"context_line":"        user_attr \u003d {}"},{"line_number":178,"context_line":"        for key, value in kwargs.iteritems():"},{"line_number":179,"context_line":"            if isinstance(value, bool):"},{"line_number":180,"context_line":"                user_attr[key] \u003d str(value).lower()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2F6%2Fs%3D","line":177,"updated":"2013-09-17 07:03:01.000000000","message":"Please don\u0027t forget to update the XML part as well.. (remove the for loop + if/else)\n\nupdate_user \u003d Element(\"user\", xmlns\u003dXMLNS, **kwargs)","commit_id":"e66b903d71efaa6d234217d76d76f927830acc0e"},{"author":{"_account_id":6722,"name":"ChangBo Guo(gcb)","email":"guochbo@cn.ibm.com","username":"guochbo"},"change_message_id":"9d7a855c45fdf3b08894f3d300b2646148fe4fd4","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def update_user(self, user_id, **kwargs):"},{"line_number":176,"context_line":"        \"\"\"Updates a user.\"\"\""},{"line_number":177,"context_line":"        user_attr \u003d {}"},{"line_number":178,"context_line":"        for key, value in kwargs.iteritems():"},{"line_number":179,"context_line":"            if isinstance(value, bool):"},{"line_number":180,"context_line":"                user_attr[key] \u003d str(value).lower()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2F6rM%3D","line":177,"in_reply_to":"AAAAS3%2F%2F6%2Fs%3D","updated":"2013-09-17 08:32:41.000000000","message":"Tal ,  we can\u0027t do this without convert  type bool to string  :)\nGot Jekins error\n\nTraceback (most recent call last):\n  File \"tempest/api/identity/admin/test_users.py\", line 119, in test_update_user\n    enabled\u003dFalse)\n  File \"tempest/services/identity/xml/identity_client.py\", line 181, in update_user\n    self.headers)\n  File \"tempest/common/rest_client.py\", line 272, in put\n    return self.request(\u0027PUT\u0027, url, headers, body)\n  File \"tempest/common/rest_client.py\", line 394, in request\n    resp, resp_body)\n  File \"tempest/common/rest_client.py\", line 444, in _error_checker\n    raise exceptions.BadRequest(resp_body)\nBadRequest: Bad request\nDetails: {\u0027message\u0027: \u0027Enabled field should be a boolean\u0027, \u0027code\u0027: \u0027400\u0027, \u0027title\u0027: \u0027Bad Request\u0027}","commit_id":"e66b903d71efaa6d234217d76d76f927830acc0e"}]}
