)]}'
{"tempest/api/compute/images/test_images_oneserver.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        # #1370954 in glance which will 500 if mysql is used as the"},{"line_number":114,"context_line":"        # backend and it attempts to store a 4 byte utf-8 character"},{"line_number":115,"context_line":"        utf_char \u003d b\u0027\\xe2\\x82\\xa1\u0027.decode(\u0027utf-8\u0027)"},{"line_number":116,"context_line":"        utf8_name \u003d data_utils.rand_name(utf_char)"},{"line_number":117,"context_line":"        body \u003d self.client.create_image(self.server_id, name\u003dutf8_name)"},{"line_number":118,"context_line":"        image_id \u003d data_utils.parse_image_id(body.response[\u0027location\u0027])"},{"line_number":119,"context_line":"        self.addCleanup(self.client.delete_image, image_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_fa78f990","line":116,"updated":"2016-07-13 09:04:46.000000000","message":"I\u0027m not sure that you are testing the same thing on Python 2 before/after the change. It seems like before, it tested a byte string. After, it tests a Unicode string. Is it deliberate?","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        # #1370954 in glance which will 500 if mysql is used as the"},{"line_number":114,"context_line":"        # backend and it attempts to store a 4 byte utf-8 character"},{"line_number":115,"context_line":"        utf_char \u003d b\u0027\\xe2\\x82\\xa1\u0027.decode(\u0027utf-8\u0027)"},{"line_number":116,"context_line":"        utf8_name \u003d data_utils.rand_name(utf_char)"},{"line_number":117,"context_line":"        body \u003d self.client.create_image(self.server_id, name\u003dutf8_name)"},{"line_number":118,"context_line":"        image_id \u003d data_utils.parse_image_id(body.response[\u0027location\u0027])"},{"line_number":119,"context_line":"        self.addCleanup(self.client.delete_image, image_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_b3ee3a89","line":116,"in_reply_to":"1aa78d24_fa78f990","updated":"2016-07-19 11:42:55.000000000","message":"This is deliberate. Python 2 will have this utf_char converted anyway to a one byte utf-8 character when jsonutils serializes the bytestring. \n\nWe want the strings type in Python 3 here as the rand_name function requires the argument to be a string. Also, when this bytestring gets serialized by jsonutils, it is turned into a 3 byte utf-8 character in Python 3 as compared to a one byte utf-8 character in python 2.\n\nAn alternative would be to just use a single byte utf-8 character but I don\u0027t know if I should change the existing code too much.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/compute/servers/test_server_personality.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9b796bb9a2ac1cccb3d6633df09543b05e6dafb7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        file_contents \u003d b\u0027This is a test file.\u0027"},{"line_number":56,"context_line":"        file_path \u003d \u0027/test.txt\u0027"},{"line_number":57,"context_line":"        personality \u003d [{\u0027path\u0027: file_path,"},{"line_number":58,"context_line":"                        \u0027contents\u0027: base64.b64encode(file_contents).decode()}]"},{"line_number":59,"context_line":"        password \u003d data_utils.rand_password()"},{"line_number":60,"context_line":"        created_server \u003d self.create_test_server(personality\u003dpersonality,"},{"line_number":61,"context_line":"                                                 adminPass\u003dpassword,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_760f6be1","line":58,"updated":"2016-07-11 15:49:58.000000000","message":"Maybe use http://docs.openstack.org/developer/oslo.serialization/api.html#oslo_serialization.base64.encode_as_bytes","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"50124d543c6af0fe739d5e5b59820c6533253b32","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        file_contents \u003d b\u0027This is a test file.\u0027"},{"line_number":56,"context_line":"        file_path \u003d \u0027/test.txt\u0027"},{"line_number":57,"context_line":"        personality \u003d [{\u0027path\u0027: file_path,"},{"line_number":58,"context_line":"                        \u0027contents\u0027: base64.b64encode(file_contents).decode()}]"},{"line_number":59,"context_line":"        password \u003d data_utils.rand_password()"},{"line_number":60,"context_line":"        created_server \u003d self.create_test_server(personality\u003dpersonality,"},{"line_number":61,"context_line":"                                                 adminPass\u003dpassword,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_1abd2e68","line":58,"in_reply_to":"1aa78d24_760f6be1","updated":"2016-07-12 15:38:42.000000000","message":"Good idea and we actually need http://docs.openstack.org/developer/oslo.serialization/api.html#oslo_serialization.base64.encode_as_text to avoid the extra decode() here.","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"}],"tempest/api/identity/admin/v3/test_groups.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9b796bb9a2ac1cccb3d6633df09543b05e6dafb7","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # list users in group"},{"line_number":85,"context_line":"        group_users \u003d self.groups_client.list_group_users(group[\u0027id\u0027])[\u0027users\u0027]"},{"line_number":86,"context_line":"        self.assertEqual(sorted(users, key\u003dlambda k: k[\u0027name\u0027]),"},{"line_number":87,"context_line":"                         sorted(group_users, key\u003dlambda k: k[\u0027name\u0027]))"},{"line_number":88,"context_line":"        # check and delete user in group"},{"line_number":89,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_9b684023","line":86,"updated":"2016-07-11 15:49:58.000000000","message":"Why this change ?","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"50124d543c6af0fe739d5e5b59820c6533253b32","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # list users in group"},{"line_number":85,"context_line":"        group_users \u003d self.groups_client.list_group_users(group[\u0027id\u0027])[\u0027users\u0027]"},{"line_number":86,"context_line":"        self.assertEqual(sorted(users, key\u003dlambda k: k[\u0027name\u0027]),"},{"line_number":87,"context_line":"                         sorted(group_users, key\u003dlambda k: k[\u0027name\u0027]))"},{"line_number":88,"context_line":"        # check and delete user in group"},{"line_number":89,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_7f00bb02","line":86,"in_reply_to":"1aa78d24_9b684023","updated":"2016-07-12 15:38:42.000000000","message":"Python 3 won\u0027t sort dicts. It accepts a key in the dict to sort by however.","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # list users in group"},{"line_number":85,"context_line":"        group_users \u003d self.groups_client.list_group_users(group[\u0027id\u0027])[\u0027users\u0027]"},{"line_number":86,"context_line":"        self.assertEqual(sorted(users, key\u003dlambda k: k[\u0027name\u0027]),"},{"line_number":87,"context_line":"                         sorted(group_users, key\u003dlambda k: k[\u0027name\u0027]))"},{"line_number":88,"context_line":"        # check and delete user in group"},{"line_number":89,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_9a98d5c1","line":86,"updated":"2016-07-13 09:04:46.000000000","message":"You might create a common sort function to not duplicate the code, put it at the top level to use it in the two modified tests:\n\ndef sort_users(users):\n   return sorted(users, key\u003dlambda k: k[\u0027name\u0027])","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        # list users in group"},{"line_number":85,"context_line":"        group_users \u003d self.groups_client.list_group_users(group[\u0027id\u0027])[\u0027users\u0027]"},{"line_number":86,"context_line":"        self.assertEqual(sorted(users, key\u003dlambda k: k[\u0027name\u0027]),"},{"line_number":87,"context_line":"                         sorted(group_users, key\u003dlambda k: k[\u0027name\u0027]))"},{"line_number":88,"context_line":"        # check and delete user in group"},{"line_number":89,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_6e1e9564","line":86,"in_reply_to":"1aa78d24_9a98d5c1","updated":"2016-07-19 11:42:55.000000000","message":"Actually, one test is sorting users and the other test is sorting groups. So, a common function would be misleading. We could however just add a private function for each test case but it feels like the same difference of just using two sorted functions.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/object_storage/test_account_services.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9b796bb9a2ac1cccb3d6633df09543b05e6dafb7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @test.idempotent_id(\u00275cfa4ab2-4373-48dd-a41f-a532b12b08b2\u0027)"},{"line_number":132,"context_line":"    def test_list_containers_with_limit(self):"},{"line_number":133,"context_line":"        # list containers one of them, half of them then all of them"},{"line_number":134,"context_line":"        for limit in (1, int(self.containers_count / 2),"},{"line_number":135,"context_line":"                      self.containers_count):"},{"line_number":136,"context_line":"            params \u003d {\u0027limit\u0027: limit}"},{"line_number":137,"context_line":"            resp, container_list \u003d \\"}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_fbfce43f","line":134,"updated":"2016-07-11 15:49:58.000000000","message":"Oh my ! I just realized that \u0027/\u0027 is not integer division anymore !","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        self.assertIsNotNone(container_list)"},{"line_number":64,"context_line":"        for container_name in self.containers:"},{"line_number":65,"context_line":"            self.assertIn(six.b(container_name), container_list)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @test.idempotent_id(\u0027884ec421-fbad-4fcc-916b-0580f2699565\u0027)"},{"line_number":68,"context_line":"    def test_list_no_containers(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_ba4e7135","line":65,"updated":"2016-07-13 09:04:46.000000000","message":"six.b() was written for literal strings.\n\nHere, you need to encode manually if container_name is Unicode. I suggest to use oslo_utils.encodeutils.to_utf8() because you probably want UTF-8.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"7b6a6611ec66baa0360e7e8940f7716731017bb8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @test.idempotent_id(\u00275cfa4ab2-4373-48dd-a41f-a532b12b08b2\u0027)"},{"line_number":132,"context_line":"    def test_list_containers_with_limit(self):"},{"line_number":133,"context_line":"        # list containers one of them, half of them then all of them"},{"line_number":134,"context_line":"        for limit in (1, int(self.containers_count / 2),"},{"line_number":135,"context_line":"                      self.containers_count):"},{"line_number":136,"context_line":"            params \u003d {\u0027limit\u0027: limit}"},{"line_number":137,"context_line":"            resp, container_list \u003d \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_97fb90c0","line":134,"updated":"2016-07-13 08:52:26.000000000","message":"Maybe better use \"self.containers_count // 2\" instead? At least that\u0027s what most other py3 patches seem to do, it avoids the intermediate float calculation.\n\nSame for the next couple of occurrences.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f29a60bf244586f916c9372f0be5c3e5da904457","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @test.idempotent_id(\u00275cfa4ab2-4373-48dd-a41f-a532b12b08b2\u0027)"},{"line_number":132,"context_line":"    def test_list_containers_with_limit(self):"},{"line_number":133,"context_line":"        # list containers one of them, half of them then all of them"},{"line_number":134,"context_line":"        for limit in (1, int(self.containers_count / 2),"},{"line_number":135,"context_line":"                      self.containers_count):"},{"line_number":136,"context_line":"            params \u003d {\u0027limit\u0027: limit}"},{"line_number":137,"context_line":"            resp, container_list \u003d \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_da47fdb9","line":134,"in_reply_to":"1aa78d24_1aa345b3","updated":"2016-07-13 09:03:48.000000000","message":"Ah yes! That\u0027s the better way to do it. Thanks.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @test.idempotent_id(\u00275cfa4ab2-4373-48dd-a41f-a532b12b08b2\u0027)"},{"line_number":132,"context_line":"    def test_list_containers_with_limit(self):"},{"line_number":133,"context_line":"        # list containers one of them, half of them then all of them"},{"line_number":134,"context_line":"        for limit in (1, int(self.containers_count / 2),"},{"line_number":135,"context_line":"                      self.containers_count):"},{"line_number":136,"context_line":"            params \u003d {\u0027limit\u0027: limit}"},{"line_number":137,"context_line":"            resp, container_list \u003d \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_4e30f1e8","line":134,"in_reply_to":"1aa78d24_5a566dce","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"99ce2453b9e951ed51cb56f09e9872eb483e9aaf","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @test.idempotent_id(\u00275cfa4ab2-4373-48dd-a41f-a532b12b08b2\u0027)"},{"line_number":132,"context_line":"    def test_list_containers_with_limit(self):"},{"line_number":133,"context_line":"        # list containers one of them, half of them then all of them"},{"line_number":134,"context_line":"        for limit in (1, int(self.containers_count / 2),"},{"line_number":135,"context_line":"                      self.containers_count):"},{"line_number":136,"context_line":"            params \u003d {\u0027limit\u0027: limit}"},{"line_number":137,"context_line":"            resp, container_list \u003d \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_1aa345b3","line":134,"in_reply_to":"1aa78d24_97fb90c0","updated":"2016-07-13 08:59:23.000000000","message":"I like that suggestion.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @test.idempotent_id(\u00275cfa4ab2-4373-48dd-a41f-a532b12b08b2\u0027)"},{"line_number":132,"context_line":"    def test_list_containers_with_limit(self):"},{"line_number":133,"context_line":"        # list containers one of them, half of them then all of them"},{"line_number":134,"context_line":"        for limit in (1, int(self.containers_count / 2),"},{"line_number":135,"context_line":"                      self.containers_count):"},{"line_number":136,"context_line":"            params \u003d {\u0027limit\u0027: limit}"},{"line_number":137,"context_line":"            resp, container_list \u003d \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_5a566dce","line":134,"in_reply_to":"1aa78d24_97fb90c0","updated":"2016-07-13 09:04:46.000000000","message":"yeah, use x//2 please.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            params\u003dparams)"},{"line_number":240,"context_line":"        self.assertHeaders(resp, \u0027Account\u0027, \u0027GET\u0027)"},{"line_number":241,"context_line":"        for container in container_list:"},{"line_number":242,"context_line":"            self.assertEqual(True, container.startswith(six.b(prefix)))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":245,"context_line":"    @test.idempotent_id(\u00274894c312-6056-4587-8d6f-86ffbf861f80\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_ba65d1af","line":242,"updated":"2016-07-13 09:04:46.000000000","message":"please use to_utf8()","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            params\u003dparams)"},{"line_number":240,"context_line":"        self.assertHeaders(resp, \u0027Account\u0027, \u0027GET\u0027)"},{"line_number":241,"context_line":"        for container in container_list:"},{"line_number":242,"context_line":"            self.assertEqual(True, container.startswith(six.b(prefix)))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":245,"context_line":"    @test.idempotent_id(\u00274894c312-6056-4587-8d6f-86ffbf861f80\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_ce5a212a","line":242,"in_reply_to":"1aa78d24_ba65d1af","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/object_storage/test_object_formpost.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                            max_file_count,"},{"line_number":76,"context_line":"                                            expires)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        signature \u003d hmac.new(self.key.encode(\u0027utf-8\u0027),"},{"line_number":79,"context_line":"                             hmac_body.encode(\u0027utf-8\u0027),"},{"line_number":80,"context_line":"                             hashlib.sha1).hexdigest()"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_da189d20","line":78,"updated":"2016-07-13 09:04:46.000000000","message":"I suggest to use to_utf8() to avoid an implicit decode on Python 2 if key is a byte string.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                                            max_file_count,"},{"line_number":76,"context_line":"                                            expires)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        signature \u003d hmac.new(self.key.encode(\u0027utf-8\u0027),"},{"line_number":79,"context_line":"                             hmac_body.encode(\u0027utf-8\u0027),"},{"line_number":80,"context_line":"                             hashlib.sha1).hexdigest()"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_ee6e05c8","line":78,"in_reply_to":"1aa78d24_da189d20","updated":"2016-07-19 11:42:55.000000000","message":"Done. Thanks.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/object_storage/test_object_formpost_negative.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                                            max_file_count,"},{"line_number":77,"context_line":"                                            expires)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        signature \u003d hmac.new(self.key.encode(\u0027utf-8\u0027),"},{"line_number":80,"context_line":"                             hmac_body.encode(\u0027utf-8\u0027),"},{"line_number":81,"context_line":"                             hashlib.sha1).hexdigest()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_9ae9f5e8","line":79,"updated":"2016-07-13 09:04:46.000000000","message":"ditto, use to_utf8()","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                                            max_file_count,"},{"line_number":77,"context_line":"                                            expires)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        signature \u003d hmac.new(self.key.encode(\u0027utf-8\u0027),"},{"line_number":80,"context_line":"                             hmac_body.encode(\u0027utf-8\u0027),"},{"line_number":81,"context_line":"                             hashlib.sha1).hexdigest()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_2e693dbf","line":79,"in_reply_to":"1aa78d24_9ae9f5e8","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/object_storage/test_object_temp_url.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            urlparse.urlparse(self.object_client.base_url).path,"},{"line_number":84,"context_line":"            container, object_name)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        hmac_body \u003d (\u0027%s\\n%s\\n%s\u0027 % (method, expires, path)).encode(\u0027utf-8\u0027)"},{"line_number":87,"context_line":"        key \u003d key.encode(\u0027utf-8\u0027)"},{"line_number":88,"context_line":"        sig \u003d hmac.new(key, hmac_body, hashlib.sha1).hexdigest()"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_da741d37","line":86,"updated":"2016-07-13 09:04:46.000000000","message":"please use to_utf8() to avoid implicit decoding on Python 2.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            urlparse.urlparse(self.object_client.base_url).path,"},{"line_number":84,"context_line":"            container, object_name)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        hmac_body \u003d (\u0027%s\\n%s\\n%s\u0027 % (method, expires, path)).encode(\u0027utf-8\u0027)"},{"line_number":87,"context_line":"        key \u003d key.encode(\u0027utf-8\u0027)"},{"line_number":88,"context_line":"        sig \u003d hmac.new(key, hmac_body, hashlib.sha1).hexdigest()"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_6e6335dd","line":86,"in_reply_to":"1aa78d24_da741d37","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/object_storage/test_object_temp_url_negative.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            container, object_name)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        hmac_body \u003d \u0027%s\\n%s\\n%s\u0027 % (method, expires, path)"},{"line_number":85,"context_line":"        sig \u003d hmac.new(key.encode(\u0027utf-8\u0027),"},{"line_number":86,"context_line":"                       hmac_body.encode(\u0027utf-8\u0027),"},{"line_number":87,"context_line":"                       hashlib.sha1).hexdigest()"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_ba6f915e","line":85,"updated":"2016-07-13 09:04:46.000000000","message":"ditto, to_utf8()","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            container, object_name)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        hmac_body \u003d \u0027%s\\n%s\\n%s\u0027 % (method, expires, path)"},{"line_number":85,"context_line":"        sig \u003d hmac.new(key.encode(\u0027utf-8\u0027),"},{"line_number":86,"context_line":"                       hmac_body.encode(\u0027utf-8\u0027),"},{"line_number":87,"context_line":"                       hashlib.sha1).hexdigest()"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_4e5e3113","line":85,"in_reply_to":"1aa78d24_ba6f915e","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/api/volume/admin/test_volumes_backup.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.admin_backups_client.wait_for_backup_deletion(backup_id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _decode_url(self, backup_url):"},{"line_number":49,"context_line":"        return json.loads(base64.decodestring(six.b(backup_url)))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _encode_backup(self, backup):"},{"line_number":52,"context_line":"        retval \u003d json.dumps(backup)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_baa671a8","line":49,"updated":"2016-07-13 09:04:46.000000000","message":"Please avoid six.b(): use base64 from oslo_serialization which decodes if needed.","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.admin_backups_client.wait_for_backup_deletion(backup_id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _decode_url(self, backup_url):"},{"line_number":49,"context_line":"        return json.loads(base64.decodestring(six.b(backup_url)))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _encode_backup(self, backup):"},{"line_number":52,"context_line":"        retval \u003d json.dumps(backup)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_8e9e69b6","line":49,"in_reply_to":"1aa78d24_baa671a8","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _encode_backup(self, backup):"},{"line_number":52,"context_line":"        retval \u003d json.dumps(backup)"},{"line_number":53,"context_line":"        return base64.encodestring(six.b(retval)).decode(\u0027utf-8\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _modify_backup_url(self, backup_url, changes):"},{"line_number":56,"context_line":"        backup \u003d self._decode_url(backup_url)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_bad4b1e8","line":53,"updated":"2016-07-13 09:04:46.000000000","message":"ditto","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def _encode_backup(self, backup):"},{"line_number":52,"context_line":"        retval \u003d json.dumps(backup)"},{"line_number":53,"context_line":"        return base64.encodestring(six.b(retval)).decode(\u0027utf-8\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def _modify_backup_url(self, backup_url, changes):"},{"line_number":56,"context_line":"        backup \u003d self._decode_url(backup_url)"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_eea56504","line":53,"in_reply_to":"1aa78d24_bad4b1e8","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"}],"tempest/lib/common/utils/data_utils.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9b796bb9a2ac1cccb3d6633df09543b05e6dafb7","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def md5_hexdigest(data):"},{"line_number":213,"context_line":"    \"\"\"Takes a string to generate it\u0027s md5 hexdigest data\"\"\""},{"line_number":214,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":215,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_f64b5b57","line":213,"updated":"2016-07-11 15:49:58.000000000","message":"typo: its","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"50124d543c6af0fe739d5e5b59820c6533253b32","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def md5_hexdigest(data):"},{"line_number":213,"context_line":"    \"\"\"Takes a string to generate it\u0027s md5 hexdigest data\"\"\""},{"line_number":214,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":215,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1aa78d24_df372fae","line":213,"in_reply_to":"1aa78d24_f64b5b57","updated":"2016-07-12 15:38:42.000000000","message":"Done","commit_id":"e869a6d2bf887cb8b0265c0c1de4a8ed97ad915a"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"bd85ff873d02d314cedc7d6d1f3fafd7517f8165","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def md5_hexdigest(data):"},{"line_number":213,"context_line":"    \"\"\"Takes a string to generate it\u0027s md5 hexdigest data\"\"\""},{"line_number":214,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":215,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_686e1501","line":213,"range":{"start_line":213,"start_character":33,"end_line":213,"end_character":38},"updated":"2016-07-13 02:15:38.000000000","message":"It\u0027s still \"it\u0027s\" :)","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f29a60bf244586f916c9372f0be5c3e5da904457","unresolved":false,"context_lines":[{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def md5_hexdigest(data):"},{"line_number":213,"context_line":"    \"\"\"Takes a string to generate it\u0027s md5 hexdigest data\"\"\""},{"line_number":214,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":215,"context_line":"        data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_9760b002","line":213,"range":{"start_line":213,"start_character":33,"end_line":213,"end_character":38},"in_reply_to":"1aa78d24_686e1501","updated":"2016-07-13 09:03:48.000000000","message":"Oops. Yes it is ;)","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5d25024a5e5ea9dc2d5e3272ec6ef6207ac354a0","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def md5_hexdigest(data):"},{"line_number":220,"context_line":"    \"\"\"Takes a string to generate its md5 hexdigest data\"\"\""},{"line_number":221,"context_line":"    if isinstance(data, six.text_type):"},{"line_number":222,"context_line":"        data \u003d encodeutils.to_utf8(data)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    return hashlib.md5(data).hexdigest()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5201f7_68fecb39","line":221,"range":{"start_line":221,"start_character":28,"end_line":221,"end_character":37},"updated":"2017-01-03 10:51:02.000000000","message":"The if doesn\u0027t seem useful to me.","commit_id":"e14ad88a60d932eb28ab1f35dda25c54a4cd4751"}],"tempest/services/object_storage/object_client.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"7b6a6611ec66baa0360e7e8940f7716731017bb8","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Read the 100 status prior to sending the data"},{"line_number":203,"context_line":"        response \u003d conn.response_class(conn.sock,"},{"line_number":204,"context_line":"                                       strict\u003dconn.strict,"},{"line_number":205,"context_line":"                                       method\u003dconn._method)"},{"line_number":206,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_b7f5ec51","side":"PARENT","line":204,"updated":"2016-07-13 08:52:26.000000000","message":"This change looks unrelated, maybe an unintentional artefact from rebasing?","commit_id":"2723fd8b0ac85e2f42d8a41a694ec6db01b8d579"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"540f5302731bb3e46aca295b96a5a8c34de0414c","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Read the 100 status prior to sending the data"},{"line_number":203,"context_line":"        response \u003d conn.response_class(conn.sock,"},{"line_number":204,"context_line":"                                       strict\u003dconn.strict,"},{"line_number":205,"context_line":"                                       method\u003dconn._method)"},{"line_number":206,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_9d98cfc1","side":"PARENT","line":204,"in_reply_to":"1aa78d24_7a1d290e","updated":"2016-07-13 09:12:37.000000000","message":"Ah, right, this is documented at https://docs.python.org/3.4/library/http.client.html#http.client.HTTPConnection in case someone else wants to check.\n\nIt looks like the response_class() call isn\u0027t part of the documented API, though, so one can expect further issues here in the future. Maybe at least add a comment about that as a todo item?","commit_id":"2723fd8b0ac85e2f42d8a41a694ec6db01b8d579"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Read the 100 status prior to sending the data"},{"line_number":203,"context_line":"        response \u003d conn.response_class(conn.sock,"},{"line_number":204,"context_line":"                                       strict\u003dconn.strict,"},{"line_number":205,"context_line":"                                       method\u003dconn._method)"},{"line_number":206,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_ee0f25df","side":"PARENT","line":204,"in_reply_to":"1aa78d24_9d98cfc1","updated":"2016-07-19 11:42:55.000000000","message":"Not entirely sure what is needed here. Perhaps, a bug could be filed for this?","commit_id":"2723fd8b0ac85e2f42d8a41a694ec6db01b8d579"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"99ce2453b9e951ed51cb56f09e9872eb483e9aaf","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # Read the 100 status prior to sending the data"},{"line_number":203,"context_line":"        response \u003d conn.response_class(conn.sock,"},{"line_number":204,"context_line":"                                       strict\u003dconn.strict,"},{"line_number":205,"context_line":"                                       method\u003dconn._method)"},{"line_number":206,"context_line":"        _, status, _ \u003d response._read_status()"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_7a1d290e","side":"PARENT","line":204,"in_reply_to":"1aa78d24_b7f5ec51","updated":"2016-07-13 08:59:23.000000000","message":"strict is gone in Py3.4+","commit_id":"2723fd8b0ac85e2f42d8a41a694ec6db01b8d579"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ee746919c717faece229166fe079adf6b38f2db9","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        # If a continue was received go ahead and send the data"},{"line_number":223,"context_line":"        # and get the final response"},{"line_number":224,"context_line":"        if isinstance(data, six.string_types):"},{"line_number":225,"context_line":"            data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        conn.send(data)"},{"line_number":228,"context_line":"        resp \u003d conn.getresponse()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_ba703109","line":225,"updated":"2016-07-13 09:04:46.000000000","message":"use to_utf8()","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"f90971d14625acb679d9c34e406caf3c30a33b41","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        # If a continue was received go ahead and send the data"},{"line_number":223,"context_line":"        # and get the final response"},{"line_number":224,"context_line":"        if isinstance(data, six.string_types):"},{"line_number":225,"context_line":"            data \u003d data.encode(\u0027utf-8\u0027)"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        conn.send(data)"},{"line_number":228,"context_line":"        resp \u003d conn.getresponse()"}],"source_content_type":"text/x-python","patch_set":8,"id":"dada55a8_0e92799f","line":225,"in_reply_to":"1aa78d24_ba703109","updated":"2016-07-19 11:42:55.000000000","message":"Done","commit_id":"1d1c0082439a0f9e86486dad5d953f839a722dcb"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"5d25024a5e5ea9dc2d5e3272ec6ef6207ac354a0","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        # If a continue was received go ahead and send the data"},{"line_number":218,"context_line":"        # and get the final response"},{"line_number":219,"context_line":"        if isinstance(data, six.string_types):"},{"line_number":220,"context_line":"            data \u003d encodeutils.to_utf8(data)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        conn.send(data)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5201f7_c895f7e4","line":219,"range":{"start_line":219,"start_character":21,"end_line":219,"end_character":22},"updated":"2017-01-03 10:51:02.000000000","message":"The if is useless.","commit_id":"e14ad88a60d932eb28ab1f35dda25c54a4cd4751"}]}
