)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"944c5cfdd53651dfa1aa5da9cc4e1dfffca90582","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8941da73_34dcbdae","updated":"2026-09-03 21:30:53.000000000","message":"looks good! nice that we\u0027re normalizing all labels rather than just the dogstats ones","commit_id":"1949b12f9f5702f27c89b703816bb6792a3e3bb9"}],"swift/common/statsd_client.py":[{"author":{"_account_id":38368,"name":"Christian Ohanaja","display_name":"Christian Ohanaja","email":"cohanaja@nvidia.com","username":"cohanaja"},"change_message_id":"e461fc0f4f432bb32c87da230c9fe6c6755c94f7","unresolved":true,"context_lines":[{"line_number":595,"context_line":"            }"},{"line_number":596,"context_line":"        else:"},{"line_number":597,"context_line":"            sanitised_labels \u003d {k: (v if v is not None else \u0027\u0027)"},{"line_number":598,"context_line":"                                for k, v in sorted(all_labels.items())}"},{"line_number":599,"context_line":"        return self.label_formatter("},{"line_number":600,"context_line":"            metric,"},{"line_number":601,"context_line":"            value,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c02766b3_e5fb3f76","line":598,"range":{"start_line":598,"start_character":0,"end_line":598,"end_character":71},"updated":"2026-08-31 22:23:44.000000000","message":"nit: You could probably remove this extra sort given we already do it at the end of the func,\n\nand on top of that you could actually run the key sanitization separately from the normalization step\n\n```\ndef _build_line(self, metric, value, metric_type, labels, sample_rate):\n    all_labels \u003d dict(self.default_labels)\n    if labels:\n        all_labels.update(labels)\n\n    if self.label_formatter is dogstatsd:\n        all_labels \u003d {\n            _normalize_dogstatsd_tag_key(k): v\n            for k, v in all_labels.items()\n        }\n\n    sanitised_labels \u003d {\n        k: (v if v is not None else \u0027\u0027)\n        for k, v in all_labels.items()\n    }\n    ...\n    sort + return at the end\n```","commit_id":"2ec7023b00fa4ec9d062578caf93f2b62ffac5ef"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"fd5a9ad4bee17021ea9ef55760dc615f31e2067c","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            }"},{"line_number":596,"context_line":"        else:"},{"line_number":597,"context_line":"            sanitised_labels \u003d {k: (v if v is not None else \u0027\u0027)"},{"line_number":598,"context_line":"                                for k, v in sorted(all_labels.items())}"},{"line_number":599,"context_line":"        return self.label_formatter("},{"line_number":600,"context_line":"            metric,"},{"line_number":601,"context_line":"            value,"}],"source_content_type":"text/x-python","patch_set":1,"id":"57fb7ca8_bb5c752f","line":598,"range":{"start_line":598,"start_character":0,"end_line":598,"end_character":71},"in_reply_to":"c02766b3_e5fb3f76","updated":"2026-09-03 14:33:27.000000000","message":"Acknowledged","commit_id":"2ec7023b00fa4ec9d062578caf93f2b62ffac5ef"},{"author":{"_account_id":36606,"name":"Yan Xiao","display_name":"Yan","email":"yanxiao@nvidia.com","username":"yanxiao"},"change_message_id":"5c0b5325bf73a988893e36292199bf2caee1fb14","unresolved":true,"context_lines":[{"line_number":588,"context_line":"        sanitised_labels \u003d {"},{"line_number":589,"context_line":"            _normalize_user_label_key(k): (v if v is not None else \u0027\u0027)"},{"line_number":590,"context_line":"            for k, v in all_labels.items()"},{"line_number":591,"context_line":"        }"},{"line_number":592,"context_line":"        return self.label_formatter("},{"line_number":593,"context_line":"            metric,"},{"line_number":594,"context_line":"            value,"}],"source_content_type":"text/x-python","patch_set":3,"id":"0875a4a9_205e2fd7","line":591,"updated":"2026-09-16 21:29:56.000000000","message":"this would work for all labels including user label from config or other per-call labels. is that the intent of this patch?","commit_id":"1949b12f9f5702f27c89b703816bb6792a3e3bb9"},{"author":{"_account_id":35790,"name":"Shreeya Deshpande","email":"shreeyad@nvidia.com","username":"shreeyad"},"change_message_id":"c2d4848cc2b8bda1e6a03eb9283e08de894a80f3","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        sanitised_labels \u003d {"},{"line_number":589,"context_line":"            _normalize_user_label_key(k): (v if v is not None else \u0027\u0027)"},{"line_number":590,"context_line":"            for k, v in all_labels.items()"},{"line_number":591,"context_line":"        }"},{"line_number":592,"context_line":"        return self.label_formatter("},{"line_number":593,"context_line":"            metric,"},{"line_number":594,"context_line":"            value,"}],"source_content_type":"text/x-python","patch_set":3,"id":"a5a5ed7b_2befe3e7","line":591,"in_reply_to":"0875a4a9_205e2fd7","updated":"2026-09-17 15:59:21.000000000","message":"yes, regardless of the label mode!","commit_id":"1949b12f9f5702f27c89b703816bb6792a3e3bb9"}],"test/unit/common/test_statsd_client.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"b31f7730293190728bad0ade0cbaf7960b4d882a","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        self.assertEqual({\u0027user_foo\u0027: \u0027second\u0027, \u0027user_bar\u0027: \u0027third\u0027},"},{"line_number":414,"context_line":"                         client.default_labels)"},{"line_number":415,"context_line":"        with mock.patch.object(client, \u0027_send_line\u0027) as mocked:"},{"line_number":416,"context_line":"            client.increment(\u0027metric\u0027, labels\u003d{\u0027__Baz__\u0027: \u0027fourth\u0027, \u00271bad\u0027: \u0027fifth\u0027})"},{"line_number":417,"context_line":"        self.assertEqual("},{"line_number":418,"context_line":"            [mock.call("},{"line_number":419,"context_line":"                \u0027metric:1|c|#baz:fourth,tag_1bad:fifth,user_bar:third,\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7664cc95_fc7f6265","line":416,"updated":"2026-08-31 21:37:16.000000000","message":"pep8: E501 line too long (85 \u003e 79 characters)","commit_id":"2ec7023b00fa4ec9d062578caf93f2b62ffac5ef"}]}
