[Freeipa-devel] [PATCH] 228 add function to prompt for entry after multiple results in -find

Rob Crittenden rcritten at redhat.com
Tue Jun 9 17:22:39 UTC 2009


Jason Gerard DeRose wrote:
> On Mon, 2009-06-08 at 17:41 -0400, Rob Crittenden wrote:
>> The -find commands right now just dump all the data that was found. This 
>> function can be used to display a list of the results so the user can 
>> select a specfic record that will be displayed.
>>
>> I think that we'll ultimitely implement this within the LDAPObject class 
>> to make it easier on plugin developers. What they will need to provide 
>> is the format line that will be used and the attributes to display.
>>
>> The code looks something like:
>>
>>          selected = textui.select_entry(users,
>>                                         "%(givenname)s %(sn)s (%(uid)s)",
>>                                         ("givenname", "sn", "uid"))
>>          if selected == -2:
>>              # Don't show anything else
>>              return
>>
>>          if selected >= 0:
>>              users = [users[selected]]
>>              counter = 1
>>
>>          for u in xrange(counter):
>>              cmd = api.Command['user_show']
>>              result = cmd(users[u]['uid'].decode('UTF-8'), **options)
>>              if callable(cmd.output_for_cli):
>>                  for param in cmd.params():
>>                      if param.password and param.name in options:
>>                          del options[param.name]
>>                  (args, options) = cmd.params_2_args_options(**options)
>>                  cmd.output_for_cli(self.api.Backend.textui, result, 
>> *args, **options)
>>
>> This demonstrates the full code in output_for_cli() for the current user 
>> plugin. It looks like this to the user:
>>
>> % ipa user-find tim
>> ---------------
>> Found 3 matches
>> ---------------
>> 1: Tim User (tuser1)
>> 2: Tim User (tuser2)
>> 3: Tim User (tuser3)
>> Choose one: (1 - 3), a for all, q to quit:
> 
> I think this is a reasonable approach, although it would be nice to
> allow the user just display the details on all the entries also.  This
> is important if you want to compare entries, like, "There are 10 Jason's
> where I work, I'll search for 'Jason' and find the one I'm looking for
> because I forgot the last name."  Dumping all the results (the way we do
> now) probably has important scripting use-cases too.

Enter 'a' and all entries will be displayed. If there is no controlling 
API then all entries will be displayed as well. You can also pipe your 
choice in: echo "a" | ipa user-find jason

> When you have less than 10 or so matches, IHMO the drill down approach
> is slower and more cumbersome for the user... it would be faster to
> scroll through the results to find the one you want.  I personally feel
> we should keep the way we currently do things the default and add an
> option for this kind of drill down.  Either way, there should be an
> option to switch from one behavior to another.

Ok, that should be doable. I still want to use the -show command to 
actually display any results to eliminate code duplication though. We'll 
have to see if it is worth the price of additional requests. It was 
pretty peppy on my system FWIW.

> Another nitpick: the "Found 3 matches" should really be at the bottom of
> the list as it's extremely useful in helping the user evaluate their
> search, so we don't want it to scroll off the top when there are many
> results.

Ok, that's reasonable. I'll work on a fresh patch.

rob
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3245 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20090609/f5ce2382/attachment.bin>


More information about the Freeipa-devel mailing list