)]}'
{"test/functional/swift_test_client.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"330721883bd5980532c5ab4dbc8f957ccbbc9b0e","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                  [\u0027bytes_used\u0027, \u0027x-account-bytes-used\u0027]]"},{"line_number":485,"context_line":"        optional_fields \u003d ["},{"line_number":486,"context_line":"            [\u0027temp-url-key\u0027, \u0027x-account-meta-temp-url-key\u0027],"},{"line_number":487,"context_line":"            [\u0027temp-url-key-2\u0027, \u0027x-account-meta-temp-url-key-2\u0027]]"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        return self.header_fields(fields, optional_fields\u003doptional_fields)"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_f840a2a7","line":487,"updated":"2016-11-16 17:51:51.000000000","message":"The dashes break from precedent above, but I don\u0027t care much.","commit_id":"3ebee5d6a040f026f9e957426ebe601296b01fa4"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9819a1f22ef50df77a53c0ef34250abd015d85ea","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                  [\u0027bytes_used\u0027, \u0027x-account-bytes-used\u0027]]"},{"line_number":485,"context_line":"        optional_fields \u003d ["},{"line_number":486,"context_line":"            [\u0027temp-url-key\u0027, \u0027x-account-meta-temp-url-key\u0027],"},{"line_number":487,"context_line":"            [\u0027temp-url-key-2\u0027, \u0027x-account-meta-temp-url-key-2\u0027]]"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"        return self.header_fields(fields, optional_fields\u003doptional_fields)"},{"line_number":490,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_caf2489a","line":487,"in_reply_to":"7a77a97e_f840a2a7","updated":"2016-11-22 14:56:59.000000000","message":"yeah, sorry :/ IIRC it meant I could add the fields back again by simply adding a prefix and not having to map tempurl_key to temp-url-key or w/e.","commit_id":"3ebee5d6a040f026f9e957426ebe601296b01fa4"}],"test/functional/test_account.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f286122c1866d3aa72192101b73ff31e4a5c6b56","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        # clean up any account user metadata created by test"},{"line_number":99,"context_line":"        new_metadata \u003d self.get_meta().keys()"},{"line_number":100,"context_line":"        for i in range(0, len(new_metadata), 90):"},{"line_number":101,"context_line":"            batch \u003d new_metadata[i:i + 90]"},{"line_number":102,"context_line":"            resp \u003d self.clear_meta(batch)"},{"line_number":103,"context_line":"            self.assertEqual(resp.status // 100, 2)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_18e1fcd0","line":101,"updated":"2016-08-16 21:40:28.000000000","message":"Why do we need the batching here, but not in the class methods?","commit_id":"9d02a9d4c313af70a1c9a7ca1f77bab462bfac65"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d96eae6379b0766a45a2437cb61d27d024d869be","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        # clean up any account user metadata created by test"},{"line_number":99,"context_line":"        new_metadata \u003d self.get_meta().keys()"},{"line_number":100,"context_line":"        for i in range(0, len(new_metadata), 90):"},{"line_number":101,"context_line":"            batch \u003d new_metadata[i:i + 90]"},{"line_number":102,"context_line":"            resp \u003d self.clear_meta(batch)"},{"line_number":103,"context_line":"            self.assertEqual(resp.status // 100, 2)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_ed7a39f0","line":101,"in_reply_to":"3ac371cc_18e1fcd0","updated":"2016-08-17 15:47:47.000000000","message":"I think I made a (poor) assumption that the account starting state would be a small number of headers. Will fix.\n\nOf course if there are more than 90 existing headers then we\u0027ll fail to restore them in the teardown :/","commit_id":"9d02a9d4c313af70a1c9a7ca1f77bab462bfac65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e78dd9a2970f6f85ee7f37ba76140c0d119705b7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            return check_response(conn)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        for i in range(0, len(remove_metadata_keys), 90):"},{"line_number":62,"context_line":"            batch \u003d remove_metadata_keys[i:i + 90]"},{"line_number":63,"context_line":"            resp \u003d retry(post, batch)"},{"line_number":64,"context_line":"            resp.read()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_b138023f","line":62,"updated":"2016-12-20 18:46:43.000000000","message":"Batching always feels so awkward (ugly, even) in Python. You kinda expect to be able to do something like\n\n for batch in groupby(remove_metadata_keys, 90):\n\nonly that isn\u0027t what groupby [1] does *at all*. On the same page, they suggest that\n\n for batch in izip_longest([iter(remove_metadata_keys)] * 90):\n\nis even *idiomatic*, which I find insane; there\u0027s way too much non-trivial, non-obvious magic going on there.\n\n /rant\n\n[1] https://docs.python.org/2/library/itertools.html#itertools.groupby","commit_id":"f5d0f430626ed688966fd62930cad692d645c342"}],"test/functional/test_versioned_writes.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"e78dd9a2970f6f85ee7f37ba76140c0d119705b7","unresolved":false,"context_lines":[{"line_number":505,"context_line":""},{"line_number":506,"context_line":"class TestObjectVersioningHistoryMode(TestObjectVersioning):"},{"line_number":507,"context_line":"    env \u003d TestObjectVersioningHistoryModeEnv"},{"line_number":508,"context_line":"    set_up \u003d False"},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"    # those override tests includes assertions for delete versioned objects"},{"line_number":511,"context_line":"    # behaviors different from default object versioning using"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_94fe9469","line":508,"updated":"2016-12-20 18:46:43.000000000","message":"nit: this is no longer used.","commit_id":"f5d0f430626ed688966fd62930cad692d645c342"}],"test/functional/tests.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f286122c1866d3aa72192101b73ff31e4a5c6b56","unresolved":false,"context_lines":[{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"    @classmethod"},{"line_number":4190,"context_line":"    def setUpClass(cls):"},{"line_number":4191,"context_line":"        cls.env.setUp()"},{"line_number":4192,"context_line":"        cls.set_up \u003d True"},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_98696c28","line":4191,"updated":"2016-08-16 21:40:28.000000000","message":"Should this be done in Base?","commit_id":"9d02a9d4c313af70a1c9a7ca1f77bab462bfac65"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d96eae6379b0766a45a2437cb61d27d024d869be","unresolved":false,"context_lines":[{"line_number":4188,"context_line":""},{"line_number":4189,"context_line":"    @classmethod"},{"line_number":4190,"context_line":"    def setUpClass(cls):"},{"line_number":4191,"context_line":"        cls.env.setUp()"},{"line_number":4192,"context_line":"        cls.set_up \u003d True"},{"line_number":4193,"context_line":""},{"line_number":4194,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_ff801cc1","line":4191,"in_reply_to":"3ac371cc_98696c28","updated":"2016-08-17 15:47:47.000000000","message":"Yes, looks like it can and actually makes the Base.setUp() redundant. There\u0027s one test class that has no env, but at the risk of the scope of this change creeping, I think it could be nice cleanup to use setUpClass in Base.\n\nIn fact the use of *Env is IMHO unnecessary, but I won\u0027t go there...;)","commit_id":"9d02a9d4c313af70a1c9a7ca1f77bab462bfac65"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a3ffd728ffeca7a5555116e2405294d8a634827d","unresolved":false,"context_lines":[{"line_number":4566,"context_line":"            self.assertEqual(expected, prev_version.read())"},{"line_number":4567,"context_line":""},{"line_number":4568,"context_line":""},{"line_number":4569,"context_line":"class TestSloWithVersioning(unittest2.TestCase):"},{"line_number":4570,"context_line":""},{"line_number":4571,"context_line":"    def setUp(self):"},{"line_number":4572,"context_line":"        if \u0027slo\u0027 not in cluster_info:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_e8ee9c20","line":4569,"range":{"start_line":4569,"start_character":28,"end_line":4569,"end_character":37},"updated":"2016-10-03 22:21:00.000000000","message":"Not just unittest? Eh, I suppose Base inherits from unittest2.TestCase as well...","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ab6741ff46071f8cd3493120917111340922","unresolved":false,"context_lines":[{"line_number":4566,"context_line":"            self.assertEqual(expected, prev_version.read())"},{"line_number":4567,"context_line":""},{"line_number":4568,"context_line":""},{"line_number":4569,"context_line":"class TestSloWithVersioning(unittest2.TestCase):"},{"line_number":4570,"context_line":""},{"line_number":4571,"context_line":"    def setUp(self):"},{"line_number":4572,"context_line":"        if \u0027slo\u0027 not in cluster_info:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_e0448075","line":4569,"range":{"start_line":4569,"start_character":28,"end_line":4569,"end_character":37},"in_reply_to":"3a98d1f4_e8ee9c20","updated":"2016-11-16 12:05:21.000000000","message":"Looks like there is a reason to use unittest2, although I don\u0027t remember the detail: https://review.openstack.org/258578","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a3ffd728ffeca7a5555116e2405294d8a634827d","unresolved":false,"context_lines":[{"line_number":4685,"context_line":"        cls.tempurl_key2 \u003d Utils.create_name()"},{"line_number":4686,"context_line":""},{"line_number":4687,"context_line":"        cls.account \u003d Account("},{"line_number":4688,"context_line":"            cls.conn, tf.config.get(\u0027account\u0027, tf.config[\u0027username\u0027]))"},{"line_number":4689,"context_line":"        cls.account.delete_containers()"},{"line_number":4690,"context_line":"        cls.account.update_metadata({"},{"line_number":4691,"context_line":"            \u0027temp-url-key\u0027: cls.tempurl_key,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_e8d5bc42","line":4688,"updated":"2016-10-03 22:21:00.000000000","message":"Should we do a HEAD here to get any existing tempurl keys, so we can restore them in tearDown?","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ab6741ff46071f8cd3493120917111340922","unresolved":false,"context_lines":[{"line_number":4685,"context_line":"        cls.tempurl_key2 \u003d Utils.create_name()"},{"line_number":4686,"context_line":""},{"line_number":4687,"context_line":"        cls.account \u003d Account("},{"line_number":4688,"context_line":"            cls.conn, tf.config.get(\u0027account\u0027, tf.config[\u0027username\u0027]))"},{"line_number":4689,"context_line":"        cls.account.delete_containers()"},{"line_number":4690,"context_line":"        cls.account.update_metadata({"},{"line_number":4691,"context_line":"            \u0027temp-url-key\u0027: cls.tempurl_key,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_966313dc","line":4688,"in_reply_to":"3a98d1f4_e8d5bc42","updated":"2016-11-16 12:05:21.000000000","message":"Done","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a3ffd728ffeca7a5555116e2405294d8a634827d","unresolved":false,"context_lines":[{"line_number":4715,"context_line":""},{"line_number":4716,"context_line":"    @classmethod"},{"line_number":4717,"context_line":"    def tearDownClass(cls):"},{"line_number":4718,"context_line":"        cls.env.tearDown()"},{"line_number":4719,"context_line":""},{"line_number":4720,"context_line":"    def setUp(self):"},{"line_number":4721,"context_line":"        super(TestTempurl, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_28cc04ba","line":4718,"updated":"2016-10-03 22:21:00.000000000","message":"I feel like this should go in Base, since that\u0027s where it got setUp()","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ab6741ff46071f8cd3493120917111340922","unresolved":false,"context_lines":[{"line_number":4715,"context_line":""},{"line_number":4716,"context_line":"    @classmethod"},{"line_number":4717,"context_line":"    def tearDownClass(cls):"},{"line_number":4718,"context_line":"        cls.env.tearDown()"},{"line_number":4719,"context_line":""},{"line_number":4720,"context_line":"    def setUp(self):"},{"line_number":4721,"context_line":"        super(TestTempurl, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_01133e0e","line":4718,"in_reply_to":"3a98d1f4_28cc04ba","updated":"2016-11-16 12:05:21.000000000","message":"Done. Most envs don\u0027t have a tearDown method. But all envs have some common setup steps so it makes sense to create a BaseEnv with setUp() and tearDown() methods and implement the common setup steps there.","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a3ffd728ffeca7a5555116e2405294d8a634827d","unresolved":false,"context_lines":[{"line_number":5242,"context_line":"        cls.tempurl_key \u003d Utils.create_name()"},{"line_number":5243,"context_line":""},{"line_number":5244,"context_line":"        cls.account \u003d Account("},{"line_number":5245,"context_line":"            cls.conn, tf.config.get(\u0027account\u0027, tf.config[\u0027username\u0027]))"},{"line_number":5246,"context_line":"        cls.account.delete_containers()"},{"line_number":5247,"context_line":"        cls.account.update_metadata({\u0027temp-url-key\u0027: cls.tempurl_key})"},{"line_number":5248,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a98d1f4_08dca844","line":5245,"updated":"2016-10-03 22:21:00.000000000","message":"Similar to above, should we do a HEAD here to get any existing tempurl key, so we can restore it in tearDown?","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ab6741ff46071f8cd3493120917111340922","unresolved":false,"context_lines":[{"line_number":5242,"context_line":"        cls.tempurl_key \u003d Utils.create_name()"},{"line_number":5243,"context_line":""},{"line_number":5244,"context_line":"        cls.account \u003d Account("},{"line_number":5245,"context_line":"            cls.conn, tf.config.get(\u0027account\u0027, tf.config[\u0027username\u0027]))"},{"line_number":5246,"context_line":"        cls.account.delete_containers()"},{"line_number":5247,"context_line":"        cls.account.update_metadata({\u0027temp-url-key\u0027: cls.tempurl_key})"},{"line_number":5248,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_6985b8ab","line":5245,"in_reply_to":"3a98d1f4_08dca844","updated":"2016-11-16 12:05:21.000000000","message":"Done","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b2f7ab6741ff46071f8cd3493120917111340922","unresolved":false,"context_lines":[{"line_number":5284,"context_line":""},{"line_number":5285,"context_line":"    @classmethod"},{"line_number":5286,"context_line":"    def tearDownClass(cls):"},{"line_number":5287,"context_line":"        cls.env.tearDown()"},{"line_number":5288,"context_line":""},{"line_number":5289,"context_line":"    def setUp(self):"},{"line_number":5290,"context_line":"        super(TestSloTempurl, self).setUp()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_41e37605","line":5287,"updated":"2016-11-16 12:05:21.000000000","message":"moved to Base","commit_id":"432bfac4c5f81a7d2a77fb270fdef066d2e3b27d"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"51c22c5fede142de097aa6ed215328a3c2bfc247","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        cls.account \u003d Account(cls.conn, tf.config.get(\u0027account\u0027,"},{"line_number":78,"context_line":"                                                      tf.config[\u0027username\u0027]))"},{"line_number":79,"context_line":"        cls.account.delete_containers()"},{"line_number":80,"context_line":"        cls.original_account_meta \u003d cls.account.info()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def tearDown(cls):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_baa3774e","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":33},"updated":"2016-12-14 15:55:46.000000000","message":"why is there a concern for restoring the origican_account_meta but not the original containers?\n\nAlso, why save this in the BaseEnv if it seems that only tempurl is making use of restoring parts of the original_account_meta?","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"add1dedda8795326970599c51e5d84be5871bbd7","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        cls.account \u003d Account(cls.conn, tf.config.get(\u0027account\u0027,"},{"line_number":78,"context_line":"                                                      tf.config[\u0027username\u0027]))"},{"line_number":79,"context_line":"        cls.account.delete_containers()"},{"line_number":80,"context_line":"        cls.original_account_meta \u003d cls.account.info()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def tearDown(cls):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_22fe7438","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":33},"in_reply_to":"1a6eadb0_78da82e9","updated":"2016-12-20 13:55:14.000000000","message":"Moved original_account_meta to tempurl tests in next version","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9d1a94f2d3db0de11547d25f4a118ef406336a12","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        cls.account \u003d Account(cls.conn, tf.config.get(\u0027account\u0027,"},{"line_number":78,"context_line":"                                                      tf.config[\u0027username\u0027]))"},{"line_number":79,"context_line":"        cls.account.delete_containers()"},{"line_number":80,"context_line":"        cls.original_account_meta \u003d cls.account.info()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def tearDown(cls):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_78da82e9","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":33},"in_reply_to":"1a6eadb0_baa3774e","updated":"2016-12-15 19:19:14.000000000","message":"As you point out I think the only time we restore metadata is in the tempurl teardown, and I believe that arose in response to a comment from Tim on an earlier version [1] ( I began by just removing tempurl keys). But TBH my memory is fuzzy.\n\n[1] https://review.openstack.org/#/c/346752/3/test/functional/tests.py@4688\n\nSaving the account metadata in this BaseEnv is purely a convenience to avoid doing it in setUp overides in the subclasses that actually use it in teardown. I can look again at that, maybe there is scope for an intermediate subclass.","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"add1dedda8795326970599c51e5d84be5871bbd7","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        cls.conn.authenticate()"},{"line_number":135,"context_line":"        cls.account \u003d Account(cls.conn, tf.config.get(\u0027account\u0027,"},{"line_number":136,"context_line":"                                                      tf.config[\u0027username\u0027]))"},{"line_number":137,"context_line":"        cls.account.delete_containers()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        cls.containers \u003d []"},{"line_number":140,"context_line":"        for i in range(10):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_c2a5c004","line":137,"updated":"2016-12-20 13:55:14.000000000","message":"^^ this should call the superclass setUp method","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"51c22c5fede142de097aa6ed215328a3c2bfc247","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    pass"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"class TestAccountNoContainers(Base):"},{"line_number":379,"context_line":"    def testGetRequest(self):"},{"line_number":380,"context_line":"        for format_type in [None, \u0027json\u0027, \u0027xml\u0027]:"},{"line_number":381,"context_line":"            self.assertFalse(self.env.account.containers("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_2573cc4e","line":378,"range":{"start_line":378,"start_character":6,"end_line":378,"end_character":29},"updated":"2016-12-14 15:55:46.000000000","message":"we could probably remove this class now (and TestAccountNoContainersUTF8) and move testGetRequest to TestAccount??","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9d1a94f2d3db0de11547d25f4a118ef406336a12","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    pass"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"class TestAccountNoContainers(Base):"},{"line_number":379,"context_line":"    def testGetRequest(self):"},{"line_number":380,"context_line":"        for format_type in [None, \u0027json\u0027, \u0027xml\u0027]:"},{"line_number":381,"context_line":"            self.assertFalse(self.env.account.containers("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_5804e648","line":378,"range":{"start_line":378,"start_character":6,"end_line":378,"end_character":29},"in_reply_to":"1a6eadb0_2573cc4e","updated":"2016-12-15 19:19:14.000000000","message":"OK I will look at that. I wonder if it was always redundant.","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"add1dedda8795326970599c51e5d84be5871bbd7","unresolved":false,"context_lines":[{"line_number":375,"context_line":"    pass"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"class TestAccountNoContainers(Base):"},{"line_number":379,"context_line":"    def testGetRequest(self):"},{"line_number":380,"context_line":"        for format_type in [None, \u0027json\u0027, \u0027xml\u0027]:"},{"line_number":381,"context_line":"            self.assertFalse(self.env.account.containers("}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_226e7496","line":378,"range":{"start_line":378,"start_character":6,"end_line":378,"end_character":29},"in_reply_to":"1a6eadb0_5804e648","updated":"2016-12-20 13:55:14.000000000","message":"I think this class should remain - it  differs from TestAccount in that TestAccountEnv sets up some containers whereas this class now uses BaseEnv which does not setup containers.","commit_id":"bc3a3ba38e8b97ee5ab7b629ccec5bdec735017b"}]}
