[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Freeipa-devel] [PATCH] simple command-line selector



Add simple UI for command-line programs to be able to select when
multiple entries are returned.

rob
# HG changeset patch
# User Rob Crittenden <rcritten redhat com>
# Date 1197321178 18000
# Node ID fa0be546d1824ac52973718af4d009c794eab6e3
# Parent  1886405845cd314bba5992ab32424e6096b2eabf
Add simple UI for command-line programs to be able to select when
multiple entries are returned.

diff -r 1886405845cd -r fa0be546d182 ipa-admintools/ipa-adddelegation
--- a/ipa-admintools/ipa-adddelegation	Mon Dec 10 15:01:30 2007 -0500
+++ b/ipa-admintools/ipa-adddelegation	Mon Dec 10 16:12:58 2007 -0500
@@ -23,9 +23,9 @@ import ipa
 import ipa
 import ipa.user
 import ipa.ipaclient as ipaclient
-import ipa.ipavalidate as ipavalidate
 import ipa.config
 import ipa.aci
+import ipa.ipaadminutil as ipaadminutil
 
 import xmlrpclib
 import kerberos
@@ -68,27 +68,53 @@ def main():
         client = ipaclient.IPAClient()
 
         source_grp = client.find_groups(options.source)
-        if source_grp[0] > 1:
-            print "Multiple matches found for %s." % options.source
+        counter = source_grp[0]
+        source_grp = source_grp[1:]
+        groupindex = -1
+        if counter == 0:
+            print "No entries found for %s" % options.source
             return 2
-        elif source_grp[0] == 0:
-            print "No matches found for %s." % options.source
-            return 2
+        elif counter == -1:
+            print "These results are truncated."
+            print "Please refine your search and try again."
+            return 3
+
+        if counter > 1:
+            print "\nMultiple entries for the source group found."
+            groupindex = ipaadminutil.select_group(counter, source_grp)
+            if groupindex == "q":
+                return 0
+
+        if groupindex >= 0:
+            source_grp = [source_grp[groupindex]]
 
         target_grp = client.find_groups(options.target)
-        if target_grp[0] > 1:
-            print "Multiple matches found for %s." % options.target
+        counter = target_grp[0]
+        target_grp = target_grp[1:]
+        groupindex = -1
+        if counter == 0:
+            print "No entries found for %s" % options.target
+            return 2
+        elif counter == -1:
+            print "These results are truncated."
+            print "Please refine your search and try again."
             return 3
-        elif target_grp[0] == 0:
-            print "No matches found for %s." % options.target
-            return 3
+
+        if counter > 1:
+            print "\nMultiple entries for the target group found."
+            groupindex = ipaadminutil.select_group(counter, target_grp)
+            if groupindex == "q":
+                return 0
+
+        if groupindex >= 0:
+            target_grp = [target_grp[groupindex]]
 
         attr_list = options.attributes.split(',')
 
         new_aci = ipa.aci.ACI()
         new_aci.name = args[1]
-        new_aci.source_group = source_grp[1].dn
-        new_aci.dest_group = target_grp[1].dn
+        new_aci.source_group = source_grp[0].dn
+        new_aci.dest_group = target_grp[0].dn
         new_aci.attrs = attr_list
 
         aci_entry = client.get_aci_entry(['*', 'aci'])
diff -r 1886405845cd -r fa0be546d182 ipa-admintools/ipa-findgroup
--- a/ipa-admintools/ipa-findgroup	Mon Dec 10 15:01:30 2007 -0500
+++ b/ipa-admintools/ipa-findgroup	Mon Dec 10 16:12:58 2007 -0500
@@ -21,6 +21,7 @@ import sys
 import sys
 from optparse import OptionParser
 import ipa.ipaclient as ipaclient
+import ipa.ipaadminutil as ipaadminutil
 import ipa.config
 
 import errno
@@ -62,6 +63,7 @@ def main():
 
         counter = groups[0]
         groups = groups[1:]
+        groupindex = -1
         if counter == 0:
             print "No entries found for", args[1]
             return 2
@@ -69,6 +71,14 @@ def main():
             print "These results are truncated."
             print "Please refine your search and try again."
 
+        if counter > 1:
+            groupindex = ipaadminutil.select_group(counter, groups)
+            if groupindex == "q":
+                return 0
+
+        if groupindex >= 0:
+            groups = [groups[groupindex]]
+   
         for ent in groups:
             try:
                 members = client.group_members(ent.dn, ['dn','cn'])
diff -r 1886405845cd -r fa0be546d182 ipa-admintools/ipa-finduser
--- a/ipa-admintools/ipa-finduser	Mon Dec 10 15:01:30 2007 -0500
+++ b/ipa-admintools/ipa-finduser	Mon Dec 10 16:12:58 2007 -0500
@@ -23,6 +23,7 @@ import ipa.ipaclient as ipaclient
 import ipa.ipaclient as ipaclient
 import ipa.config
 import ipa.ipautil as ipautil
+import ipa.ipaadminutil as ipaadminutil
 import base64
 
 import errno
@@ -87,6 +88,7 @@ def main():
 
         counter = users[0]
         users = users[1:]
+        userindex = 0
         if counter == 0:
             print "No entries found for", args[1]
             return 2
