Tim Lauridsen c48e3ff
Index: iniparse/__init__.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- iniparse/__init__.py	(revision 146)
Tim Lauridsen c48e3ff
+++ iniparse/__init__.py	(working copy)
Tim Lauridsen c48e3ff
@@ -3,17 +3,17 @@
Tim Lauridsen c48e3ff
 # Copyright (c) 2007 Tim Lauridsen <tla@rasmil.dk>
Tim Lauridsen c48e3ff
 # All Rights Reserved.  See LICENSE-PSF & LICENSE for details.
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-from ini import INIConfig, change_comment_syntax
Tim Lauridsen c48e3ff
-from config import BasicConfig, ConfigNamespace
Tim Lauridsen c48e3ff
-from compat import RawConfigParser, ConfigParser, SafeConfigParser
Tim Lauridsen c48e3ff
-from utils import tidy
Tim Lauridsen c48e3ff
+from .ini import INIConfig, change_comment_syntax
Tim Lauridsen c48e3ff
+from .config import BasicConfig, ConfigNamespace
Tim Lauridsen c48e3ff
+from .compat import RawConfigParser, ConfigParser, SafeConfigParser
Tim Lauridsen c48e3ff
+from .utils import tidy
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-from ConfigParser import DuplicateSectionError,    \
Tim Lauridsen c48e3ff
-                  NoSectionError, NoOptionError,   \
Tim Lauridsen c48e3ff
-                  InterpolationMissingOptionError, \
Tim Lauridsen c48e3ff
-                  InterpolationDepthError,         \
Tim Lauridsen c48e3ff
-                  InterpolationSyntaxError,        \
Tim Lauridsen c48e3ff
-                  DEFAULTSECT, MAX_INTERPOLATION_DEPTH
Tim Lauridsen c48e3ff
+from .configparser import DuplicateSectionError,    \
Tim Lauridsen c48e3ff
+                   NoSectionError, NoOptionError,   \
Tim Lauridsen c48e3ff
+                   InterpolationMissingOptionError, \
Tim Lauridsen c48e3ff
+                   InterpolationDepthError,         \
Tim Lauridsen c48e3ff
+                   InterpolationSyntaxError,        \
Tim Lauridsen c48e3ff
+                   DEFAULTSECT, MAX_INTERPOLATION_DEPTH
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 __all__ = [
Tim Lauridsen c48e3ff
     'BasicConfig', 'ConfigNamespace',
Tim Lauridsen c48e3ff
Index: iniparse/compat.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- iniparse/compat.py	(revision 146)
Tim Lauridsen c48e3ff
+++ iniparse/compat.py	(working copy)
Tim Lauridsen c48e3ff
@@ -12,20 +12,22 @@
Tim Lauridsen c48e3ff
 """
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 import re
Tim Lauridsen c48e3ff
-from ConfigParser import DuplicateSectionError,    \
Tim Lauridsen c48e3ff
-                  NoSectionError, NoOptionError,   \
Tim Lauridsen c48e3ff
-                  InterpolationMissingOptionError, \
Tim Lauridsen c48e3ff
-                  InterpolationDepthError,         \
Tim Lauridsen c48e3ff
-                  InterpolationSyntaxError,        \
Tim Lauridsen c48e3ff
-                  DEFAULTSECT, MAX_INTERPOLATION_DEPTH
Tim Lauridsen c48e3ff
+from .configparser import DuplicateSectionError,    \
Tim Lauridsen c48e3ff
+                   NoSectionError, NoOptionError,   \
Tim Lauridsen c48e3ff
+                   InterpolationMissingOptionError, \
Tim Lauridsen c48e3ff
+                   InterpolationDepthError,         \
Tim Lauridsen c48e3ff
+                   InterpolationSyntaxError,        \
Tim Lauridsen c48e3ff
+                   DEFAULTSECT, MAX_INTERPOLATION_DEPTH
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 # These are imported only for compatiability.
Tim Lauridsen c48e3ff
 # The code below does not reference them directly.
Tim Lauridsen c48e3ff
-from ConfigParser import Error, InterpolationError, \
Tim Lauridsen c48e3ff
-                  MissingSectionHeaderError, ParsingError
Tim Lauridsen c48e3ff
+from .configparser import Error, InterpolationError, \
Tim Lauridsen c48e3ff
+                   MissingSectionHeaderError, ParsingError
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-import ini
Tim Lauridsen c48e3ff
+import six
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
+from . import ini
Tim Lauridsen c48e3ff
+
Tim Lauridsen c48e3ff
 class RawConfigParser(object):
Tim Lauridsen c48e3ff
     def __init__(self, defaults=None, dict_type=dict):
Tim Lauridsen c48e3ff
         if dict_type != dict:
Tim Lauridsen c48e3ff
@@ -56,7 +58,7 @@
Tim Lauridsen c48e3ff
         # The default section is the only one that gets the case-insensitive
Tim Lauridsen c48e3ff
         # treatment - so it is special-cased here.
Tim Lauridsen c48e3ff
         if section.lower() == "default":
Tim Lauridsen c48e3ff
-            raise ValueError, 'Invalid section name: %s' % section
Tim Lauridsen c48e3ff
+            raise ValueError('Invalid section name: %s' % section)
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
         if self.has_section(section):
Tim Lauridsen c48e3ff
             raise DuplicateSectionError(section)
Tim Lauridsen c48e3ff
@@ -88,7 +90,7 @@
Tim Lauridsen c48e3ff
         filename may also be given.
Tim Lauridsen c48e3ff
         """
Tim Lauridsen c48e3ff
         files_read = []
Tim Lauridsen c48e3ff
-        if isinstance(filenames, basestring):
Tim Lauridsen c48e3ff
+        if isinstance(filenames, six.string_types):
Tim Lauridsen c48e3ff
             filenames = [filenames]
Tim Lauridsen c48e3ff
         for filename in filenames:
Tim Lauridsen c48e3ff
             try:
Tim Lauridsen c48e3ff
@@ -143,7 +145,7 @@
Tim Lauridsen c48e3ff
     def getboolean(self, section, option):
Tim Lauridsen c48e3ff
         v = self.get(section, option)
Tim Lauridsen c48e3ff
         if v.lower() not in self._boolean_states:
Tim Lauridsen c48e3ff
-            raise ValueError, 'Not a boolean: %s' % v
Tim Lauridsen c48e3ff
+            raise ValueError('Not a boolean: %s' % v)
Tim Lauridsen c48e3ff
         return self._boolean_states[v.lower()]
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def has_option(self, section, option):
Tim Lauridsen c48e3ff
@@ -234,7 +236,7 @@
Tim Lauridsen c48e3ff
             if "%(" in value:
Tim Lauridsen c48e3ff
                 try:
Tim Lauridsen c48e3ff
                     value = value % vars
Tim Lauridsen c48e3ff
-                except KeyError, e:
Tim Lauridsen c48e3ff
+                except KeyError as e:
Tim Lauridsen c48e3ff
                     raise InterpolationMissingOptionError(
Tim Lauridsen c48e3ff
                         option, section, rawval, e.args[0])
Tim Lauridsen c48e3ff
             else:
Tim Lauridsen c48e3ff
@@ -283,7 +285,7 @@
Tim Lauridsen c48e3ff
     _badpercent_re = re.compile(r"%[^%]|%$")
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def set(self, section, option, value):
Tim Lauridsen c48e3ff
-        if not isinstance(value, basestring):
Tim Lauridsen c48e3ff
+        if not isinstance(value, six.string_types):
Tim Lauridsen c48e3ff
             raise TypeError("option values must be strings")
Tim Lauridsen c48e3ff
         # check for bad percent signs:
Tim Lauridsen c48e3ff
         # first, replace all "good" interpolations
Tim Lauridsen c48e3ff
Index: iniparse/config.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- iniparse/config.py	(revision 146)
Tim Lauridsen c48e3ff
+++ iniparse/config.py	(working copy)
Tim Lauridsen c48e3ff
@@ -143,7 +143,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     >>> n.aaa = 42
Tim Lauridsen c48e3ff
     >>> del n.x
Tim Lauridsen c48e3ff
-    >>> print n
Tim Lauridsen c48e3ff
+    >>> print(n)
Tim Lauridsen c48e3ff
     aaa = 42
Tim Lauridsen c48e3ff
     name.first = paramjit
Tim Lauridsen c48e3ff
     name.last = oberoi
Tim Lauridsen c48e3ff
@@ -152,7 +152,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     >>> isinstance(n.name, ConfigNamespace)
Tim Lauridsen c48e3ff
     True
Tim Lauridsen c48e3ff
-    >>> print n.name
Tim Lauridsen c48e3ff
+    >>> print(n.name)
Tim Lauridsen c48e3ff
     first = paramjit
Tim Lauridsen c48e3ff
     last = oberoi
Tim Lauridsen c48e3ff
     >>> sorted(list(n.name))
Tim Lauridsen c48e3ff
@@ -160,7 +160,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     Finally, values can be read from a file as follows:
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-    >>> from StringIO import StringIO
Tim Lauridsen c48e3ff
+    >>> from six import StringIO
Tim Lauridsen c48e3ff
     >>> sio = StringIO('''
Tim Lauridsen c48e3ff
     ... # comment
Tim Lauridsen c48e3ff
     ... ui.height = 100
Tim Lauridsen c48e3ff
@@ -171,7 +171,7 @@
Tim Lauridsen c48e3ff
     ... ''')
Tim Lauridsen c48e3ff
     >>> n = BasicConfig()
Tim Lauridsen c48e3ff
     >>> n._readfp(sio)
Tim Lauridsen c48e3ff
-    >>> print n
Tim Lauridsen c48e3ff
+    >>> print(n)
Tim Lauridsen c48e3ff
     complexity = medium
Tim Lauridsen c48e3ff
     data.secret.password = goodness=gracious me
Tim Lauridsen c48e3ff
     have_python
Tim Lauridsen c48e3ff
@@ -199,7 +199,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def __str__(self, prefix=''):
Tim Lauridsen c48e3ff
         lines = []
Tim Lauridsen c48e3ff
-        keys = self._data.keys()
Tim Lauridsen c48e3ff
+        keys = list(self._data.keys())
Tim Lauridsen c48e3ff
         keys.sort()
Tim Lauridsen c48e3ff
         for name in keys:
Tim Lauridsen c48e3ff
             value = self._data[name]
Tim Lauridsen c48e3ff
@@ -258,7 +258,7 @@
Tim Lauridsen c48e3ff
     >>> n.ui.display_clock = True
Tim Lauridsen c48e3ff
     >>> n.ui.display_qlength = True
Tim Lauridsen c48e3ff
     >>> n.ui.width = 150
Tim Lauridsen c48e3ff
-    >>> print n
Tim Lauridsen c48e3ff
+    >>> print(n)
Tim Lauridsen c48e3ff
     playlist.expand_playlist = True
Tim Lauridsen c48e3ff
     ui.display_clock = True
Tim Lauridsen c48e3ff
     ui.display_qlength = True
Tim Lauridsen c48e3ff
@@ -267,7 +267,7 @@
Tim Lauridsen c48e3ff
     >>> from iniparse import ini
Tim Lauridsen c48e3ff
     >>> i = ini.INIConfig()
Tim Lauridsen c48e3ff
     >>> update_config(i, n)
Tim Lauridsen c48e3ff
-    >>> print i
Tim Lauridsen c48e3ff
+    >>> print(i)
Tim Lauridsen c48e3ff
     [playlist]
Tim Lauridsen c48e3ff
     expand_playlist = True
Tim Lauridsen c48e3ff
     <BLANKLINE>
Tim Lauridsen c48e3ff
@@ -277,7 +277,7 @@
Tim Lauridsen c48e3ff
     width = 150
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     """
Tim Lauridsen c48e3ff
-    for name in source:
Tim Lauridsen c48e3ff
+    for name in sorted(source):
Tim Lauridsen c48e3ff
         value = source[name]
Tim Lauridsen c48e3ff
         if isinstance(value, ConfigNamespace):
Tim Lauridsen c48e3ff
             if name in target:
Tim Lauridsen c48e3ff
Index: iniparse/configparser.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- iniparse/configparser.py	(revision 0)
Tim Lauridsen c48e3ff
+++ iniparse/configparser.py	(working copy)
Tim Lauridsen c48e3ff
@@ -0,0 +1,7 @@
Tim Lauridsen c48e3ff
+try:
Tim Lauridsen c48e3ff
+    from ConfigParser import *
Tim Lauridsen c48e3ff
+    # not all objects get imported with __all__
Tim Lauridsen c48e3ff
+    from ConfigParser import Error, InterpolationMissingOptionError
Tim Lauridsen c48e3ff
+except ImportError:
Tim Lauridsen c48e3ff
+    from configparser import *
Tim Lauridsen c48e3ff
+    from configparser import Error, InterpolationMissingOptionError
Tim Lauridsen c48e3ff
Index: iniparse/ini.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- iniparse/ini.py	(revision 146)
Tim Lauridsen c48e3ff
+++ iniparse/ini.py	(working copy)
Tim Lauridsen c48e3ff
@@ -7,7 +7,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 Example:
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-    >>> from StringIO import StringIO
Tim Lauridsen c48e3ff
+    >>> from six import StringIO
Tim Lauridsen c48e3ff
     >>> sio = StringIO('''# configure foo-application
Tim Lauridsen c48e3ff
     ... [foo]
Tim Lauridsen c48e3ff
     ... bar1 = qualia
Tim Lauridsen c48e3ff
@@ -16,14 +16,14 @@
Tim Lauridsen c48e3ff
     ... special = 1''')
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     >>> cfg = INIConfig(sio)
Tim Lauridsen c48e3ff
-    >>> print cfg.foo.bar1
Tim Lauridsen c48e3ff
+    >>> print(cfg.foo.bar1)
Tim Lauridsen c48e3ff
     qualia
Tim Lauridsen c48e3ff
-    >>> print cfg['foo-ext'].special
Tim Lauridsen c48e3ff
+    >>> print(cfg['foo-ext'].special)
Tim Lauridsen c48e3ff
     1
Tim Lauridsen c48e3ff
     >>> cfg.foo.newopt = 'hi!'
Tim Lauridsen c48e3ff
     >>> cfg.baz.enabled = 0
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-    >>> print cfg
Tim Lauridsen c48e3ff
+    >>> print(cfg)
Tim Lauridsen c48e3ff
     # configure foo-application
Tim Lauridsen c48e3ff
     [foo]
Tim Lauridsen c48e3ff
     bar1 = qualia
Tim Lauridsen c48e3ff
@@ -42,10 +42,12 @@
Tim Lauridsen c48e3ff
 # Backward-compatiable with ConfigParser
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 import re
Tim Lauridsen c48e3ff
-from ConfigParser import DEFAULTSECT, ParsingError, MissingSectionHeaderError
Tim Lauridsen c48e3ff
+from .configparser import DEFAULTSECT, ParsingError, MissingSectionHeaderError
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-import config
Tim Lauridsen c48e3ff
+import six
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
+from . import config
Tim Lauridsen c48e3ff
+
Tim Lauridsen c48e3ff
 class LineType(object):
Tim Lauridsen c48e3ff
     line = None
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
@@ -278,6 +280,8 @@
Tim Lauridsen c48e3ff
     value = property(get_value, set_value)
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def __str__(self):
Tim Lauridsen c48e3ff
+        for c in self.contents:
Tim Lauridsen c48e3ff
+            pass#print(c.__str__())
Tim Lauridsen c48e3ff
         s = [x.__str__() for x in self.contents]
Tim Lauridsen c48e3ff
         return '\n'.join(s)
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
@@ -465,7 +469,7 @@
Tim Lauridsen c48e3ff
         self._sections = {}
Tim Lauridsen c48e3ff
         if defaults is None: defaults = {}
Tim Lauridsen c48e3ff
         self._defaults = INISection(LineContainer(), optionxformsource=self)
Tim Lauridsen c48e3ff
-        for name, value in defaults.iteritems():
Tim Lauridsen c48e3ff
+        for name, value in defaults.items():
Tim Lauridsen c48e3ff
             self._defaults[name] = value
Tim Lauridsen c48e3ff
         if fp is not None:
Tim Lauridsen c48e3ff
             self._readfp(fp)
Tim Lauridsen c48e3ff
@@ -551,7 +555,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
         for line in readline_iterator(fp):
Tim Lauridsen c48e3ff
             # Check for BOM on first line
Tim Lauridsen c48e3ff
-            if linecount == 0 and isinstance(line, unicode):
Tim Lauridsen c48e3ff
+            if linecount == 0 and isinstance(line, six.text_type):
Tim Lauridsen c48e3ff
                 if line[0] == u'\ufeff':
Tim Lauridsen c48e3ff
                     line = line[1:]
Tim Lauridsen c48e3ff
                     self._bom = True
Tim Lauridsen c48e3ff
Index: iniparse/utils.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- iniparse/utils.py	(revision 146)
Tim Lauridsen c48e3ff
+++ iniparse/utils.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,5 +1,5 @@
Tim Lauridsen c48e3ff
-import compat
Tim Lauridsen c48e3ff
-from ini import LineContainer, EmptyLine
Tim Lauridsen c48e3ff
+from . import compat
Tim Lauridsen c48e3ff
+from .ini import LineContainer, EmptyLine
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 def tidy(cfg):
Tim Lauridsen c48e3ff
     """Clean up blank lines.
Tim Lauridsen c48e3ff
Index: tests/__init__.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/__init__.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/__init__.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,12 +1,12 @@
Tim Lauridsen c48e3ff
 import unittest, doctest
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-import test_ini
Tim Lauridsen c48e3ff
-import test_misc
Tim Lauridsen c48e3ff
-import test_fuzz
Tim Lauridsen c48e3ff
-import test_compat
Tim Lauridsen c48e3ff
-import test_unicode
Tim Lauridsen c48e3ff
-import test_tidy
Tim Lauridsen c48e3ff
-import test_multiprocessing
Tim Lauridsen c48e3ff
+from . import test_ini
Tim Lauridsen c48e3ff
+from . import test_misc
Tim Lauridsen c48e3ff
+from . import test_fuzz
Tim Lauridsen c48e3ff
+from . import test_compat
Tim Lauridsen c48e3ff
+from . import test_unicode
Tim Lauridsen c48e3ff
+from . import test_tidy
Tim Lauridsen c48e3ff
+from . import test_multiprocessing
Tim Lauridsen c48e3ff
 from iniparse import config
Tim Lauridsen c48e3ff
 from iniparse import ini
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
Index: tests/test_compat.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/test_compat.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/test_compat.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,9 +1,16 @@
Tim Lauridsen c48e3ff
 from iniparse import compat as ConfigParser
Tim Lauridsen c48e3ff
-import StringIO
Tim Lauridsen c48e3ff
+from six import StringIO
Tim Lauridsen c48e3ff
+try:
Tim Lauridsen c48e3ff
+    import UserDict
Tim Lauridsen c48e3ff
+except ImportError:
Tim Lauridsen c48e3ff
+    import collections as UserDict
Tim Lauridsen c48e3ff
 import unittest
Tim Lauridsen c48e3ff
-import UserDict
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
-from test import test_support
Tim Lauridsen c48e3ff
+import sys
Tim Lauridsen c48e3ff
+if sys.version_info[0] < 3:
Tim Lauridsen c48e3ff
+    from test import test_support
Tim Lauridsen c48e3ff
+else:
Tim Lauridsen c48e3ff
+    from test import support as test_support
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 class SortedDict(UserDict.UserDict):
Tim Lauridsen c48e3ff
     def items(self):
Tim Lauridsen c48e3ff
@@ -35,7 +42,7 @@
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def fromstring(self, string, defaults=None):
Tim Lauridsen c48e3ff
         cf = self.newconfig(defaults)
Tim Lauridsen c48e3ff
-        sio = StringIO.StringIO(string)
Tim Lauridsen c48e3ff
+        sio = StringIO(string)
Tim Lauridsen c48e3ff
         cf.readfp(sio)
Tim Lauridsen c48e3ff
         return cf
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
@@ -161,7 +168,7 @@
Tim Lauridsen c48e3ff
                          "No Section!\n")
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def parse_error(self, exc, src):
Tim Lauridsen c48e3ff
-        sio = StringIO.StringIO(src)
Tim Lauridsen c48e3ff
+        sio = StringIO(src)
Tim Lauridsen c48e3ff
         self.assertRaises(exc, self.cf.readfp, sio)
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def test_query_errors(self):
Tim Lauridsen c48e3ff
@@ -181,7 +188,7 @@
Tim Lauridsen c48e3ff
     def get_error(self, exc, section, option):
