extras-buildsys/server CONFIG.py, 1.19, 1.20 UserInterface.py, 1.24, 1.25

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Fri Jul 22 02:54:09 UTC 2005


Author: dcbw

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

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

    * builder/CONFIG.py
      builder/builder.py
        - You must now specify a target/arch -> mock buildroot name
            mapping in the config file

    * server/UserInterface.py
      server/CONFIG.py
        - Add client target alias support so people don't have to
            know the exact target name
        - Add rowlimit support to job listing




Index: CONFIG.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/CONFIG.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- CONFIG.py	16 Jul 2005 15:47:43 -0000	1.19
+++ CONFIG.py	22 Jul 2005 02:54:07 -0000	1.20
@@ -58,11 +58,28 @@
 config_opts['targets'] = {  'development' :	['i386'] }
 
 
+# Client Target Map
+#
+# If people don't want to type the whole target name exactly, then add some
+# aliases here.  The target which the server receives from the client when 
+# it enqueues a package is run through this alias list first to determine
+# the final target name.  The aliases are NOT case-sensitive.
+#
+# Mapping - our_target: client_alias
+#
+# ex: { 'development' : ['devel'], '5' : ['fc-5', 'fc5'] }
+
+config_opts['client_target_map'] = { 'development' : ['devel'] }
+
+
+
 # If you're using CVS building, sometimes the CVS directory layout won't match
 # the targets we've defined in config_opts['target'].  Add aliases for them
-# here, like "{  'devel': 'development', '4': 'FC-4' }
+# here.
 #
 # Mapping -   our_target: cvs_target
+#
+# ex: { 'development': 'devel', '4': 'FC-4' }
 
 config_opts['cvs_target_map'] = {}
 


Index: UserInterface.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/server/UserInterface.py,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- UserInterface.py	20 Jul 2005 19:56:41 -0000	1.24
+++ UserInterface.py	22 Jul 2005 02:54:07 -0000	1.25
@@ -22,6 +22,7 @@
 import sys
 import os
 import copy
+import exceptions
 import BuildMaster
 import PackageJob
 from plague import AuthedXMLRPCServer
@@ -72,11 +73,32 @@
         return None
     return uid
 
-def validate_target(target):
+
+class InvalidTargetError(exceptions.Exception): pass
+
+def resolve_target(target):
+    client_target_map = config_opts['client_target_map']
+
+    # Resolve aliases first
+    resolved_target = target
+    done = True
+    for master_target in client_target_map.keys():
+        for alias in client_target_map[master_target]:
+            if resolved_target.lower() == alias.lower():
+                resolved_target = master_target
+                done = True
+                break
+        if done:
+            break
+
+    # Make sure we actually build the resolved target
     target_dict = config_opts['targets']
-    if target in target_dict.keys():
-        return True
-    return False
+    for master_target in target_dict.keys():
+        if resolved_target.lower() == master_target.lower():
+            return master_target
+
+    raise InvalidTargetError()
+
 
 
 class UserInterface:
@@ -97,20 +119,16 @@
                     "%s: this server builds SRPMs, not CVS checkouts." % (cvs_tag, target))
             return (-1, "This build server is set up for building SRPMS only.  Use the 'enqueue_srpm' command instead.")
 
-        print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" \
-                % (package, cvs_tag, target, email)
-        targets = config_opts['targets']
-        jobid = -1
-        if not targets.has_key(target):
-            print "Error setting up build for %s on %s: target does not exist."\
-                    % (cvs_tag, target)
+        try:
+            real_target = resolve_target(target)
+        except InvalidTargetError:
             email_result(email, cvs_tag, "Error setting up build for %s on "\
                     "%s: target does not exist." % (cvs_tag, target))
             return (-1, "This build server does not support the target %s." % target)
         else:
-            self._bm.enqueue(email, package, cvs_tag, target, buildreq, time.time())
-        return (0, "Success: package has been queued.")
-
+            print "Request to enqueue '%s' tag '%s' for target '%s' (user '%s')" % (package, cvs_tag, real_target, email)
+            self._bm.enqueue(email, package, cvs_tag, real_target, buildreq, time.time())
+            return (0, "Success: package has been queued.")
 
     def enqueue_srpm(self, email, package, srpm_file, target, buildreq=None):
         """ Accept a job to build from SRPM file and stuff it into the job database """
@@ -132,19 +150,16 @@
                     "%s: The SRPM does not exist, or is not accessible.  Remember to use absolute paths." % (srpm_file, target))
             return (-1, "SRPM does not exist or is not accessible, remember to use absolute paths.")
 
-        print "Request to enqueue '%s' file '%s' for target '%s' (user '%s')" \
-                % (package, srpm_file, target, email)
-        targets = config_opts['targets']
-        jobid = -1
-        if not targets.has_key(target):
-            print "Error setting up build for %s on %s: target does not exist."\
-                    % (srpm_file, target)
+        try:
+            real_target = resolve_target(target)
+        except InvalidTargetError:
             email_result(email, srpm_file, "Error setting up build for %s on "\
                     "%s: target does not exist." % (srpm_file, target))
             return (-1, "This build server does not support the target %s." % target)
         else:
-            self._bm.enqueue_srpm(email, package, srpm_file, target, buildreq, time.time())
-        return (0, "Success: package has been queued.")
+            print "Request to enqueue '%s' file '%s' for target '%s' (user '%s')" % (package, srpm_file, real_target, email)
+            self._bm.enqueue_srpm(email, package, srpm_file, real_target, buildreq, time.time())
+            return (0, "Success: package has been queued.")
 
     def _kill_job(self, email, job, jobid):
         if not job:
@@ -192,9 +207,11 @@
             sql_args.append('uid<%d' % uid)
 
         if args_dict.has_key('target') and args_dict['target']:
-            if not validate_target(args_dict['target']):
+            try:
+                real_target = resolve_target(args_dict['target'])
+            except InvalidTargetError:
                 return (-1, "Error: Invalid job UID.", [])
-            sql_args.append('target="%s"' % args_dict['target'])
+            sql_args.append('target="%s"' % real_target)
 
         if not len(sql_args):
             return (-1, "Error: Invalid query.", [])
@@ -207,6 +224,12 @@
                 sql = sql + " AND "
             i = i + 1
 
+        # Deal with max # records
+        if args_dict.has_key('maxrows') and args_dict['maxrows']:
+            if not validate_uid(args_dict['maxrows']):
+                return (-1, "Error: Invalid max rows number.", [])
+            sql = sql + " LIMIT %d" % args_dict['maxrows']
+
         # Run the query for the job
         try:
             dbcx, curs = get_dbcx()




More information about the fedora-extras-commits mailing list