@@ -94,6 +96,15 @@ def main():
             print "These results are truncated."
             print "Please refine your search and try again."
 
+        if counter > 1:
+            userindex = ipaadminutil.select_user(counter, users)
+            if userindex == "q":
+                return
+
+
+        if userindex >= 0:
+            users = [users[userindex]]
+         
         for ent in users:
             attr = ent.attrList()
             attr.sort()
diff -r 1886405845cd -r fa0be546d182 ipa-admintools/ipa-moddelegation
--- a/ipa-admintools/ipa-moddelegation	Mon Dec 10 15:01:30 2007 -0500
+++ b/ipa-admintools/ipa-moddelegation	Mon Dec 10 16:12:58 2007 -0500
@@ -23,7 +23,7 @@ import ipa
 import ipa
 import ipa.user
 import ipa.ipaclient as ipaclient
-import ipa.ipavalidate as ipavalidate
+import ipa.ipaadminutil as ipaadminutil
 import ipa.config
 import ipa.aci
 
@@ -75,21 +75,47 @@ def main():
 
         if options.source:
             source_grp = client.find_groups(options.source)
-            if source_grp[0] > 1:
-                print "Multiple matches found for %s." % options.source
-                return 1
-            elif source_grp[0] == 0:
-                print "No matches found for %s." % options.source
-                return 1
+            counter = source_grp[0]
+            source_grp = source_grp[1:]
+            groupindex = -1
+            if counter == 0:
+                print "No entries found for %s" % options.source
+                return 2 
+            elif counter == -1:
+                print "These results are truncated."
+                print "Please refine your search and try again."
+                return 3
+
+            if counter > 1:
+                print "\nMultiple entries for the source group found."
+                groupindex = ipaadminutil.select_group(counter, source_grp)
+                if groupindex == "q":
+                    return 0
+
+            if groupindex >= 0:
+                source_grp = [source_grp[groupindex]]
 
         if options.target:
             target_grp = client.find_groups(options.target)
-            if target_grp[0] > 1:
-                print "Multiple matches found for %s." % options.target
-                return 1
-            elif target_grp[0] == 0:
-                print "No matches found for %s." % options.target
-                return 1
+            counter = target_grp[0]
+            target_grp = target_grp[1:]
+            groupindex = -1
+            if counter == 0:
+                print "No entries found for %s" % options.target
+                return 2 
+            elif counter == -1:
+                print "These results are truncated."
+                print "Please refine your search and try again."
+                return 3
+
+            if counter > 1:
+                print "\nMultiple entries for the target group found."
+                groupindex = ipaadminutil.select_group(counter, target_grp)
+                if groupindex == "q":
+                    return 0
+
+            if groupindex >= 0:
+                target_grp = [target_grp[groupindex]]
 
         if options.attributes:
             attr_list = options.attributes.split(',')
@@ -125,11 +151,11 @@ def main():
         new_aci = ipa.aci.ACI()
         new_aci.name = args[1]
         if options.source:
-            new_aci.source_group = source_grp[1].dn
+            new_aci.source_group = source_grp[0].dn
         else:
             new_aci.source_group = old_aci.source_group
         if options.target:
-            new_aci.dest_group = target_grp[1].dn
+            new_aci.dest_group = target_grp[0].dn
         else:
             new_aci.dest_group = old_aci.dest_group
         if options.attributes:
diff -r 1886405845cd -r fa0be546d182 ipa-python/ipaadminutil.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipa-python/ipaadminutil.py	Mon Dec 10 16:12:58 2007 -0500
@@ -0,0 +1,75 @@
+# Authors: Rob Crittenden <rcritten redhat com>
+#
+# Copyright (C) 2007    Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; version 2 or later
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+import string
+import tempfile
+import logging
+import subprocess
+import os
+
+def select_user(counter, users):
+    i = 1
+    print "%s entries were found. Which one would you like to display?" % counter
+    for ent in users:
+        print "%s: %s (%s)" % (i, ent.getValues('cn'), ent.getValues('uid'))
+        i += 1
+    while True:
+        resp = raw_input("Choose one: (1 - %s), 0 for all, q to quit: " % counter)
+        if resp == "q":
+            return "q"
+        if resp == "0":
+            userindex = -1
+            break;
+        try:
+            userindex = int(resp) - 1
+            if (userindex >= 0 and userindex <= counter):
+                break;
+            break;
+        except:
+            # fall through to the error msg
+            pass
+ 
+        print "Please enter a number between 1 and %s" % counter
+
+    return userindex
+
+def select_group(counter, groups):
+    i = 1
+    print "%s entries were found. Which one would you like to display?" % counter
+    for ent in groups:
+        print "%s: %s" % (i, ent.getValues('cn'))
+        i += 1
+    while True:
+        resp = raw_input("Choose one: (1 - %s), 0 for all, q to quit: " % counter)
+        if resp == "q":
+            return "q"
+        if resp == "0":
+            groupindex = -1
+            break;
+        try:
+            groupindex = int(resp) - 1
+            if (groupindex >= 0 and groupindex <= counter):
+                break;
+        except:
+            # fall through to the error msg
+            pass
+
+        print "Please enter a number between 1 and %s" % counter
+
+    return groupindex

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]