)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1aab242b46d960d46e1aefcf52054049292d9065","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"86eea064_7bc4c76a","updated":"2026-01-07 14:48:02.000000000","message":"Hey, Rose. Thank you for working on this change and proposing it. I left a couple of comments inline, could you please take a look? Also, could you please provide a release note for it?","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"caf792620a72f3103c96782b712ebed2d526de60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"26e2f2bf_6570bfc8","in_reply_to":"86eea064_7bc4c76a","updated":"2026-01-07 14:52:56.000000000","message":"@ces.eduardo98@gmail.com\nThank you for review and the comments. Working on them.","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"c116a5a3a8cb83bc51072901a06966bd8b1a04c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"6bce49e1_ee7bcc27","updated":"2026-01-28 03:44:53.000000000","message":"@gouthampravi@gmail.com @ces.eduardo98@gmail.com\n\nI have changed this patch from the use of inline styling to a separate tab and class for the export locations. This way, I am inheriting the styling classes as suggested. Let me know if this is viable so that I can make the same change for share network subnets.\n\nThank you.","commit_id":"a090ab077d5ebe13a6d223de7c24f54cddd0606b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1ba9c48e26e24b6ce9e3962fb515bd1cfe153398","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8d2f95c7_fbec1ed1","updated":"2026-02-05 20:14:58.000000000","message":"thanks Rose, a couple of minor comments inline","commit_id":"8865248a76ce4c2a81e72ead777c3697aea75c21"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"680fb1f9d9192a66b0c113dd9943ee7b23713c25","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"8292b4a7_916ae982","updated":"2026-02-19 17:13:49.000000000","message":"Thanks for working on this, please have a look at my inline comments","commit_id":"dbf3e85d08762f112c17b34ac74a07e45d045a72"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b808c980284485d5f9835ef4aa7f19ecffefa1ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"8efe4866_56999d6f","updated":"2026-02-17 20:27:09.000000000","message":"recheck\n\nwe recently merged a bunch of changes to x-static libraries and tagged releases. Let\u0027s see if the CI needs more fixes:\n\nhttps://review.opendev.org/q/hashtag:%22remove-pkg_resources%22+(status:open%20OR%20status:merged)","commit_id":"dbf3e85d08762f112c17b34ac74a07e45d045a72"},{"author":{"_account_id":32919,"name":"kiran pawar","display_name":"Kiran Pawar","email":"kinpaa@gmail.com","username":"kpdev"},"change_message_id":"7a023b439ce53d2cbd450795a3bb9dda8ce13c27","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"0c13c09e_c431f5d5","updated":"2026-02-26 17:02:50.000000000","message":"Assuming we fix asked suggestions in follow-up change.","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":36180,"name":"Gireesh Awasthi","display_name":"Gireesh","email":"gawasthi2010@gmail.com","username":"agireesh","status":"NetApp"},"change_message_id":"9fa3fafe6bfb365ea1bd281f71f236ea3635862b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"4e98b76d_1972e8dd","updated":"2026-02-23 14:13:26.000000000","message":"LGTM ..!","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"221f964dda4fefd0322eda710a4ab81001bf602f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"3f86deab_40e383e2","updated":"2026-02-23 10:20:46.000000000","message":"lgtm","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"}],"manila_ui/api/manila.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1aab242b46d960d46e1aefcf52054049292d9065","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    insecure \u003d getattr(settings, \u0027OPENSTACK_SSL_NO_VERIFY\u0027, False)"},{"line_number":68,"context_line":"    cacert \u003d getattr(settings, \u0027OPENSTACK_SSL_CACERT\u0027, None)"},{"line_number":69,"context_line":"    manila_url \u003d \"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        manila_url \u003d base.url_for(request, MANILA_SERVICE_TYPE)"},{"line_number":73,"context_line":"    except exceptions.ServiceCatalogException:"}],"source_content_type":"text/x-python","patch_set":2,"id":"de5c60ac_6c83cda9","line":70,"updated":"2026-01-07 14:48:02.000000000","message":"please avoid introducing blank lines in places no code changes were made, as this can trick the git history.","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"1657e8ed29a1d4bf6a6119cab5b0074f1b0e047c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    insecure \u003d getattr(settings, \u0027OPENSTACK_SSL_NO_VERIFY\u0027, False)"},{"line_number":68,"context_line":"    cacert \u003d getattr(settings, \u0027OPENSTACK_SSL_CACERT\u0027, None)"},{"line_number":69,"context_line":"    manila_url \u003d \"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    try:"},{"line_number":72,"context_line":"        manila_url \u003d base.url_for(request, MANILA_SERVICE_TYPE)"},{"line_number":73,"context_line":"    except exceptions.ServiceCatalogException:"}],"source_content_type":"text/x-python","patch_set":2,"id":"6525ab84_a40491b9","line":70,"in_reply_to":"de5c60ac_6c83cda9","updated":"2026-01-12 15:07:17.000000000","message":"Done","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1aab242b46d960d46e1aefcf52054049292d9065","unresolved":true,"context_lines":[{"line_number":73,"context_line":"    except exceptions.ServiceCatalogException:"},{"line_number":74,"context_line":"        LOG.debug(\u0027no share service configured.\u0027)"},{"line_number":75,"context_line":"        return None"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    LOG.debug(\u0027manilaclient connection created using token \"%s\" and url \"%s\"\u0027 %"},{"line_number":78,"context_line":"              (request.user.token.id, manila_url))"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b4480fe3_3e01e63f","line":76,"updated":"2026-01-07 14:48:02.000000000","message":"same as above","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"1657e8ed29a1d4bf6a6119cab5b0074f1b0e047c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    except exceptions.ServiceCatalogException:"},{"line_number":74,"context_line":"        LOG.debug(\u0027no share service configured.\u0027)"},{"line_number":75,"context_line":"        return None"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    LOG.debug(\u0027manilaclient connection created using token \"%s\" and url \"%s\"\u0027 %"},{"line_number":78,"context_line":"              (request.user.token.id, manila_url))"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"126b4335_cdacb7eb","line":76,"in_reply_to":"b4480fe3_3e01e63f","updated":"2026-01-12 15:07:17.000000000","message":"Done","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1aab242b46d960d46e1aefcf52054049292d9065","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        http_log_debug\u003dsettings.DEBUG,"},{"line_number":91,"context_line":"        user_agent\u003dMANILA_UI_USER_AGENT_REPR,"},{"line_number":92,"context_line":"    )"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    c.client.auth_token \u003d request.user.token.id"},{"line_number":95,"context_line":"    c.client.management_url \u003d manila_url"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"c5eaf643_c07b7b44","line":93,"updated":"2026-01-07 14:48:02.000000000","message":"same as above","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"1657e8ed29a1d4bf6a6119cab5b0074f1b0e047c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        http_log_debug\u003dsettings.DEBUG,"},{"line_number":91,"context_line":"        user_agent\u003dMANILA_UI_USER_AGENT_REPR,"},{"line_number":92,"context_line":"    )"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    c.client.auth_token \u003d request.user.token.id"},{"line_number":95,"context_line":"    c.client.management_url \u003d manila_url"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6b9131aa_fa1797d3","line":93,"in_reply_to":"c5eaf643_c07b7b44","updated":"2026-01-12 15:07:17.000000000","message":"Done","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1aab242b46d960d46e1aefcf52054049292d9065","unresolved":true,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def export_location_get(request, share_id, el_id):"},{"line_number":718,"context_line":"    return manilaclient("},{"line_number":719,"context_line":"        request, version\u003d\"2.87\").share_export_locations.get(share_id, el_id)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"def export_location_metadata_get(request, share_id, el_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"588ef718_9077129a","line":719,"range":{"start_line":719,"start_character":25,"end_line":719,"end_character":31},"updated":"2026-01-07 14:48:02.000000000","message":"If we are to keep it, please turn this into a constant at the top of the file, but I have another concern with it.\n\nI think this is a clever approach that can help us keeping only this feature available instead of bumping the version entirely and creating more feature gaps.\n\nIf we only have this feature using 2.87 API version it means that we should ensure this is supported by manila. We know this is the case for the master and most recent branches, however if someone tries to use the UI pointing to a cloud that doesn\u0027t support it, this call will fail. I honestly think this could be worth the risk if we make a good job communicating to people to use it only with that given version. There could be more issues with it too, so I\u0027m inviting more reviewers to join this discussion :)","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"eb52758dee934b03a5c9f2ec65068b5b699cc939","unresolved":true,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def export_location_get(request, share_id, el_id):"},{"line_number":718,"context_line":"    return manilaclient("},{"line_number":719,"context_line":"        request, version\u003d\"2.87\").share_export_locations.get(share_id, el_id)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"def export_location_metadata_get(request, share_id, el_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"629987ca_bfee1b78","line":719,"range":{"start_line":719,"start_character":25,"end_line":719,"end_character":31},"in_reply_to":"588ef718_9077129a","updated":"2026-01-07 14:55:43.000000000","message":"@ces.eduardo98@gmail.com\nIs the feature using only that version or using starting from that version upwards?","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"23ce5c4dcdd8ecaada38c9874c2c11fbb910984b","unresolved":true,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def export_location_get(request, share_id, el_id):"},{"line_number":718,"context_line":"    return manilaclient("},{"line_number":719,"context_line":"        request, version\u003d\"2.87\").share_export_locations.get(share_id, el_id)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"def export_location_metadata_get(request, share_id, el_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"c267d868_acd2d666","line":719,"range":{"start_line":719,"start_character":25,"end_line":719,"end_character":31},"in_reply_to":"629987ca_bfee1b78","updated":"2026-01-07 16:38:18.000000000","message":"2.87 was the maximum microversion possible with the 2024.2 \"Dalmatian\" release, which is going to be longer than 18 months prior to the release that we\u0027re adding this feature in. So I wouldn\u0027t worry about making this bump only for this feature. We could just bump the microversion in line 31 to this version.. and ensure we can test all the other features are working as expected.\n\nIt\u0027s a large bump to go from 2.51 to 2.87, but hopefully most changes were additive. We can review this list together and decide.","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"8bc3bd80877ecf3adb01d0562b67cfd18d17edc0","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":"def export_location_get(request, share_id, el_id):"},{"line_number":718,"context_line":"    return manilaclient("},{"line_number":719,"context_line":"        request, version\u003d\"2.87\").share_export_locations.get(share_id, el_id)"},{"line_number":720,"context_line":""},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"def export_location_metadata_get(request, share_id, el_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af4630a_cdb155c7","line":719,"range":{"start_line":719,"start_character":25,"end_line":719,"end_character":31},"in_reply_to":"c267d868_acd2d666","updated":"2026-01-15 13:23:04.000000000","message":"Done","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d590b22da10a7f3eddf466e178ed6a00965d5957","unresolved":true,"context_lines":[{"line_number":709,"context_line":"        request).share_export_locations.get(share_id, el_id)"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"def export_location_metadata_get(request, share_id, el_id):"},{"line_number":713,"context_line":"    client \u003d manilaclient(request)"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"    result \u003d client.share_export_locations.get_metadata(share_id, el_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"10296305_b28b7cd4","line":712,"updated":"2026-02-24 06:50:56.000000000","message":"`export_location_metadata_get` is defined but never called; remove it?","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"3553926f457232d6720ba51db640916e8e6adcec","unresolved":false,"context_lines":[{"line_number":709,"context_line":"        request).share_export_locations.get(share_id, el_id)"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"def export_location_metadata_get(request, share_id, el_id):"},{"line_number":713,"context_line":"    client \u003d manilaclient(request)"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"    result \u003d client.share_export_locations.get_metadata(share_id, el_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"2553487b_f2cec1c7","line":712,"in_reply_to":"10296305_b28b7cd4","updated":"2026-03-12 13:11:59.000000000","message":"Done","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"}],"manila_ui/dashboards/project/shares/forms.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d590b22da10a7f3eddf466e178ed6a00965d5957","unresolved":true,"context_lines":[{"line_number":550,"context_line":"                    request, share, el_id, unset_list)"},{"line_number":551,"context_line":"            messages.success(request, _(\u0027Export location metadata updated.\u0027))"},{"line_number":552,"context_line":"            return True"},{"line_number":553,"context_line":"        except Exception as e:"},{"line_number":554,"context_line":"            if \"MetadataItemNotFound\" in str(e) or getattr("},{"line_number":555,"context_line":"                e, \u0027code\u0027, None) \u003d\u003d 404:"},{"line_number":556,"context_line":"                msg \u003d _(\"Invalid format: Each line must contain a \u0027key\u003dvalue\u0027 \""}],"source_content_type":"text/x-python","patch_set":16,"id":"5601614b_d4fbc457","line":553,"updated":"2026-02-24 06:50:56.000000000","message":"The error handling here doesn\u0027t catch `ValidationError` from\n`parse_str_meta` (for invalid input like duplicate keys or\nkeys with spaces). The existing `UpdateMetadataForm` and\n`UpdateRuleMetadataForm` both catch `ValidationError`\nseparately and use `self.api_error()` to show the specific\nmessage. Here, a `ValidationError` will be caught by the\nbroad `except Exception` and show a generic \"Unable to update\"\nerror instead.","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"3553926f457232d6720ba51db640916e8e6adcec","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                    request, share, el_id, unset_list)"},{"line_number":551,"context_line":"            messages.success(request, _(\u0027Export location metadata updated.\u0027))"},{"line_number":552,"context_line":"            return True"},{"line_number":553,"context_line":"        except Exception as e:"},{"line_number":554,"context_line":"            if \"MetadataItemNotFound\" in str(e) or getattr("},{"line_number":555,"context_line":"                e, \u0027code\u0027, None) \u003d\u003d 404:"},{"line_number":556,"context_line":"                msg \u003d _(\"Invalid format: Each line must contain a \u0027key\u003dvalue\u0027 \""}],"source_content_type":"text/x-python","patch_set":16,"id":"f9e32e9e_d1dd433e","line":553,"in_reply_to":"5601614b_d4fbc457","updated":"2026-03-12 13:11:59.000000000","message":"Done","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"}],"manila_ui/dashboards/project/shares/tables.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1ba9c48e26e24b6ce9e3962fb515bd1cfe153398","unresolved":true,"context_lines":[{"line_number":456,"context_line":"    url \u003d \"horizon:project:shares:update_export_location_metadata\""},{"line_number":457,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":458,"context_line":"    icon \u003d \"pencil\""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def get_link_url(self, datum):"},{"line_number":461,"context_line":"        share_id \u003d self.table.kwargs[\u0027share_id\u0027]"},{"line_number":462,"context_line":"        return reverse(self.url, args\u003d(share_id, datum.id))"}],"source_content_type":"text/x-python","patch_set":11,"id":"f925e67b_28464510","line":459,"updated":"2026-02-05 20:14:58.000000000","message":"This is missing a policy:\n\n```\npolicy_rules \u003d ((\"share\", \"share_export_location:update_metadata\"),)\n\n```","commit_id":"8865248a76ce4c2a81e72ead777c3697aea75c21"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"fa76d8e36cc6d120bdc051b874e7c51f658071c0","unresolved":false,"context_lines":[{"line_number":456,"context_line":"    url \u003d \"horizon:project:shares:update_export_location_metadata\""},{"line_number":457,"context_line":"    classes \u003d (\"ajax-modal\",)"},{"line_number":458,"context_line":"    icon \u003d \"pencil\""},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    def get_link_url(self, datum):"},{"line_number":461,"context_line":"        share_id \u003d self.table.kwargs[\u0027share_id\u0027]"},{"line_number":462,"context_line":"        return reverse(self.url, args\u003d(share_id, datum.id))"}],"source_content_type":"text/x-python","patch_set":11,"id":"0f96d25b_e0d384e3","line":459,"in_reply_to":"f925e67b_28464510","updated":"2026-02-09 14:21:58.000000000","message":"Done","commit_id":"8865248a76ce4c2a81e72ead777c3697aea75c21"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"680fb1f9d9192a66b0c113dd9943ee7b23713c25","unresolved":true,"context_lines":[{"line_number":466,"context_line":"def get_metadata(el):"},{"line_number":467,"context_line":"    if not el.metadata:"},{"line_number":468,"context_line":"        return _(\"None\")"},{"line_number":469,"context_line":"    return \", \".join([f\"{k}\u003d{v}\" for k, v in el.metadata.items()])"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"class ExportLocationFilterAction(tables.FilterAction):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a4f2d94_f2ce7a99","line":469,"range":{"start_line":469,"start_character":4,"end_line":469,"end_character":66},"updated":"2026-02-19 17:13:49.000000000","message":"This could use the utility function `project_utils.metadata_to_str` like in the snapshot metadata patch","commit_id":"dbf3e85d08762f112c17b34ac74a07e45d045a72"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"7d9c8b14f5f254a81cfeac6e88112be05ba2db73","unresolved":false,"context_lines":[{"line_number":466,"context_line":"def get_metadata(el):"},{"line_number":467,"context_line":"    if not el.metadata:"},{"line_number":468,"context_line":"        return _(\"None\")"},{"line_number":469,"context_line":"    return \", \".join([f\"{k}\u003d{v}\" for k, v in el.metadata.items()])"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":""},{"line_number":472,"context_line":"class ExportLocationFilterAction(tables.FilterAction):"}],"source_content_type":"text/x-python","patch_set":14,"id":"02898fd2_94359971","line":469,"range":{"start_line":469,"start_character":4,"end_line":469,"end_character":66},"in_reply_to":"1a4f2d94_f2ce7a99","updated":"2026-02-21 08:04:28.000000000","message":"Done","commit_id":"dbf3e85d08762f112c17b34ac74a07e45d045a72"}],"manila_ui/dashboards/project/shares/tabs.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"1ba9c48e26e24b6ce9e3962fb515bd1cfe153398","unresolved":true,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from django.utils.translation import gettext_lazy as _"},{"line_number":14,"context_line":"from horizon import exceptions"},{"line_number":15,"context_line":"from horizon import tabs"},{"line_number":16,"context_line":"from manila_ui.api import manila"},{"line_number":17,"context_line":"from manila_ui.dashboards.project.shares import tables as shares_tables"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class OverviewTab(tabs.Tab):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aca0ebb_b8bd5978","line":17,"range":{"start_line":13,"start_character":0,"end_line":17,"end_character":71},"updated":"2026-02-05 20:14:58.000000000","message":"Please use the convention described here: https://docs.openstack.org/hacking/latest/user/hacking.html#import-order-template to fix this","commit_id":"8865248a76ce4c2a81e72ead777c3697aea75c21"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"fa76d8e36cc6d120bdc051b874e7c51f658071c0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from django.utils.translation import gettext_lazy as _"},{"line_number":14,"context_line":"from horizon import exceptions"},{"line_number":15,"context_line":"from horizon import tabs"},{"line_number":16,"context_line":"from manila_ui.api import manila"},{"line_number":17,"context_line":"from manila_ui.dashboards.project.shares import tables as shares_tables"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class OverviewTab(tabs.Tab):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ec54cd41_d6799b8e","line":17,"range":{"start_line":13,"start_character":0,"end_line":17,"end_character":71},"in_reply_to":"9aca0ebb_b8bd5978","updated":"2026-02-09 14:21:58.000000000","message":"Done","commit_id":"8865248a76ce4c2a81e72ead777c3697aea75c21"}],"manila_ui/dashboards/project/shares/templates/shares/_detail.html":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"1aab242b46d960d46e1aefcf52054049292d9065","unresolved":true,"context_lines":[{"line_number":148,"context_line":"  {% endfor %}"},{"line_number":149,"context_line":"  \u003c/dl\u003e"},{"line_number":150,"context_line":"\u003c/div\u003e"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"\u003cscript type\u003d\"text/javascript\"\u003e"},{"line_number":153,"context_line":"  function filterExportLocations() {"},{"line_number":154,"context_line":"    var input \u003d document.getElementById(\u0027metadata-filter\u0027);"},{"line_number":155,"context_line":"    var filter \u003d input.value.toLowerCase();"},{"line_number":156,"context_line":"    var wrappers \u003d document.getElementsByClassName(\u0027export-location-wrapper\u0027);"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    for (var i \u003d 0; i \u003c wrappers.length; i++) {"},{"line_number":159,"context_line":"      var metadata \u003d wrappers[i].getAttribute(\u0027data-metadata\u0027).toLowerCase();"},{"line_number":160,"context_line":"      if (metadata.indexOf(filter) \u003e -1) {"},{"line_number":161,"context_line":"        wrappers[i].style.display \u003d \"\";"},{"line_number":162,"context_line":"      } else {"},{"line_number":163,"context_line":"        wrappers[i].style.display \u003d \"none\";"},{"line_number":164,"context_line":"      }"},{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":"  }"},{"line_number":167,"context_line":"\u003c/script\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"1e52f1c2_530d6ca7","line":167,"range":{"start_line":151,"start_character":0,"end_line":167,"end_character":9},"updated":"2026-01-07 14:48:02.000000000","message":"this filter should work, yes, but maybe we should look at ways we already implement the filtering in the code base, and use [1] as an example.\n\nMy main concern is that we don\u0027t have many other approaches manipulating objects with DOM, as this code is currently doing and instead, we use the filters with the tools that horizon and Django provide to us. This script would become more difficult to maintain when introduced, compared to the other parts we already maintain filtering for resources.\n\n[1] https://review.opendev.org/c/openstack/manila-ui/+/921277","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"1657e8ed29a1d4bf6a6119cab5b0074f1b0e047c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  {% endfor %}"},{"line_number":149,"context_line":"  \u003c/dl\u003e"},{"line_number":150,"context_line":"\u003c/div\u003e"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"\u003cscript type\u003d\"text/javascript\"\u003e"},{"line_number":153,"context_line":"  function filterExportLocations() {"},{"line_number":154,"context_line":"    var input \u003d document.getElementById(\u0027metadata-filter\u0027);"},{"line_number":155,"context_line":"    var filter \u003d input.value.toLowerCase();"},{"line_number":156,"context_line":"    var wrappers \u003d document.getElementsByClassName(\u0027export-location-wrapper\u0027);"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    for (var i \u003d 0; i \u003c wrappers.length; i++) {"},{"line_number":159,"context_line":"      var metadata \u003d wrappers[i].getAttribute(\u0027data-metadata\u0027).toLowerCase();"},{"line_number":160,"context_line":"      if (metadata.indexOf(filter) \u003e -1) {"},{"line_number":161,"context_line":"        wrappers[i].style.display \u003d \"\";"},{"line_number":162,"context_line":"      } else {"},{"line_number":163,"context_line":"        wrappers[i].style.display \u003d \"none\";"},{"line_number":164,"context_line":"      }"},{"line_number":165,"context_line":"    }"},{"line_number":166,"context_line":"  }"},{"line_number":167,"context_line":"\u003c/script\u003e"}],"source_content_type":"text/html","patch_set":2,"id":"48f7dc9a_973eb413","line":167,"range":{"start_line":151,"start_character":0,"end_line":167,"end_character":9},"in_reply_to":"1e52f1c2_530d6ca7","updated":"2026-01-12 15:07:17.000000000","message":"Done","commit_id":"abeb190497535b6ccec0622aa1db44edb54b4609"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e6c137f2d728d1955ef7db7ae3b30ca2890f6896","unresolved":true,"context_lines":[{"line_number":55,"context_line":"      \u003cdiv class\u003d\"metadata-section\" style\u003d\"margin-top: 10px;\"\u003e"},{"line_number":56,"context_line":"        \u003ch6\u003e\u003cstrong\u003e{% trans \"Metadata\" %}\u003c/strong\u003e\u003c/h6\u003e"},{"line_number":57,"context_line":"        \u003cdiv class\u003d\"metadata-scroll-box\""},{"line_number":58,"context_line":"            style\u003d\"max-height: 130px; overflow-y: auto; border: 1px solid #e1e1e1; border-radius: 4px; padding: 8px; background-color: #fafafa; margin-bottom: 5px;\"\u003e"},{"line_number":59,"context_line":"            \u003cdl class\u003d\"dl-horizontal\" style\u003d\"margin-bottom: 0;\"\u003e"},{"line_number":60,"context_line":"              {% for key, value in el.metadata.items %}"},{"line_number":61,"context_line":"                \u003cdt style\u003d\"width: 120px; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\""}],"source_content_type":"text/html","patch_set":7,"id":"72b9991e_3dff1155","line":58,"range":{"start_line":58,"start_character":0,"end_line":58,"end_character":165},"updated":"2026-01-16 21:27:40.000000000","message":"@jjasek@redhat.com @t.v.ovtchinnikova@gmail.com: Wanted your opinion on inline styling like this. Is this okay, or is there a better alternative we should use?","commit_id":"f0661d21100480b72d6b5f2204de229e7fcea190"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"fa76d8e36cc6d120bdc051b874e7c51f658071c0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"      \u003cdiv class\u003d\"metadata-section\" style\u003d\"margin-top: 10px;\"\u003e"},{"line_number":56,"context_line":"        \u003ch6\u003e\u003cstrong\u003e{% trans \"Metadata\" %}\u003c/strong\u003e\u003c/h6\u003e"},{"line_number":57,"context_line":"        \u003cdiv class\u003d\"metadata-scroll-box\""},{"line_number":58,"context_line":"            style\u003d\"max-height: 130px; overflow-y: auto; border: 1px solid #e1e1e1; border-radius: 4px; padding: 8px; background-color: #fafafa; margin-bottom: 5px;\"\u003e"},{"line_number":59,"context_line":"            \u003cdl class\u003d\"dl-horizontal\" style\u003d\"margin-bottom: 0;\"\u003e"},{"line_number":60,"context_line":"              {% for key, value in el.metadata.items %}"},{"line_number":61,"context_line":"                \u003cdt style\u003d\"width: 120px; text-align: left; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\""}],"source_content_type":"text/html","patch_set":7,"id":"7c2b69aa_d55b5c9e","line":58,"range":{"start_line":58,"start_character":0,"end_line":58,"end_character":165},"in_reply_to":"72b9991e_3dff1155","updated":"2026-02-09 14:21:58.000000000","message":"Done","commit_id":"f0661d21100480b72d6b5f2204de229e7fcea190"}],"manila_ui/dashboards/project/shares/views.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"680fb1f9d9192a66b0c113dd9943ee7b23713c25","unresolved":true,"context_lines":[{"line_number":106,"context_line":"                self.request, share_id)"},{"line_number":107,"context_line":"            filter_string \u003d self.request.GET.get("},{"line_number":108,"context_line":"                \u0027metadata_filter\u0027, \u0027\u0027).strip().lower()"},{"line_number":109,"context_line":"            if filter_string:"},{"line_number":110,"context_line":"                filtered_locations \u003d []"},{"line_number":111,"context_line":"                for el in all_export_locations:"},{"line_number":112,"context_line":"                    meta_list \u003d ["},{"line_number":113,"context_line":"                        \"%s\u003d%s\" % (k, v) for k, v in el.metadata.items()"},{"line_number":114,"context_line":"                    ]"},{"line_number":115,"context_line":"                    meta_str \u003d \" \".join(meta_list).lower()"},{"line_number":116,"context_line":"                    if filter_string in meta_str:"},{"line_number":117,"context_line":"                        filtered_locations.append(el)"},{"line_number":118,"context_line":"                share.export_locations \u003d filtered_locations"},{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                share.export_locations \u003d all_export_locations"}],"source_content_type":"text/x-python","patch_set":14,"id":"46222c27_01a05039","line":117,"range":{"start_line":109,"start_character":12,"end_line":117,"end_character":53},"updated":"2026-02-19 17:13:49.000000000","message":"Maybe make the client side filtering similar to what is done in the ExportLocationsTab: for-loop vs. list comprehension.\nI have no preference for either, but having it similar makes it easier to maintain :)","commit_id":"dbf3e85d08762f112c17b34ac74a07e45d045a72"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"7d9c8b14f5f254a81cfeac6e88112be05ba2db73","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                self.request, share_id)"},{"line_number":107,"context_line":"            filter_string \u003d self.request.GET.get("},{"line_number":108,"context_line":"                \u0027metadata_filter\u0027, \u0027\u0027).strip().lower()"},{"line_number":109,"context_line":"            if filter_string:"},{"line_number":110,"context_line":"                filtered_locations \u003d []"},{"line_number":111,"context_line":"                for el in all_export_locations:"},{"line_number":112,"context_line":"                    meta_list \u003d ["},{"line_number":113,"context_line":"                        \"%s\u003d%s\" % (k, v) for k, v in el.metadata.items()"},{"line_number":114,"context_line":"                    ]"},{"line_number":115,"context_line":"                    meta_str \u003d \" \".join(meta_list).lower()"},{"line_number":116,"context_line":"                    if filter_string in meta_str:"},{"line_number":117,"context_line":"                        filtered_locations.append(el)"},{"line_number":118,"context_line":"                share.export_locations \u003d filtered_locations"},{"line_number":119,"context_line":"            else:"},{"line_number":120,"context_line":"                share.export_locations \u003d all_export_locations"}],"source_content_type":"text/x-python","patch_set":14,"id":"2287d155_8de5b354","line":117,"range":{"start_line":109,"start_character":12,"end_line":117,"end_character":53},"in_reply_to":"46222c27_01a05039","updated":"2026-02-21 08:04:28.000000000","message":"Done","commit_id":"dbf3e85d08762f112c17b34ac74a07e45d045a72"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d590b22da10a7f3eddf466e178ed6a00965d5957","unresolved":true,"context_lines":[{"line_number":104,"context_line":"            share.rules \u003d manila.share_rules_list(self.request, share_id)"},{"line_number":105,"context_line":"            all_export_locations \u003d manila.share_export_location_list("},{"line_number":106,"context_line":"                self.request, share_id)"},{"line_number":107,"context_line":"            filter_string \u003d self.request.GET.get("},{"line_number":108,"context_line":"                \u0027metadata_filter\u0027, \u0027\u0027).strip().lower()"},{"line_number":109,"context_line":"            if filter_string:"},{"line_number":110,"context_line":"                share.export_locations \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"a441b9f0_e1cc3f4c","line":107,"updated":"2026-02-24 06:50:56.000000000","message":"The `metadata_filter` query parameter handling here (lines\n107-118) appears to be dead code. The `ExportLocationFilterAction`\nin tables.py generates a different query parameter\n(`export_locations__filter__q`), and the actual filtering is\ndone in `ExportLocationsTab.get_export_locations_data()` in\ntabs.py.","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"3553926f457232d6720ba51db640916e8e6adcec","unresolved":false,"context_lines":[{"line_number":104,"context_line":"            share.rules \u003d manila.share_rules_list(self.request, share_id)"},{"line_number":105,"context_line":"            all_export_locations \u003d manila.share_export_location_list("},{"line_number":106,"context_line":"                self.request, share_id)"},{"line_number":107,"context_line":"            filter_string \u003d self.request.GET.get("},{"line_number":108,"context_line":"                \u0027metadata_filter\u0027, \u0027\u0027).strip().lower()"},{"line_number":109,"context_line":"            if filter_string:"},{"line_number":110,"context_line":"                share.export_locations \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"1400b99e_b48d3eeb","line":107,"in_reply_to":"a441b9f0_e1cc3f4c","updated":"2026-03-12 13:11:59.000000000","message":"Done","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d590b22da10a7f3eddf466e178ed6a00965d5957","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                ]"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                share.export_locations \u003d all_export_locations"},{"line_number":119,"context_line":"            export_locations_paths \u003d ["},{"line_number":120,"context_line":"                exp[\u0027path\u0027] for exp in share.export_locations]"},{"line_number":121,"context_line":"            share.el_size \u003d ui_utils.calculate_longest_str_size("},{"line_number":122,"context_line":"                export_locations_paths)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3b440a3f_0f13d954","line":119,"updated":"2026-02-24 06:50:56.000000000","message":"`export_locations_paths` and `share.el_size` are dead code now\nthat the inline export location display was removed from\n`_detail.html`.","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"3553926f457232d6720ba51db640916e8e6adcec","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                ]"},{"line_number":117,"context_line":"            else:"},{"line_number":118,"context_line":"                share.export_locations \u003d all_export_locations"},{"line_number":119,"context_line":"            export_locations_paths \u003d ["},{"line_number":120,"context_line":"                exp[\u0027path\u0027] for exp in share.export_locations]"},{"line_number":121,"context_line":"            share.el_size \u003d ui_utils.calculate_longest_str_size("},{"line_number":122,"context_line":"                export_locations_paths)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1ea5f1c9_b1645b2e","line":119,"in_reply_to":"3b440a3f_0f13d954","updated":"2026-03-12 13:11:59.000000000","message":"Done","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"}],"manila_ui/tests/dashboards/project/shares/tests.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d590b22da10a7f3eddf466e178ed6a00965d5957","unresolved":true,"context_lines":[{"line_number":255,"context_line":"            res, \"\u003cdiv\u003e\u003cb\u003eAccess Level: \u003c/b\u003erw\u003c/div\u003e\", len(rules), 200)"},{"line_number":256,"context_line":"        self.assertContains("},{"line_number":257,"context_line":"            res, \"\u003cdiv\u003e\u003cb\u003eStatus: \u003c/b\u003eactive\u003c/div\u003e\", len(rules), 200)"},{"line_number":258,"context_line":"        self.assertNoMessages()"},{"line_number":259,"context_line":"        api_manila.share_rules_list.assert_called_once_with("},{"line_number":260,"context_line":"            mock.ANY, self.share.id)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1b74ed27_ecde136b","line":258,"updated":"2026-02-24 06:50:56.000000000","message":"The assertion that `share_export_location_list` was called\nwas removed from `test_detail_view`, but `DetailView.get_data()`\nstill calls it (views.py line 105).","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"},{"author":{"_account_id":38469,"name":"Rose Kimondo","display_name":"Rose Kimondo","email":"rosewairimu1@gmail.com","username":"rosekimondo"},"change_message_id":"3553926f457232d6720ba51db640916e8e6adcec","unresolved":false,"context_lines":[{"line_number":255,"context_line":"            res, \"\u003cdiv\u003e\u003cb\u003eAccess Level: \u003c/b\u003erw\u003c/div\u003e\", len(rules), 200)"},{"line_number":256,"context_line":"        self.assertContains("},{"line_number":257,"context_line":"            res, \"\u003cdiv\u003e\u003cb\u003eStatus: \u003c/b\u003eactive\u003c/div\u003e\", len(rules), 200)"},{"line_number":258,"context_line":"        self.assertNoMessages()"},{"line_number":259,"context_line":"        api_manila.share_rules_list.assert_called_once_with("},{"line_number":260,"context_line":"            mock.ANY, self.share.id)"},{"line_number":261,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"c39399e4_f6133322","line":258,"in_reply_to":"1b74ed27_ecde136b","updated":"2026-03-12 13:11:59.000000000","message":"Done","commit_id":"9e8ee54ad285775a5b5683e745f8c04fe329d7b2"}]}
