)]}'
{"tempest/api/object_storage/base.py":[{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"74e741b4d4c78d87428703770ed2284f8382e1dd","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                pass"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @classmethod"},{"line_number":126,"context_line":"    def check_trans_id(cls, check_str):"},{"line_number":127,"context_line":"        if re.match(\"^tx[0-9a-f]*-[0-9a-f]*$\", check_str):"},{"line_number":128,"context_line":"            return True"},{"line_number":129,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B1co%3D","line":126,"updated":"2013-11-19 15:34:23.000000000","message":"same remark as for the slo test.","commit_id":"bb645fc39c8334659cf948556527e1449341528c"}],"tempest/api/object_storage/test_account_bulk.py":[{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"74e741b4d4c78d87428703770ed2284f8382e1dd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        os.remove(filepath)"},{"line_number":70,"context_line":"        self.containers.append(container_name)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":73,"context_line":"        self.assertIn(\u0027transfer-encoding\u0027, resp)"},{"line_number":74,"context_line":"        self.assertIn(\u0027content-type\u0027, resp)"},{"line_number":75,"context_line":"        self.assertIn(\u0027x-trans-id\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2B1cY%3D","line":72,"updated":"2013-11-19 15:34:23.000000000","message":"Same remark as the slo middleware.\n\nThis code is useful and highly reusable, why not package it in a reusable function?","commit_id":"bb645fc39c8334659cf948556527e1449341528c"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"43bdac2ceb95dadff4118cccbe6167498b859534","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        os.remove(filepath)"},{"line_number":70,"context_line":"        self.containers.append(container_name)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":73,"context_line":"        self.assertIn(\u0027transfer-encoding\u0027, resp)"},{"line_number":74,"context_line":"        self.assertIn(\u0027content-type\u0027, resp)"},{"line_number":75,"context_line":"        self.assertIn(\u0027x-trans-id\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2By%2Fw%3D","line":72,"in_reply_to":"AAAATn%2F%2B1cY%3D","updated":"2013-11-20 02:53:30.000000000","message":"Currently, I am tackling this issue by other patch I7dcd87c814cf657999796bda75482505112b4edb . After fixing that, I will apply that function to this patch.","commit_id":"bb645fc39c8334659cf948556527e1449341528c"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"71efabc3a78694eb3769c6110ac6cee59c62ab97","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(BulkTest, self).setUp()"},{"line_number":36,"context_line":"        self.containers[:] \u003d []"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def tearDown(self):"},{"line_number":39,"context_line":"        self.delete_containers(self.containers)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F99TA%3D","line":36,"updated":"2013-12-04 01:38:42.000000000","message":"There\u0027s no reason to create a class attribute then shadow it like that.\n\nI think you could simply declare containers as an instance attribute.","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"c90a10019af236dcd491a877a28355ae65c50b12","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(BulkTest, self).setUp()"},{"line_number":36,"context_line":"        self.containers[:] \u003d []"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def tearDown(self):"},{"line_number":39,"context_line":"        self.delete_containers(self.containers)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9qzU%3D","line":36,"in_reply_to":"AAAATn%2F99TA%3D","updated":"2013-12-09 01:32:41.000000000","message":"Done","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"71efabc3a78694eb3769c6110ac6cee59c62ab97","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        os.remove(filepath)"},{"line_number":69,"context_line":"        self.containers.append(container_name)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        self.assertEqual(resp[\u0027status\u0027], \u0027200\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # When uploading an archived file with the bulk operation, the response"},{"line_number":74,"context_line":"        # does not contain \u0027content-length\u0027 header. This is the special case,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F99TI%3D","line":71,"updated":"2013-12-04 01:38:42.000000000","message":"You should use tempest.test.HTTP_SUCCESS.\n\nLike this: https://github.com/openstack/tempest/blob/master/tempest/api/object_storage/test_crossdomain.py#L80","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"c90a10019af236dcd491a877a28355ae65c50b12","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        os.remove(filepath)"},{"line_number":69,"context_line":"        self.containers.append(container_name)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        self.assertEqual(resp[\u0027status\u0027], \u0027200\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # When uploading an archived file with the bulk operation, the response"},{"line_number":74,"context_line":"        # does not contain \u0027content-length\u0027 header. This is the special case,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9qzE%3D","line":71,"in_reply_to":"AAAATn%2F99TI%3D","updated":"2013-12-09 01:32:41.000000000","message":"Swift document specifies the response code of bulk operations for 200 OK. See  http://docs.openstack.org/developer/swift/misc.html#module-swift.common.middleware.bulk . Therefore, I think it is appropriate to check 200 specifically.","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"71efabc3a78694eb3769c6110ac6cee59c62ab97","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), test.HTTP_SUCCESS)"},{"line_number":89,"context_line":"        self.assertHeaders(resp, \u0027Account\u0027, \u0027GET\u0027)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        self.assertIn(container_name, [b[\u0027name\u0027] for b in body])"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        param \u003d {\u0027format\u0027: \u0027json\u0027}"},{"line_number":94,"context_line":"        resp, contents_list \u003d self.container_client.list_container_contents("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F99Qo%3D","line":91,"updated":"2013-12-04 01:38:42.000000000","message":"(very minor nitpick) Why not use a generator expression instead of a list comprehension?","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"71efabc3a78694eb3769c6110ac6cee59c62ab97","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), test.HTTP_SUCCESS)"},{"line_number":98,"context_line":"        self.assertHeaders(resp, \u0027Container\u0027, \u0027GET\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.assertIn(object_name, [c[\u0027name\u0027] for c in contents_list])"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":103,"context_line":"    def test_bulk_delete(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F99Qc%3D","line":100,"updated":"2013-12-04 01:38:42.000000000","message":"(very minor nitpick) same as above","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"71efabc3a78694eb3769c6110ac6cee59c62ab97","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        resp, body \u003d self.account_client.delete_account(data\u003ddata,"},{"line_number":133,"context_line":"                                                        params\u003dparams)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        self.assertEqual(resp[\u0027status\u0027], \u0027200\u0027)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        # When deleting multiple files using the bulk operation, the response"},{"line_number":138,"context_line":"        # does not contain \u0027content-length\u0027 header. This is the special case,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F99R8%3D","line":135,"updated":"2013-12-04 01:38:42.000000000","message":"same as above","commit_id":"dacd5383eb901042b9dcf32f8c5a375782bf5f3f"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"c5cd02ce4d5aec12449c1f6449491671ecb99139","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        os.remove(filepath)"},{"line_number":69,"context_line":"        self.containers.append(container_name)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # When uploading an archived file with the bulk operation, the response"},{"line_number":74,"context_line":"        # does not contain \u0027content-length\u0027 header. This is the special case,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9Dlk%3D","line":71,"updated":"2013-12-17 08:14:44.000000000","message":"Reflected Joe\u0027s and David\u0027s comment","commit_id":"3ea7ffadafd73c4b2f1d8add8fb8b0a6721807d8"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"effd99a7fd73b676cc5f3a4146d8a85ee2e1675f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _create_archive(self, container_name, object_name):"},{"line_number":38,"context_line":"        # generate tar file"},{"line_number":39,"context_line":"        data \u003d data_utils.arbitrary_string(128)"},{"line_number":40,"context_line":"        os.mkdir(container_name)"},{"line_number":41,"context_line":"        f \u003d open(\u0027%s/%s\u0027 % (container_name, object_name), \u0027w\u0027)"},{"line_number":42,"context_line":"        f.write(\u0027%s\u0027 % data)"},{"line_number":43,"context_line":"        f.close()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F89H0%3D","line":40,"updated":"2013-12-18 12:31:45.000000000","message":"this needs to be done in a tempdir","commit_id":"d4e979448ce37eba0768e211d820535f666f2f0e"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"e1818eeee4b83921d1bdac09467dcd6e2f28fffa","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _create_archive(self, container_name, object_name):"},{"line_number":38,"context_line":"        # generate tar file"},{"line_number":39,"context_line":"        data \u003d data_utils.arbitrary_string(128)"},{"line_number":40,"context_line":"        os.mkdir(container_name)"},{"line_number":41,"context_line":"        f \u003d open(\u0027%s/%s\u0027 % (container_name, object_name), \u0027w\u0027)"},{"line_number":42,"context_line":"        f.write(\u0027%s\u0027 % data)"},{"line_number":43,"context_line":"        f.close()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F8yLg%3D","line":40,"in_reply_to":"AAAATn%2F89H0%3D","updated":"2013-12-20 11:01:54.000000000","message":"Done","commit_id":"d4e979448ce37eba0768e211d820535f666f2f0e"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"1300b8a9838794f355c9e465f6311cffe9e45f41","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def _create_archive(self, container_name, object_name):"},{"line_number":38,"context_line":"        # generate tar file"},{"line_number":39,"context_line":"        data \u003d data_utils.arbitrary_string(128)"},{"line_number":40,"context_line":"        container_dir \u003d \u0027/tmp/%s\u0027 % container_name"},{"line_number":41,"context_line":"        os.mkdir(container_dir)"},{"line_number":42,"context_line":"        f \u003d open(\u0027%s/%s\u0027 % (container_dir, object_name), \u0027w\u0027)"},{"line_number":43,"context_line":"        f.write(data)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F8neA%3D","line":40,"updated":"2013-12-24 09:23:11.000000000","message":"This doesn\u0027t look very safe to me. Why not use the tempfile module to do this the safest way possible?\n\nhttp://docs.python.org/2/library/tempfile.html","commit_id":"d1023527e996343f7b0f7fdc932d7e8cb6447b5f"}],"tempest/services/object_storage/account_client.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"48a11926eb335014a7f2e8d7a474a4ef8eff9fa9","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\"Create an account.\"\"\""},{"line_number":40,"context_line":"        url \u003d \u0027\u0027"},{"line_number":41,"context_line":"        if params:"},{"line_number":42,"context_line":"            url +\u003d \u0027?\u0026%s\u0027 % urllib.urlencode(params)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        headers \u003d {}"},{"line_number":45,"context_line":"        for key in metadata:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FUOk%3D","line":42,"updated":"2014-01-15 05:45:13.000000000","message":"the \u0026 is not required","commit_id":"0905dd3d45225843e5540533ccddcde6e5328814"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"555a9087960e586fd81f8a87e4e8d0f28c54f2b8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\"Create an account.\"\"\""},{"line_number":40,"context_line":"        url \u003d \u0027\u0027"},{"line_number":41,"context_line":"        if params:"},{"line_number":42,"context_line":"            url +\u003d \u0027?\u0026%s\u0027 % urllib.urlencode(params)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        headers \u003d {}"},{"line_number":45,"context_line":"        for key in metadata:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2B9v8%3D","line":42,"in_reply_to":"AAAAUH%2F%2FUOk%3D","updated":"2014-01-20 10:52:57.000000000","message":"Done","commit_id":"0905dd3d45225843e5540533ccddcde6e5328814"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"48a11926eb335014a7f2e8d7a474a4ef8eff9fa9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Delete an account.\"\"\""},{"line_number":55,"context_line":"        url \u003d \u0027\u0027"},{"line_number":56,"context_line":"        if params:"},{"line_number":57,"context_line":"            if \u0027bulk-delete\u0027 in params:"},{"line_number":58,"context_line":"                url +\u003d \u0027?bulk-delete\u0027"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                url +\u003d \u0027?\u0026%s\u0027 % urllib.urlencode(params)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FUOg%3D","line":57,"updated":"2014-01-15 05:45:13.000000000","message":"This will ignore the other parameters.","commit_id":"0905dd3d45225843e5540533ccddcde6e5328814"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"555a9087960e586fd81f8a87e4e8d0f28c54f2b8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\"Delete an account.\"\"\""},{"line_number":55,"context_line":"        url \u003d \u0027\u0027"},{"line_number":56,"context_line":"        if params:"},{"line_number":57,"context_line":"            if \u0027bulk-delete\u0027 in params:"},{"line_number":58,"context_line":"                url +\u003d \u0027?bulk-delete\u0027"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                url +\u003d \u0027?\u0026%s\u0027 % urllib.urlencode(params)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2B9s8%3D","line":57,"in_reply_to":"AAAAUH%2F%2FUOg%3D","updated":"2014-01-20 10:52:57.000000000","message":"Done","commit_id":"0905dd3d45225843e5540533ccddcde6e5328814"}]}
