summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2011-04-27 11:40:08 -0500
committerSol Jerome <sol.jerome@gmail.com>2011-04-27 11:40:08 -0500
commitd3348a34c78ba13d4d4c3e96db19faeeeefac11b (patch)
tree7b36955887357066bb5e5838f5f54f6ff2b518fc
parent7f68ebb4ce4cb65850a63660f2f1cec06100064a (diff)
downloadbcfg2-d3348a34c78ba13d4d4c3e96db19faeeeefac11b.tar.gz
bcfg2-d3348a34c78ba13d4d4c3e96db19faeeeefac11b.tar.bz2
bcfg2-d3348a34c78ba13d4d4c3e96db19faeeeefac11b.zip
Common: Add full PY3K compatibility
Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
-rw-r--r--src/lib/Bcfg2Py3Incompat.py2
-rw-r--r--src/lib/Component.py14
-rw-r--r--src/lib/Logger.py4
-rw-r--r--src/lib/Options.py6
-rw-r--r--src/lib/Proxy.py28
-rw-r--r--src/lib/SSLServer.py11
-rw-r--r--src/lib/Server/Core.py10
7 files changed, 45 insertions, 30 deletions
diff --git a/src/lib/Bcfg2Py3Incompat.py b/src/lib/Bcfg2Py3Incompat.py
new file mode 100644
index 000000000..6b66e72b0
--- /dev/null
+++ b/src/lib/Bcfg2Py3Incompat.py
@@ -0,0 +1,2 @@
+def fprint(s, f):
+ print(s, file=f)
diff --git a/src/lib/Component.py b/src/lib/Component.py
index 33b1c9289..222a856d6 100644
--- a/src/lib/Component.py
+++ b/src/lib/Component.py
@@ -11,12 +11,12 @@ import pydoc
import sys
import time
import threading
-import urlparse
-import xmlrpclib
import Bcfg2.Logger
from Bcfg2.Statistics import Statistics
from Bcfg2.SSLServer import XMLRPCServer
+# Compatibility import
+from Bcfg2.Bcfg2Py3k import xmlrpclib, urlparse, fprint
logger = logging.getLogger()
@@ -56,11 +56,11 @@ def run_component(component_cls, location, daemon, pidfile_name, to_file,
os.chdir(os.sep)
pidfile = open(pidfile_name or "/dev/null", "w")
- print >> pidfile, os.getpid()
+ fprint(os.getpid(), pidfile)
pidfile.close()
component = component_cls(cfile=cfile, **cls_kwargs)
- up = urlparse.urlparse(location)
+ up = urlparse(location)
port = tuple(up[1].split(':'))
port = (port[0], int(port[1]))
try:
@@ -209,7 +209,8 @@ class Component (object):
except NoExposedMethod:
self.logger.error("Unknown method %s" % (method))
raise xmlrpclib.Fault(7, "Unknown method %s" % method)
- except Exception, e:
+ except Exception:
+ e = sys.exc_info()[1]
if getattr(e, "log", True):
self.logger.error(e, exc_info=True)
raise xmlrpclib.Fault(getattr(e, "fault_code", 1), str(e))
@@ -233,7 +234,8 @@ class Component (object):
self.instance_statistics.add_value(method, method_done - method_start)
except xmlrpclib.Fault:
raise
- except Exception, e:
+ except Exception:
+ e = sys.exc_info()[1]
if getattr(e, "log", True):
self.logger.error(e, exc_info=True)
raise xmlrpclib.Fault(getattr(e, "fault_code", 1), str(e))
diff --git a/src/lib/Logger.py b/src/lib/Logger.py
index ae73a6d41..e3020d543 100644
--- a/src/lib/Logger.py
+++ b/src/lib/Logger.py
@@ -10,6 +10,8 @@ import socket
import struct
import sys
import termios
+# Compatibility import
+from Bcfg2.Bcfg2Py3k import fprint
logging.raiseExceptions = 0
@@ -229,7 +231,7 @@ def trace_process(**kwargs):
filename = filename[:-1]
name = frame.f_globals["__name__"]
line = linecache.getline(filename, lineno)
- print >> log_file, "%s:%s: %s" % (name, lineno, line.rstrip())
+ fprint("%s:%s: %s" % (name, lineno, line.rstrip()), log_file)
return traceit
sys.settrace(traceit)
diff --git a/src/lib/Options.py b/src/lib/Options.py
index 1973e7091..d5304e696 100644
--- a/src/lib/Options.py
+++ b/src/lib/Options.py
@@ -1,11 +1,12 @@
"""Option parsing library for utilities."""
__revision__ = '$Revision$'
-import ConfigParser
import getopt
import os
import sys
import Bcfg2.Client.Tools
+# Compatibility imports
+from Bcfg2.Bcfg2Py3k import ConfigParser
def bool_cook(x):
if x:
@@ -146,7 +147,8 @@ class OptionSet(dict):
try:
opts, args = getopt.getopt(argv, self.buildGetopt(),
self.buildLongGetopt())
- except getopt.GetoptError, err:
+ except getopt.GetoptError:
+ err = sys.exc_info()[1]
self.helpExit(err)
if '-h' in argv:
self.helpExit('', 0)
diff --git a/src/lib/Proxy.py b/src/lib/Proxy.py
index 8b3fcb87c..30b7deaf5 100644
--- a/src/lib/Proxy.py
+++ b/src/lib/Proxy.py
@@ -11,9 +11,6 @@ load_config -- read configuration files
__revision__ = '$Revision: $'
-from xmlrpclib import _Method
-
-import httplib
import logging
import re
import socket
@@ -25,7 +22,7 @@ import socket
try:
import ssl
SSL_LIB = 'py26_ssl'
-except ImportError, e:
+except ImportError:
from M2Crypto import SSL
import M2Crypto.SSL.Checker
SSL_LIB = 'm2crypto'
@@ -33,8 +30,9 @@ except ImportError, e:
import sys
import time
-import urlparse
-import xmlrpclib
+
+# Compatibility imports
+from Bcfg2.Bcfg2Py3k import httplib, xmlrpclib, urlparse
version = sys.version_info[:2]
has_py23 = version >= (2, 3)
@@ -51,7 +49,7 @@ class CertificateError(Exception):
self.commonName = commonName
-class RetryMethod(_Method):
+class RetryMethod(xmlrpclib._Method):
"""Method with error handling and retries built in."""
log = logging.getLogger('xmlrpc')
max_retries = 4
@@ -59,21 +57,24 @@ class RetryMethod(_Method):
def __call__(self, *args):
for retry in range(self.max_retries):
try:
- return _Method.__call__(self, *args)
- except xmlrpclib.ProtocolError, err:
+ return xmlrpclib._Method.__call__(self, *args)
+ except xmlrpclib.ProtocolError:
+ err = sys.exc_info()[1]
self.log.error("Server failure: Protocol Error: %s %s" % \
(err.errcode, err.errmsg))
raise xmlrpclib.Fault(20, "Server Failure")
except xmlrpclib.Fault:
raise
- except socket.error, err:
+ except socket.error:
+ err = sys.exc_info()[1]
if hasattr(err, 'errno') and err.errno == 336265218:
self.log.error("SSL Key error")
break
if retry == 3:
self.log.error("Server failure: %s" % err)
raise xmlrpclib.Fault(20, err)
- except CertificateError, ce:
+ except CertificateError:
+ ce = sys.exc_info()[1]
self.log.error("Got unallowed commonName %s from server" \
% ce.commonName)
break
@@ -242,7 +243,8 @@ class SSLHTTPConnection(httplib.HTTPConnection):
try:
self.sock.connect((hostname, self.port))
# automatically checks cert matches host
- except M2Crypto.SSL.Checker.WrongHost, wr:
+ except M2Crypto.SSL.Checker.WrongHost:
+ wr = sys.exc_info()[1]
raise CertificateError(wr)
@@ -325,7 +327,7 @@ def ComponentProxy(url, user=None, password=None,
"""
if user and password:
- method, path = urlparse.urlparse(url)[:2]
+ method, path = urlparse(url)[:2]
newurl = "%s://%s:%s@%s" % (method, user, password, path)
else:
newurl = url
diff --git a/src/lib/SSLServer.py b/src/lib/SSLServer.py
index 2395bb84f..a89beabbb 100644
--- a/src/lib/SSLServer.py
+++ b/src/lib/SSLServer.py
@@ -8,10 +8,7 @@ __all__ = [
import os
import sys
-import xmlrpclib
import socket
-import SocketServer
-import SimpleXMLRPCServer
import base64
import select
import signal
@@ -19,6 +16,8 @@ import logging
import ssl
import threading
import time
+# Compatibility imports
+from Bcfg2.Bcfg2Py3k import xmlrpclib, SimpleXMLRPCServer, SocketServer
class ForkedChild(Exception):
@@ -51,7 +50,8 @@ class XMLRPCDispatcher (SimpleXMLRPCServer.SimpleXMLRPCDispatcher):
raw_response = xmlrpclib.dumps(response, methodresponse=1,
allow_none=self.allow_none,
encoding=self.encoding)
- except xmlrpclib.Fault, fault:
+ except xmlrpclib.Fault:
+ fault = sys.exc_info()[1]
raw_response = xmlrpclib.dumps(fault,
allow_none=self.allow_none,
encoding=self.encoding)
@@ -258,7 +258,8 @@ class XMLRPCRequestHandler (SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
# If we hit SSL3_WRITE_PENDING here try to resend.
self.wfile.write(response)
break
- except ssl.SSLError, e:
+ except ssl.SSLError:
+ e = sys.exc_info()[1]
if str(e).find("SSL3_WRITE_PENDING") < 0:
raise
self.logger.error("SSL3_WRITE_PENDING")
diff --git a/src/lib/Server/Core.py b/src/lib/Server/Core.py
index e82e05a89..4018c92ef 100644
--- a/src/lib/Server/Core.py
+++ b/src/lib/Server/Core.py
@@ -7,12 +7,15 @@ import lxml.etree
import select
import threading
import time
-import xmlrpclib
from Bcfg2.Component import Component, exposed
from Bcfg2.Server.Plugin import PluginInitError, PluginExecutionError
import Bcfg2.Server.FileMonitor
import Bcfg2.Server.Plugins.Metadata
+# Compatibility imports
+from Bcfg2.Bcfg2Py3k import xmlrpclib
+if sys.hexversion >= 0x03000000:
+ from functools import reduce
logger = logging.getLogger('Bcfg2.Server.Core')
@@ -142,7 +145,7 @@ class Core(Component):
try:
mod = getattr(__import__("Bcfg2.Server.Plugins.%s" %
(plugin)).Server.Plugins, plugin)
- except ImportError, e:
+ except ImportError:
try:
mod = __import__(plugin)
except:
@@ -177,7 +180,8 @@ class Core(Component):
plugin.validate_structures(metadata, data)
elif base_cls == Bcfg2.Server.Plugin.GoalValidator:
plugin.validate_goals(metadata, data)
- except Bcfg2.Server.Plugin.ValidationError, err:
+ except Bcfg2.Server.Plugin.ValidationError:
+ err = sys.exc_info()[1]
logger.error("Plugin %s structure validation failed: %s" \
% (plugin.name, err.message))
raise