diff --git a/examples/SecureXMLRPCServer.py b/examples/SecureXMLRPCServer.py
index 757b49c..56bfaea 100644
--- a/examples/SecureXMLRPCServer.py
+++ b/examples/SecureXMLRPCServer.py
@@ -14,11 +14,15 @@
 This code is in the public domain.
 It is provided AS-IS WITH NO WARRANTY WHATSOEVER.
 """
-import SocketServer
-import os, socket
+
 import SimpleXMLRPCServer
+import SocketServer
+import os
+import socket
+
 from OpenSSL import SSL
 
+
 class SSLWrapper:
     """
     This whole class exists just to filter out a parameter
@@ -30,10 +34,13 @@
         so I'm making a proxy instead of subclassing.
         """
         self.__dict__["conn"] = conn
-    def __getattr__(self,name):
+
+    def __getattr__(self, name):
         return getattr(self.__dict__["conn"], name)
-    def __setattr__(self,name, value):
+
+    def __setattr__(self, name, value):
         setattr(self.__dict__["conn"], name, value)
+
     def shutdown(self, how=1):
         """
         SimpleXMLRpcServer.doPOST calls shutdown(1),
@@ -41,6 +48,7 @@
         an argument. So we just discard the argument.
         """
         self.__dict__["conn"].shutdown()
+
     def accept(self):
         """
         This is the other part of the shutdown() workaround.
@@ -51,42 +59,48 @@
         return (SSLWrapper(c), a)
 
 
-
 class SecureTCPServer(SocketServer.TCPServer):
     """
     Just like TCPServer, but use a socket.
     This really ought to let you specify the key and certificate files.
     """
     def __init__(self, server_address, RequestHandlerClass):
-        SocketServer.BaseServer.__init__(self, server_address, RequestHandlerClass)
+        SocketServer.BaseServer.__init__(
+            self, server_address, RequestHandlerClass
+        )
 
-        ## Same as normal, but make it secure:
+        # Same as normal, but make it secure:
         ctx = SSL.Context(SSL.SSLv23_METHOD)
         ctx.set_options(SSL.OP_NO_SSLv2)
 
         dir = os.curdir
-        ctx.use_privatekey_file (os.path.join(dir, 'server.pkey'))
+        ctx.use_privatekey_file(os.path.join(dir, 'server.pkey'))
         ctx.use_certificate_file(os.path.join(dir, 'server.cert'))
 
-        self.socket = SSLWrapper(SSL.Connection(ctx, socket.socket(self.address_family,
-                                                                  self.socket_type)))
+        self.socket = SSLWrapper(
+            SSL.Connection(
+                ctx, socket.socket(self.address_family, self.socket_type)
+            )
+        )
         self.server_bind()
         self.server_activate()
 
 
-class SecureXMLRPCRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
+class SecureXMLRPCRequestHandler(
+        SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
     def setup(self):
         """
         We need to use socket._fileobject Because SSL.Connection
         doesn't have a 'dup'. Not exactly sure WHY this is, but
         this is backed up by comments in socket.py and SSL/connection.c
         """
-        self.connection = self.request # for doPOST
+        self.connection = self.request  # for doPOST
         self.rfile = socket._fileobject(self.request, "rb", self.rbufsize)
         self.wfile = socket._fileobject(self.request, "wb", self.wbufsize)
-    
 
-class SecureXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer, SecureTCPServer):
+
+class SecureXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer,
+                         SecureTCPServer):
     def __init__(self, addr,
                  requestHandler=SecureXMLRPCRequestHandler,
                  logRequests=1):
@@ -99,4 +113,3 @@
         self.logRequests = logRequests
         self.instance = None
         SecureTCPServer.__init__(self, addr, requestHandler)
-
