)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The Notification versioned object expects \u0027failover_segment_uuid\u0027 to"},{"line_number":10,"context_line":"be non-nullable, which causes a ValueError (500 Server Error) when"},{"line_number":11,"context_line":"retrieving a list of older notifications or notifications where this field"},{"line_number":12,"context_line":"is empty in the database."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"0c991bbf_1ddf0a86","line":12,"range":{"start_line":11,"start_character":64,"end_line":12,"end_character":24},"updated":"2026-07-14 16:32:29.000000000","message":"Should we also update masakari.db.sqlalchemy.models.Notification ?","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch updates the field definition to allow nullable values,"},{"line_number":15,"context_line":"removes a duplicate field definition from the object, updates the"},{"line_number":16,"context_line":"object version to 1.2, and includes corresponding unit tests to verify"},{"line_number":17,"context_line":"the fix."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Closes-Bug: #2150102"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"a50f555c_3058f356","line":16,"range":{"start_line":16,"start_character":7,"end_line":16,"end_character":21},"updated":"2026-07-14 16:32:29.000000000","message":"You should bump the version to 1.3 iiuc.","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cd01250f46b491a7c065b1e9904546d025a64ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"4faf86b0_2cb47e1b","updated":"2026-07-17 14:22:09.000000000","message":"Some of my previous comments are not yet addressed. Please consider marking the comments \"Done\" once your update addresses these.","commit_id":"a2e300d87e62690708f808c124199c61e9648446"}],"masakari/objects/notification.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":48,"context_line":"        \u0027type\u0027: fields.NotificationTypeField(),"},{"line_number":49,"context_line":"        \u0027payload\u0027: fields.DictOfStringsField(),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.NotificationStatusField(),"},{"line_number":51,"context_line":"        # NOTE(ShilpaSD): This field shouldn\u0027t be stored in db."},{"line_number":52,"context_line":"        # The recovery workflow details read from the \u0027notification_driver\u0027"},{"line_number":53,"context_line":"        # will be set to this field."},{"line_number":54,"context_line":"        \u0027recovery_workflow_details\u0027: fields.ListOfObjectsField("},{"line_number":55,"context_line":"            \u0027NotificationProgressDetails\u0027, default\u003d[]),"},{"line_number":56,"context_line":"        \u0027failover_segment_uuid\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"851e6ed4_5a125ba8","side":"PARENT","line":53,"range":{"start_line":51,"start_character":8,"end_line":53,"end_character":36},"updated":"2026-07-14 16:32:29.000000000","message":"why is this removed ?","commit_id":"b6364924009e7ef45653fcc49ff896816fc21751"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"798fa18d7496de9fcfef8a9c7e98700060f4bf13","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        \u0027payload\u0027: fields.DictOfStringsField(),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.NotificationStatusField(),"},{"line_number":51,"context_line":"        \u0027failover_segment_uuid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":52,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(),"},{"line_number":53,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027recovery_workflow_details\u0027: fields.ListOfObjectsField("},{"line_number":55,"context_line":"            \u0027NotificationProgressDetails\u0027, default\u003d[]),"},{"line_number":56,"context_line":"        \u0027message\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":8,"id":"905bfc08_665346a6","line":53,"range":{"start_line":52,"start_character":0,"end_line":53,"end_character":58},"updated":"2026-07-14 16:32:29.000000000","message":"IIRC these are not needed as long as these are defined in the parent. Did you see any actual problem caused by this ?","commit_id":"7d249a96cf10a7fff5716836a037b78634874e7b"}],"masakari/tests/unit/objects/test_notification_failover_segment.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4328ffd_33a20224","line":1,"updated":"2026-07-07 06:53:12.000000000","message":"linters: H102: Apache 2.0 license header not found","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"}],"source_content_type":"text/x-python","patch_set":1,"id":"7fbf5ded_a2f23970","line":1,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: H102: Apache 2.0 license header not found","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"},{"line_number":5,"context_line":"from masakari.tests.unit import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"68e3a858_2e433def","line":2,"updated":"2026-07-07 06:53:12.000000000","message":"linters: H306: imports not in alphabetical order (uuid, datetime.datetime)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import uuid"},{"line_number":2,"context_line":"from datetime import datetime"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"from masakari.objects import notification"},{"line_number":5,"context_line":"from masakari.tests.unit import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3cfd49f_be255f84","line":2,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: H306: imports not in alphabetical order (uuid, datetime.datetime)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    def test_notification_has_failover_segment_uuid_field(self):"},{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e23e2a71_2705c660","line":13,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"    def test_notification_has_failover_segment_uuid_field(self):"},{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c8083eb_2a797d03","line":13,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a0a5333_40603403","line":15,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":12,"context_line":"        \"\"\"Verify notification object has failover_segment_uuid field.\"\"\""},{"line_number":13,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, "},{"line_number":14,"context_line":"                      notification.Notification.fields)"},{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7eee4aa9_c753d952","line":15,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f53b218_bd5f4d0b","line":18,"updated":"2026-07-07 06:53:12.000000000","message":"linters: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    "},{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"40b8eb04_6362c802","line":18,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"},{"line_number":22,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"264ead0d_b970b469","line":19,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    def test_notification_serialization_with_failover_segment_uuid(self):"},{"line_number":17,"context_line":"        \"\"\"Test that notification can be serialized with all fields.\"\"\""},{"line_number":18,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":19,"context_line":"        "},{"line_number":20,"context_line":"        notif_dict \u003d {"},{"line_number":21,"context_line":"            \u0027id\u0027: 1,"},{"line_number":22,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"fcab4dee_07ffb7c7","line":19,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":31,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "}],"source_content_type":"text/x-python","patch_set":1,"id":"6c76542a_971735c3","line":33,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":31,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "}],"source_content_type":"text/x-python","patch_set":1,"id":"296cc21c_b997663c","line":33,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"6b0d37ff_12e6d62d","line":35,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        }"},{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"3d569f36_eae9fb2f","line":35,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ac1b5c98_154d08fe","line":36,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        "},{"line_number":34,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"}],"source_content_type":"text/x-python","patch_set":1,"id":"448bcf5c_3be61683","line":36,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W291 trailing whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"},{"line_number":40,"context_line":"        result \u003d dict(notif.items())"},{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c98e4cff_c07c2715","line":38,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        "},{"line_number":36,"context_line":"        self.assertEqual(notif.failover_segment_uuid, "},{"line_number":37,"context_line":"                         notif_dict[\u0027failover_segment_uuid\u0027])"},{"line_number":38,"context_line":"        "},{"line_number":39,"context_line":"        # ✅ Use dict(notif.items()) instead of .to_dict()"},{"line_number":40,"context_line":"        result \u003d dict(notif.items())"},{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"}],"source_content_type":"text/x-python","patch_set":1,"id":"213541d9_56a3b62f","line":38,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"9812131f_8b9afcc9","line":44,"updated":"2026-07-07 06:53:12.000000000","message":"linters: E501 line too long (81 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.assertIn(\u0027failover_segment_uuid\u0027, result)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"084b3c60_f91c1c61","line":44,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: E501 line too long (81 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ec6dc471_f42793c9","line":45,"updated":"2026-07-07 06:53:12.000000000","message":"linters: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"}],"source_content_type":"text/x-python","patch_set":1,"id":"255b4827_e1a677d8","line":45,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: M302: timeutils.utcnow() must be used instead of datetime.utcnow()","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"},{"line_number":49,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"d2ede79a_fa0dbd2b","line":46,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    def test_notification_serialization_with_none_failover_segment_uuid(self):"},{"line_number":44,"context_line":"        \"\"\"Verify object accepts None for failover_segment_uuid (Bug #2150102)\"\"\""},{"line_number":45,"context_line":"        now \u003d datetime.utcnow()"},{"line_number":46,"context_line":"        "},{"line_number":47,"context_line":"        notif_dict \u003d {"},{"line_number":48,"context_line":"            \u0027id\u0027: 2,"},{"line_number":49,"context_line":"            \u0027notification_uuid\u0027: str(uuid.uuid4()),"}],"source_content_type":"text/x-python","patch_set":1,"id":"45adf151_a1ae6888","line":46,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027generated_time\u0027: now,"},{"line_number":53,"context_line":"            \u0027payload\u0027: {\u0027event\u0027: \u0027STOPPED\u0027},"},{"line_number":54,"context_line":"            \u0027source_host_uuid\u0027: str(uuid.uuid4()),"},{"line_number":55,"context_line":"            \u0027failover_segment_uuid\u0027: None,  # ✅ Explicitly test the bug scenario"},{"line_number":56,"context_line":"            \u0027status\u0027: \u0027new\u0027,"},{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fdf10603_58fc826b","line":55,"updated":"2026-07-07 06:53:12.000000000","message":"linters: E501 line too long (80 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            \u0027generated_time\u0027: now,"},{"line_number":53,"context_line":"            \u0027payload\u0027: {\u0027event\u0027: \u0027STOPPED\u0027},"},{"line_number":54,"context_line":"            \u0027source_host_uuid\u0027: str(uuid.uuid4()),"},{"line_number":55,"context_line":"            \u0027failover_segment_uuid\u0027: None,  # ✅ Explicitly test the bug scenario"},{"line_number":56,"context_line":"            \u0027status\u0027: \u0027new\u0027,"},{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8a6381e_b4f253c2","line":55,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        "},{"line_number":61,"context_line":"        # This will pass cleanly once nullable\u003dTrue is added"},{"line_number":62,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":63,"context_line":"        self.assertIsNone(notif.failover_segment_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6ec61fa4_1720c18d","line":60,"updated":"2026-07-07 06:53:12.000000000","message":"linters: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"d863a09d5dcfbc89e4a4da85bb00a901bf0c3751","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            \u0027created_at\u0027: now,"},{"line_number":58,"context_line":"            \u0027updated_at\u0027: None,"},{"line_number":59,"context_line":"        }"},{"line_number":60,"context_line":"        "},{"line_number":61,"context_line":"        # This will pass cleanly once nullable\u003dTrue is added"},{"line_number":62,"context_line":"        notif \u003d notification.Notification(**notif_dict)"},{"line_number":63,"context_line":"        self.assertIsNone(notif.failover_segment_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"755da623_d94ed4dc","line":60,"updated":"2026-07-07 06:53:12.000000000","message":"pep8: W293 blank line contains whitespace","commit_id":"2c322e1c5e44f6311a7eae2fe2bc2659d020d1f8"}]}
