old_contents: """urllib2 style build opener integrates with HTTPSConnection class from this
  package.
  """
  __author__ = "P J Kershaw"
  __date__ = "21/12/10"
  __copyright__ = "(C) 2011 Science and Technology Facilities Council"
  __license__ = "BSD - see LICENSE file in top-level directory"
  __contact__ = "Philip.Kershaw@stfc.ac.uk"
  __revision__ = '$Id$'
  import logging
  from urllib2 import (ProxyHandler, UnknownHandler, HTTPDefaultErrorHandler, 
                       FTPHandler, FileHandler, HTTPErrorProcessor, HTTPHandler, 
                       OpenerDirector, HTTPRedirectHandler)
  
  from ndg.httpsclient.https import HTTPSContextHandler
  
  log = logging.getLogger(__name__)
  
  
  # Copied from urllib2 with modifications for ssl
  def build_opener(ssl_context=None, *handlers):
      """Create an opener object from a list of handlers.
  
      The opener will use several default handlers, including support
      for HTTP and FTP.
  
      If any of the handlers passed as arguments are subclasses of the
      default handlers, the default handlers will not be used.
      """
      import types
      def isclass(obj):
          return isinstance(obj, types.ClassType) or hasattr(obj, "__bases__")
  
      opener = OpenerDirector()
      default_classes = [ProxyHandler, UnknownHandler, HTTPHandler,
                         HTTPDefaultErrorHandler, HTTPRedirectHandler,
                         FTPHandler, FileHandler, HTTPErrorProcessor]
      check_classes = list(default_classes)
      check_classes.append(HTTPSContextHandler)
      skip = []
      for klass in check_classes:
          for check in handlers:
              if isclass(check):
                  if issubclass(check, klass):
                      skip.append(klass)
              elif isinstance(check, klass):
                  skip.append(klass)
  
      for klass in default_classes:
          if klass not in skip:
              opener.add_handler(klass())
  
      # Add the HTTPS handler with ssl_context
      if HTTPSContextHandler not in skip:
          opener.add_handler(HTTPSContextHandler(ssl_context))
  
      for h in handlers:
          if isclass(h):
              h = h()
          opener.add_handler(h)
  
      return opener
  
new_contents: """urllib2 style build opener integrates with HTTPSConnection class from this
  package.
  """
  __author__ = "P J Kershaw"
  __date__ = "21/12/10"
  __copyright__ = "(C) 2011 Science and Technology Facilities Council"
  __license__ = "BSD - see LICENSE file in top-level directory"
  __contact__ = "Philip.Kershaw@stfc.ac.uk"
  __revision__ = '$Id$'
  import logging
  from urllib2 import (ProxyHandler, UnknownHandler, HTTPDefaultErrorHandler, 
                       FTPHandler, FileHandler, HTTPErrorProcessor, HTTPHandler, 
                       OpenerDirector, HTTPRedirectHandler)
  
  from ndg.httpsclient.https import HTTPSContextHandler
  
  log = logging.getLogger(__name__)
  
  
  # Copied from urllib2 with modifications for ssl
  def build_opener(*handlers, **kw):
      """Create an opener object from a list of handlers.
  
      The opener will use several default handlers, including support
      for HTTP and FTP.
  
      If any of the handlers passed as arguments are subclasses of the
      default handlers, the default handlers will not be used.
      """
      import types
      def isclass(obj):
          return isinstance(obj, types.ClassType) or hasattr(obj, "__bases__")
  
      opener = OpenerDirector()
      default_classes = [ProxyHandler, UnknownHandler, HTTPHandler,
                         HTTPDefaultErrorHandler, HTTPRedirectHandler,
                         FTPHandler, FileHandler, HTTPErrorProcessor]
      check_classes = list(default_classes)
      check_classes.append(HTTPSContextHandler)
      skip = []
      for klass in check_classes:
          for check in handlers:
              if isclass(check):
                  if issubclass(check, klass):
                      skip.append(klass)
              elif isinstance(check, klass):
                  skip.append(klass)
  
      for klass in default_classes:
          if klass not in skip:
              opener.add_handler(klass())
              
      # Pick up SSL context from keyword settings
      ssl_context = kw.get('ssl_context')
      
      # Add the HTTPS handler with ssl_context
      if HTTPSContextHandler not in skip:
          opener.add_handler(HTTPSContextHandler(ssl_context))
  
      for h in handlers:
          if isclass(h):
              h = h()
          opener.add_handler(h)
  
      return opener
  
subject: Fix to urllib2_build_opener.build_opener to allow for custom handlers to be added correctly.