From 9029e43e415ef46e2a4ddfde68aca8a1152087fa Mon Sep 17 00:00:00 2001 From: Sergey Motornyuk Date: Wed, 8 Jan 2020 15:29:06 +0200 Subject: [PATCH] Fix sysadmin-add command --- ckan/cli/sysadmin.py | 7 +++---- ckan/cli/user.py | 9 +++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/ckan/cli/sysadmin.py b/ckan/cli/sysadmin.py index 7f30f580356..b312b303a99 100644 --- a/ckan/cli/sysadmin.py +++ b/ckan/cli/sysadmin.py @@ -43,16 +43,15 @@ def list_sysadmins(): @sysadmin.command(help=u"Convert user into a sysadmin.") @click.argument(u"username") @click.argument(u"args", nargs=-1) -def add(username, args): - +@click.pass_context +def add(ctx, username, args): user = model.User.by_name(text_type(username)) if not user: click.secho(u'User "%s" not found' % username, fg=u"red") if click.confirm( u"Create new user: %s?" % username, default=True, abort=True ): - # TODO: once, cli.user is merged, invoke `user.add_user` instead - add_user([username] + list(args)) + ctx.forward(add_user) user = model.User.by_name(text_type(username)) user.sysadmin = True diff --git a/ckan/cli/user.py b/ckan/cli/user.py index e48dba2c778..f735a947169 100644 --- a/ckan/cli/user.py +++ b/ckan/cli/user.py @@ -25,7 +25,7 @@ def user(): @click.argument(u'username') @click.argument(u'args', nargs=-1) @click.pass_context -def add_user(username, args): +def add_user(ctx, username, args): u'''Add new user if we use ckan sysadmin add or ckan user add ''' @@ -70,11 +70,16 @@ def add_user(username, args): u'ignore_auth': True, u'user': site_user['name'], } - user_dict = logic.get_action(u'user_create')(context, data_dict) + flask_app = ctx.meta['flask_app'] + # Current user is tested agains sysadmin role during model + # dictization, thus we need request context + with flask_app.test_request_context(): + user_dict = logic.get_action(u'user_create')(context, data_dict) click.secho(u"Successfully created user: %s" % user_dict['name'], fg=u'green', bold=True) except logic.ValidationError as e: error_shout(e) + raise click.Abort() def get_user_str(user):