extras-buildsys/server UserInterface.py,1.19,1.20

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Tue Jul 19 02:29:50 UTC 2005


Author: dcbw

Update of /cvs/fedora/extras-buildsys/server
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25058/server

Modified Files:
	UserInterface.py 
Log Message:
2005-07-18  Dan Williams <dcbw at redhat.com>

    * server/UserInterface.py
      client/client.py
        - Rework argument handling and passing so that listing jobs
            is more flexible.  Can now list jobs by UID as well.




Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- UserInterface.py	14 Jul 2005 19:12:04 -0000	1.19
+++ UserInterface.py	19 Jul 2005 02:29:48 -0000	1.20
@@ -63,6 +63,15 @@
             return False
     return True
 
+def validate_uid(uid_in):
+    try:
+        uid = int(uid_in)
+    except ValueError:
+        return None
+    if uid < 0:
+        return None
+    return uid
+
 
 class UserInterface:
     """
@@ -140,38 +149,54 @@
         return (0, "Success: job %s killed." % job.get_uid())
 
     def list_jobs(self, args_dict):
-        sql = 'SELECT uid, username, package, cvs_tag, target, status FROM jobs'
-        search = ''
-        first = True
+        """ Query job information and return it to the user """
+
+        sql = 'SELECT uid, username, package, cvs_tag, target, status FROM jobs WHERE '
+        sql_args = []
 
         if args_dict.has_key('email') and args_dict['email']:
             if validate_email(args_dict['email']):
-                if first:
-                    search = search +  " WHERE "
-                    first = False
-                else:
-                    search = search + " AND "
-                search = search + 'username LIKE "%%%s%%"' % args_dict['email']
+                sql_args.append('username LIKE "%%%s%%"' % args_dict['email'])
             else:
-                return (-1, "Error: Invalid query.", [], [])
+                return (-1, "Error: Invalid email address.", [], [])
 
         if args_dict.has_key('status') and args_dict['status']:
             status = args_dict['status']
             if PackageJob.is_package_job_stage_valid(status):
-                if first:
-                    search = search +  " WHERE "
-                    first = False
-                else:
-                    search = search + " AND "
-                search = search + 'status = "%s"' % status
+                sql_args.append('status="%s"' % status)
             else:
-                return (-1, "Error: Invalid query.", [], [])
+                return (-1, "Error: Invalid job status.", [], [])
 
-        if len(search):
-            sql = sql + search
-        if not len(sql):
+        if args_dict.has_key('uid') and args_dict['uid']:
+            uid = validate_uid(args_dict['uid'])
+            if not uid:
+                return (-1, "Error: Invalid job UID.", [], [])
+            sql_args.append('uid=%d' % uid)
+
+        if args_dict.has_key('uid_gt') and args_dict['uid_gt']:
+            uid = validate_uid(args_dict['uid_gt'])
+            if not uid:
+                return (-1, "Error: Invalid job UID.", [], [])
+            sql_args.append('uid>%d' % uid)
+
+        if args_dict.has_key('uid_lt') and args_dict['uid_lt']:
+            uid = validate_uid(args_dict['uid_lt'])
+            if not uid:
+                return (-1, "Error: Invalid job UID.", [], [])
+            sql_args.append('uid<%d' % uid)
+
+        if not len(sql_args):
             return (-1, "Error: Invalid query.", [], [])
 
+        # Assemble the final SQL statement
+        i = 1
+        for arg in sql_args:
+            sql = sql + arg
+            if i < len(sql_args):
+                sql = sql + " AND "
+            i = i + 1
+
+        # Run the query for the job
         try:
             dbcx, curs = get_dbcx()
         except sqlite.DatabaseError, e:
@@ -184,6 +209,7 @@
             results.append(tempX)
         jobs = copy.deepcopy(results)
 
+        # Mash all returned job UIDs into an SQL query to get all their archjobs
         uids = ''
         for result in jobs:
             if len(uids) == 0:
@@ -191,6 +217,7 @@
             else:
                 uids = uids + " OR parent_uid=%d" % result[0]
 
+        # Get all archjobs for this job
         archjobs = []
         if len(uids) > 0:
             sql = "SELECT jobid, parent_uid, starttime, endtime, arch, builder_addr, status, builder_status FROM archjobs WHERE " + uids




More information about the scm-commits mailing list