)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d8d69e396d50982178a8da7eba72a8ec7dd50865","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e61ec0b3_c9eb5a47","updated":"2023-05-22 18:31:18.000000000","message":"ok, this looks pretty good","commit_id":"e29e2c3ae5fd32f6b8c3d70e6ea4db786f980151"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d8d69e396d50982178a8da7eba72a8ec7dd50865","unresolved":true,"context_lines":[{"line_number":2073,"context_line":"    :param use_replication: if True then the replication ip address and port"},{"line_number":2074,"context_line":"        are returned."},{"line_number":2075,"context_line":"    :return: a tuple of (ip address, port)"},{"line_number":2076,"context_line":"    \"\"\""},{"line_number":2077,"context_line":"    if use_replication or node_dict.get(\u0027use_replication\u0027, False):"},{"line_number":2078,"context_line":"        node_ip \u003d node_dict[\u0027replication_ip\u0027]"},{"line_number":2079,"context_line":"        node_port \u003d node_dict[\u0027replication_port\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"a01ba595_7b6a67fc","line":2076,"updated":"2023-05-22 18:31:18.000000000","message":"i guess I can sort of see the distinction here","commit_id":"e29e2c3ae5fd32f6b8c3d70e6ea4db786f980151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d8ced2f2101a86b220a8be0a416e3d7e9cd07ad6","unresolved":true,"context_lines":[{"line_number":2073,"context_line":"    :param use_replication: if True then the replication ip address and port"},{"line_number":2074,"context_line":"        are returned."},{"line_number":2075,"context_line":"    :return: a tuple of (ip address, port)"},{"line_number":2076,"context_line":"    \"\"\""},{"line_number":2077,"context_line":"    if use_replication or node_dict.get(\u0027use_replication\u0027, False):"},{"line_number":2078,"context_line":"        node_ip \u003d node_dict[\u0027replication_ip\u0027]"},{"line_number":2079,"context_line":"        node_port \u003d node_dict[\u0027replication_port\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"59791662_1caa08ce","line":2076,"in_reply_to":"a01ba595_7b6a67fc","updated":"2023-05-22 22:56:52.000000000","message":"My main thought was how this is dealing with `node_dict`s, not really massaging IPs directly; similar argument for `node_to_string` below.","commit_id":"e29e2c3ae5fd32f6b8c3d70e6ea4db786f980151"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d8d69e396d50982178a8da7eba72a8ec7dd50865","unresolved":true,"context_lines":[{"line_number":3451,"context_line":""},{"line_number":3452,"context_line":"    :returns: a string ip address"},{"line_number":3453,"context_line":"    \"\"\""},{"line_number":3454,"context_line":"    return \u0027[%s]\u0027 % ip if is_valid_ipv6(ip) else ip"},{"line_number":3455,"context_line":""},{"line_number":3456,"context_line":""},{"line_number":3457,"context_line":"def rsync_module_interpolation(template, device):"}],"source_content_type":"text/x-python","patch_set":1,"id":"40a3d08f_5286b968","line":3454,"updated":"2023-05-22 18:31:18.000000000","message":"maybe save for an \"utils.rsync\" module","commit_id":"e29e2c3ae5fd32f6b8c3d70e6ea4db786f980151"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d8ced2f2101a86b220a8be0a416e3d7e9cd07ad6","unresolved":true,"context_lines":[{"line_number":3451,"context_line":""},{"line_number":3452,"context_line":"    :returns: a string ip address"},{"line_number":3453,"context_line":"    \"\"\""},{"line_number":3454,"context_line":"    return \u0027[%s]\u0027 % ip if is_valid_ipv6(ip) else ip"},{"line_number":3455,"context_line":""},{"line_number":3456,"context_line":""},{"line_number":3457,"context_line":"def rsync_module_interpolation(template, device):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ed6e4771_2e1a6fee","line":3454,"in_reply_to":"40a3d08f_5286b968","updated":"2023-05-22 22:56:52.000000000","message":"Yeah, I was a little torn about this one -- it feels really close to being in the same realm as `expand_ipv6`, but the \"rsync\"-ness made me hold off. Looks like it\u0027s only used in `rsync_module_interpolation` below; I bet we could\n\n* rename this to something like `url_formatted_ip`\n* have `node_to_string` use it, too, and\n* pull it out to `swift.common.utils.ipaddrs`\n\nand feel pretty good about it. Maybe as a follow-up?","commit_id":"e29e2c3ae5fd32f6b8c3d70e6ea4db786f980151"}]}