Tim Lauridsen c48e3ff
         try:
Tim Lauridsen c48e3ff
             self.cf.get(section, option)
Tim Lauridsen c48e3ff
-        except exc, e:
Tim Lauridsen c48e3ff
+        except exc as e:
Tim Lauridsen c48e3ff
             return e
Tim Lauridsen c48e3ff
         else:
Tim Lauridsen c48e3ff
             self.fail("expected exception type %s.%s"
Tim Lauridsen c48e3ff
@@ -227,7 +234,7 @@
Tim Lauridsen c48e3ff
             "foo: another very\n"
Tim Lauridsen c48e3ff
             " long line"
Tim Lauridsen c48e3ff
             )
Tim Lauridsen c48e3ff
-        output = StringIO.StringIO()
Tim Lauridsen c48e3ff
+        output = StringIO()
Tim Lauridsen c48e3ff
         cf.write(output)
Tim Lauridsen c48e3ff
         self.assertEqual(
Tim Lauridsen c48e3ff
             output.getvalue(),
Tim Lauridsen c48e3ff
@@ -465,7 +472,7 @@
Tim Lauridsen c48e3ff
                         "o1=4\n"
Tim Lauridsen c48e3ff
                         "[a]\n"
Tim Lauridsen c48e3ff
                         "k=v\n")
