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