)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"ce1b810a18059d6c2244397c8c0537394b746700","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"46ed4d5b_67dc0c83","updated":"2024-01-26 15:28:08.000000000","message":"As with https://review.opendev.org/c/openstack/openstacksdk/+/896903, I don\u0027t think we actually need this: by adding `tags` to the resource, we\u0027ll get this for free with `image metadef namespace show`","commit_id":"a605ff7778b07ce4431257a80c34d9c26e343676"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"8a40fbe11c7152383fdaec0686ad0b4340c2ed27","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"33ba4036_ba67e63d","updated":"2024-02-21 09:38:09.000000000","message":"recheck","commit_id":"90d0008bd8eafb15dc514386ca4894b7b523c52d"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"a51ba1c3e3be47d56f7b8ddfbbdd2104147f89ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d0876256_989e986a","updated":"2024-03-04 06:34:33.000000000","message":"recheck","commit_id":"90d0008bd8eafb15dc514386ca4894b7b523c52d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5c18602904320b19b965db05711920a629bdbcae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b017fd17_883d484c","updated":"2025-08-15 13:47:24.000000000","message":"This should be done, but the SDK patch needs more work","commit_id":"25e450e628b4b5b2f9af5a7b9e36e698f6504db0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"cee1e9a3_be348f3b","updated":"2026-04-15 11:41:16.000000000","message":"A few last bits to address","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d5eed9d4_91bcd4db","updated":"2026-04-29 15:46:55.000000000","message":"Thanks for the review!","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"e2e64dc0b0b2a832f8edbc96979d09f416c564d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f46d74bf_1b0c85b8","updated":"2026-03-30 16:41:19.000000000","message":"What changed since the last time we worked on this:\n\n- I rebased the patch\n- I fixed the tests\n- I addressed some comments\n- I fixed typos in the release notes\n\nThe SDK patch has been merged, so this is the last patch we need for this feature.","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"26f4be3c4301362ce80dfa7c0bb38b14ad0394f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3f5152a7_8066ba38","updated":"2026-04-29 15:50:40.000000000","message":"I also updated glance.csv, as it seems that both \"glance md-tag-create\" and \"glance md-tag-update\" will now be \"image metadef namespace set --tag\".","commit_id":"fef4f38901d40266ba4e65173c9b10b95382ed63"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"add92050f9ea9e87f3b9e86a6e0af90b0f3002c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1cc9c209_d8771626","updated":"2026-04-29 16:05:39.000000000","message":"It only took 2+ years 😀 Thanks for the follow through here.","commit_id":"fef4f38901d40266ba4e65173c9b10b95382ed63"}],"openstackclient/image/v2/metadef_namespaces.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":289,"context_line":"            \"--set\","},{"line_number":290,"context_line":"            action\u003d\"store_true\","},{"line_number":291,"context_line":"            help\u003d_(\"To update existing tag\"),"},{"line_number":292,"context_line":"        )"},{"line_number":293,"context_line":"        return parser"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"2adbb79c_77872b48","line":292,"updated":"2024-05-08 15:30:32.000000000","message":"Are people going to use this? Why replace a tag when you can simply remove one and add another?\n\n```\nopenstack metadef namespace unset --tag foo\nopenstack metadef namespace set --tag bar\n```\n\nvs.\n\n```\nopenstack metadef namespace set --set foo --new-tag bar\n```\n\nI think the former is clearer, simpler, and aligns better with other commands (like `image set`, `server set`, ...). wdyt?","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":true,"context_lines":[{"line_number":289,"context_line":"            \"--set\","},{"line_number":290,"context_line":"            action\u003d\"store_true\","},{"line_number":291,"context_line":"            help\u003d_(\"To update existing tag\"),"},{"line_number":292,"context_line":"        )"},{"line_number":293,"context_line":"        return parser"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"52c17aab_e20016ac","line":292,"in_reply_to":"2adbb79c_77872b48","updated":"2024-07-04 14:32:22.000000000","message":"yes, I think that\u0027s more simpler,\nWill discuss it with the team","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"57f1dc99523e3e7bb71ae8350e5190a8e158c3aa","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            \"--set\","},{"line_number":290,"context_line":"            action\u003d\"store_true\","},{"line_number":291,"context_line":"            help\u003d_(\"To update existing tag\"),"},{"line_number":292,"context_line":"        )"},{"line_number":293,"context_line":"        return parser"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":4,"id":"71f69a3e_479d1181","line":292,"in_reply_to":"52c17aab_e20016ac","updated":"2026-03-30 16:36:12.000000000","message":"I think this was fixed since Patchset 4.","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    def take_action(self, parsed_args):"},{"line_number":296,"context_line":"        image_client \u003d self.app.client_manager.image"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":299,"context_line":"        filter_keys \u003d [\u0027namespace\u0027, \u0027display_name\u0027, \u0027description\u0027]"},{"line_number":300,"context_line":"        kwargs \u003d {}"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"6258c2b6_7c8efb00","line":298,"updated":"2024-05-08 15:30:32.000000000","message":"You don\u0027t need this if you don\u0027t support replacing tags...","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    def take_action(self, parsed_args):"},{"line_number":296,"context_line":"        image_client \u003d self.app.client_manager.image"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":299,"context_line":"        filter_keys \u003d [\u0027namespace\u0027, \u0027display_name\u0027, \u0027description\u0027]"},{"line_number":300,"context_line":"        kwargs \u003d {}"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"e5436e33_5bca6033","line":298,"in_reply_to":"48b47d5f_373268db","updated":"2026-04-15 11:41:16.000000000","message":"\u003e I kept the call to get_metadef_namespace, is it not standard in the OSC? Do we usually rather send the name as a string to the SDK methods rather than an object?\n\nNo, `find_*` calls are used since that allows you to retrieve a resource by name or by ID, allowing users to provide both to commands. However, metadef namespaces don\u0027t have separate names or IDs so there\u0027s no use in doing this and it\u0027s just an unnecessary API call. We can keep it but I don\u0027t believe we should.","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    def take_action(self, parsed_args):"},{"line_number":296,"context_line":"        image_client \u003d self.app.client_manager.image"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":299,"context_line":"        filter_keys \u003d [\u0027namespace\u0027, \u0027display_name\u0027, \u0027description\u0027]"},{"line_number":300,"context_line":"        kwargs \u003d {}"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"82b99a68_3430069c","line":298,"in_reply_to":"6258c2b6_7c8efb00","updated":"2024-07-04 14:32:22.000000000","message":"Will discuss with team regarding removing replacing tags part","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"57f1dc99523e3e7bb71ae8350e5190a8e158c3aa","unresolved":true,"context_lines":[{"line_number":295,"context_line":"    def take_action(self, parsed_args):"},{"line_number":296,"context_line":"        image_client \u003d self.app.client_manager.image"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":299,"context_line":"        filter_keys \u003d [\u0027namespace\u0027, \u0027display_name\u0027, \u0027description\u0027]"},{"line_number":300,"context_line":"        kwargs \u003d {}"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"48b47d5f_373268db","line":298,"in_reply_to":"82b99a68_3430069c","updated":"2026-03-30 16:36:12.000000000","message":"I will restore filter_keys in the next patchset as the change seems unrelated.\n\nI kept the call to get_metadef_namespace, is it not standard in the OSC? Do we usually rather send the name as a string to the SDK methods rather than an object?","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":295,"context_line":"    def take_action(self, parsed_args):"},{"line_number":296,"context_line":"        image_client \u003d self.app.client_manager.image"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":299,"context_line":"        filter_keys \u003d [\u0027namespace\u0027, \u0027display_name\u0027, \u0027description\u0027]"},{"line_number":300,"context_line":"        kwargs \u003d {}"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"e5f1a5a6_58faa7e3","line":298,"in_reply_to":"e5436e33_5bca6033","updated":"2026-04-29 15:46:55.000000000","message":"OK, so I removed the call to image_client.get_metadef_namespace() and used parsed_args.namespace directly. I updated test_namespace_set_tag accordingly.","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":351,"context_line":"        return zip(*sorted(info.items()))"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"class UnSetMetadefNamespace(command.Command):"},{"line_number":355,"context_line":"    _description \u003d _(\"Unset metadef namespace tags.\")"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"2bdab033_bc07224f","line":354,"range":{"start_line":354,"start_character":6,"end_line":354,"end_character":27},"updated":"2024-05-08 15:30:32.000000000","message":"`s/UnSet/Unset/`","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        return zip(*sorted(info.items()))"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"class UnSetMetadefNamespace(command.Command):"},{"line_number":355,"context_line":"    _description \u003d _(\"Unset metadef namespace tags.\")"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e06db16a_6c6da5f3","line":354,"range":{"start_line":354,"start_character":6,"end_line":354,"end_character":27},"in_reply_to":"2bdab033_bc07224f","updated":"2024-07-04 14:32:22.000000000","message":"Done","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":366,"context_line":"            help\u003d_(\"Metadef tag to unset\"),"},{"line_number":367,"context_line":"        )"},{"line_number":368,"context_line":"        parser.add_argument("},{"line_number":369,"context_line":"            \"--all\","},{"line_number":370,"context_line":"            action\u003d\"store_const\","},{"line_number":371,"context_line":"            const\u003d\"all\","},{"line_number":372,"context_line":"            help\u003d_(\"Unset all metadef tags\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"6502f02e_2f4c46e7","line":369,"range":{"start_line":369,"start_character":15,"end_line":369,"end_character":18},"updated":"2024-05-08 15:30:32.000000000","message":"Would `--all-tags` make more sense?","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            help\u003d_(\"Metadef tag to unset\"),"},{"line_number":367,"context_line":"        )"},{"line_number":368,"context_line":"        parser.add_argument("},{"line_number":369,"context_line":"            \"--all\","},{"line_number":370,"context_line":"            action\u003d\"store_const\","},{"line_number":371,"context_line":"            const\u003d\"all\","},{"line_number":372,"context_line":"            help\u003d_(\"Unset all metadef tags\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"465d743d_35dae2c8","line":369,"range":{"start_line":369,"start_character":15,"end_line":369,"end_character":18},"in_reply_to":"6502f02e_2f4c46e7","updated":"2024-07-04 14:32:22.000000000","message":"Acknowledged","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":367,"context_line":"        )"},{"line_number":368,"context_line":"        parser.add_argument("},{"line_number":369,"context_line":"            \"--all\","},{"line_number":370,"context_line":"            action\u003d\"store_const\","},{"line_number":371,"context_line":"            const\u003d\"all\","},{"line_number":372,"context_line":"            help\u003d_(\"Unset all metadef tags\"),"},{"line_number":373,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"8b0f8f8a_0efbcb62","line":370,"updated":"2024-05-08 15:30:32.000000000","message":"This should be `store_true` since it\u0027s a boolean (you\u0027re not using the const value)","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":false,"context_lines":[{"line_number":367,"context_line":"        )"},{"line_number":368,"context_line":"        parser.add_argument("},{"line_number":369,"context_line":"            \"--all\","},{"line_number":370,"context_line":"            action\u003d\"store_const\","},{"line_number":371,"context_line":"            const\u003d\"all\","},{"line_number":372,"context_line":"            help\u003d_(\"Unset all metadef tags\"),"},{"line_number":373,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"5bf76ca7_cb6134b9","line":370,"in_reply_to":"8b0f8f8a_0efbcb62","updated":"2024-07-04 14:32:22.000000000","message":"Acknowledged","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":378,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":379,"context_line":"        if not (parsed_args.tag or parsed_args.all):"},{"line_number":380,"context_line":"            msg \u003d _(\"Either --tag or --all is required to unset tag/tags.\")"},{"line_number":381,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":382,"context_line":"        if parsed_args.tag:"},{"line_number":383,"context_line":"            namespace.remove_tag(image_client, parsed_args.tag)"},{"line_number":384,"context_line":"        if parsed_args.all:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ab85c01_801f2a70","line":381,"updated":"2024-05-08 15:30:32.000000000","message":"You can achieve this by creating a mutually exclusive group and setting `required\u003dTrue`. See [here](https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_mutually_exclusive_group). You need the exclusive group anyway to prevent the user passing both options since that doesn\u0027t make sense","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":379,"context_line":"        if not (parsed_args.tag or parsed_args.all):"},{"line_number":380,"context_line":"            msg \u003d _(\"Either --tag or --all is required to unset tag/tags.\")"},{"line_number":381,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":382,"context_line":"        if parsed_args.tag:"},{"line_number":383,"context_line":"            namespace.remove_tag(image_client, parsed_args.tag)"},{"line_number":384,"context_line":"        if parsed_args.all:"}],"source_content_type":"text/x-python","patch_set":4,"id":"f90dc95c_8c1ea40e","line":381,"in_reply_to":"9ab85c01_801f2a70","updated":"2024-07-04 14:32:22.000000000","message":"Done","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        image_client.update_metadef_namespace(namespace, **kwargs)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        tagret \u003d 0"},{"line_number":309,"context_line":"        for tag in parsed_args.tags:"},{"line_number":310,"context_line":"            try:"},{"line_number":311,"context_line":"                image_client.add_tag_to_metadef_namespace(namespace, tag)"}],"source_content_type":"text/x-python","patch_set":7,"id":"6cda1b35_dfdabbe0","line":308,"updated":"2026-04-15 11:41:16.000000000","message":"```suggestion\n        target \u003d 0\n```\n\nor call it `errors`? Ditto below","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        image_client.update_metadef_namespace(namespace, **kwargs)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        tagret \u003d 0"},{"line_number":309,"context_line":"        for tag in parsed_args.tags:"},{"line_number":310,"context_line":"            try:"},{"line_number":311,"context_line":"                image_client.add_tag_to_metadef_namespace(namespace, tag)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ccca3cc4_dcea4fad","line":308,"in_reply_to":"6cda1b35_dfdabbe0","updated":"2026-04-29 15:46:55.000000000","message":"Yeah, I think Mridula meant \"tag return\", but let\u0027s rename it to \"errors\".","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":310,"context_line":"            try:"},{"line_number":311,"context_line":"                image_client.add_tag_to_metadef_namespace(namespace, tag)"},{"line_number":312,"context_line":"            except Exception:"},{"line_number":313,"context_line":"                LOG.error(_(\"tag set failed for tag %s\"), tag)"},{"line_number":314,"context_line":"                tagret +\u003d 1"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if tagret \u003e 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7cb5d7ba_665d30d7","line":313,"updated":"2026-04-15 11:41:16.000000000","message":"```suggestion\n                LOG.error(_(\"Tag set failed for tag %s\"), tag)\n```\n\nAlthough is it likely that some calls will pass and others will fail? Perhaps this error handling is overkill? I note we don\u0027t do it for e.g. `server set`. Maybe you can just simplify this to a dumb loop and call it a day?\n\n**EDIT:** though we would need error checking if glance errors out if trying to set a tag that already exists? I hope it doesn\u0027t (it should be idempotent) but we should check","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            try:"},{"line_number":311,"context_line":"                image_client.add_tag_to_metadef_namespace(namespace, tag)"},{"line_number":312,"context_line":"            except Exception:"},{"line_number":313,"context_line":"                LOG.error(_(\"tag set failed for tag %s\"), tag)"},{"line_number":314,"context_line":"                tagret +\u003d 1"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if tagret \u003e 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9da82d1b_a9d30f4e","line":313,"in_reply_to":"7cb5d7ba_665d30d7","updated":"2026-04-29 15:46:55.000000000","message":"I think we do raise a 409 in case of a duplicate tag: https://docs.openstack.org/api-ref/image/v2/metadefs-index.html#metadata-definition-tags .\n\nSo I guess we should keep the error handling here?","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"add92050f9ea9e87f3b9e86a6e0af90b0f3002c6","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            try:"},{"line_number":311,"context_line":"                image_client.add_tag_to_metadef_namespace(namespace, tag)"},{"line_number":312,"context_line":"            except Exception:"},{"line_number":313,"context_line":"                LOG.error(_(\"tag set failed for tag %s\"), tag)"},{"line_number":314,"context_line":"                tagret +\u003d 1"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        if tagret \u003e 0:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a9f9361_4b254350","line":313,"in_reply_to":"9da82d1b_a9d30f4e","updated":"2026-04-29 16:05:39.000000000","message":"Understood. Thanks for the context.","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"class UnsetMetadefNamespace(command.Command):"},{"line_number":348,"context_line":"    _description \u003d _(\"Unset metadef namespace tags.\")"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def get_parser(self, prog_name):"},{"line_number":351,"context_line":"        parser \u003d super().get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"b0d5d846_b687750a","line":348,"updated":"2026-04-15 11:41:16.000000000","message":"```suggestion\n    _description \u003d _(\"Unset metadef namespace tags\")\n```","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"class UnsetMetadefNamespace(command.Command):"},{"line_number":348,"context_line":"    _description \u003d _(\"Unset metadef namespace tags.\")"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def get_parser(self, prog_name):"},{"line_number":351,"context_line":"        parser \u003d super().get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"f45cb11e_c2d138ce","line":348,"in_reply_to":"b0d5d846_b687750a","updated":"2026-04-29 15:46:55.000000000","message":"Done","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":352,"context_line":"        parser.add_argument("},{"line_number":353,"context_line":"            \"namespace\","},{"line_number":354,"context_line":"            metavar\u003d\"\u003cnamespace\u003e\","},{"line_number":355,"context_line":"            help\u003d_(\"Namespace (name) for the namespace\"),"},{"line_number":356,"context_line":"        )"},{"line_number":357,"context_line":"        tag_group \u003d parser.add_mutually_exclusive_group(required\u003dTrue)"},{"line_number":358,"context_line":"        tag_group.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"e9c44351_6b4708ad","line":355,"updated":"2026-04-15 11:41:16.000000000","message":"```suggestion\n            help\u003d_(\"Metadef namespace to modify (name)\"),\n```","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        parser.add_argument("},{"line_number":353,"context_line":"            \"namespace\","},{"line_number":354,"context_line":"            metavar\u003d\"\u003cnamespace\u003e\","},{"line_number":355,"context_line":"            help\u003d_(\"Namespace (name) for the namespace\"),"},{"line_number":356,"context_line":"        )"},{"line_number":357,"context_line":"        tag_group \u003d parser.add_mutually_exclusive_group(required\u003dTrue)"},{"line_number":358,"context_line":"        tag_group.add_argument("}],"source_content_type":"text/x-python","patch_set":7,"id":"a86d7a00_1557b460","line":355,"in_reply_to":"e9c44351_6b4708ad","updated":"2026-04-29 15:46:55.000000000","message":"Done","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        tagret \u003d 0"},{"line_number":383,"context_line":"        if parsed_args.all_tags:"},{"line_number":384,"context_line":"            namespace \u003d image_client.remove_tags_from_metadef_namespace("},{"line_number":385,"context_line":"                namespace"}],"source_content_type":"text/x-python","patch_set":7,"id":"d65c1bca_c9bf6d95","line":382,"updated":"2026-04-15 11:41:16.000000000","message":"ditto","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        namespace \u003d image_client.get_metadef_namespace(parsed_args.namespace)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        tagret \u003d 0"},{"line_number":383,"context_line":"        if parsed_args.all_tags:"},{"line_number":384,"context_line":"            namespace \u003d image_client.remove_tags_from_metadef_namespace("},{"line_number":385,"context_line":"                namespace"}],"source_content_type":"text/x-python","patch_set":7,"id":"cf40f3c9_620b68bc","line":382,"in_reply_to":"d65c1bca_c9bf6d95","updated":"2026-04-29 15:46:55.000000000","message":"Done","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"70b203ae757c888d8d27ef276ad28fcbc9d13ea6","unresolved":true,"context_lines":[{"line_number":397,"context_line":"        if tagret \u003e 0:"},{"line_number":398,"context_line":"            msg \u003d _(\"Failed to unset %(tagret)s of %(tagtotal)s tags.\") % {"},{"line_number":399,"context_line":"                \u0027tagret\u0027: tagret,"},{"line_number":400,"context_line":"                \u0027tagtotal\u0027: len(parsed_args.tags),"},{"line_number":401,"context_line":"            }"},{"line_number":402,"context_line":"            raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"73e0b4b0_a40e7697","line":400,"updated":"2026-04-15 11:41:16.000000000","message":"nit: `tag` is redundant\n\n```suggestion\n                \u0027total\u0027: len(parsed_args.tags),\n```\n\nAssuming you bother keeping this error checking","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"4ff1f8a802a7cb873641279408ecd5d542636e1f","unresolved":false,"context_lines":[{"line_number":397,"context_line":"        if tagret \u003e 0:"},{"line_number":398,"context_line":"            msg \u003d _(\"Failed to unset %(tagret)s of %(tagtotal)s tags.\") % {"},{"line_number":399,"context_line":"                \u0027tagret\u0027: tagret,"},{"line_number":400,"context_line":"                \u0027tagtotal\u0027: len(parsed_args.tags),"},{"line_number":401,"context_line":"            }"},{"line_number":402,"context_line":"            raise exceptions.CommandError(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"e3c5d25d_b92e9fcf","line":400,"in_reply_to":"73e0b4b0_a40e7697","updated":"2026-04-29 15:46:55.000000000","message":"Done","commit_id":"fd6c9ecdc66f75a98bfaf908882b69fa9aa594a4"}],"setup.cfg":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":393,"context_line":"    image_import \u003d openstackclient.image.v2.image:ImportImage"},{"line_number":394,"context_line":"    image_stores_list \u003d openstackclient.image.v2.image:StoresInfo"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    image_metadef_namespace_create \u003d openstackclient.image.v2.metadef_namespaces:CreateMetadefNamespace"},{"line_number":398,"context_line":"    image_metadef_namespace_delete \u003d openstackclient.image.v2.metadef_namespaces:DeleteMetadefNamespace"},{"line_number":399,"context_line":"    image_metadef_namespace_list \u003d openstackclient.image.v2.metadef_namespaces:ListMetadefNamespace"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"ebd0a4e1_a2dc9cfc","line":396,"updated":"2024-05-08 15:30:32.000000000","message":"nit: drop extra newline","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    image_import \u003d openstackclient.image.v2.image:ImportImage"},{"line_number":394,"context_line":"    image_stores_list \u003d openstackclient.image.v2.image:StoresInfo"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    image_metadef_namespace_create \u003d openstackclient.image.v2.metadef_namespaces:CreateMetadefNamespace"},{"line_number":398,"context_line":"    image_metadef_namespace_delete \u003d openstackclient.image.v2.metadef_namespaces:DeleteMetadefNamespace"},{"line_number":399,"context_line":"    image_metadef_namespace_list \u003d openstackclient.image.v2.metadef_namespaces:ListMetadefNamespace"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"531fa82a_76e2c427","line":396,"in_reply_to":"ebd0a4e1_a2dc9cfc","updated":"2024-07-04 14:32:22.000000000","message":"Done","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"86df7b7f114af72e3945abd8379ff475f4e42715","unresolved":true,"context_lines":[{"line_number":400,"context_line":"    image_metadef_namespace_set \u003d openstackclient.image.v2.metadef_namespaces:SetMetadefNamespace"},{"line_number":401,"context_line":"    image_metadef_namespace_show \u003d openstackclient.image.v2.metadef_namespaces:ShowMetadefNamespace"},{"line_number":402,"context_line":"    image_metadef_namespace_unset \u003d openstackclient.image.v2.metadef_namespaces:UnSetMetadefNamespace"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    image_metadef_object_create \u003d openstackclient.image.v2.metadef_objects:CreateMetadefObjects"},{"line_number":406,"context_line":"    image_metadef_object_show \u003d openstackclient.image.v2.metadef_objects:ShowMetadefObjects"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"9c2f2804_bb8206c3","line":403,"updated":"2024-05-08 15:30:32.000000000","message":"nit: drop extra newline","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"},{"author":{"_account_id":33765,"name":"Mridula Joshi","email":"mrjoshi@redhat.com","username":"mrjoshi"},"change_message_id":"fabad7ce76f157a489812483c420a8f6e1de6652","unresolved":false,"context_lines":[{"line_number":400,"context_line":"    image_metadef_namespace_set \u003d openstackclient.image.v2.metadef_namespaces:SetMetadefNamespace"},{"line_number":401,"context_line":"    image_metadef_namespace_show \u003d openstackclient.image.v2.metadef_namespaces:ShowMetadefNamespace"},{"line_number":402,"context_line":"    image_metadef_namespace_unset \u003d openstackclient.image.v2.metadef_namespaces:UnSetMetadefNamespace"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    image_metadef_object_create \u003d openstackclient.image.v2.metadef_objects:CreateMetadefObjects"},{"line_number":406,"context_line":"    image_metadef_object_show \u003d openstackclient.image.v2.metadef_objects:ShowMetadefObjects"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"09852f11_c362d2a9","line":403,"in_reply_to":"9c2f2804_bb8206c3","updated":"2024-07-04 14:32:22.000000000","message":"Done","commit_id":"11b8cbfc468d5199178d65b48b871b9f92f979b8"}]}
