From 1480224724864cb7cf34c9be755b905c61f885b9 Mon Sep 17 00:00:00 2001 From: Jason Gerard DeRose Date: Tue, 14 Oct 2008 01:45:30 -0600 Subject: [PATCH] Started roughing out user_add() using api.Backend.ldap; added Command.output_for_cli() to take care of formatting print output --- ipalib/cli.py | 2 +- ipalib/frontend.py | 9 +++++++++ ipalib/plugins/f_user.py | 28 +++++++++++++++++++--------- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/ipalib/cli.py b/ipalib/cli.py index 5bebc88d5..5dd2c44f2 100644 --- a/ipalib/cli.py +++ b/ipalib/cli.py @@ -302,7 +302,7 @@ class CLI(object): break except errors.ValidationError, e: error = e.error - cmd(**kw) + cmd.output_for_cli(cmd(**kw)) def parse(self, cmd, argv): parser = self.build_parser(cmd) diff --git a/ipalib/frontend.py b/ipalib/frontend.py index 65b053e6c..da4fd00b1 100644 --- a/ipalib/frontend.py +++ b/ipalib/frontend.py @@ -486,6 +486,7 @@ class Command(plugable.Plugin): 'params', 'args_to_kw', 'kw_to_args', + 'output_for_cli', )) takes_options = tuple() takes_args = tuple() @@ -741,6 +742,14 @@ class Command(plugable.Plugin): multivalue = True yield arg + def output_for_cli(self, ret): + """ + Output result of this command to command line interface. + """ + assert type(ret) is dict, 'base output_for_cli() only works with dict' + for key in sorted(ret): + print '%s = %r' % (key, ret[key]) + class Object(plugable.Plugin): __public__ = frozenset(( diff --git a/ipalib/plugins/f_user.py b/ipalib/plugins/f_user.py index 22fb8a278..571f6fa8d 100644 --- a/ipalib/plugins/f_user.py +++ b/ipalib/plugins/f_user.py @@ -75,12 +75,26 @@ api.register(user) class user_add(crud.Add): 'Add a new user.' - def execute(self, *args, **kw): - """args[0] = uid of the user to add - kw{container} is the location in the DIT to add the user, not - required - kw otherwise contains all the attributes + + def execute(self, uid, **kw): """ + Execute the user-add operation. + + The dn should not be passed as a keyword argument as it is constructed + by this method. + + Returns the entry as it will be created in LDAP. + + :param uid: The login name of the user being added. + :param kw: Keyword arguments for the other LDAP attributes. + """ + assert 'uid' not in kw + assert 'dn' not in kw + kw['uid'] = uid + kw['dn'] = self.api.Backend.ldap.get_user_dn(uid) + + return kw + # FIXME: ug, really? if not kw.get('container'): user_container = servercore.DefaultUserContainer @@ -162,10 +176,6 @@ class user_add(crud.Add): result = servercore.add_entry(entry) return result - def forward(self, *args, **kw): - result = super(crud.Add, self).forward(*args, **kw) - if result: - print "User %s added" % args[0] api.register(user_add)