)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d4d4a1fb6c5a3038ba4d79d51cdd4711dab3ed2b","unresolved":true,"context_lines":[{"line_number":9,"context_line":"Compared to the response schema which was already defined, the create"},{"line_number":10,"context_line":"and update request schema for image members were missing. Adding these"},{"line_number":11,"context_line":"request schemas clarifies the expected payload structure and enables the"},{"line_number":12,"context_line":"generation of a more accurate OpenAPI 3 specification."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Id6e905829ad7d94989d3efb5f1aafe3907092566"},{"line_number":15,"context_line":"Signed-off-by: Alexandre Engloner \u003calexandre.engloner@ovhcloud.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"a9262348_802ad2d2","line":12,"range":{"start_line":12,"start_character":20,"end_line":12,"end_character":21},"updated":"2026-07-10 15:19:52.000000000","message":"In ResponseSerializer, self.schema is actually used (see self._format_image_member).\n\nCan you show me the generated OpenAPI 3 spec before and after this patch?","commit_id":"4170e05d3e98e362d63cdfe1dac8a768a309d5e0"},{"author":{"_account_id":39279,"name":"Alexandre Engloner","display_name":"AEngloner","email":"alexandre.engloner@gmail.com","username":"aengloner"},"change_message_id":"c50b5a2c1e8e01f38ffbccfefa1adc9b3cf1cfba","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Compared to the response schema which was already defined, the create"},{"line_number":10,"context_line":"and update request schema for image members were missing. Adding these"},{"line_number":11,"context_line":"request schemas clarifies the expected payload structure and enables the"},{"line_number":12,"context_line":"generation of a more accurate OpenAPI 3 specification."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Id6e905829ad7d94989d3efb5f1aafe3907092566"},{"line_number":15,"context_line":"Signed-off-by: Alexandre Engloner \u003calexandre.engloner@ovhcloud.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ad32d637_c79a0ca5","line":12,"range":{"start_line":12,"start_character":20,"end_line":12,"end_character":21},"in_reply_to":"36ff1828_7445f693","updated":"2026-07-13 14:43:03.000000000","message":"Actually, I\u0027ve added a property of minLength: 1 to the ImagesMembersCreateRequest to match with with the existing unit test test_create_member_empty.\n\nThe new spec for this schema would now be:\n\n    ImagesMembersCreateRequest:\n      additionalProperties: false\n      properties:\n        member:\n          description: The ID of the image member (project/tenant ID)\n          minLength: 1\n          type: string\n      required:\n      - member\n      type: object","commit_id":"4170e05d3e98e362d63cdfe1dac8a768a309d5e0"},{"author":{"_account_id":39279,"name":"Alexandre Engloner","display_name":"AEngloner","email":"alexandre.engloner@gmail.com","username":"aengloner"},"change_message_id":"03858ff606f95dc714e97f7fadf29c707604fb94","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Compared to the response schema which was already defined, the create"},{"line_number":10,"context_line":"and update request schema for image members were missing. Adding these"},{"line_number":11,"context_line":"request schemas clarifies the expected payload structure and enables the"},{"line_number":12,"context_line":"generation of a more accurate OpenAPI 3 specification."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Id6e905829ad7d94989d3efb5f1aafe3907092566"},{"line_number":15,"context_line":"Signed-off-by: Alexandre Engloner \u003calexandre.engloner@ovhcloud.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"36ff1828_7445f693","line":12,"range":{"start_line":12,"start_character":20,"end_line":12,"end_character":21},"in_reply_to":"a9262348_802ad2d2","updated":"2026-07-13 14:37:34.000000000","message":"Before:\n\n    ImagesMembersCreateRequest:\n      description: Request of the images/image_id/members:post operation\n      type: object\n      \n    ImagesMemberUpdateRequest:\n      description: Request of the images/image_id/members/member_id:put operation\n      type: object\n\nAfter:\n\n    ImagesMemberUpdateRequest:\n      additionalProperties: false\n      properties:\n        status:\n          description: The status of this image member\n          enum:\n          - accepted\n          - pending\n          - rejected\n          type: string\n      required:\n      - status\n      type: object\n\n    ImagesMembersCreateRequest:\n      additionalProperties: false\n      properties:\n        member:\n          description: The ID of the image member (project/tenant ID)\n          type: string\n      required:\n      - member","commit_id":"4170e05d3e98e362d63cdfe1dac8a768a309d5e0"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"b95b7622bf3caf6610921b40d6f84d82d639a327","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"004eafb4_9116940c","updated":"2026-07-09 15:13:48.000000000","message":"Thanks for your contribution!\n\nIs this some kind of bugfix? If so, I\u0027m going to need a Launchpad bug ID in the commit message.\n\nAlso, I\u0027m definitely going to need a comprehensive commit message, explaining what the issue is and why the patch fixes it.","commit_id":"0d3bc69b372941f4e9fdd8f15ec238b240616398"},{"author":{"_account_id":39279,"name":"Alexandre Engloner","display_name":"AEngloner","email":"alexandre.engloner@gmail.com","username":"aengloner"},"change_message_id":"02a7e440fe6e2ce231f05f67cdb8fc0b195313a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f5e32d1_cb23a8d0","updated":"2026-07-08 14:53:12.000000000","message":"recheck glance timeout on mirror","commit_id":"0d3bc69b372941f4e9fdd8f15ec238b240616398"},{"author":{"_account_id":39279,"name":"Alexandre Engloner","display_name":"AEngloner","email":"alexandre.engloner@gmail.com","username":"aengloner"},"change_message_id":"0a49922b8d86bd41da53f7885d32360e7d634bc5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9ca2d269_17877b0a","in_reply_to":"004eafb4_9116940c","updated":"2026-07-09 18:18:43.000000000","message":"Thank you for taking the time to look at this!\n\nI would not qualify this as a bugfix since it doesn\u0027t affect Glance behaviour.\n\nThis primarily serves to polish the inline documentation within the code.\nI simply noticed that, compared to the response body, the request body for the POST and PUT method happened to have no schema.\n\nAs mentioned in my new commit message, this will improve the documentation within the code as well as the generation of OpenAPI3 specs for this component.","commit_id":"0d3bc69b372941f4e9fdd8f15ec238b240616398"},{"author":{"_account_id":39279,"name":"Alexandre Engloner","display_name":"AEngloner","email":"alexandre.engloner@gmail.com","username":"aengloner"},"change_message_id":"5b572e5ec3e3cf86284cd7480b53772b01592924","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5b5260eb_3e719cec","updated":"2026-07-13 19:34:51.000000000","message":"Hello @cyril@redhat.com\n\nFollowing the latest failed build run, I\u0027ve fallen down a rabbit hole regarding this issue.\n\nThere was only [one test failure](https://zuul.opendev.org/t/openstack/build/6b847333609b4cc685e94d5ae5d27a99) in the build which was caused by an OpenstackSDK conflict with my newest schema. Even though the [doc](https://docs.openstack.org/api-ref/image/v2/index.html#update-image-member) specifies that only the status is expected in the update request body, OpenstackSDK sends both the status **and** the member in the request body even though the member_id is already in the path.\n\nThinking the issue was in the code of OpenstackSDK, I\u0027ve looked at how OpenstackSDK handles image members in the code itself. Inside, I\u0027ve found a mention of this [bug](https://bugs.launchpad.net/glance/+bug/1526991) which was abandoned. While the primary concern of this one was regarding an issue of member vs member_id, it overlapped with some elements of this PR.\n\nOne of the comments on the bug also referenced this [second bug](https://bugs.launchpad.net/glance/+bug/1526991).\nThis one feels heavily related with what I\u0027m trying to achieve here, but, sadly, it was abandoned as well.\n\nI\u0027ve read a bit on both bugs and I had no idea this simple schema addition would end up being the subject of a 10 year long debate.\nIf it\u0027s not too late, [the suggested schema](https://bugs.launchpad.net/glance/+bug/1585917/comments/3) would suit me fine.\n\nHowever, I\u0027m not too sure how to move forward with this newfound knowledge.\n\nIf you have any idea, please advise.","commit_id":"337e6997cbbe0ef664640ccda169dc1e5dfb484c"}],"glance/api/v2/image_members.py":[{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"d4d4a1fb6c5a3038ba4d79d51cdd4711dab3ed2b","unresolved":true,"context_lines":[{"line_number":349,"context_line":"    def __init__(self, create_schema\u003dNone, update_schema\u003dNone):"},{"line_number":350,"context_line":"        super(RequestDeserializer, self).__init__()"},{"line_number":351,"context_line":"        self.create_schema \u003d create_schema or get_create_request_schema()"},{"line_number":352,"context_line":"        self.update_schema \u003d update_schema or get_update_request_schema()"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _get_request_body(self, request):"},{"line_number":355,"context_line":"        output \u003d super(RequestDeserializer, self).default(request)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3b44ecd0_44745641","line":352,"range":{"start_line":352,"start_character":8,"end_line":352,"end_character":26},"updated":"2026-07-10 15:19:52.000000000","message":"Where are these used?","commit_id":"4170e05d3e98e362d63cdfe1dac8a768a309d5e0"},{"author":{"_account_id":39279,"name":"Alexandre Engloner","display_name":"AEngloner","email":"alexandre.engloner@gmail.com","username":"aengloner"},"change_message_id":"03858ff606f95dc714e97f7fadf29c707604fb94","unresolved":false,"context_lines":[{"line_number":349,"context_line":"    def __init__(self, create_schema\u003dNone, update_schema\u003dNone):"},{"line_number":350,"context_line":"        super(RequestDeserializer, self).__init__()"},{"line_number":351,"context_line":"        self.create_schema \u003d create_schema or get_create_request_schema()"},{"line_number":352,"context_line":"        self.update_schema \u003d update_schema or get_update_request_schema()"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _get_request_body(self, request):"},{"line_number":355,"context_line":"        output \u003d super(RequestDeserializer, self).default(request)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a20f4fb0_49ea236b","line":352,"range":{"start_line":352,"start_character":8,"end_line":352,"end_character":26},"in_reply_to":"3b44ecd0_44745641","updated":"2026-07-13 14:37:34.000000000","message":"You\u0027re right,I\u0027ve had forgotten to make good use of these schemas.\nIn my last changes, I\u0027m using Glance\u0027s schema validator which take these as input.\nUsing this method, also aligns with what Glance is already doing with other components like images.py and tasks.py instead of manually validating each property inside an object body.","commit_id":"4170e05d3e98e362d63cdfe1dac8a768a309d5e0"}]}
