)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"680391a150f065af2a09cc1559aab00d6a23a6cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a635e682_032ee2fd","updated":"2022-01-07 19:35:37.000000000","message":"IDK -- the decorator only makes sense in the context of FakeMemcache (since it has self.calls), so I felt like having it bleed outside of that context (either by making it a module-level function or not del\u0027ing it off the class) wouldn\u0027t be desirable. OTOH, I\u0027ve now had three smart people look at the code and find it non-obvious, so maybe that\u0027s a sign I should just take Clay\u0027s suggestion ;-)","commit_id":"764c6c939e975f3c59b613615da329d51157f6d1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8a566b5c301918c47af643273b3ee0adb41329fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1afc0178_e5e1dcd4","updated":"2022-01-07 18:09:43.000000000","message":"IMHO the decorater is better as as function\n\n\t(vagrant-swift-all-in-one) clayg@banana:~/Workspace/vagrant-swift-all-in-one/swift$ git diff\n\tdiff --git a/test/unit/__init__.py b/test/unit/__init__.py\n\tindex 254f40813..b6f660099 100644\n\t--- a/test/unit/__init__.py\n\t+++ b/test/unit/__init__.py\n\t@@ -401,6 +401,13 @@ class FabricatedRing(Ring):\n\t\t self._update_bookkeeping()\n\t \n\t \n\t+def track(f):\n\t+    def wrapper(self, *a, **kw):\n\t+        self.calls.append(getattr(mocklib.call, f.__name__)(*a, **kw))\n\t+        return f(self, *a, **kw)\n\t+    return wrapper\n\t+\n\t+\n\t class FakeMemcache(object):\n\t \n\t     def __init__(self):\n\t@@ -412,12 +419,6 @@ class FakeMemcache(object):\n\t     def clear_calls(self):\n\t\t del self.calls[:]\n\t \n\t-    def track(f):\n\t-        def wrapper(self, *a, **kw):\n\t-            self.calls.append(getattr(mocklib.call, f.__name__)(*a, **kw))\n\t-            return f(self, *a, **kw)\n\t-        return wrapper\n\t-\n\t     @track\n\t     def get(self, key):\n\t\t return self.store.get(key)\n\t@@ -467,8 +468,6 @@ class FakeMemcache(object):\n\t     def delete_all(self):\n\t\t self.store.clear()\n\t \n\t-    del track\n\t-\n\t \n\t class FakeIterable(object):\n\t     def __init__(self, values):\n\n^ seems to pass tests","commit_id":"764c6c939e975f3c59b613615da329d51157f6d1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b8a89a5fc0bf1760f89453c592f2ed15a6c1453c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fa8e7505_211ca7d5","updated":"2022-01-07 16:33:11.000000000","message":"looks good but I have same query as Pete","commit_id":"764c6c939e975f3c59b613615da329d51157f6d1"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"33077f644948e8f094004b4fa5540c2b14387d62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"208737b4_929e7a27","updated":"2022-01-10 18:56:16.000000000","message":"I think making this change on the shared fake is good technical investment that pays off in the followup\n\nno worries from me","commit_id":"874a5865b8e7a1ffe253fcab5b5eb7febfaa4cbf"}],"test/unit/__init__.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"9c085095a896f5241a25247f79811ce756eb2c85","unresolved":true,"context_lines":[{"line_number":467,"context_line":"    def delete_all(self):"},{"line_number":468,"context_line":"        self.store.clear()"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    del track"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class FakeIterable(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"96523e6e_6f23a403","line":470,"updated":"2022-01-06 22:02:49.000000000","message":"What is this?","commit_id":"764c6c939e975f3c59b613615da329d51157f6d1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"680391a150f065af2a09cc1559aab00d6a23a6cd","unresolved":true,"context_lines":[{"line_number":467,"context_line":"    def delete_all(self):"},{"line_number":468,"context_line":"        self.store.clear()"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"    del track"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"class FakeIterable(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"711e601f_c622e603","line":470,"in_reply_to":"96523e6e_6f23a403","updated":"2022-01-07 19:35:37.000000000","message":"I defined the decorator in the class (since it doesn\u0027t make sense anywhere else; see L415) but don\u0027t need it to live beyond class-definition time (don\u0027t want anyone trying to call memcache.track(...) or something).","commit_id":"764c6c939e975f3c59b613615da329d51157f6d1"}],"test/unit/proxy/controllers/test_container.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b8a89a5fc0bf1760f89453c592f2ed15a6c1453c","unresolved":true,"context_lines":[{"line_number":2483,"context_line":"            [(\u0027set\u0027, \u0027shard-listing/a/c\u0027, self.sr_dicts, 600),"},{"line_number":2484,"context_line":"             (\u0027set\u0027, \u0027container/a/c\u0027, mock.ANY, 60)],"},{"line_number":2485,"context_line":"            self.memcache.calls)"},{"line_number":2486,"context_line":"        self.assertEqual(self.sr_dicts, self.memcache.calls[0][2])"},{"line_number":2487,"context_line":"        self.assertEqual(\u0027sharded\u0027,"},{"line_number":2488,"context_line":"                         self.memcache.calls[1][2][\u0027sharding_state\u0027])"},{"line_number":2489,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1e8a5e42_0041003a","side":"PARENT","line":2486,"updated":"2022-01-07 16:33:11.000000000","message":"yep, redundant, probably written before the preceding assertion","commit_id":"f7101f3795edb41e8825fc87ae78021191aaa622"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"680391a150f065af2a09cc1559aab00d6a23a6cd","unresolved":false,"context_lines":[{"line_number":2483,"context_line":"            [(\u0027set\u0027, \u0027shard-listing/a/c\u0027, self.sr_dicts, 600),"},{"line_number":2484,"context_line":"             (\u0027set\u0027, \u0027container/a/c\u0027, mock.ANY, 60)],"},{"line_number":2485,"context_line":"            self.memcache.calls)"},{"line_number":2486,"context_line":"        self.assertEqual(self.sr_dicts, self.memcache.calls[0][2])"},{"line_number":2487,"context_line":"        self.assertEqual(\u0027sharded\u0027,"},{"line_number":2488,"context_line":"                         self.memcache.calls[1][2][\u0027sharding_state\u0027])"},{"line_number":2489,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"15d8ef0f_2fb8f88e","side":"PARENT","line":2486,"in_reply_to":"1e8a5e42_0041003a","updated":"2022-01-07 19:35:37.000000000","message":"Ack","commit_id":"f7101f3795edb41e8825fc87ae78021191aaa622"}]}
