)]}'
{"test/unit/obj/test_expirer.py":[{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"a1ce5a1a63db5717a491c3daf8b6f0b0dd57edaf","unresolved":false,"context_lines":[{"line_number":432,"context_line":"            [{\u0027name\u0027: \u0027%d-actual-obj\u0027 % ts}])"},{"line_number":433,"context_line":"        x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,"},{"line_number":434,"context_line":"                                  swift\u003dfake_swift)"},{"line_number":435,"context_line":"        x.delete_actual_object \u003d should_not_be_called"},{"line_number":436,"context_line":"        x.run_once()"},{"line_number":437,"context_line":"        self.assertEqual("},{"line_number":438,"context_line":"            x.logger.get_lines_for_level(\u0027error\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_16a9e9dd","side":"PARENT","line":435,"updated":"2018-01-29 09:06:04.000000000","message":"OMG, the overridden is in the original. even I don\u0027t like it though because it would be dangerous.","commit_id":"9263e7daf5d663e56052abde89ab543a12898f3f"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"a1ce5a1a63db5717a491c3daf8b6f0b0dd57edaf","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            x.deleted_objects[container].add(obj)"},{"line_number":233,"context_line":"            x.obj_containers_in_order.append(container)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        x.delete_object \u003d fake_delete_object"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        deleted_objects \u003d {}"},{"line_number":238,"context_line":"        for i in range(3):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_bb09fe31","line":235,"updated":"2018-01-29 09:06:04.000000000","message":"Don\u0027t overwrite method directly even it was already instantiated. Instead, use mock.patch.object or use try/finally to restore original method after mocking.\n\n\nIt looks like this is only place to use custom ObjectExpirer so that I don\u0027t think we should mess the logic other than making general FakeInternalClient.","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"19ff3d14283a97e360f4504607eb35cd3b50ca0c","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            x.deleted_objects[container].add(obj)"},{"line_number":233,"context_line":"            x.obj_containers_in_order.append(container)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        x.delete_object \u003d fake_delete_object"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        deleted_objects \u003d {}"},{"line_number":238,"context_line":"        for i in range(3):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_136b2485","line":235,"in_reply_to":"5f93b717_bb09fe31","updated":"2018-01-30 05:28:53.000000000","message":"Done. I changed method overwriting codes to mocking codes.","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"a1ce5a1a63db5717a491c3daf8b6f0b0dd57edaf","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        x.run_once()"},{"line_number":341,"context_line":"        self.assertEqual("},{"line_number":342,"context_line":"            x.logger.get_lines_for_level(\u0027info\u0027), ["},{"line_number":343,"context_line":"                \u0027Pass beginning; 0 possible containers; 0 possible objects\u0027,"},{"line_number":344,"context_line":"                \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":345,"context_line":"            ])"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_963179ef","line":343,"updated":"2018-01-29 09:06:04.000000000","message":"Boo. We shouldn\u0027t change the assertions when we do just a *refactor*.\n\nAh... that is from mismatch from the account_info and iter_containers result. Hmm... I\u0027m not sure what we should address but I\u0027m feeling set some container and objects to assert the count in the log.\n\n(or doing the test several times??)","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"19ff3d14283a97e360f4504607eb35cd3b50ca0c","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        x.run_once()"},{"line_number":341,"context_line":"        self.assertEqual("},{"line_number":342,"context_line":"            x.logger.get_lines_for_level(\u0027info\u0027), ["},{"line_number":343,"context_line":"                \u0027Pass beginning; 0 possible containers; 0 possible objects\u0027,"},{"line_number":344,"context_line":"                \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":345,"context_line":"            ])"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_76cff655","line":343,"in_reply_to":"5f93b717_963179ef","updated":"2018-01-30 05:28:53.000000000","message":"I see. This is not refactor.\nNow I updated get_account_info of FakeInternalClient to return (1, 2), because 8 of 9 implementation of get_account_info returns (1, 2) and remaining one is not checked in original implementation.","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"a1ce5a1a63db5717a491c3daf8b6f0b0dd57edaf","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        fake_swift \u003d FakeInternalClient({"},{"line_number":368,"context_line":"            \u0027.expiring_objects\u0027: {str(int(time() + 86400)): []}"},{"line_number":369,"context_line":"        })"},{"line_number":370,"context_line":"        fake_swift.iter_objects \u003d fail_to_iter_objects"},{"line_number":371,"context_line":"        x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,"},{"line_number":372,"context_line":"                                  swift\u003dfake_swift)"},{"line_number":373,"context_line":"        x.run_once()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_d665c1e2","line":370,"updated":"2018-01-29 09:06:04.000000000","message":"Please see my comment at L235.\nWe shouldn\u0027t overwrite it.","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"19ff3d14283a97e360f4504607eb35cd3b50ca0c","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        fake_swift \u003d FakeInternalClient({"},{"line_number":368,"context_line":"            \u0027.expiring_objects\u0027: {str(int(time() + 86400)): []}"},{"line_number":369,"context_line":"        })"},{"line_number":370,"context_line":"        fake_swift.iter_objects \u003d fail_to_iter_objects"},{"line_number":371,"context_line":"        x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,"},{"line_number":372,"context_line":"                                  swift\u003dfake_swift)"},{"line_number":373,"context_line":"        x.run_once()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_01350a8f","line":370,"in_reply_to":"5f93b717_d665c1e2","updated":"2018-01-30 05:28:53.000000000","message":"Done","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"a1ce5a1a63db5717a491c3daf8b6f0b0dd57edaf","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        x.run_once()"},{"line_number":374,"context_line":"        logs \u003d x.logger.all_log_lines()"},{"line_number":375,"context_line":"        self.assertEqual(logs[\u0027info\u0027], ["},{"line_number":376,"context_line":"            \u0027Pass beginning; 1 possible containers; 0 possible objects\u0027,"},{"line_number":377,"context_line":"            \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":378,"context_line":"        ])"},{"line_number":379,"context_line":"        self.assertNotIn(\u0027error\u0027, logs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_7664ede4","line":376,"range":{"start_line":376,"start_character":52,"end_line":376,"end_character":54},"updated":"2018-01-29 09:06:04.000000000","message":"Ditto at L343.","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"19ff3d14283a97e360f4504607eb35cd3b50ca0c","unresolved":false,"context_lines":[{"line_number":373,"context_line":"        x.run_once()"},{"line_number":374,"context_line":"        logs \u003d x.logger.all_log_lines()"},{"line_number":375,"context_line":"        self.assertEqual(logs[\u0027info\u0027], ["},{"line_number":376,"context_line":"            \u0027Pass beginning; 1 possible containers; 0 possible objects\u0027,"},{"line_number":377,"context_line":"            \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":378,"context_line":"        ])"},{"line_number":379,"context_line":"        self.assertNotIn(\u0027error\u0027, logs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f93b717_6123ae57","line":376,"range":{"start_line":376,"start_character":52,"end_line":376,"end_character":54},"in_reply_to":"5f93b717_7664ede4","updated":"2018-01-30 05:28:53.000000000","message":"Done","commit_id":"b3e1e7afe79e430a6f5fc768d9f0569b7abf97fd"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"4339b83e4de637da4c850b6065ece495748953d6","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        self.assertEqual(x.report_objects, 0)"},{"line_number":508,"context_line":"        with mock.patch.object(x, \u0027delete_actual_object\u0027,"},{"line_number":509,"context_line":"                               delete_actual_object_test_for_unicode):"},{"line_number":510,"context_line":"            with mock.patch.object(x, \u0027pop_queue\u0027, lambda c, o: None):"},{"line_number":511,"context_line":"                x.run_once()"},{"line_number":512,"context_line":"        self.assertEqual(x.report_objects, 1)"},{"line_number":513,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_0b78a5c1","line":510,"updated":"2018-01-31 08:41:51.000000000","message":"nits) we don\u0027t have to nest the with, just concat with comma like\n\ndiff --git a/test/unit/obj/test_expirer.py b/test/unit/obj/test_expirer.py\nindex 8fe0969..24f3935 100644\n--- a/test/unit/obj/test_expirer.py\n+++ b/test/unit/obj/test_expirer.py\n@@ -461,9 +461,9 @@ class TestObjectExpirer(TestCase):\n         self.logger._clear()\n         x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,\n                                   swift\u003dfake_swift)\n-        with mock.patch.object(x, \u0027delete_actual_object\u0027, lambda o, t: None):\n-            with mock.patch.object(x, \u0027pop_queue\u0027, should_not_get_called):\n-                x.run_once()\n+        with mock.patch.object(x, \u0027delete_actual_object\u0027, lambda o, t: None), \\\n+                mock.patch.object(x, \u0027pop_queue\u0027, should_not_get_called):\n+            x.run_once()\n         self.assertEqual(\n             self.logger.get_lines_for_level(\u0027error\u0027),\n             [\u0027Exception while deleting object %d %d-actual-obj This should \u0027","commit_id":"37556382a697a2c7acf15bd962dbbfd72813bfac"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"4339b83e4de637da4c850b6065ece495748953d6","unresolved":false,"context_lines":[{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        fake_swift \u003d InternalClient("},{"line_number":418,"context_line":"            [{\u0027name\u0027: str(int(time() - 86400))}],"},{"line_number":419,"context_line":"            [{\u0027name\u0027: \u0027%d-actual-obj\u0027 % int(time() + 86400)}])"},{"line_number":420,"context_line":"        x \u003d expirer.ObjectExpirer(self.conf, logger\u003dself.logger,"},{"line_number":421,"context_line":"                                  swift\u003dfake_swift)"},{"line_number":422,"context_line":"        x.run_once()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_7a52543d","side":"PARENT","line":419,"updated":"2018-01-31 08:41:51.000000000","message":"OK. The older code for InternalClient takes containers and objects args.\nThe newer FakeInternalClient will use a dict to define. Sounds good improvement.","commit_id":"9263e7daf5d663e56052abde89ab543a12898f3f"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"4339b83e4de637da4c850b6065ece495748953d6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.aco_dict.update(aco_dict)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def get_account_info(self, account):"},{"line_number":64,"context_line":"        return 1, 2"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def iter_containers(self, account, prefix\u003d\u0027\u0027):"},{"line_number":67,"context_line":"        acc_dict \u003d self.aco_dict[account]"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_9a1e40b9","line":64,"updated":"2018-01-31 08:41:51.000000000","message":"I trust Kazuhiro is willing to fix the inconsistency with here and iter_containers/iter_objects but currently that\u0027s ok to minimize the assertion change  for now.","commit_id":"5cac37284e1d3f3019309ca86f73e3dbb176df59"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c87fa046949bfdd628e464256ab1d10266a59c2d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    def iter_objects(self, account, container):"},{"line_number":75,"context_line":"        acc_dict \u003d self.aco_dict[account]"},{"line_number":76,"context_line":"        obj_iter \u003d acc_dict.get(container, [])"},{"line_number":77,"context_line":"        return [{\u0027name\u0027: six.text_type(obj)} for obj in obj_iter]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def make_request(*a, **kw):"},{"line_number":80,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_98b36de9","line":77,"updated":"2018-02-02 04:18:08.000000000","message":"NIT: seeing as this is iter objects and iter containers (above) we could have used a generator comprehension. But looking at the tests we send so few it\u0027s not important :)","commit_id":"5cac37284e1d3f3019309ca86f73e3dbb176df59"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"4339b83e4de637da4c850b6065ece495748953d6","unresolved":false,"context_lines":[{"line_number":369,"context_line":"            x.run_once()"},{"line_number":370,"context_line":"        logs \u003d x.logger.all_log_lines()"},{"line_number":371,"context_line":"        self.assertEqual(logs[\u0027info\u0027], ["},{"line_number":372,"context_line":"            \u0027Pass beginning; 1 possible containers; 2 possible objects\u0027,"},{"line_number":373,"context_line":"            \u0027Pass completed in 0s; 0 objects expired\u0027,"},{"line_number":374,"context_line":"        ])"},{"line_number":375,"context_line":"        self.assertNotIn(\u0027error\u0027, logs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f93b717_da04c84c","line":372,"updated":"2018-01-31 08:41:51.000000000","message":"ok. log depends on the get_account_info, not the actual iteration result.","commit_id":"5cac37284e1d3f3019309ca86f73e3dbb176df59"}]}
