)]}'
{"tempest/api/object_storage/base.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"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:"},{"line_number":130,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FG6Y%3D","line":127,"updated":"2013-11-14 11:16:06.000000000","message":"How about\n\n return re.match(\"^tx[0-9a-f]*-[0-9a-f]*$\", check_str) !\u003d None\n\nCan we delete following lines?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"cb5edc30d6e1d0caea498f2ce9e64f079d504092","unresolved":false,"context_lines":[{"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:"},{"line_number":130,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B2kE%3D","line":127,"in_reply_to":"AAAATn%2F%2FG6Y%3D","updated":"2013-11-19 11:14:32.000000000","message":"This method should have a docstring, it\u0027s difficult to tell at first sight what exactly it checks. Why is it in the base class? It would be enough to add it as helper function to the module that tests SLO, unless you need it somewhere else too.","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"3cceceb152c4aed22ebf858510086070d55e3592","unresolved":false,"context_lines":[{"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:"},{"line_number":130,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B17c%3D","line":130,"updated":"2013-11-19 13:26:35.000000000","message":"I don\u0027t like code that goes:\n\nif ...:\n    return True\nelse:\n    return False\n\nIt feels repetitive and misleading. If you want to check that there\u0027s at least a match, why not do something like this?\n\ndef check_trans_id(cls, check_str):\n    return len(re.findall(\"^tx[0-9a-f]*-[0-9a-f]*$\", check_str)) \u003e 0","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"be9a46d608e6202212519ab538c05828e35f508a","unresolved":false,"context_lines":[{"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:"},{"line_number":130,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BotE%3D","line":127,"updated":"2013-11-22 06:59:29.000000000","message":"Working on this issue by I7dcd87c814cf657999796bda75482505112b4edb","commit_id":"d493c417bb6b7b209ef33996b0b2f266021d367c"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7e31094e6a1004cff925335285077e1bff528ee4","unresolved":false,"context_lines":[{"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:"},{"line_number":130,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bh5s%3D","line":127,"in_reply_to":"AAAATn%2F%2BotE%3D","updated":"2013-11-25 03:03:41.000000000","message":"How about moving this method to test_object_slo.py?\nThis is used in only there now.","commit_id":"d493c417bb6b7b209ef33996b0b2f266021d367c"}],"tempest/api/object_storage/test_object_slo.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"ba0707859396107a79bd566209095465a8d62ec1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B7%2Fk%3D","line":3,"updated":"2013-11-18 11:28:50.000000000","message":"Is this copyright correct?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import json"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.api.object_storage import base"},{"line_number":22,"context_line":"from tempest.common.utils.data_utils import arbitrary_string"},{"line_number":23,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":24,"context_line":"from tempest import exceptions"},{"line_number":25,"context_line":"from tempest.test import attr"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FG1M%3D","line":22,"updated":"2013-11-14 11:16:06.000000000","message":"Hacking encourages we should import a module not function/object.\nhttp://docs.openstack.org/developer/hacking/\n\nSo this should be\n\n from tempest.common.utils import data_utils","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"ba0707859396107a79bd566209095465a8d62ec1","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import json"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.api.object_storage import base"},{"line_number":22,"context_line":"from tempest.common.utils.data_utils import arbitrary_string"},{"line_number":23,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":24,"context_line":"from tempest import exceptions"},{"line_number":25,"context_line":"from tempest.test import attr"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B7%2Fo%3D","line":22,"in_reply_to":"AAAATn%2F%2FCJg%3D","updated":"2013-11-18 11:28:50.000000000","message":"I\u0027m doing for that changes.\nChange-Id: Ibda1a5e424280bad8535ee27f66dec99bf68f676\nAnd I think a new file should keep the rule.\n\nOr is this file is not new one?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"65007b08ffcb97f8d8c11c7364b88a71620b6095","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import json"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from tempest.api.object_storage import base"},{"line_number":22,"context_line":"from tempest.common.utils.data_utils import arbitrary_string"},{"line_number":23,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":24,"context_line":"from tempest import exceptions"},{"line_number":25,"context_line":"from tempest.test import attr"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FCJg%3D","line":22,"in_reply_to":"AAAATn%2F%2FG1M%3D","updated":"2013-11-15 11:51:31.000000000","message":"I did not know such a rule. Thanks for your information.\nHowever, many test files of Tempest are written like this.\nI prefer to modify such writing all at once later.","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from tempest.common.utils.data_utils import arbitrary_string"},{"line_number":23,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":24,"context_line":"from tempest import exceptions"},{"line_number":25,"context_line":"from tempest.test import attr"},{"line_number":26,"context_line":"from tempest.test import HTTP_SUCCESS"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FG0w%3D","line":25,"updated":"2013-11-14 11:16:06.000000000","message":"ditto","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":24,"context_line":"from tempest import exceptions"},{"line_number":25,"context_line":"from tempest.test import attr"},{"line_number":26,"context_line":"from tempest.test import HTTP_SUCCESS"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class ObjectSloTest(base.BaseObjectTest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FG0o%3D","line":26,"updated":"2013-11-14 11:16:06.000000000","message":"ditto","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(ObjectSloTest, self).setUp()"},{"line_number":41,"context_line":"        self.container_name \u003d rand_name(name\u003d\u0027TestContainer\u0027)"},{"line_number":42,"context_line":"        self.container_client.create_container(self.container_name)"},{"line_number":43,"context_line":"        self.objects[:] \u003d []"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def tearDown(self):"},{"line_number":46,"context_line":"        for obj in self.objects:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FG3s%3D","line":43,"updated":"2013-11-14 11:16:06.000000000","message":"Why do you use the slice([:]) here?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"65007b08ffcb97f8d8c11c7364b88a71620b6095","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(ObjectSloTest, self).setUp()"},{"line_number":41,"context_line":"        self.container_name \u003d rand_name(name\u003d\u0027TestContainer\u0027)"},{"line_number":42,"context_line":"        self.container_client.create_container(self.container_name)"},{"line_number":43,"context_line":"        self.objects[:] \u003d []"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def tearDown(self):"},{"line_number":46,"context_line":"        for obj in self.objects:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FCJM%3D","line":43,"in_reply_to":"AAAATn%2F%2FG3s%3D","updated":"2013-11-15 11:51:31.000000000","message":"Reflect your comment","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"3cceceb152c4aed22ebf858510086070d55e3592","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.container_name \u003d rand_name(name\u003d\u0027TestContainer\u0027)"},{"line_number":42,"context_line":"        self.container_client.create_container(self.container_name)"},{"line_number":43,"context_line":"        self.objects[:] \u003d []"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def tearDown(self):"},{"line_number":46,"context_line":"        for obj in self.objects:"},{"line_number":47,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B16M%3D","line":44,"updated":"2013-11-19 13:26:35.000000000","message":"objects is already declared as a class variable, why do you define a new instance variable with the same name?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"83d44f2027e7df5f4eb980736ad92c7e0d6d9baf","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.container_name \u003d rand_name(name\u003d\u0027TestContainer\u0027)"},{"line_number":42,"context_line":"        self.container_client.create_container(self.container_name)"},{"line_number":43,"context_line":"        self.objects[:] \u003d []"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def tearDown(self):"},{"line_number":46,"context_line":"        for obj in self.objects:"},{"line_number":47,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BzCY%3D","line":44,"in_reply_to":"AAAATn%2F%2B16M%3D","updated":"2013-11-20 02:41:22.000000000","message":"Agreed","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        object_name \u003d rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":60,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"},{"line_number":61,"context_line":"        object_name_base_2 \u003d object_name + \u0027_02\u0027"},{"line_number":62,"context_line":"        data_size \u003d 1048577"},{"line_number":63,"context_line":"        data \u003d arbitrary_string(data_size)"},{"line_number":64,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":65,"context_line":"                                         object_name_base_1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FGzI%3D","line":62,"updated":"2013-11-14 11:16:06.000000000","message":"Just a question.\nIs there any particular reason of this data_size(1048577) for swift? or just a random number?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"83d44f2027e7df5f4eb980736ad92c7e0d6d9baf","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        object_name \u003d rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":60,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"},{"line_number":61,"context_line":"        object_name_base_2 \u003d object_name + \u0027_02\u0027"},{"line_number":62,"context_line":"        data_size \u003d 1048577"},{"line_number":63,"context_line":"        data \u003d arbitrary_string(data_size)"},{"line_number":64,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":65,"context_line":"                                         object_name_base_1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BzCU%3D","line":62,"in_reply_to":"AAAATn%2F%2B16E%3D","updated":"2013-11-20 02:41:22.000000000","message":"Agreed to Martina and Joe\u0027s comments","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"3cceceb152c4aed22ebf858510086070d55e3592","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        object_name \u003d rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":60,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"},{"line_number":61,"context_line":"        object_name_base_2 \u003d object_name + \u0027_02\u0027"},{"line_number":62,"context_line":"        data_size \u003d 1048577"},{"line_number":63,"context_line":"        data \u003d arbitrary_string(data_size)"},{"line_number":64,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":65,"context_line":"                                         object_name_base_1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B16E%3D","line":62,"in_reply_to":"AAAATn%2F%2B2j4%3D","updated":"2013-11-19 13:26:35.000000000","message":"I would suggest defining this as a top-level constant at the beginning of the class","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"cb5edc30d6e1d0caea498f2ce9e64f079d504092","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        object_name \u003d rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":60,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"},{"line_number":61,"context_line":"        object_name_base_2 \u003d object_name + \u0027_02\u0027"},{"line_number":62,"context_line":"        data_size \u003d 1048577"},{"line_number":63,"context_line":"        data \u003d arbitrary_string(data_size)"},{"line_number":64,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":65,"context_line":"                                         object_name_base_1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B2j4%3D","line":62,"in_reply_to":"AAAATn%2F%2B8Ag%3D","updated":"2013-11-19 11:14:32.000000000","message":"Also, in whatever case, please write it out as 1024*1024, not the end result - it\u0027s much more readable. It would be a good idea to put your reasoning (and maybe the link to the docs) behind the number into a comment.","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"ba0707859396107a79bd566209095465a8d62ec1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        object_name \u003d rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":60,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"},{"line_number":61,"context_line":"        object_name_base_2 \u003d object_name + \u0027_02\u0027"},{"line_number":62,"context_line":"        data_size \u003d 1048577"},{"line_number":63,"context_line":"        data \u003d arbitrary_string(data_size)"},{"line_number":64,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":65,"context_line":"                                         object_name_base_1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B8Ag%3D","line":62,"in_reply_to":"AAAATn%2F%2FCIw%3D","updated":"2013-11-18 11:28:50.000000000","message":"Thank you for your explanation.\nBut I think this number should be 1024*1024\u003d1048576 as your explanation.\nWhy 1024*1024+1?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"65007b08ffcb97f8d8c11c7364b88a71620b6095","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        object_name \u003d rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":60,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"},{"line_number":61,"context_line":"        object_name_base_2 \u003d object_name + \u0027_02\u0027"},{"line_number":62,"context_line":"        data_size \u003d 1048577"},{"line_number":63,"context_line":"        data \u003d arbitrary_string(data_size)"},{"line_number":64,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":65,"context_line":"                                         object_name_base_1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FCIw%3D","line":62,"in_reply_to":"AAAATn%2F%2FGzI%3D","updated":"2013-11-15 11:51:31.000000000","message":"Swift specification defines that each segment (except for the last one) must be at least 1 megabyte. See http://docs.openstack.org/developer/swift/misc.html#module-swift.common.middleware.slo","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"48d09da18bdd70a3a75ebbc5af1aa4b4bf10dca6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                         object_name_base_1,"},{"line_number":66,"context_line":"                                         data,"},{"line_number":67,"context_line":"                                         metadata\u003dNone)"},{"line_number":68,"context_line":"        self.objects.append(object_name_base_1)"},{"line_number":69,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":70,"context_line":"                                         object_name_base_2,"},{"line_number":71,"context_line":"                                         data,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FG3I%3D","line":68,"updated":"2013-11-14 11:16:06.000000000","message":"How about creating a _create_object() that has self.objects.append()?\nI think we can avoid the duplicate codes.","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"65007b08ffcb97f8d8c11c7364b88a71620b6095","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                         object_name_base_1,"},{"line_number":66,"context_line":"                                         data,"},{"line_number":67,"context_line":"                                         metadata\u003dNone)"},{"line_number":68,"context_line":"        self.objects.append(object_name_base_1)"},{"line_number":69,"context_line":"        self.object_client.create_object(self.container_name,"},{"line_number":70,"context_line":"                                         object_name_base_2,"},{"line_number":71,"context_line":"                                         data,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FCJA%3D","line":68,"in_reply_to":"AAAATn%2F%2FG3I%3D","updated":"2013-11-15 11:51:31.000000000","message":"Reflect your comment","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"cb5edc30d6e1d0caea498f2ce9e64f079d504092","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self.assertIn(\u0027x-trans-id\u0027, resp)"},{"line_number":154,"context_line":"        self.assertIn(\u0027date\u0027, resp)"},{"line_number":155,"context_line":"        self.assertIn(\u0027accept-ranges\u0027, resp)"},{"line_number":156,"context_line":"        self.assertIn(\u0027x-static-large-object\u0027, resp)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":159,"context_line":"        self.assertTrue(resp[\u0027etag\u0027].startswith(\u0027\\\"\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B2i8%3D","line":156,"updated":"2013-11-19 11:14:32.000000000","message":"This is a lot of code duplication. Could you create a helper method create_manifest?","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"83d44f2027e7df5f4eb980736ad92c7e0d6d9baf","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self.assertIn(\u0027x-trans-id\u0027, resp)"},{"line_number":154,"context_line":"        self.assertIn(\u0027date\u0027, resp)"},{"line_number":155,"context_line":"        self.assertIn(\u0027accept-ranges\u0027, resp)"},{"line_number":156,"context_line":"        self.assertIn(\u0027x-static-large-object\u0027, resp)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":159,"context_line":"        self.assertTrue(resp[\u0027etag\u0027].startswith(\u0027\\\"\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BzCM%3D","line":156,"in_reply_to":"AAAATn%2F%2B16A%3D","updated":"2013-11-20 02:41:22.000000000","message":"Agreed","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"3cceceb152c4aed22ebf858510086070d55e3592","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        self.assertIn(\u0027x-trans-id\u0027, resp)"},{"line_number":154,"context_line":"        self.assertIn(\u0027date\u0027, resp)"},{"line_number":155,"context_line":"        self.assertIn(\u0027accept-ranges\u0027, resp)"},{"line_number":156,"context_line":"        self.assertIn(\u0027x-static-large-object\u0027, resp)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), HTTP_SUCCESS)"},{"line_number":159,"context_line":"        self.assertTrue(resp[\u0027etag\u0027].startswith(\u0027\\\"\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B16A%3D","line":156,"in_reply_to":"AAAATn%2F%2B2i8%3D","updated":"2013-11-19 13:26:35.000000000","message":"+1","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7e31094e6a1004cff925335285077e1bff528ee4","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        return resp"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_manifest(self):"},{"line_number":65,"context_line":"        # Create a manifest file for SLO uploading"},{"line_number":66,"context_line":"        object_name \u003d data_utils.rand_name(name\u003d\u0027TestObject\u0027)"},{"line_number":67,"context_line":"        object_name_base_1 \u003d object_name + \u0027_01\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bh%2B4%3D","line":64,"updated":"2013-11-25 03:03:41.000000000","message":"I think this method is not used by other classes.\nSo this should be private like the above method.","commit_id":"d493c417bb6b7b209ef33996b0b2f266021d367c"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"7e31094e6a1004cff925335285077e1bff528ee4","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                                   manifest,"},{"line_number":101,"context_line":"                                   params)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.assertIn(\u0027status\u0027, resp)"},{"line_number":104,"context_line":"        self.assertIn(\u0027etag\u0027, resp)"},{"line_number":105,"context_line":"        self.assertIn(\u0027content-length\u0027, resp)"},{"line_number":106,"context_line":"        self.assertIn(\u0027x-trans-id\u0027, resp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bh8c%3D","line":103,"updated":"2013-11-25 03:03:41.000000000","message":"I think these asserts should be in _create_object(). Because we can check that after every _create_object() called with that.","commit_id":"d493c417bb6b7b209ef33996b0b2f266021d367c"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"be9a46d608e6202212519ab538c05828e35f508a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertTrue(resp[\u0027etag\u0027].strip(\u0027\\\"\u0027).isalnum())"},{"line_number":113,"context_line":"        self.assertTrue(resp[\u0027content-length\u0027].isdigit())"},{"line_number":114,"context_line":"        self.assertTrue(self.check_trans_id(resp[\u0027x-trans-id\u0027]))"},{"line_number":115,"context_line":"        self.assertNotEqual(len(resp[\u0027date\u0027]), 0)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":118,"context_line":"    def test_list_large_object_metadata(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bos8%3D","line":115,"updated":"2013-11-22 06:59:29.000000000","message":"Working on this issue by I7dcd87c814cf657999796bda75482505112b4edb","commit_id":"d493c417bb6b7b209ef33996b0b2f266021d367c"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"ef5851246f5eec45bb387349d5e92f5d14d1f101","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class ObjectSloTest(base.BaseObjectTest):"},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def setUpClass(cls):"},{"line_number":34,"context_line":"        super(ObjectSloTest, cls).setUpClass()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def tearDownClass(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9%2Bj0%3D","line":34,"updated":"2013-12-03 20:50:07.000000000","message":"You don\u0027t need this it\u0027s implicit if you don\u0027t overload the method","commit_id":"9f5d7165d960102557e3d64d801e32c2fa5cff86"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"3f7724043d564fbb397627f6389abdced2ddcc14","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class ObjectSloTest(base.BaseObjectTest):"},{"line_number":32,"context_line":"    @classmethod"},{"line_number":33,"context_line":"    def setUpClass(cls):"},{"line_number":34,"context_line":"        super(ObjectSloTest, cls).setUpClass()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def tearDownClass(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98YM%3D","line":34,"in_reply_to":"AAAATn%2F9%2Bj0%3D","updated":"2013-12-04 06:54:38.000000000","message":"Done","commit_id":"9f5d7165d960102557e3d64d801e32c2fa5cff86"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"ef5851246f5eec45bb387349d5e92f5d14d1f101","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def tearDownClass(cls):"},{"line_number":38,"context_line":"        super(ObjectSloTest, cls).tearDownClass()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(ObjectSloTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9%2Bjw%3D","line":38,"updated":"2013-12-03 20:50:07.000000000","message":"same here","commit_id":"9f5d7165d960102557e3d64d801e32c2fa5cff86"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"3f7724043d564fbb397627f6389abdced2ddcc14","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @classmethod"},{"line_number":37,"context_line":"    def tearDownClass(cls):"},{"line_number":38,"context_line":"        super(ObjectSloTest, cls).tearDownClass()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def setUp(self):"},{"line_number":41,"context_line":"        super(ObjectSloTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98YQ%3D","line":38,"in_reply_to":"AAAATn%2F9%2Bjw%3D","updated":"2013-12-04 06:54:38.000000000","message":"Done","commit_id":"9f5d7165d960102557e3d64d801e32c2fa5cff86"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"ef5851246f5eec45bb387349d5e92f5d14d1f101","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            self.assertEqual(resp[\u0027accept-ranges\u0027], \u0027bytes\u0027)"},{"line_number":116,"context_line":"            self.assertEqual(resp[\u0027x-static-large-object\u0027], \u0027True\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":119,"context_line":"    def test_upload_manifest(self):"},{"line_number":120,"context_line":"        # create static large object from multipart manifest"},{"line_number":121,"context_line":"        manifest \u003d self._create_manifest()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9%2BiA%3D","line":118,"updated":"2013-12-03 20:50:07.000000000","message":"Are these really smoke tests? They feel more like regular gating tests to me. Smoke tests are meant to be a quick sanity check for a deployment, I think that testing the slo middleware falls outside of that category. \n\n(This is for all the tests added in this file)","commit_id":"9f5d7165d960102557e3d64d801e32c2fa5cff86"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"3f7724043d564fbb397627f6389abdced2ddcc14","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            self.assertEqual(resp[\u0027accept-ranges\u0027], \u0027bytes\u0027)"},{"line_number":116,"context_line":"            self.assertEqual(resp[\u0027x-static-large-object\u0027], \u0027True\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":119,"context_line":"    def test_upload_manifest(self):"},{"line_number":120,"context_line":"        # create static large object from multipart manifest"},{"line_number":121,"context_line":"        manifest \u003d self._create_manifest()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F98YU%3D","line":118,"in_reply_to":"AAAATn%2F9%2BiA%3D","updated":"2013-12-04 06:54:38.000000000","message":"Done","commit_id":"9f5d7165d960102557e3d64d801e32c2fa5cff86"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ec5e65ffb017401499d3993319e6fc2f3c8de01b","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        resp \u003d self._create_object(self.container_name,"},{"line_number":119,"context_line":"                                   object_name,"},{"line_number":120,"context_line":"                                   manifest,"},{"line_number":121,"context_line":"                                   params)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), test.HTTP_SUCCESS)"},{"line_number":124,"context_line":"        self._assertHeadersSLO(resp, \u0027PUT\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F97Y8%3D","line":121,"updated":"2013-12-04 11:25:30.000000000","message":"line 114-121 are almost same as all the following tests.\n\nHow about moving line 114-121 into setUp(), storing its resp to self.resp, and checking it here?\n\nThat would reduce the test code, and make the cleanup method of tearDown() readable.","commit_id":"e31964b905dbe0b791e845483c415c04441a7243"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9d63f4aed32c21d92d61ffead194910e88a02b1c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        resp \u003d self._create_object(self.container_name,"},{"line_number":119,"context_line":"                                   object_name,"},{"line_number":120,"context_line":"                                   manifest,"},{"line_number":121,"context_line":"                                   params)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), test.HTTP_SUCCESS)"},{"line_number":124,"context_line":"        self._assertHeadersSLO(resp, \u0027PUT\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F97Og%3D","line":121,"in_reply_to":"AAAATn%2F97QY%3D","updated":"2013-12-04 12:10:11.000000000","message":"Agreed. Common method would be good idea.","commit_id":"e31964b905dbe0b791e845483c415c04441a7243"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"e3d0e3823aae4dbd22fc9237bd3975b821a66cb8","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        resp \u003d self._create_object(self.container_name,"},{"line_number":119,"context_line":"                                   object_name,"},{"line_number":120,"context_line":"                                   manifest,"},{"line_number":121,"context_line":"                                   params)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.assertIn(int(resp[\u0027status\u0027]), test.HTTP_SUCCESS)"},{"line_number":124,"context_line":"        self._assertHeadersSLO(resp, \u0027PUT\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F97QY%3D","line":121,"in_reply_to":"AAAATn%2F97Y8%3D","updated":"2013-12-04 12:03:15.000000000","message":"Thanks. But, writing this code in setUp or other common function is possible to make the readability of test_upload_manifest method worse. This is a reason why I hesitated to do so. \n\nBut, as for following three methods, wrapping in a common method seems good idea. What\u0027s your (or other guys\u0027) feel?","commit_id":"e31964b905dbe0b791e845483c415c04441a7243"}],"tempest/services/object_storage/object_client.py":[{"author":{"_account_id":6847,"name":"Martina Kollarova","email":"mkollaro@gmail.com","username":"mkollaro"},"change_message_id":"cb5edc30d6e1d0caea498f2ce9e64f079d504092","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.service \u003d self.config.object_storage.catalog_type"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_object(self, container, object_name, data,"},{"line_number":33,"context_line":"                      metadata\u003dNone, params\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Create storage object.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        headers \u003d dict(self.headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2B2e8%3D","line":33,"updated":"2013-11-19 11:14:32.000000000","message":"Could you document what those params are supposed to be? As for the metadata, this now uses different parameters as the rest of the clients - others have metadata_prefix too.","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"83d44f2027e7df5f4eb980736ad92c7e0d6d9baf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.service \u003d self.config.object_storage.catalog_type"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def create_object(self, container, object_name, data,"},{"line_number":33,"context_line":"                      metadata\u003dNone, params\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Create storage object.\"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        headers \u003d dict(self.headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BzCk%3D","line":33,"in_reply_to":"AAAATn%2F%2B2e8%3D","updated":"2013-11-20 02:41:22.000000000","message":"\u0027params\u0027 parameter is supposed to be used for uri parameter for using SLO (append uri to \u0027?multipart-manifest\u003dput\u0027) or Bulk operation (append \u0027extract-archive\u003d*\u0027). However, in this test, \u0027metadata\u0027 parameter is not necessary as you said. Therefore, I removed codes relating to metadata param of both create and delete operation.","commit_id":"61c5834bf5a19f4b13df4f5964cd756eaa94b9e4"}]}
