extras-buildsys/client client.py,1.26,1.27

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Mon Aug 15 14:37:02 UTC 2005


Author: dcbw

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

Modified Files:
	client.py 
Log Message:
2005-08-15  Dan Williams <dcbw at redhat.com>

    * client/client.py
      server/UserInterface.py
        - Implement API versioning, and check the API version in the client
            before doing anything else




Index: client.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/client/client.py,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- client.py	8 Aug 2005 02:54:15 -0000	1.26
+++ client.py	15 Aug 2005 14:37:00 -0000	1.27
@@ -24,6 +24,9 @@
 import OpenSSL
 
 
+XMLRPC_API_VERSION = 100
+
+
 config = ConfigParser.ConfigParser()
 config.add_section('Certs')
 config.set('Certs', 'user-cert', '~/.fedora.cert')
@@ -51,6 +54,28 @@
         self.message = message
 
 
+def check_api_version(server):
+    """ Ensure the API of the server matches the one we expect to talk to """
+
+    try:
+        server_ver = server.api_version()
+    except socket.error, e:
+        print "Error connecting to build server: '%s'" % e
+        return False
+    except OpenSSL.SSL.SysCallError, e:
+        print "Error connecting to build server: '%s'" % e
+        return False
+    except xmlrpclib.Fault, fault:
+        print "Error: build server does not support 'api_version' method.  Server said: '%s'" % fault
+        return False
+
+    if server_ver != XMLRPC_API_VERSION:
+        print "Error: API version mismatch.  Client: %d, Server: %d" % (XMLRPC_API_VERSION, server_ver)
+        return False
+
+    return True
+
+
 def enqueue(server, email, args):
     """ Enqueue a package on the server by CVS tag """
 
@@ -373,10 +398,14 @@
         print e.message
         sys.exit(1)
 
+    # Ensure the server's API version matches ours
+    if not check_api_version(server):
+        sys.exit(1)
+
     if cmd == 'build':
         if len(sys.argv) < 5:
             Usage()
-            exit(1)
+            sys.exit(1)
         item = sys.argv[3]
         try:
             if item.endswith(".src.rpm") and os.path.exists(item):




More information about the fedora-extras-commits mailing list