From 7b1f2a6137b6b2c1765bd9d852d08594772e6d66 Mon Sep 17 00:00:00 2001 From: Yu Ming Zhu Date: Fri, 8 Dec 2023 23:52:15 +0000 Subject: [PATCH] cli: [list-permissions] backward compatibility for getUserPermsInheritance call fixes: #3959 --- cli/koji_cli/commands.py | 20 +++++++++++++++----- tests/test_cli/test_list_permissions.py | 22 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index b954cff2..9c52358d 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -2176,11 +2176,21 @@ def handle_list_permissions(goptions, session, args): user = session.getUser(options.user) if not user: error("No such user: %s" % options.user) - for p, groups in session.getUserPermsInheritance(user['id']).items(): - p = {'name': p} - if groups != [None]: - p['description'] = 'inherited from: %s' % ', '.join(groups) - perms.append(p) + try: + for p, groups in session.getUserPermsInheritance(user['id']).items(): + p = {'name': p} + if groups != [None]: + p['description'] = 'inherited from: %s' % ', '.join(groups) + perms.append(p) + except koji.GenericError as e: + # backwards compatible + # TODO: can be removed in 1.36 + if "Invalid method" in str(e): + warn("Old hub doesn't support Inherited Group Permissions.") + for p in session.getUserPerms(user['id']): + perms.append({'name': p}) + else: + raise else: for p in session.getAllPerms(): perms.append({'name': p['name'], 'description': p['description']}) diff --git a/tests/test_cli/test_list_permissions.py b/tests/test_cli/test_list_permissions.py index 2b8a0b0d..d9dc0771 100644 --- a/tests/test_cli/test_list_permissions.py +++ b/tests/test_cli/test_list_permissions.py @@ -3,6 +3,7 @@ import mock import six import unittest +import koji from koji_cli.commands import handle_list_permissions from . import utils @@ -133,6 +134,27 @@ repo self.session.getPerms.assert_not_called() self.session.getAllPerms.assert_not_called() + @mock.patch('sys.stdout', new_callable=six.StringIO) + def test_handle_list_permissions_without_group_perm_inheritance(self, stdout): + """Test handle_list_permissions without group perm inheritance""" + expected = """build +repo +""" + self.session.getLoggedInUser.return_value = {'id': 1, 'name': 'user'} + self.session.getUserPermsInheritance.side_effect = koji.GenericError( + "Invalid method: getUserPermsInheritance" + ) + self.session.getUserPerms.return_value = [p['name'] for p in self.all_perms[1:3]] + handle_list_permissions(self.options, self.session, ['--mine']) + self.assert_console_message(stdout, expected) + + self.activate_session_mock.assert_called_once() + self.session.getUser.assert_called_once() + self.session.getUserPermsInheritance.assert_called_once() + self.session.getUserPerms.assert_called_once() + self.session.getPerms.assert_not_called() + self.session.getAllPerms.assert_not_called() + @mock.patch('sys.stdout', new_callable=six.StringIO) def test_handle_list_permissions_all_perms_quiet_false(self, stdout): """Test handle_list_permissions all permissions and quiet is false"""