)]}'
{"openstackclient/identity/v3/role.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"52d52d47de06daba9c9449bd469cc48ec28b35af","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exception.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_3ab884e3","line":84,"updated":"2020-07-09 23:28:35.000000000","message":"pep8: F821 undefined name \u0027exception\u0027","commit_id":"75f3f970190ab6425ee73eb087771b4e342c4a7b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a24d1739926af6f345de8d9431a44dad00e39718","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exception.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_73233ea8","line":84,"in_reply_to":"bf51134e_3ab884e3","updated":"2020-07-10 13:34:07.000000000","message":"Done","commit_id":"75f3f970190ab6425ee73eb087771b4e342c4a7b"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"52d52d47de06daba9c9449bd469cc48ec28b35af","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                    parsed_args.group,"},{"line_number":100,"context_line":"                    parsed_args.group_domain"},{"line_number":101,"context_line":"                ).id"},{"line_number":102,"context_line":"            except exception.CommandError:"},{"line_number":103,"context_line":"                group \u003d parsed_args.group"},{"line_number":104,"context_line":"        return group"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_9ad0b021","line":102,"updated":"2020-07-09 23:28:35.000000000","message":"pep8: F821 undefined name \u0027exception\u0027","commit_id":"75f3f970190ab6425ee73eb087771b4e342c4a7b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a24d1739926af6f345de8d9431a44dad00e39718","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                    parsed_args.group,"},{"line_number":100,"context_line":"                    parsed_args.group_domain"},{"line_number":101,"context_line":"                ).id"},{"line_number":102,"context_line":"            except exception.CommandError:"},{"line_number":103,"context_line":"                group \u003d parsed_args.group"},{"line_number":104,"context_line":"        return group"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_d33b2ace","line":102,"in_reply_to":"bf51134e_9ad0b021","updated":"2020-07-10 13:34:07.000000000","message":"Done","commit_id":"75f3f970190ab6425ee73eb087771b4e342c4a7b"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"8de3e90253ed009dad5d0f104f914ffc3116d60e","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _find_user():"},{"line_number":71,"context_line":"        if validate_actor_existence:"},{"line_number":72,"context_line":"            user \u003d common.find_user("},{"line_number":73,"context_line":"                identity_client_manager,"},{"line_number":74,"context_line":"                parsed_args.user,"},{"line_number":75,"context_line":"                parsed_args.user_domain"},{"line_number":76,"context_line":"            ).id"},{"line_number":77,"context_line":"        elif validate_actor_existence is False:"},{"line_number":78,"context_line":"            try:"},{"line_number":79,"context_line":"                user \u003d common.find_user("},{"line_number":80,"context_line":"                    identity_client_manager,"},{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exceptions.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_f3974e44","line":83,"range":{"start_line":72,"start_character":11,"end_line":83,"end_character":20},"updated":"2020-07-10 13:50:57.000000000","message":"rather than duplicate this code, better handle the exception always and decide upon the boolean value whether to silence it or not","commit_id":"42e6a86b32e2c65346982fb43ba28865e5109cd0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2926a559be12971aa5ea57676cbd88f079f3da70","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _find_user():"},{"line_number":71,"context_line":"        if validate_actor_existence:"},{"line_number":72,"context_line":"            user \u003d common.find_user("},{"line_number":73,"context_line":"                identity_client_manager,"},{"line_number":74,"context_line":"                parsed_args.user,"},{"line_number":75,"context_line":"                parsed_args.user_domain"},{"line_number":76,"context_line":"            ).id"},{"line_number":77,"context_line":"        elif validate_actor_existence is False:"},{"line_number":78,"context_line":"            try:"},{"line_number":79,"context_line":"                user \u003d common.find_user("},{"line_number":80,"context_line":"                    identity_client_manager,"},{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exceptions.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_7e85c506","line":83,"range":{"start_line":72,"start_character":11,"end_line":83,"end_character":20},"in_reply_to":"bf51134e_f3974e44","updated":"2020-07-10 14:29:34.000000000","message":"Done","commit_id":"42e6a86b32e2c65346982fb43ba28865e5109cd0"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"8de3e90253ed009dad5d0f104f914ffc3116d60e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exceptions.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_13748235","line":84,"range":{"start_line":84,"start_character":19,"end_line":84,"end_character":42},"updated":"2020-07-10 13:50:57.000000000","message":"I am afraid it might be too general to rely on this exception type, better check whether it is truly that the user/group is missing","commit_id":"42e6a86b32e2c65346982fb43ba28865e5109cd0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2926a559be12971aa5ea57676cbd88f079f3da70","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exceptions.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_3e8fcd2a","line":84,"range":{"start_line":84,"start_character":19,"end_line":84,"end_character":42},"in_reply_to":"bf51134e_13748235","updated":"2020-07-10 14:29:34.000000000","message":"The 404 from keystone is excepted earlier in the stack and this exception is raised in stead. Do you recommend doing a string comparison?","commit_id":"42e6a86b32e2c65346982fb43ba28865e5109cd0"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"94998db336543a39895ea2061beb1cbae37e60d8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    parsed_args.user,"},{"line_number":82,"context_line":"                    parsed_args.user_domain"},{"line_number":83,"context_line":"                ).id"},{"line_number":84,"context_line":"            except exceptions.CommandError:"},{"line_number":85,"context_line":"                user \u003d parsed_args.user"},{"line_number":86,"context_line":"        return user"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_993d5390","line":84,"range":{"start_line":84,"start_character":19,"end_line":84,"end_character":42},"in_reply_to":"bf51134e_3e8fcd2a","updated":"2020-07-10 15:14:17.000000000","message":"Hmm, it seems it would be the most straightforward.","commit_id":"42e6a86b32e2c65346982fb43ba28865e5109cd0"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"a901023484611b76eb2610c3be5c34d4cf3c0d94","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                parsed_args.user_domain"},{"line_number":76,"context_line":"            ).id"},{"line_number":77,"context_line":"        except exceptions.CommandError:"},{"line_number":78,"context_line":"            if validate_actor_existence is False:"},{"line_number":79,"context_line":"                return parsed_args.user"},{"line_number":80,"context_line":"            raise"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_f9df2f63","line":78,"range":{"start_line":78,"start_character":15,"end_line":78,"end_character":48},"updated":"2020-07-10 15:13:46.000000000","message":"not validate...","commit_id":"b6dae7da7d3db26ce48898c0fdb4dc25f5db52e5"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"f86d5471c6db408071b11d61c9da7f6b5f802890","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                parsed_args.user_domain"},{"line_number":76,"context_line":"            ).id"},{"line_number":77,"context_line":"        except exceptions.CommandError:"},{"line_number":78,"context_line":"            if validate_actor_existence is False:"},{"line_number":79,"context_line":"                return parsed_args.user"},{"line_number":80,"context_line":"            raise"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_cf1fc558","line":78,"range":{"start_line":78,"start_character":15,"end_line":78,"end_character":48},"in_reply_to":"bf51134e_b3e661af","updated":"2020-07-15 12:41:35.000000000","message":"I agree this way could help us to detect if something went wrong (0, None) and we will fall into the `raise` part in this case. In other word by checking if False we harden the test and allowed values.","commit_id":"b6dae7da7d3db26ce48898c0fdb4dc25f5db52e5"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"8c7b5a8bde2860a84c001ad56365023049bdfa1b","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                parsed_args.user_domain"},{"line_number":76,"context_line":"            ).id"},{"line_number":77,"context_line":"        except exceptions.CommandError:"},{"line_number":78,"context_line":"            if validate_actor_existence is False:"},{"line_number":79,"context_line":"                return parsed_args.user"},{"line_number":80,"context_line":"            raise"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_52c35838","line":78,"range":{"start_line":78,"start_character":15,"end_line":78,"end_character":48},"in_reply_to":"bf51134e_cf1fc558","updated":"2020-07-15 13:49:57.000000000","message":"But it looks odd and does not follow the rest of the code. The boolean/conditional context is best consumed with if/if not. It *could* be acceptable to use the \u0027is False\u0027-esque constructs in unit tests to really validate whether something produces proper booleans but otherwise it is not a good style.","commit_id":"b6dae7da7d3db26ce48898c0fdb4dc25f5db52e5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"01160df2393af6142dd4d5bde814e3f9ca862394","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                parsed_args.user_domain"},{"line_number":76,"context_line":"            ).id"},{"line_number":77,"context_line":"        except exceptions.CommandError:"},{"line_number":78,"context_line":"            if validate_actor_existence is False:"},{"line_number":79,"context_line":"                return parsed_args.user"},{"line_number":80,"context_line":"            raise"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_b3e661af","line":78,"range":{"start_line":78,"start_character":15,"end_line":78,"end_character":48},"in_reply_to":"bf51134e_f9df2f63","updated":"2020-07-13 13:22:06.000000000","message":"Using:\n\n  if not validate_actor_existence:\n\nWill work for False, 0, None, and empty python data types (lists, sets, dictionaries, etc). Is that the preferred practice here?\n\nI\u0027m curious because I defaulted to writing this to only work with booleans to make it more explicit for the caller.","commit_id":"b6dae7da7d3db26ce48898c0fdb4dc25f5db52e5"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"a901023484611b76eb2610c3be5c34d4cf3c0d94","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                parsed_args.group_domain"},{"line_number":88,"context_line":"            ).id"},{"line_number":89,"context_line":"        except exceptions.CommandError:"},{"line_number":90,"context_line":"            if validate_actor_existence is False:"},{"line_number":91,"context_line":"                return parsed_args.group"},{"line_number":92,"context_line":"            raise"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bf51134e_39d7e74d","line":90,"range":{"start_line":90,"start_character":15,"end_line":90,"end_character":48},"updated":"2020-07-10 15:13:46.000000000","message":"not validate...","commit_id":"b6dae7da7d3db26ce48898c0fdb4dc25f5db52e5"}],"openstackclient/tests/unit/identity/v3/test_role.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"3c552e040462209a753fbf650e021d84a035f408","unresolved":false,"context_lines":[{"line_number":849,"context_line":""},{"line_number":850,"context_line":"    @mock.patch.object(common, \u0027find_user\u0027)"},{"line_number":851,"context_line":"    def test_role_remove_non_existent_user_system(self, find_mock):"},{"line_number":852,"context_line":"        # Simulate the user not being in keystone, the client the gracefully"},{"line_number":853,"context_line":"        # handle this exception and send the request to remove the role since"},{"line_number":854,"context_line":"        # keystone will validate."},{"line_number":855,"context_line":"        find_mock.side_effect \u003d exceptions.CommandError"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_17653446","line":852,"range":{"start_line":852,"start_character":62,"end_line":852,"end_character":65},"updated":"2020-08-11 09:37:02.000000000","message":"should?","commit_id":"9960fa2e5c691c5edb8e0e1151830de6e23fa93e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a994afb01c645fffdcb0c0324319553a136da4b3","unresolved":false,"context_lines":[{"line_number":849,"context_line":""},{"line_number":850,"context_line":"    @mock.patch.object(common, \u0027find_user\u0027)"},{"line_number":851,"context_line":"    def test_role_remove_non_existent_user_system(self, find_mock):"},{"line_number":852,"context_line":"        # Simulate the user not being in keystone, the client the gracefully"},{"line_number":853,"context_line":"        # handle this exception and send the request to remove the role since"},{"line_number":854,"context_line":"        # keystone will validate."},{"line_number":855,"context_line":"        find_mock.side_effect \u003d exceptions.CommandError"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_a3a878db","line":852,"range":{"start_line":852,"start_character":62,"end_line":852,"end_character":65},"in_reply_to":"9f560f44_17653446","updated":"2020-08-12 17:24:08.000000000","message":"Done","commit_id":"9960fa2e5c691c5edb8e0e1151830de6e23fa93e"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"3c552e040462209a753fbf650e021d84a035f408","unresolved":false,"context_lines":[{"line_number":851,"context_line":"    def test_role_remove_non_existent_user_system(self, find_mock):"},{"line_number":852,"context_line":"        # Simulate the user not being in keystone, the client the gracefully"},{"line_number":853,"context_line":"        # handle this exception and send the request to remove the role since"},{"line_number":854,"context_line":"        # keystone will validate."},{"line_number":855,"context_line":"        find_mock.side_effect \u003d exceptions.CommandError"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"        arglist \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_57d4ccbd","line":854,"range":{"start_line":854,"start_character":24,"end_line":854,"end_character":32},"updated":"2020-08-11 09:37:02.000000000","message":"What will keystone validate, I\u0027m assuming existence of the role assignment? Maybe be more verbose here? Or maybe rephrase this somehow?","commit_id":"9960fa2e5c691c5edb8e0e1151830de6e23fa93e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a994afb01c645fffdcb0c0324319553a136da4b3","unresolved":false,"context_lines":[{"line_number":851,"context_line":"    def test_role_remove_non_existent_user_system(self, find_mock):"},{"line_number":852,"context_line":"        # Simulate the user not being in keystone, the client the gracefully"},{"line_number":853,"context_line":"        # handle this exception and send the request to remove the role since"},{"line_number":854,"context_line":"        # keystone will validate."},{"line_number":855,"context_line":"        find_mock.side_effect \u003d exceptions.CommandError"},{"line_number":856,"context_line":""},{"line_number":857,"context_line":"        arglist \u003d ["}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_c3f12c04","line":854,"range":{"start_line":854,"start_character":24,"end_line":854,"end_character":32},"in_reply_to":"9f560f44_57d4ccbd","updated":"2020-08-12 17:24:08.000000000","message":"Done","commit_id":"9960fa2e5c691c5edb8e0e1151830de6e23fa93e"}],"releasenotes/notes/bug-2006635-3110f7a87a186e62.yaml":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"3c552e040462209a753fbf650e021d84a035f408","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    You can now remove role assignments from keystone that reference non-existent"},{"line_number":5,"context_line":"    users."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    [Bug `2006635 \u003chttps://storyboard.openstack.org/#!/story/2006635\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9f560f44_97d5c4ba","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":9},"updated":"2020-08-11 09:37:02.000000000","message":"users or groups.","commit_id":"9960fa2e5c691c5edb8e0e1151830de6e23fa93e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a994afb01c645fffdcb0c0324319553a136da4b3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    You can now remove role assignments from keystone that reference non-existent"},{"line_number":5,"context_line":"    users."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    [Bug `2006635 \u003chttps://storyboard.openstack.org/#!/story/2006635\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"9f560f44_e3d7104f","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":9},"in_reply_to":"9f560f44_97d5c4ba","updated":"2020-08-12 17:24:08.000000000","message":"Done","commit_id":"9960fa2e5c691c5edb8e0e1151830de6e23fa93e"}]}
