cli: [list-permissions] backward compatibility for getUserPermsInheritance call

fixes: #3959
This commit is contained in:
Yu Ming Zhu 2023-12-08 23:52:15 +00:00
parent e55303c2ce
commit 7b1f2a6137
2 changed files with 37 additions and 5 deletions

View file

@ -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']})

View file

@ -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"""