)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a512213b7a9a5075295fd13e5cab8f4607affb1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"acdb12e6_bb8707e5","updated":"2022-09-09 08:51:02.000000000","message":"I can see that @JianJian has squashed this to the parent patch but made sense to leave replies here. I don\u0027t mind who wins the function signature debate.","commit_id":"34549f992b296d16c35281347a18a162896689d2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"caccb5c3d20e3976e9adc81157a478fb976e3a1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"cf774a63_94a4fff4","updated":"2022-09-08 18:31:16.000000000","message":"Yeah this looks great, can we squash it?","commit_id":"34549f992b296d16c35281347a18a162896689d2"}],"test/probe/common.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"caccb5c3d20e3976e9adc81157a478fb976e3a1b","unresolved":true,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    :param nodes: an iterable of node dicts."},{"line_number":359,"context_line":"    :param exclude: a node dict or iterable of node dicts that should not be"},{"line_number":360,"context_line":"        yielded."},{"line_number":361,"context_line":"    :return: yields node dicts."},{"line_number":362,"context_line":"    \"\"\""},{"line_number":363,"context_line":"    if not isinstance(exclude, (set, list, tuple)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"41e1516d_c7f3acb4","line":360,"updated":"2022-09-08 18:31:16.000000000","message":"I think maybe if we want to support passing in \"one or more\" excludes it would make sense for the signature to be *excludes\n\n... other than that this seems like a nicely documented and easy to understand/use helper function - KUDOS","commit_id":"34549f992b296d16c35281347a18a162896689d2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a512213b7a9a5075295fd13e5cab8f4607affb1b","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    :param nodes: an iterable of node dicts."},{"line_number":359,"context_line":"    :param exclude: a node dict or iterable of node dicts that should not be"},{"line_number":360,"context_line":"        yielded."},{"line_number":361,"context_line":"    :return: yields node dicts."},{"line_number":362,"context_line":"    \"\"\""},{"line_number":363,"context_line":"    if not isinstance(exclude, (set, list, tuple)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7030888e_b35e0543","line":360,"in_reply_to":"3af0946c_4f7970fd","updated":"2022-09-09 08:51:02.000000000","message":"FWIW I had in back of my mind the possibility that someone might want to add an \u0027includes\u0027 capability in the future, which *excludes would preclude, or at least make awkward. But I guess that would ideally want exclude to be a kwarg, so the future is already awkward.","commit_id":"34549f992b296d16c35281347a18a162896689d2"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2bcc4232ac92505c0d4e41d56b6f86344f2f7916","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    :param nodes: an iterable of node dicts."},{"line_number":359,"context_line":"    :param exclude: a node dict or iterable of node dicts that should not be"},{"line_number":360,"context_line":"        yielded."},{"line_number":361,"context_line":"    :return: yields node dicts."},{"line_number":362,"context_line":"    \"\"\""},{"line_number":363,"context_line":"    if not isinstance(exclude, (set, list, tuple)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3af0946c_4f7970fd","line":360,"in_reply_to":"41e1516d_c7f3acb4","updated":"2022-09-08 20:58:05.000000000","message":"second this. I was making the same change too when I did the squash.","commit_id":"34549f992b296d16c35281347a18a162896689d2"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"fdee718a3c451c0dd4b6464227775ae2a332988f","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    :param nodes: an iterable of node dicts."},{"line_number":359,"context_line":"    :param exclude: a node dict or iterable of node dicts that should not be"},{"line_number":360,"context_line":"        yielded."},{"line_number":361,"context_line":"    :return: yields node dicts."},{"line_number":362,"context_line":"    \"\"\""},{"line_number":363,"context_line":"    if not isinstance(exclude, (set, list, tuple)):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f5d140a_1a4f4f8b","line":360,"in_reply_to":"7030888e_b35e0543","updated":"2022-09-09 15:11:34.000000000","message":"Oh, I see. My bad, I misunderstood Clay\u0027s original point. I missed \"*\", thought it\u0027s just simple name change, and did the change. Alistair, are you suggesting \"*excludes\" too?","commit_id":"34549f992b296d16c35281347a18a162896689d2"}],"test/probe/test_sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"caccb5c3d20e3976e9adc81157a478fb976e3a1b","unresolved":true,"context_lines":[{"line_number":437,"context_line":"        # part-specific index"},{"line_number":438,"context_line":"        node_copy \u003d dict(node)"},{"line_number":439,"context_line":"        node_copy.pop(\u0027index\u0027, None)"},{"line_number":440,"context_line":"        return node_copy"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"class BaseAutoContainerSharding(BaseTestContainerSharding):"}],"source_content_type":"text/x-python","patch_set":3,"id":"eaa2dc95_7eac9b34","side":"PARENT","line":440,"updated":"2022-09-08 18:31:16.000000000","message":"good riddance, I hated this method.","commit_id":"69183e3e53d880558ec46ca80ff05f017cc365f4"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2bcc4232ac92505c0d4e41d56b6f86344f2f7916","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        # part-specific index"},{"line_number":438,"context_line":"        node_copy \u003d dict(node)"},{"line_number":439,"context_line":"        node_copy.pop(\u0027index\u0027, None)"},{"line_number":440,"context_line":"        return node_copy"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"class BaseAutoContainerSharding(BaseTestContainerSharding):"}],"source_content_type":"text/x-python","patch_set":3,"id":"f4e1065b_cd85e096","side":"PARENT","line":440,"in_reply_to":"eaa2dc95_7eac9b34","updated":"2022-09-08 20:58:05.000000000","message":"Done","commit_id":"69183e3e53d880558ec46ca80ff05f017cc365f4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"caccb5c3d20e3976e9adc81157a478fb976e3a1b","unresolved":true,"context_lines":[{"line_number":3478,"context_line":"        self.container_replicators.once("},{"line_number":3479,"context_line":"            additional_args\u003d\u0027--partitions\u003d%s\u0027 % shard_part)"},{"line_number":3480,"context_line":"        for node in filter_nodes(shard_nodes,"},{"line_number":3481,"context_line":"                                 exclude\u003dself.brain.nodes[0]):"},{"line_number":3482,"context_line":"            self.assert_container_state("},{"line_number":3483,"context_line":"                node, \u0027unsharded\u0027, 2, account\u003dshard_ranges[0].account,"},{"line_number":3484,"context_line":"                container\u003dshard_ranges[0].container, part\u003dshard_part)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fb23d852_dab06040","line":3481,"updated":"2022-09-08 18:31:16.000000000","message":"does it make it more obvious to name the exclude param?  maybe better the order of the params is more explicit (e.g. built-in filter function has predicate then iterable https://docs.python.org/3/library/functions.html#filter)","commit_id":"34549f992b296d16c35281347a18a162896689d2"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a512213b7a9a5075295fd13e5cab8f4607affb1b","unresolved":true,"context_lines":[{"line_number":3478,"context_line":"        self.container_replicators.once("},{"line_number":3479,"context_line":"            additional_args\u003d\u0027--partitions\u003d%s\u0027 % shard_part)"},{"line_number":3480,"context_line":"        for node in filter_nodes(shard_nodes,"},{"line_number":3481,"context_line":"                                 exclude\u003dself.brain.nodes[0]):"},{"line_number":3482,"context_line":"            self.assert_container_state("},{"line_number":3483,"context_line":"                node, \u0027unsharded\u0027, 2, account\u003dshard_ranges[0].account,"},{"line_number":3484,"context_line":"                container\u003dshard_ranges[0].container, part\u003dshard_part)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fb0c468_82b14a21","line":3481,"in_reply_to":"dc23fab9_340e919e","updated":"2022-09-09 08:51:02.000000000","message":"oh, so maybe when I typed this I had already started thinking of excludes as a kwarg.\n\nBut I like that the extra unnecessary characters I typed here remind me exactly what the intent is.","commit_id":"34549f992b296d16c35281347a18a162896689d2"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"2bcc4232ac92505c0d4e41d56b6f86344f2f7916","unresolved":true,"context_lines":[{"line_number":3478,"context_line":"        self.container_replicators.once("},{"line_number":3479,"context_line":"            additional_args\u003d\u0027--partitions\u003d%s\u0027 % shard_part)"},{"line_number":3480,"context_line":"        for node in filter_nodes(shard_nodes,"},{"line_number":3481,"context_line":"                                 exclude\u003dself.brain.nodes[0]):"},{"line_number":3482,"context_line":"            self.assert_container_state("},{"line_number":3483,"context_line":"                node, \u0027unsharded\u0027, 2, account\u003dshard_ranges[0].account,"},{"line_number":3484,"context_line":"                container\u003dshard_ranges[0].container, part\u003dshard_part)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dc23fab9_340e919e","line":3481,"in_reply_to":"fb23d852_dab06040","updated":"2022-09-08 20:58:05.000000000","message":"I feel so, does make it easier to read, no need to check method definition when reading.","commit_id":"34549f992b296d16c35281347a18a162896689d2"}]}
