)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0a4b651a8b05a69d979e74e14df865c73a128043","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f1503696_8a7c012f","updated":"2025-11-06 12:15:32.000000000","message":"I think we should include releasenote as well","commit_id":"6ce7e09c38c3bcb2c1245289f36e1748952f02e4"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"67d6ef5b73504fb1d9f695a5da1f0bf250c18eb9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e045a783_1d062c5e","updated":"2025-11-24 14:01:57.000000000","message":"Lets merge this and then improve the overall functionality","commit_id":"613cc42a390d06ed0d4107246cc79722bda107a0"}],"glance/common/property_utils.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"8c80d2caf7a8c06d3f54e39421198a8d568eae84","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            # See:"},{"line_number":125,"context_line":"            #   glance/tests/etc/property-protections-policies.conf"},{"line_number":126,"context_line":"            #   glance/tests/etc/property-protections.conf"},{"line_number":127,"context_line":"            CONFIG.read_string(\u0027\u0027\u0027"},{"line_number":128,"context_line":"[os_glance.*]"},{"line_number":129,"context_line":"create \u003d @"},{"line_number":130,"context_line":"read \u003d @"},{"line_number":131,"context_line":"update \u003d @"},{"line_number":132,"context_line":"delete \u003d @"},{"line_number":133,"context_line":"\u0027\u0027\u0027)"},{"line_number":134,"context_line":"            CONFIG.read(conf_file)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            msg \u003d (_LE(\"Couldn\u0027t find property protection file %(file)s: \""}],"source_content_type":"text/x-python","patch_set":1,"id":"e97b5ac3_10a70ae8","line":133,"range":{"start_line":127,"start_character":0,"end_line":133,"end_character":4},"updated":"2025-10-28 09:14:57.000000000","message":"I think we should use config parser, this will help us to avoid inserting values if the section is already present.\n\n```\ndef _inject_os_glance_section(self):\n    \"\"\"Inject default os_glance.* section if not present.\"\"\"\n    section_name \u003d \u0027os_glance.*\u0027\n    \n    if not CONFIG.has_section(section_name):\n        CONFIG.add_section(section_name)\n        # Set default permissions for all operations\n        # # Allow all roles\n        default_permissions \u003d \u0027@\u0027\n        for operation in [\u0027create\u0027, \u0027read\u0027, \u0027update\u0027, \u0027delete\u0027]:\n            CONFIG.set(section_name, operation, default_permissions)\n```","commit_id":"1d6810df03c07c7ed0b8bb2c640aca9a329b0f08"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"0a4b651a8b05a69d979e74e14df865c73a128043","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            # See:"},{"line_number":125,"context_line":"            #   glance/tests/etc/property-protections-policies.conf"},{"line_number":126,"context_line":"            #   glance/tests/etc/property-protections.conf"},{"line_number":127,"context_line":"            CONFIG.read_string(\u0027\u0027\u0027"},{"line_number":128,"context_line":"[os_glance.*]"},{"line_number":129,"context_line":"create \u003d @"},{"line_number":130,"context_line":"read \u003d @"},{"line_number":131,"context_line":"update \u003d @"},{"line_number":132,"context_line":"delete \u003d @"},{"line_number":133,"context_line":"\u0027\u0027\u0027)"},{"line_number":134,"context_line":"            CONFIG.read(conf_file)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            msg \u003d (_LE(\"Couldn\u0027t find property protection file %(file)s: \""}],"source_content_type":"text/x-python","patch_set":1,"id":"3614d818_da00ac39","line":133,"range":{"start_line":127,"start_character":0,"end_line":133,"end_character":4},"in_reply_to":"e95e9046_4ceb7b46","updated":"2025-11-06 12:15:32.000000000","message":"Acknowledged","commit_id":"1d6810df03c07c7ed0b8bb2c640aca9a329b0f08"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"30a793995a173f45874ae9154417be8c7b86d48b","unresolved":true,"context_lines":[{"line_number":124,"context_line":"            # See:"},{"line_number":125,"context_line":"            #   glance/tests/etc/property-protections-policies.conf"},{"line_number":126,"context_line":"            #   glance/tests/etc/property-protections.conf"},{"line_number":127,"context_line":"            CONFIG.read_string(\u0027\u0027\u0027"},{"line_number":128,"context_line":"[os_glance.*]"},{"line_number":129,"context_line":"create \u003d @"},{"line_number":130,"context_line":"read \u003d @"},{"line_number":131,"context_line":"update \u003d @"},{"line_number":132,"context_line":"delete \u003d @"},{"line_number":133,"context_line":"\u0027\u0027\u0027)"},{"line_number":134,"context_line":"            CONFIG.read(conf_file)"},{"line_number":135,"context_line":"        except Exception as e:"},{"line_number":136,"context_line":"            msg \u003d (_LE(\"Couldn\u0027t find property protection file %(file)s: \""}],"source_content_type":"text/x-python","patch_set":1,"id":"e95e9046_4ceb7b46","line":133,"range":{"start_line":127,"start_character":0,"end_line":133,"end_character":4},"in_reply_to":"e97b5ac3_10a70ae8","updated":"2025-11-05 17:55:07.000000000","message":"Yes, but the user should not have any section that match \"^os_glance.*\". My goal here (and my patch does not actually achieve that, I realize that now) is that the os_glance.* section ends up at the top, as to not be shadowed by other sections (such as \"[.*]\")\n\nSo if the user inputs:\n\n[foo]\ncreate \u003d @\n[os_glance.*]\ncreate \u003d !\n\nWe should end up using:\n\n[os_glance.*]\ncreate \u003d @\nread \u003d @\nupdate \u003d @\ndelete \u003d @\n[foo]\ncreate \u003d @","commit_id":"1d6810df03c07c7ed0b8bb2c640aca9a329b0f08"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"486328574099aa3a3587605fc54096eba69e7ced","unresolved":true,"context_lines":[{"line_number":149,"context_line":"        })"},{"line_number":150,"context_line":"        CONFIG.read_string(txt_config.getvalue())"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _load_rules(self):"},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            conf_file \u003d CONF.find_file(CONF.property_protection_file)"},{"line_number":155,"context_line":"            CONFIG.read(conf_file)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f7f6e35c_b4a9a35f","line":152,"range":{"start_line":152,"start_character":4,"end_line":152,"end_character":26},"updated":"2025-11-24 13:26:33.000000000","message":"How often this function will be called? Is it only once when service is started?\nJust need to be sure","commit_id":"613cc42a390d06ed0d4107246cc79722bda107a0"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"ae9e928c6e40606e7f7987a34dcdd92d3ee2f2a1","unresolved":true,"context_lines":[{"line_number":149,"context_line":"        })"},{"line_number":150,"context_line":"        CONFIG.read_string(txt_config.getvalue())"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _load_rules(self):"},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            conf_file \u003d CONF.find_file(CONF.property_protection_file)"},{"line_number":155,"context_line":"            CONFIG.read(conf_file)"}],"source_content_type":"text/x-python","patch_set":3,"id":"8b918205_2674a649","line":152,"range":{"start_line":152,"start_character":4,"end_line":152,"end_character":26},"in_reply_to":"aa836684_7e3182a1","updated":"2025-11-24 13:58:16.000000000","message":"Yes, sounds good. Indeed it might be called multiple times... per image creation :/ For now let\u0027s just put a bandaid on the functionality so this bug is fixed, and let\u0027s improve the efficiency in a later patch.","commit_id":"613cc42a390d06ed0d4107246cc79722bda107a0"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"83e86049367d8a485d6379f9974770a73be0db74","unresolved":true,"context_lines":[{"line_number":149,"context_line":"        })"},{"line_number":150,"context_line":"        CONFIG.read_string(txt_config.getvalue())"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _load_rules(self):"},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            conf_file \u003d CONF.find_file(CONF.property_protection_file)"},{"line_number":155,"context_line":"            CONFIG.read(conf_file)"}],"source_content_type":"text/x-python","patch_set":3,"id":"aa836684_7e3182a1","line":152,"range":{"start_line":152,"start_character":4,"end_line":152,"end_character":26},"in_reply_to":"f60c5d29_e48e441b","updated":"2025-11-24 13:56:25.000000000","message":"I think this total functionality needs rework. I think we can merge this for now and then work on overall refactoring. This refactoring will also help us to migrate the complex functional tests from eventlet based test server.","commit_id":"613cc42a390d06ed0d4107246cc79722bda107a0"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"731e93184b6b6dbe70f7137e19c6e3a5f88d9312","unresolved":true,"context_lines":[{"line_number":149,"context_line":"        })"},{"line_number":150,"context_line":"        CONFIG.read_string(txt_config.getvalue())"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _load_rules(self):"},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            conf_file \u003d CONF.find_file(CONF.property_protection_file)"},{"line_number":155,"context_line":"            CONFIG.read(conf_file)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f60c5d29_e48e441b","line":152,"range":{"start_line":152,"start_character":4,"end_line":152,"end_character":26},"in_reply_to":"f7f6e35c_b4a9a35f","updated":"2025-11-24 13:41:45.000000000","message":"It\u0027s only called in glance/gateway.py (get_image_factory and get_repo). Looking around the code, I think it\u0027s called... twice then? I\u0027d have to check on devstack. It seems slightly inefficient but has not caused any bugs until now.","commit_id":"613cc42a390d06ed0d4107246cc79722bda107a0"}]}
