)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"bd341dd91111b5d698dfa0e710bd7b9248a72dd9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"cfa85649_8f03baa1","updated":"2026-02-26 21:41:55.000000000","message":"Hey, Rose, could you please rebase this change?","commit_id":"4419a85f8d132f52c8afb690220378654bc14f4d"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d5380e60_b08c4132","updated":"2026-03-06 21:55:32.000000000","message":"Thanks for working on this change and for the patience with review, Rose. Please take a look at the comments inline!","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0121bf1c8c1c1f196f6f3c3476ee58ca79b811f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"f6fb68cc_134974d0","updated":"2026-03-12 05:16:18.000000000","message":"Thanks for the update Rose; please see some more comments inline","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"bdd0f481bc277f47e86bada6121c2918683a4c29","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"757a600d_782f6c42","updated":"2026-03-12 18:03:06.000000000","message":"Thank you for the hard work on this change, Rose!\n\nThe change looks good, we\u0027re missing a few things though:\n\n1. We currently don\u0027t have a way in the UI to lock the share and/or the access rule at their creation time\n2. When deleting a resource lock, we\u0027re getting a message like: `You have selected: . Please confirm your selection. This action cannot be undone.` - There should be the ID of the resource locks in that message. Apparently, this is happening because of two missing methods in the tables: `get_object_id` or `get_object_display`\n\nCould you please file a bug so that we can keep track of it?","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"97580dcabdc042e219a64248c7154359e7041d92","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6a7db783_4f7cc027","updated":"2026-03-12 18:26:50.000000000","message":"Thank you very much for your hard work here, @rosewairimu1@gmail.com. This looks good for the most part. We\u0027ve a few issues.. i\u0027ve noted the blocker in my view. I\u0027ll follow up and fix that. We may have a few more fixes that Carlos discussed with me while testing this..","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"22a7ec56547f6d1f2b6d325e9ee4738db8304829","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8a8b68ef_e5f31aef","in_reply_to":"268e093e_2cf54a1b","updated":"2026-03-13 06:10:58.000000000","message":"Acknowledged","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"24445f9c1f65af85c8cb9e891967c7b263c2e68d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"dbba9a7a_7a47c693","in_reply_to":"65494ada_5fc33578","updated":"2026-03-12 18:46:56.000000000","message":"Second issue should be addressed now.. please check.","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"97621d0f216a8a14c1cacc8ae74b7c64d6149038","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"65494ada_5fc33578","in_reply_to":"757a600d_782f6c42","updated":"2026-03-12 18:30:20.000000000","message":"I missed this review. can get the second point addressed here... @viroel@gmail.com has agreed to review this further. Will keep this open so we can file a bug for the first issue and follow up","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"ba21a7edacd38b657d6543c19d5da696a07a4621","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"268e093e_2cf54a1b","in_reply_to":"8e9c1837_71959002","updated":"2026-03-12 19:43:18.000000000","message":"Awesome, thanks for volunteering, Rose! We\u0027re planning on shipping RC1 today, so the next change will be a part of the Hibiscus release, but definitely an awesome enhancement to have. Thank you for your hard work and commitment. We\u0027ll babysit the changes in the CI now, so please rest easy and be proud of the work you did in manila-ui in this cycle!","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"3171f6177dcc351c67d92a11db7a07e21aa90011","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8e9c1837_71959002","in_reply_to":"8ee00bc7_fb11bcbc","updated":"2026-03-12 19:22:41.000000000","message":"@gouthampravi@gmail.com @ces.eduardo98@gmail.com\n\nPlease assign the bug to me as I had already started working on it. Will work on sending the patch as soon as possible.","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"3dff7175a4360f2b0899155c0b13d4d4c747b5c5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8ee00bc7_fb11bcbc","in_reply_to":"a95fdc8a_e9f5df81","updated":"2026-03-12 19:12:32.000000000","message":"Awesome, thanks for the bug report!","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e219405bbce9f3c20cb98dfcee770ea000f132aa","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a95fdc8a_e9f5df81","in_reply_to":"dbba9a7a_7a47c693","updated":"2026-03-12 19:11:49.000000000","message":"The creation issue: https://bugs.launchpad.net/manila-ui/+bug/2144047","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"c018563277ed0ef0baf82d53340e976019a0a13b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"f708c36d_5ddd0cf5","updated":"2026-03-12 19:32:39.000000000","message":"Change LGTM, I had a chance to test the view, edit and delete operations in a environment that Carlos shared. I was able to properly view and edit with both member and admin users.\nLooking forward to see the create resource locks added to in the future.\nNice work Rose Kimondo!","commit_id":"bb38630aa64e7795215d412b8c02cd4b344dedda"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"9d39659db86a939bfc65e92756e5529478f80a08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"db7a404c_1b9206f8","updated":"2026-03-12 18:57:04.000000000","message":"LGTM, thanks for the fixes, Goutham! And thanks Rose for working on this feature","commit_id":"bb38630aa64e7795215d412b8c02cd4b344dedda"}],"manila_ui/api/manila.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":true,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def share_list_detailed(request, search_opts\u003dNone):"},{"line_number":96,"context_line":"    search_opts \u003d search_opts or {}"},{"line_number":97,"context_line":"    return manilaclient(request).shares.list(search_opts\u003dsearch_opts)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def share_get(request, share_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"41b91e9f_5fab0c37","line":97,"range":{"start_line":96,"start_character":4,"end_line":97,"end_character":69},"updated":"2026-03-06 21:55:32.000000000","message":"this is identical do the method above - shouldn\u0027t we just reuse the one above and set the correct search options then?","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def share_list_detailed(request, search_opts\u003dNone):"},{"line_number":96,"context_line":"    search_opts \u003d search_opts or {}"},{"line_number":97,"context_line":"    return manilaclient(request).shares.list(search_opts\u003dsearch_opts)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"def share_get(request, share_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"13518f09_3e48222f","line":97,"range":{"start_line":96,"start_character":4,"end_line":97,"end_character":69},"in_reply_to":"41b91e9f_5fab0c37","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/dashboards/admin/resource_locks/forms.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"d9aedfae_e0c21a4b","line":1,"updated":"2026-03-11 05:07:37.000000000","message":"The admin `UpdateLockView` imports `project_forms.UpdateLockForm` directly:\n\n    from ...project.resource_locks import forms as project_forms\n\nSo this isn\u0027t needed, remove?","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0121bf1c8c1c1f196f6f3c3476ee58ca79b811f2","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"fbde8351_f38459ca","line":1,"in_reply_to":"312e404b_fd9ac820","updated":"2026-03-12 05:16:18.000000000","message":"This is still present; did you mean to remove the file?","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"312e404b_fd9ac820","line":1,"in_reply_to":"d9aedfae_e0c21a4b","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"45c2c501_253c915c","line":1,"in_reply_to":"fbde8351_f38459ca","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/dashboards/admin/resource_locks/panel.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"97580dcabdc042e219a64248c7154359e7041d92","unresolved":true,"context_lines":[{"line_number":19,"context_line":"    name \u003d _(\"Resource Locks\")"},{"line_number":20,"context_line":"    slug \u003d \u0027resource_locks\u0027"},{"line_number":21,"context_line":"    permissions \u003d ("},{"line_number":22,"context_line":"        \u0027openstack.services.share\u0027,"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"4937fe13_9791bf9f","line":22,"range":{"start_line":22,"start_character":8,"end_line":22,"end_character":34},"updated":"2026-03-12 18:26:50.000000000","message":"unfortunately this would break if \"share\" isn\u0027t on the cloud. Currently in the Gazpacho release, we stopped setting that up by default in devstack. I can fix this up in a follow up change","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"24445f9c1f65af85c8cb9e891967c7b263c2e68d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    name \u003d _(\"Resource Locks\")"},{"line_number":20,"context_line":"    slug \u003d \u0027resource_locks\u0027"},{"line_number":21,"context_line":"    permissions \u003d ("},{"line_number":22,"context_line":"        \u0027openstack.services.share\u0027,"},{"line_number":23,"context_line":"    )"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"114b07fb_fdd0161d","line":22,"range":{"start_line":22,"start_character":8,"end_line":22,"end_character":34},"in_reply_to":"4937fe13_9791bf9f","updated":"2026-03-12 18:46:56.000000000","message":"Done","commit_id":"d827768f775d1dca45166d9864ebf2b20a23554b"}],"manila_ui/dashboards/admin/resource_locks/tables.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class SharesLockTable(project_tables.SharesLockTable):"},{"line_number":34,"context_line":"    resource_name \u003d project_tables.tables.Column("},{"line_number":35,"context_line":"        \"resource_name\","},{"line_number":36,"context_line":"        verbose_name\u003dproject_tables._(\"Share Name\"),"},{"line_number":37,"context_line":"        link\u003dget_admin_share_link)"}],"source_content_type":"text/x-python","patch_set":4,"id":"53d5ff77_7edcc5ad","line":34,"updated":"2026-03-11 05:07:37.000000000","message":"These lines reach through `project_tables` module internals:\n\n    project_tables.tables.Column(...)\n    project_tables._(\"Share Name\")\n\nThis is fragile — you\u0027re depending on what `project_tables`\nhappens to import at module scope. Import directly instead:\n\n```\nfrom django.utils.translation import gettext_lazy as _\nfrom horizon import tables\n\nresource_name \u003d tables.Column(\n    \"resource_name\",\n    verbose_name\u003d_(\"Share Name\"),\n    link\u003dget_admin_share_link)\n```","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class SharesLockTable(project_tables.SharesLockTable):"},{"line_number":34,"context_line":"    resource_name \u003d project_tables.tables.Column("},{"line_number":35,"context_line":"        \"resource_name\","},{"line_number":36,"context_line":"        verbose_name\u003dproject_tables._(\"Share Name\"),"},{"line_number":37,"context_line":"        link\u003dget_admin_share_link)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7bab61df_cd9f6d1a","line":34,"in_reply_to":"53d5ff77_7edcc5ad","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0121bf1c8c1c1f196f6f3c3476ee58ca79b811f2","unresolved":true,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def get_admin_rule_link(lock):"},{"line_number":29,"context_line":"    parent_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":30,"context_line":"    if parent_id and len(str(parent_id)) \u003e 10:"},{"line_number":31,"context_line":"        return reverse(\"horizon:admin:shares:detail\", args\u003d(parent_id,))"},{"line_number":32,"context_line":"    return None"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"59f75f9a_ac3dd9c7","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":46},"updated":"2026-03-12 05:16:18.000000000","message":"you replaced this in the project table with a proper UUID check, do the same here?","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def get_admin_rule_link(lock):"},{"line_number":29,"context_line":"    parent_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":30,"context_line":"    if parent_id and len(str(parent_id)) \u003e 10:"},{"line_number":31,"context_line":"        return reverse(\"horizon:admin:shares:detail\", args\u003d(parent_id,))"},{"line_number":32,"context_line":"    return None"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ce129f50_b2b11eac","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":46},"in_reply_to":"59f75f9a_ac3dd9c7","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0121bf1c8c1c1f196f6f3c3476ee58ca79b811f2","unresolved":true,"context_lines":[{"line_number":35,"context_line":"class SharesLockTable(project_tables.SharesLockTable):"},{"line_number":36,"context_line":"    resource_name \u003d tables.Column("},{"line_number":37,"context_line":"        \"resource_name\","},{"line_number":38,"context_line":"        verbose_name\u003dproject_tables._(\"Share Name\"),"},{"line_number":39,"context_line":"        link\u003dget_admin_share_link)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    class Meta(project_tables.SharesLockTable.Meta):"}],"source_content_type":"text/x-python","patch_set":6,"id":"022ea69c_72901b04","line":38,"range":{"start_line":38,"start_character":21,"end_line":38,"end_character":51},"updated":"2026-03-12 05:16:18.000000000","message":"Add the import line to get the translation marker directly:\n\n```\nfrom django.utils.translation import gettext_lazy as _\n```\n\n\nso this can just be `_(\"Share Name\")`","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[{"line_number":35,"context_line":"class SharesLockTable(project_tables.SharesLockTable):"},{"line_number":36,"context_line":"    resource_name \u003d tables.Column("},{"line_number":37,"context_line":"        \"resource_name\","},{"line_number":38,"context_line":"        verbose_name\u003dproject_tables._(\"Share Name\"),"},{"line_number":39,"context_line":"        link\u003dget_admin_share_link)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    class Meta(project_tables.SharesLockTable.Meta):"}],"source_content_type":"text/x-python","patch_set":6,"id":"55069b3b_e29b9b2d","line":38,"range":{"start_line":38,"start_character":21,"end_line":38,"end_character":51},"in_reply_to":"022ea69c_72901b04","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0121bf1c8c1c1f196f6f3c3476ee58ca79b811f2","unresolved":true,"context_lines":[{"line_number":45,"context_line":"class AccessRulesLockTable(project_tables.AccessRulesLockTable):"},{"line_number":46,"context_line":"    parent_share \u003d tables.Column("},{"line_number":47,"context_line":"        \"parent_resource_name\","},{"line_number":48,"context_line":"        verbose_name\u003dproject_tables._(\"Parent Share\"),"},{"line_number":49,"context_line":"        link\u003dget_admin_rule_link)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    class Meta(project_tables.AccessRulesLockTable.Meta):"}],"source_content_type":"text/x-python","patch_set":6,"id":"20941382_5b5df845","line":48,"range":{"start_line":48,"start_character":21,"end_line":48,"end_character":53},"updated":"2026-03-12 05:16:18.000000000","message":"and this can be:\n\n\n\n```suggestion\n        verbose_name\u003d_(\"Parent Share\"),\n```","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[{"line_number":45,"context_line":"class AccessRulesLockTable(project_tables.AccessRulesLockTable):"},{"line_number":46,"context_line":"    parent_share \u003d tables.Column("},{"line_number":47,"context_line":"        \"parent_resource_name\","},{"line_number":48,"context_line":"        verbose_name\u003dproject_tables._(\"Parent Share\"),"},{"line_number":49,"context_line":"        link\u003dget_admin_rule_link)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    class Meta(project_tables.AccessRulesLockTable.Meta):"}],"source_content_type":"text/x-python","patch_set":6,"id":"206363c4_eefa1bed","line":48,"range":{"start_line":48,"start_character":21,"end_line":48,"end_character":53},"in_reply_to":"20941382_5b5df845","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"}],"manila_ui/dashboards/admin/resource_locks/views.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":true,"context_lines":[{"line_number":20,"context_line":"from manila_ui.dashboards.project.resource_locks import views as project_views"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class IndexView(project_views.IndexView):"},{"line_number":24,"context_line":"    pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class UpdateLockView(project_views.UpdateLockView):"}],"source_content_type":"text/x-python","patch_set":4,"id":"d03f3606_1551f180","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":8},"updated":"2026-03-06 21:55:32.000000000","message":"shouldn\u0027t we override it with the group class and the template name on this class?","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from manila_ui.dashboards.project.resource_locks import views as project_views"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class IndexView(project_views.IndexView):"},{"line_number":24,"context_line":"    pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class UpdateLockView(project_views.UpdateLockView):"}],"source_content_type":"text/x-python","patch_set":4,"id":"f0187866_fa730f3b","line":24,"range":{"start_line":23,"start_character":0,"end_line":24,"end_character":8},"in_reply_to":"d03f3606_1551f180","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/dashboards/project/resource_locks/tables.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class DeleteLock(tables.DeleteAction):"},{"line_number":21,"context_line":"    policy_rules \u003d ((\"resource_lock\", \"resource_lock:delete\"),)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def action_present(count):"}],"source_content_type":"text/x-python","patch_set":4,"id":"434d9d2e_0e84cb71","line":21,"updated":"2026-03-11 05:07:37.000000000","message":"The policies are always registered as \"share\" here on horizon. Please change these actions to:\n\n    policy_rules \u003d ((\"share\", \"resource_lock:delete\"),)\n    policy_rules \u003d ((\"share\", \"resource_lock:update\"),)\n\nWe discussed updating `manila_ui/conf/manila_policy.yaml` (and\n`conf/default_policies/manila.yaml`), matching what Manila\u0027s\nserver-side policy defines... Would you like to tackle that too, perhaps in another commit?","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class DeleteLock(tables.DeleteAction):"},{"line_number":21,"context_line":"    policy_rules \u003d ((\"resource_lock\", \"resource_lock:delete\"),)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def action_present(count):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ae2406c5_ef4378a3","line":21,"in_reply_to":"434d9d2e_0e84cb71","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":21,"context_line":"    policy_rules \u003d ((\"resource_lock\", \"resource_lock:delete\"),)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def action_present(count):"},{"line_number":25,"context_line":"        return _(\"Delete Lock\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"69fd5517_a32ea0c8","line":24,"updated":"2026-03-11 05:07:37.000000000","message":"these should use `ngettext_lazy` to handle singular/plural based on the selection:\n\n```\nfrom django.utils.translation import ngettext_lazy\n\n@staticmethod\ndef action_present(count):\n    return ngettext_lazy(\n        \"Delete Lock\", \"Delete Locks\", count)\n\n@staticmethod\ndef action_past(count):\n    return ngettext_lazy(\n        \"Deleted Lock\", \"Deleted Locks\", count)\n```","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    policy_rules \u003d ((\"resource_lock\", \"resource_lock:delete\"),)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def action_present(count):"},{"line_number":25,"context_line":"        return _(\"Delete Lock\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"74c4e799_d80c85b7","line":24,"in_reply_to":"69fd5517_a32ea0c8","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":true,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def get_rule_link(lock):"},{"line_number":49,"context_line":"    parent_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":50,"context_line":"    if parent_id and len(str(parent_id)) \u003e 10:"},{"line_number":51,"context_line":"        return reverse(\"horizon:project:shares:detail\", args\u003d(parent_id,))"},{"line_number":52,"context_line":"    return None"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ResourceLockFilterAction(tables.FilterAction):"}],"source_content_type":"text/x-python","patch_set":4,"id":"dc841aa0_e7905437","line":52,"range":{"start_line":50,"start_character":4,"end_line":52,"end_character":15},"updated":"2026-03-06 21:55:32.000000000","message":"Let\u0027s try this with the builtin python uuid library. Please import it at the beginning of this file and change the validation to:\n\n\n```suggestion\n    try:\n        uuid.UUID(uuid_to_test)\n        return reverse(\"horizon:project:shares:detail\", args\u003d(parent_id,))\n    except ValueError:\n        return None\n```","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def get_rule_link(lock):"},{"line_number":49,"context_line":"    parent_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":50,"context_line":"    if parent_id and len(str(parent_id)) \u003e 10:"},{"line_number":51,"context_line":"        return reverse(\"horizon:project:shares:detail\", args\u003d(parent_id,))"},{"line_number":52,"context_line":"    return None"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ResourceLockFilterAction(tables.FilterAction):"}],"source_content_type":"text/x-python","patch_set":4,"id":"b7dc0441_e0aa1084","line":52,"range":{"start_line":50,"start_character":4,"end_line":52,"end_character":15},"in_reply_to":"dc841aa0_e7905437","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/dashboards/project/resource_locks/tabs.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":35,"context_line":"                    request)"},{"line_number":36,"context_line":"                search_opts \u003d {\u0027all_projects\u0027: can_see_all}"},{"line_number":37,"context_line":"                share_opts \u003d {}"},{"line_number":38,"context_line":"            all_locks \u003d manila.resource_lock_list("},{"line_number":39,"context_line":"                request, search_opts\u003dsearch_opts)"},{"line_number":40,"context_line":"            filtered_locks \u003d []"},{"line_number":41,"context_line":"            for lock in all_locks:"}],"source_content_type":"text/x-python","patch_set":4,"id":"2e5b4509_b2fac265","line":38,"updated":"2026-03-11 05:07:37.000000000","message":"Each tab calls `_get_common_data()` independently, so\n`resource_lock_list()` is called twice per page load (once for\nthe shares tab, once for the access rules tab). The tests even\nconfirm this: `assertEqual(api_manila.resource_lock_list.call_count, 2)`.\n\nSince both tabs need the same full list, consider fetching once\nand splitting. For example, add a `@memoized.memoized_method`\non the view that returns the full lock list, and pass it to the\ntabs via context. Or fetch once in a shared method and cache the\nresult on the tab group.\n\n(Carlos already flagged the N+1 inside the access_rule loop —\nthis is the separate issue of the *outer* call being duplicated.)","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                    request)"},{"line_number":36,"context_line":"                search_opts \u003d {\u0027all_projects\u0027: can_see_all}"},{"line_number":37,"context_line":"                share_opts \u003d {}"},{"line_number":38,"context_line":"            all_locks \u003d manila.resource_lock_list("},{"line_number":39,"context_line":"                request, search_opts\u003dsearch_opts)"},{"line_number":40,"context_line":"            filtered_locks \u003d []"},{"line_number":41,"context_line":"            for lock in all_locks:"}],"source_content_type":"text/x-python","patch_set":4,"id":"b3a32bad_7f876a2c","line":38,"in_reply_to":"2e5b4509_b2fac265","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":true,"context_lines":[{"line_number":69,"context_line":"                    p_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":70,"context_line":"                    if r_id not in access_val_map:"},{"line_number":71,"context_line":"                        try:"},{"line_number":72,"context_line":"                            rule \u003d manila.share_rule_get(request, r_id)"},{"line_number":73,"context_line":"                            access_val_map[r_id] \u003d getattr("},{"line_number":74,"context_line":"                                rule, \u0027access_to\u0027, r_id)"},{"line_number":75,"context_line":"                            if not p_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"e7b21762_d45d822e","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":71},"updated":"2026-03-06 21:55:32.000000000","message":"With 50 access rule locks across 10 shares, this is up to 60 API calls on a single page load. Maybe we can be upfront about the way we load the access rules. I\u0027ll look into it.","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    p_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":70,"context_line":"                    if r_id not in access_val_map:"},{"line_number":71,"context_line":"                        try:"},{"line_number":72,"context_line":"                            rule \u003d manila.share_rule_get(request, r_id)"},{"line_number":73,"context_line":"                            access_val_map[r_id] \u003d getattr("},{"line_number":74,"context_line":"                                rule, \u0027access_to\u0027, r_id)"},{"line_number":75,"context_line":"                            if not p_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"73783b75_487b6338","line":72,"range":{"start_line":72,"start_character":0,"end_line":72,"end_character":71},"in_reply_to":"e7b21762_d45d822e","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0121bf1c8c1c1f196f6f3c3476ee58ca79b811f2","unresolved":true,"context_lines":[{"line_number":51,"context_line":"                    lock.user_name \u003d user_map.get(lock.user_id, lock.user_id)"},{"line_number":52,"context_line":"                return filtered_locks"},{"line_number":53,"context_line":"            if resource_type \u003d\u003d \u0027access_rule\u0027:"},{"line_number":54,"context_line":"                access_val_map \u003d {}"},{"line_number":55,"context_line":"                for lock in filtered_locks:"},{"line_number":56,"context_line":"                    r_id \u003d lock.resource_id"},{"line_number":57,"context_line":"                    p_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":58,"context_line":"                    if r_id not in access_val_map:"},{"line_number":59,"context_line":"                        try:"},{"line_number":60,"context_line":"                            rule \u003d manila.share_rule_get(request, r_id)"},{"line_number":61,"context_line":"                            access_val_map[r_id] \u003d getattr("},{"line_number":62,"context_line":"                                rule, \u0027access_to\u0027, r_id)"},{"line_number":63,"context_line":"                            if not p_id:"},{"line_number":64,"context_line":"                                p_id \u003d getattr(rule, \u0027share_id\u0027, None)"},{"line_number":65,"context_line":"                                lock.parent_resource_id \u003d p_id"},{"line_number":66,"context_line":"                        except Exception:"},{"line_number":67,"context_line":"                            access_val_map[r_id] \u003d getattr("},{"line_number":68,"context_line":"                                lock, \u0027resource_name\u0027, r_id)"},{"line_number":69,"context_line":"                    lock.access_to \u003d access_val_map.get(r_id)"},{"line_number":70,"context_line":"                    p_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":71,"context_line":"                    if p_id:"},{"line_number":72,"context_line":"                        if p_id not in share_map:"},{"line_number":73,"context_line":"                            try:"},{"line_number":74,"context_line":"                                s \u003d manila.share_get(request, p_id)"},{"line_number":75,"context_line":"                                share_map[p_id] \u003d s.name or p_id"},{"line_number":76,"context_line":"                            except Exception:"},{"line_number":77,"context_line":"                                share_map[p_id] \u003d p_id"},{"line_number":78,"context_line":"                        lock.parent_resource_name \u003d share_map.get(p_id)"},{"line_number":79,"context_line":"                    else:"},{"line_number":80,"context_line":"                        lock.parent_resource_name \u003d _(\"Unknown Share\")"},{"line_number":81,"context_line":"                    lock.user_name \u003d user_map.get(lock.user_id, lock.user_id)"},{"line_number":82,"context_line":"                    lock.resource_action \u003d getattr(lock, \u0027resource_action\u0027, \u0027\u0027)"},{"line_number":83,"context_line":"                return filtered_locks"},{"line_number":84,"context_line":"        except Exception:"},{"line_number":85,"context_line":"            msg \u003d _(\"Unable to retrieve %s locks.\") % resource_type"},{"line_number":86,"context_line":"            exceptions.handle(request, msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"8d75fa7e_4f91e12b","line":83,"range":{"start_line":54,"start_character":0,"end_line":83,"end_character":37},"updated":"2026-03-12 05:16:18.000000000","message":"This code calls share_rule_get once per unique rule, which is O(unique_rules). You can improve this by batching by parent share and call share_rules_list once per share to get all its rules in one shot, turning it into O(unique_shares):\n\n\n```suggestion\n\n  if resource_type \u003d\u003d \u0027access_rule\u0027:\n      # Collect known parent share IDs from locks\n      parent_ids \u003d {\n          getattr(lock, \u0027parent_resource_id\u0027, None)\n          for lock in filtered_locks\n      } - {None}\n\n      # Batch: one API call per parent share instead of per rule\n      access_val_map \u003d {}   # rule_id -\u003e access_to\n      parent_map \u003d {}       # rule_id -\u003e share_id\n      for share_id in parent_ids:\n          try:\n              rules \u003d manila.share_rules_list(request, share_id)\n              for rule in rules:\n                  access_val_map[rule.id] \u003d getattr(\n                      rule, \u0027access_to\u0027, rule.id)\n                  parent_map[rule.id] \u003d share_id\n          except Exception:\n              pass\n\n      # Fallback: individual fetch only for rules we couldn\u0027t resolve\n      for lock in filtered_locks:\n          r_id \u003d lock.resource_id\n          if r_id not in access_val_map:\n              try:\n                  rule \u003d manila.share_rule_get(request, r_id)\n                  access_val_map[r_id] \u003d getattr(\n                      rule, \u0027access_to\u0027, r_id)\n                  parent_map[r_id] \u003d getattr(\n                      rule, \u0027share_id\u0027, None)\n              except Exception:\n                  access_val_map[r_id] \u003d getattr(\n                      lock, \u0027resource_name\u0027, r_id)\n\n      for lock in filtered_locks:\n          r_id \u003d lock.resource_id\n          lock.access_to \u003d access_val_map.get(r_id, r_id)\n          p_id \u003d (getattr(lock, \u0027parent_resource_id\u0027, None)\n                  or parent_map.get(r_id))\n          lock.parent_resource_id \u003d p_id\n          lock.parent_resource_name \u003d (\n              share_map.get(p_id, p_id) if p_id\n              else _(\"Unknown Share\"))\n          lock.user_name \u003d user_map.get(lock.user_id, lock.user_id)\n          lock.resource_action \u003d getattr(\n              lock, \u0027resource_action\u0027, \u0027\u0027)\n      return filtered_locks\n```\n\nWith 50 rules across 10 shares: before \u003d 50 share_rule_get calls, after \u003d 10 share_rules_list calls.","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                    lock.user_name \u003d user_map.get(lock.user_id, lock.user_id)"},{"line_number":52,"context_line":"                return filtered_locks"},{"line_number":53,"context_line":"            if resource_type \u003d\u003d \u0027access_rule\u0027:"},{"line_number":54,"context_line":"                access_val_map \u003d {}"},{"line_number":55,"context_line":"                for lock in filtered_locks:"},{"line_number":56,"context_line":"                    r_id \u003d lock.resource_id"},{"line_number":57,"context_line":"                    p_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":58,"context_line":"                    if r_id not in access_val_map:"},{"line_number":59,"context_line":"                        try:"},{"line_number":60,"context_line":"                            rule \u003d manila.share_rule_get(request, r_id)"},{"line_number":61,"context_line":"                            access_val_map[r_id] \u003d getattr("},{"line_number":62,"context_line":"                                rule, \u0027access_to\u0027, r_id)"},{"line_number":63,"context_line":"                            if not p_id:"},{"line_number":64,"context_line":"                                p_id \u003d getattr(rule, \u0027share_id\u0027, None)"},{"line_number":65,"context_line":"                                lock.parent_resource_id \u003d p_id"},{"line_number":66,"context_line":"                        except Exception:"},{"line_number":67,"context_line":"                            access_val_map[r_id] \u003d getattr("},{"line_number":68,"context_line":"                                lock, \u0027resource_name\u0027, r_id)"},{"line_number":69,"context_line":"                    lock.access_to \u003d access_val_map.get(r_id)"},{"line_number":70,"context_line":"                    p_id \u003d getattr(lock, \u0027parent_resource_id\u0027, None)"},{"line_number":71,"context_line":"                    if p_id:"},{"line_number":72,"context_line":"                        if p_id not in share_map:"},{"line_number":73,"context_line":"                            try:"},{"line_number":74,"context_line":"                                s \u003d manila.share_get(request, p_id)"},{"line_number":75,"context_line":"                                share_map[p_id] \u003d s.name or p_id"},{"line_number":76,"context_line":"                            except Exception:"},{"line_number":77,"context_line":"                                share_map[p_id] \u003d p_id"},{"line_number":78,"context_line":"                        lock.parent_resource_name \u003d share_map.get(p_id)"},{"line_number":79,"context_line":"                    else:"},{"line_number":80,"context_line":"                        lock.parent_resource_name \u003d _(\"Unknown Share\")"},{"line_number":81,"context_line":"                    lock.user_name \u003d user_map.get(lock.user_id, lock.user_id)"},{"line_number":82,"context_line":"                    lock.resource_action \u003d getattr(lock, \u0027resource_action\u0027, \u0027\u0027)"},{"line_number":83,"context_line":"                return filtered_locks"},{"line_number":84,"context_line":"        except Exception:"},{"line_number":85,"context_line":"            msg \u003d _(\"Unable to retrieve %s locks.\") % resource_type"},{"line_number":86,"context_line":"            exceptions.handle(request, msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f8a98460_9fa3b175","line":83,"range":{"start_line":54,"start_character":0,"end_line":83,"end_character":37},"in_reply_to":"8d75fa7e_4f91e12b","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"}],"manila_ui/dashboards/project/resource_locks/templates/resource_locks/_update_lock.html":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":6,"context_line":"{% block modal-body-right %}"},{"line_number":7,"context_line":"    \u003ch3\u003e{% trans \"Description\" %}:\u003c/h3\u003e"},{"line_number":8,"context_line":"    \u003cp\u003e{% trans \"You can update the reason for this resource lock.\" %}\u003c/p\u003e"},{"line_number":9,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":4,"id":"c4af9a7e_0f64f6d5","line":9,"updated":"2026-03-11 05:07:37.000000000","message":"Missing newline at end of file. Same for `index.html` and\n`update_lock.html` in both project and admin template dirs.","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":6,"context_line":"{% block modal-body-right %}"},{"line_number":7,"context_line":"    \u003ch3\u003e{% trans \"Description\" %}:\u003c/h3\u003e"},{"line_number":8,"context_line":"    \u003cp\u003e{% trans \"You can update the reason for this resource lock.\" %}\u003c/p\u003e"},{"line_number":9,"context_line":"{% endblock %}"}],"source_content_type":"text/html","patch_set":4,"id":"7303ff85_54913ae8","line":9,"in_reply_to":"c4af9a7e_0f64f6d5","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/dashboards/project/resource_locks/urls.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from manila_ui.dashboards.project.resource_locks import views"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RESOURCE_LOCKS \u003d \u0027horizon:project:resource_locks\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"urlpatterns \u003d ["},{"line_number":20,"context_line":"    re_path(r\u0027^$\u0027, views.IndexView.as_view(), name\u003d\u0027index\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"0b3b364b_f55982f7","line":17,"updated":"2026-03-11 05:07:37.000000000","message":"`RESOURCE_LOCKS` constant is defined but never used. Same in\nthe admin `urls.py`. Either use it or remove it.","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from manila_ui.dashboards.project.resource_locks import views"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"RESOURCE_LOCKS \u003d \u0027horizon:project:resource_locks\u0027"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"urlpatterns \u003d ["},{"line_number":20,"context_line":"    re_path(r\u0027^$\u0027, views.IndexView.as_view(), name\u003d\u0027index\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"47445166_9ebd6ec0","line":17,"in_reply_to":"0b3b364b_f55982f7","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/dashboards/project/resource_locks/views.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    template_name \u003d \u0027project/resource_locks/index.html\u0027"},{"line_number":29,"context_line":"    page_title \u003d _(\"Resource Locks\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":32,"context_line":"        context \u003d super(IndexView, self).get_context_data(**kwargs)"},{"line_number":33,"context_line":"        return context"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"d0dd3158_500dbd9a","line":31,"updated":"2026-03-11 05:07:37.000000000","message":"`get_context_data` is a no-op — Remove it.","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    template_name \u003d \u0027project/resource_locks/index.html\u0027"},{"line_number":29,"context_line":"    page_title \u003d _(\"Resource Locks\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":32,"context_line":"        context \u003d super(IndexView, self).get_context_data(**kwargs)"},{"line_number":33,"context_line":"        return context"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"4d809865_69451f82","line":31,"in_reply_to":"d0dd3158_500dbd9a","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    page_title \u003d _(\"Resource Locks\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":32,"context_line":"        context \u003d super(IndexView, self).get_context_data(**kwargs)"},{"line_number":33,"context_line":"        return context"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"83bce4d4_228b1427","line":32,"updated":"2026-03-11 05:07:37.000000000","message":"Old-style `super(IndexView, self)` — prefer Python 3 `super()`.\nSame pattern in `UpdateLockView` and in the admin views.","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    page_title \u003d _(\"Resource Locks\")"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":32,"context_line":"        context \u003d super(IndexView, self).get_context_data(**kwargs)"},{"line_number":33,"context_line":"        return context"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"08758f3b_6abf537a","line":32,"in_reply_to":"83bce4d4_228b1427","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"30fedac8741652c015b50b292d92f068850e76d3","unresolved":true,"context_lines":[{"line_number":59,"context_line":"            exceptions.handle("},{"line_number":60,"context_line":"                self.request, _(\"Unable to retrieve lock details.\"))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_success_url(self):"},{"line_number":63,"context_line":"        lock_id \u003d self.kwargs[\u0027lock_id\u0027]"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            lock \u003d manila.resource_lock_get(self.request, lock_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"0c3c5b75_ddf40405","line":62,"updated":"2026-03-11 05:07:37.000000000","message":"`get_success_url` makes a second `resource_lock_get()` API call\njust to determine which tab to redirect to. The resource_type\nis already fetched in `get_initial()`. Consider storing it on\nthe view instance (e.g. in `get_initial` or the form\u0027s\n`handle`) so `get_success_url` can use it without an extra API\nround-trip.","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            exceptions.handle("},{"line_number":60,"context_line":"                self.request, _(\"Unable to retrieve lock details.\"))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_success_url(self):"},{"line_number":63,"context_line":"        lock_id \u003d self.kwargs[\u0027lock_id\u0027]"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            lock \u003d manila.resource_lock_get(self.request, lock_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"72892646_dacda1a4","line":62,"in_reply_to":"0c3c5b75_ddf40405","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/local/enabled/_9100_manila_admin_add_resource_locks_panel_to_share_panel_group.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"d0041ed6_a1df6c0d","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":30},"updated":"2026-03-06 21:55:32.000000000","message":"please remove","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"a051e93a_1ffda5ec","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":30},"in_reply_to":"d0041ed6_a1df6c0d","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"manila_ui/local/enabled/_9100_manila_project_add_resource_locks_panel_to_share_panel_group.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"e63eb4a1345d55fc048fe9de3ca9d844c3764396","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"65737557_1ad0fbbb","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":30},"updated":"2026-03-06 21:55:32.000000000","message":"please remove","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c5e1794109d47108dd040bcebda5a679c67ae230","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 Mirantis Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"94eca1eb_883752d1","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":30},"in_reply_to":"65737557_1ad0fbbb","updated":"2026-03-12 04:13:35.000000000","message":"Done","commit_id":"d8f516994cdda841419288fca4abfc2ecf9fd51e"}],"releasenotes/notes/add_a_resource_locks_panel-13763ed05d7bea7e.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"506e7564a40838a30ff909dbbeb4ae9f641f27d3","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Added a resource locks panel to view resource locks for shares"},{"line_number":5,"context_line":"    and access rules. Filtering is allowed and actions are Editing"},{"line_number":6,"context_line":"    the lock reason and deleting the lock."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"7fbf4974_7e556184","line":7,"updated":"2026-03-12 05:18:18.000000000","message":"remove one of these two blank lines","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Added a resource locks panel to view resource locks for shares"},{"line_number":5,"context_line":"    and access rules. Filtering is allowed and actions are Editing"},{"line_number":6,"context_line":"    the lock reason and deleting the lock."},{"line_number":7,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":6,"id":"f2b3e685_94857c4f","line":7,"in_reply_to":"7fbf4974_7e556184","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"}],"releasenotes/notes/create-and-manipulate-share-network-subnet-metadata-bc7f0f6f0dacda58.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"dd8b66a6cfa11963071e2bc18626445afa840de2","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"278f4ccf_664a9fa1","updated":"2026-03-12 04:50:28.000000000","message":"the file name is incorrect, and you probably wanted to edit the note and add the feature section alone..","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"5f42009d9ebd1428951b991c42ab6d2c4237ff22","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d1390ba2_e34ec80a","in_reply_to":"278f4ccf_664a9fa1","updated":"2026-03-12 05:01:19.000000000","message":"@gouthampravi@gmail.com\n\nYes. That file should actually be deleted as there is already a correct release note. I will notify you when I delete it.\n\nHave you seen what I’ve said on the policy files in my email response. I am getting some errors so I could use some help with that.","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"9764085c2cf30799bf4f3d3fb3f50d96a35ccc11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"6a8fb4a8_dd92ab97","in_reply_to":"d1390ba2_e34ec80a","updated":"2026-03-12 12:15:02.000000000","message":"Done","commit_id":"5671eb6acb35a4bee697762d6383d78cf191a704"}]}
