)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"45fcbda9077183c0a9c3bd9e8ce51819fd2aaaba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"08127a68_f1e8a7eb","updated":"2025-07-28 11:49:14.000000000","message":"recheck","commit_id":"7666900b705d2b2d0e00454f9f7d62e2bbc9d8d4"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1c92de37cc0633ac183c9251b6ae32ea76639b35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"84794027_0602386c","updated":"2025-08-07 20:24:52.000000000","message":"lgtm, doesn\u0027t change the current behavior of existing apis.","commit_id":"71dec1ac99d6101a4b8888ba5125290f1af443ac"}],"watcher/api/controllers/v1/types.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1c92de37cc0633ac183c9251b6ae32ea76639b35","unresolved":true,"context_lines":[{"line_number":212,"context_line":"        return []"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    @staticmethod"},{"line_number":215,"context_line":"    def allowed_attrs():"},{"line_number":216,"context_line":"        \"\"\"Returns a list of allowed attributes to be patched.\"\"\""},{"line_number":217,"context_line":"        return []"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"63c13a18_423f27fc","line":215,"range":{"start_line":215,"start_character":0,"end_line":215,"end_character":24},"updated":"2025-08-07 20:24:52.000000000","message":"I think that in general is a better approach, and would replace the current internal_attrs validation, right?","commit_id":"71dec1ac99d6101a4b8888ba5125290f1af443ac"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"e242ce4916d6004a989483f5a59c4de0a01260dd","unresolved":true,"context_lines":[{"line_number":212,"context_line":"        return []"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    @staticmethod"},{"line_number":215,"context_line":"    def allowed_attrs():"},{"line_number":216,"context_line":"        \"\"\"Returns a list of allowed attributes to be patched.\"\"\""},{"line_number":217,"context_line":"        return []"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"e277f1d1_0162dced","line":215,"range":{"start_line":215,"start_character":0,"end_line":215,"end_character":24},"in_reply_to":"63c13a18_423f27fc","updated":"2025-08-08 06:26:21.000000000","message":"exactly, that\u0027s the plan. I plan to use it for the new patch method on the actions api, and posibly move other patch calls to it too.","commit_id":"71dec1ac99d6101a4b8888ba5125290f1af443ac"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bdad82efbf336a4d3f2d1ee766968337ba7bb1a3","unresolved":true,"context_lines":[{"line_number":212,"context_line":"        return []"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    @staticmethod"},{"line_number":215,"context_line":"    def allowed_attrs():"},{"line_number":216,"context_line":"        \"\"\"Returns a list of allowed attributes to be patched.\"\"\""},{"line_number":217,"context_line":"        return []"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dd55626f_6eb60a27","line":215,"range":{"start_line":215,"start_character":0,"end_line":215,"end_character":24},"in_reply_to":"e277f1d1_0162dced","updated":"2025-08-21 13:46:50.000000000","message":"moving to an exipclty allow list is defeintly easier to reason about the overall correctness as the api evolves.\n\ni would have preferred to do this as a separate chagne and update all apis at once but this is ok for now provided we followup and do the rest next cycle.","commit_id":"71dec1ac99d6101a4b8888ba5125290f1af443ac"}],"watcher/tests/api/v1/test_types.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bdad82efbf336a4d3f2d1ee766968337ba7bb1a3","unresolved":true,"context_lines":[{"line_number":99,"context_line":"    @staticmethod"},{"line_number":100,"context_line":"    def allowed_attrs():"},{"line_number":101,"context_line":"        allowed_fields \u003d [\u0027/allowed\u0027, \u0027/internal\u0027, \u0027/mandatory\u0027]"},{"line_number":102,"context_line":"        return allowed_fields"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class MyRoot(wsme.WSRoot):"}],"source_content_type":"text/x-python","patch_set":3,"id":"8622d2ba_3e63c7a9","line":102,"updated":"2025-08-21 13:46:50.000000000","message":"nit: i doing think it woudl every be valid to list paths contaiend in  internal_attrs like \u0027/internal\u0027 in real code.\n\ni assume you ar edoing this to prove that internal_attrs still takes precedence\n\nbut out side fo tests we shoudl not expect them to intersect.","commit_id":"1a9f17748e0a5921afb501af442878cc98d81ae1"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"3d9e1c75fc28cfcd1872e8a936e1cf8d14000c37","unresolved":true,"context_lines":[{"line_number":99,"context_line":"    @staticmethod"},{"line_number":100,"context_line":"    def allowed_attrs():"},{"line_number":101,"context_line":"        allowed_fields \u003d [\u0027/allowed\u0027, \u0027/internal\u0027, \u0027/mandatory\u0027]"},{"line_number":102,"context_line":"        return allowed_fields"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class MyRoot(wsme.WSRoot):"}],"source_content_type":"text/x-python","patch_set":3,"id":"66bd89f5_b89e9346","line":102,"in_reply_to":"8622d2ba_3e63c7a9","updated":"2025-08-21 14:22:46.000000000","message":"Yes, that was my intent.","commit_id":"1a9f17748e0a5921afb501af442878cc98d81ae1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bdad82efbf336a4d3f2d1ee766968337ba7bb1a3","unresolved":true,"context_lines":[{"line_number":254,"context_line":"        patch \u003d [{\u0027path\u0027: \u0027/internal\u0027, \u0027op\u0027: \u0027replace\u0027, \u0027value\u0027: \u0027foo\u0027}]"},{"line_number":255,"context_line":"        ret \u003d self._patch_json(patch, True)"},{"line_number":256,"context_line":"        self.assertEqual(HTTPStatus.BAD_REQUEST, ret.status_int)"},{"line_number":257,"context_line":"        self.assertTrue(ret.json[\u0027faultstring\u0027])"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"class TestBooleanType(base.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"075b4676_24b10462","line":257,"updated":"2025-08-21 13:46:50.000000000","message":"+1 thjis is very imporant as it could cause security issues if this was regressed.","commit_id":"1a9f17748e0a5921afb501af442878cc98d81ae1"}]}
