)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e47f8b32f4282a44cd50cf6c8d36eff8879a141a","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Default role checker should be case-insensitive."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sometimes Keystone and Horizon default roles have the same meaning,"},{"line_number":10,"context_line":"but different cases."},{"line_number":11,"context_line":"For instance, Keystone default role is \"Member\", Horizon - \"member\"."},{"line_number":12,"context_line":"We should check default role in case-insensitive manner."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"b1147f96_08cd4627","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":9},"updated":"2021-05-20 18:22:57.000000000","message":"According to the keystone document you referred, role names are always case-insensitive.\n\"Sometimes\" is confusing. Perhaps the commit message should mention that keystone role names are case-insensistive and horizon should handle role names in a case-insensitive manner.","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"},{"author":{"_account_id":32927,"name":"mitya-eremeev-2","display_name":"Mitya Eremeev","email":"mitossvyaz@mail.ru","username":"mitya-eremeev-2"},"change_message_id":"bc227177568749bebea3927e764b6f59135990d4","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Default role checker should be case-insensitive."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Sometimes Keystone and Horizon default roles have the same meaning,"},{"line_number":10,"context_line":"but different cases."},{"line_number":11,"context_line":"For instance, Keystone default role is \"Member\", Horizon - \"member\"."},{"line_number":12,"context_line":"We should check default role in case-insensitive manner."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"a91e5f6a_064c1c9a","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":9},"in_reply_to":"b1147f96_08cd4627","updated":"2021-05-21 20:11:56.000000000","message":"done","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72aabc269eba68fb3021597f232c68f5cf2b6f6b","unresolved":true,"context_lines":[{"line_number":17,"context_line":"Also whatever is written in defaults can be overridden in settings by the operator -"},{"line_number":18,"context_line":"especially these days when actually the default should be \u0027member\u0027"},{"line_number":19,"context_line":"(one of the default roles created by Keystone during the bootstrap),"},{"line_number":20,"context_line":"not _member_ which is there for legacy reasons I presume."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ibfb80a47a8aaed8f33e4e1dcfb428e70c829f0dd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"c174b5fc_9307013c","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":57},"updated":"2021-05-25 18:17:17.000000000","message":"Perhaps horizon should update the default value from _member_ to member, but this is a separate topic. I will take care of it.","commit_id":"3aaeadf895e96598acc64d54d8dd55e2b616e7ad"}],"openstack_dashboard/api/keystone.py":[{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"bf6377940df80718ecb924eafce4432e42135a0e","unresolved":true,"context_lines":[{"line_number":781,"context_line":"    to request. Supports lookup by name or id."},{"line_number":782,"context_line":"    \"\"\""},{"line_number":783,"context_line":"    global DEFAULT_ROLE"},{"line_number":784,"context_line":"    default \u003d settings.OPENSTACK_KEYSTONE_DEFAULT_ROLE.lower()"},{"line_number":785,"context_line":"    if default and DEFAULT_ROLE is None:"},{"line_number":786,"context_line":"        try:"},{"line_number":787,"context_line":"            roles \u003d keystoneclient(request, admin\u003dTrue).roles.list()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5e154a69_349dfbcf","line":784,"range":{"start_line":784,"start_character":23,"end_line":784,"end_character":54},"updated":"2021-05-17 08:40:31.000000000","message":"If you look in defaults.py[1] file value of \u0027OPENSTACK_KEYSTONE_DEFAULT_ROLE\u0027 is\nalready in lowercase. So I didn\u0027t understand why we need to use lower() function here.\nI think \u0027OPENSTACK_KEYSTONE_DEFAULT_ROLE\u0027 value is Member(in uppercase) before havana release.\n\n[1] https://opendev.org/openstack/horizon/src/branch/master/openstack_dashboard/defaults.py#L384","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"},{"author":{"_account_id":32927,"name":"mitya-eremeev-2","display_name":"Mitya Eremeev","email":"mitossvyaz@mail.ru","username":"mitya-eremeev-2"},"change_message_id":"bb2ed97e543bf7f21277b362564fe6b476edfb13","unresolved":true,"context_lines":[{"line_number":781,"context_line":"    to request. Supports lookup by name or id."},{"line_number":782,"context_line":"    \"\"\""},{"line_number":783,"context_line":"    global DEFAULT_ROLE"},{"line_number":784,"context_line":"    default \u003d settings.OPENSTACK_KEYSTONE_DEFAULT_ROLE.lower()"},{"line_number":785,"context_line":"    if default and DEFAULT_ROLE is None:"},{"line_number":786,"context_line":"        try:"},{"line_number":787,"context_line":"            roles \u003d keystoneclient(request, admin\u003dTrue).roles.list()"}],"source_content_type":"text/x-python","patch_set":1,"id":"5ef4b252_6a9ea868","line":784,"range":{"start_line":784,"start_character":23,"end_line":784,"end_character":54},"in_reply_to":"5e154a69_349dfbcf","updated":"2021-05-17 09:25:05.000000000","message":"OPENSTACK_KEYSTONE_DEFAULT_ROLE\u0027s \"member\" just default value, but it can be re-defined to any value in any case.\nFor instance, keystone default member value can be equal \"Member\" and Horizon can expect the variable should be equal \"member\". So these two components will never negotiate successfully.\nWe should provide case-insensitive calculation for the variable.\nSorry I didn\u0027t explain it in the first place(","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"7998478a470e3da6f11b504f640f8cb10a6a43e9","unresolved":true,"context_lines":[{"line_number":781,"context_line":"    to request. Supports lookup by name or id."},{"line_number":782,"context_line":"    \"\"\""},{"line_number":783,"context_line":"    global DEFAULT_ROLE"},{"line_number":784,"context_line":"    default \u003d settings.OPENSTACK_KEYSTONE_DEFAULT_ROLE.lower()"},{"line_number":785,"context_line":"    if default and DEFAULT_ROLE is None:"},{"line_number":786,"context_line":"        try:"},{"line_number":787,"context_line":"            roles \u003d keystoneclient(request, admin\u003dTrue).roles.list()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3270ea83_6eb88a20","line":784,"range":{"start_line":784,"start_character":23,"end_line":784,"end_character":54},"in_reply_to":"5ef4b252_6a9ea868","updated":"2021-05-17 12:30:08.000000000","message":"ok thanks for explaining.","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"}],"openstack_dashboard/test/unit/api/test_keystone.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"e47f8b32f4282a44cd50cf6c8d36eff8879a141a","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def tearDown(self):"},{"line_number":34,"context_line":"        api.keystone.DEFAULT_ROLE \u003d None"},{"line_number":35,"context_line":"        super().tearDown()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @mock.patch.object(api.keystone, \u0027keystoneclient\u0027)"},{"line_number":38,"context_line":"    def test_remove_tenant_user(self, mock_keystoneclient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c883100_c95874de","line":35,"updated":"2021-05-20 18:22:57.000000000","message":"I think it is better to mock api.keystone.DEFAULT_ROLE inside a test rather than resetting it in tearDown. We cleaned up most usage of tearDown (while some still exist for corner cases).\n\nmock.patch.object() should work according to my small test.\n\n \u003e\u003e\u003e from unittest import mock\n \u003e\u003e\u003e from openstack_dashboard import api\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE \u003d 1\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE\n 1\n \u003e\u003e\u003e m \u003d mock.patch.object(api.keystone, \u0027DEFAULT_ROLE\u0027, new\u003dNone)\n \u003e\u003e\u003e m.start()\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE \u003d 10\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE\n 10\n \u003e\u003e\u003e m.stop()\n \u003e\u003e\u003e api.keystone.DEFAULT_ROLE\n 1\n \u003e\u003e\u003e","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"},{"author":{"_account_id":32927,"name":"mitya-eremeev-2","display_name":"Mitya Eremeev","email":"mitossvyaz@mail.ru","username":"mitya-eremeev-2"},"change_message_id":"bc227177568749bebea3927e764b6f59135990d4","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def tearDown(self):"},{"line_number":34,"context_line":"        api.keystone.DEFAULT_ROLE \u003d None"},{"line_number":35,"context_line":"        super().tearDown()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @mock.patch.object(api.keystone, \u0027keystoneclient\u0027)"},{"line_number":38,"context_line":"    def test_remove_tenant_user(self, mock_keystoneclient):"}],"source_content_type":"text/x-python","patch_set":1,"id":"56b714cd_c67b3c6b","line":35,"in_reply_to":"6c883100_c95874de","updated":"2021-05-21 20:11:56.000000000","message":"done","commit_id":"f0e9f50b462198e5eb3a73db6f09b9bdae4f1608"}]}