Tim Lauridsen c48e3ff
-        output = StringIO.StringIO()
Tim Lauridsen c48e3ff
+        output = StringIO()
Tim Lauridsen c48e3ff
         self.cf.write(output)
Tim Lauridsen c48e3ff
         self.assertEquals(output.getvalue(),
Tim Lauridsen c48e3ff
                           "[a]\n"
Tim Lauridsen c48e3ff
Index: tests/test_fuzz.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/test_fuzz.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/test_fuzz.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,9 +1,10 @@
Tim Lauridsen c48e3ff
 import re
Tim Lauridsen c48e3ff
 import os
Tim Lauridsen c48e3ff
 import random
Tim Lauridsen c48e3ff
+import sys
Tim Lauridsen c48e3ff
 import unittest
Tim Lauridsen c48e3ff
-import ConfigParser
Tim Lauridsen c48e3ff
-from StringIO import StringIO
Tim Lauridsen c48e3ff
+from six import StringIO
Tim Lauridsen c48e3ff
+from six.moves import configparser
Tim Lauridsen c48e3ff
 from iniparse import compat, ini, tidy
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 # TODO:
Tim Lauridsen c48e3ff
@@ -96,24 +97,25 @@
Tim Lauridsen c48e3ff
                 s = '\n'.join(good_lines)
Tim Lauridsen c48e3ff
                 cc = compat.RawConfigParser()
Tim Lauridsen c48e3ff
                 cc.readfp(StringIO(s))
Tim Lauridsen c48e3ff
-                cc_py = ConfigParser.RawConfigParser()
Tim Lauridsen c48e3ff
+                cc_py = configparser.RawConfigParser()
Tim Lauridsen c48e3ff
                 cc_py.readfp(StringIO(s))
Tim Lauridsen c48e3ff
                 # compare the two configparsers
Tim Lauridsen c48e3ff
                 self.assertEqualConfig(cc_py, cc)
Tim Lauridsen c48e3ff
                 # check that tidy does not change semantics
Tim Lauridsen c48e3ff
                 tidy(cc)
Tim Lauridsen c48e3ff
-                cc_tidy = ConfigParser.RawConfigParser()
Tim Lauridsen c48e3ff
+                cc_tidy = configparser.RawConfigParser()
Tim Lauridsen c48e3ff
                 cc_tidy.readfp(StringIO(str(cc.data)))
Tim Lauridsen c48e3ff
                 self.assertEqualConfig(cc_py, cc_tidy)
Tim Lauridsen c48e3ff
             except AssertionError:
Tim Lauridsen c48e3ff
                 fname = 'fuzz-test-iter-%d.ini' % fuzz_iter
Tim Lauridsen c48e3ff
-                print 'Fuzz test failed at iteration', fuzz_iter
Tim Lauridsen c48e3ff
-                print 'Writing out failing INI file as', fname
Tim Lauridsen c48e3ff
+                print('Fuzz test failed at iteration', fuzz_iter)
Tim Lauridsen c48e3ff
+                print('Writing out failing INI file as', fname)
Tim Lauridsen c48e3ff
                 f = open(fname, 'w')
Tim Lauridsen c48e3ff
                 f.write(s)
Tim Lauridsen c48e3ff
                 f.close()
Tim Lauridsen c48e3ff
                 raise
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
+    @unittest.skipIf(sys.version_info[0] > 2, 'http://code.google.com/p/iniparse/issues/detail?id=22#c9')
Tim Lauridsen c48e3ff
     def assertEqualConfig(self, c1, c2):
Tim Lauridsen c48e3ff
         self.assertEqualSorted(c1.sections(), c2.sections())
Tim Lauridsen c48e3ff
         self.assertEqualSorted(c1.defaults().items(), c2.defaults().items())
Tim Lauridsen c48e3ff
@@ -123,9 +125,7 @@
Tim Lauridsen c48e3ff
                 self.assertEqual(c1.get(sec, opt), c2.get(sec, opt))
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def assertEqualSorted(self, l1, l2):
Tim Lauridsen c48e3ff
-        l1.sort()
Tim Lauridsen c48e3ff
-        l2.sort()
Tim Lauridsen c48e3ff
-        self.assertEqual(l1, l2)
Tim Lauridsen c48e3ff
+        self.assertEqual(sorted(l1), sorted(l2))
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 class suite(unittest.TestSuite):
Tim Lauridsen c48e3ff
     def __init__(self):
Tim Lauridsen c48e3ff
Index: tests/test_ini.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/test_ini.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/test_ini.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,5 +1,5 @@
Tim Lauridsen c48e3ff
 import unittest
Tim Lauridsen c48e3ff
-from StringIO import StringIO
Tim Lauridsen c48e3ff
+from six import StringIO
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 from iniparse import ini
Tim Lauridsen c48e3ff
 from iniparse import compat
Tim Lauridsen c48e3ff
@@ -196,13 +196,13 @@
Tim Lauridsen c48e3ff
         self.assertEqual(p._data.find('section2').find('just').value, 'kidding')
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
         itr = p._data.finditer('section1')
Tim Lauridsen c48e3ff
-        v = itr.next()
Tim Lauridsen c48e3ff
+        v = next(itr)
Tim Lauridsen c48e3ff
         self.assertEqual(v.find('help').value, 'yourself')
Tim Lauridsen c48e3ff
         self.assertEqual(v.find('but').value, 'also me')
Tim Lauridsen c48e3ff
-        v = itr.next()
Tim Lauridsen c48e3ff
+        v = next(itr)
Tim Lauridsen c48e3ff
         self.assertEqual(v.find('help').value, 'me')
Tim Lauridsen c48e3ff
         self.assertEqual(v.find('I\'m').value, 'desperate')
Tim Lauridsen c48e3ff
-        self.assertRaises(StopIteration, itr.next)
Tim Lauridsen c48e3ff
+        self.assertRaises(StopIteration, next, itr)
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
         self.assertRaises(KeyError, p._data.find, 'section')
Tim Lauridsen c48e3ff
         self.assertRaises(KeyError, p._data.find('section2').find, 'ahem')
Tim Lauridsen c48e3ff
Index: tests/test_misc.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/test_misc.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/test_misc.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,9 +1,9 @@
Tim Lauridsen c48e3ff
 import re
Tim Lauridsen c48e3ff
 import unittest
Tim Lauridsen c48e3ff
 import pickle
Tim Lauridsen c48e3ff
-import ConfigParser
Tim Lauridsen c48e3ff
+from six.moves import configparser
Tim Lauridsen c48e3ff
+from six import StringIO
Tim Lauridsen c48e3ff
 from textwrap import dedent
Tim Lauridsen c48e3ff
-from StringIO import StringIO
Tim Lauridsen c48e3ff
 from iniparse import compat, ini
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 class CaseSensitiveConfigParser(compat.ConfigParser):
Tim Lauridsen c48e3ff
Index: tests/test_tidy.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/test_tidy.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/test_tidy.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,6 +1,6 @@
Tim Lauridsen c48e3ff
 import unittest
Tim Lauridsen c48e3ff
 from textwrap import dedent
Tim Lauridsen c48e3ff
-from StringIO import StringIO
Tim Lauridsen c48e3ff
+from six import StringIO
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 from iniparse import tidy,INIConfig
Tim Lauridsen c48e3ff
 from iniparse.ini import  EmptyLine
Tim Lauridsen c48e3ff
Index: tests/test_unicode.py
Tim Lauridsen c48e3ff
===================================================================
Tim Lauridsen c48e3ff
--- tests/test_unicode.py	(revision 146)
Tim Lauridsen c48e3ff
+++ tests/test_unicode.py	(working copy)
Tim Lauridsen c48e3ff
@@ -1,5 +1,5 @@
Tim Lauridsen c48e3ff
 import unittest
Tim Lauridsen c48e3ff
-from StringIO import StringIO
Tim Lauridsen c48e3ff
+import six
Tim Lauridsen c48e3ff
 from iniparse import compat, ini
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
 class test_unicode(unittest.TestCase):
Tim Lauridsen c48e3ff
@@ -17,14 +17,14 @@
Tim Lauridsen c48e3ff
     """
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def basic_tests(self, s, strable):
Tim Lauridsen c48e3ff
-        f = StringIO(s)
Tim Lauridsen c48e3ff
+        f = six.StringIO(s)
Tim Lauridsen c48e3ff
         i = ini.INIConfig(f)
Tim Lauridsen c48e3ff
-        self.assertEqual(unicode(i), s)
Tim Lauridsen c48e3ff
-        self.assertEqual(type(i.foo.bar), unicode)
Tim Lauridsen c48e3ff
+        self.assertEqual(six.text_type(i), s)
Tim Lauridsen c48e3ff
+        self.assertEqual(type(i.foo.bar), six.text_type)
Tim Lauridsen c48e3ff
         if strable:
Tim Lauridsen c48e3ff
             self.assertEqual(str(i), str(s))
Tim Lauridsen c48e3ff
         else:
Tim Lauridsen c48e3ff
-            self.assertRaises(UnicodeEncodeError, lambda: str(i))
Tim Lauridsen c48e3ff
+            self.assertRaises(UnicodeEncodeError, lambda: six.text_type(i).encode('ascii'))
Tim Lauridsen c48e3ff
         return i
Tim Lauridsen c48e3ff
 
Tim Lauridsen c48e3ff
     def test_ascii(self):