Python 3 support.
[python-bulletml.git] / bulletml / parser.py
index de3e817..2ad648c 100644 (file)
@@ -14,9 +14,12 @@ import math
 from xml.etree.ElementTree import ElementTree
 
 try:
-    from cStringIO import StringIO
+    from io import StringIO
 except ImportError:
-    from StringIO import StringIO
+    try:
+        from cStringIO import StringIO
+    except ImportError:
+        from StringIO import StringIO
 
 from bulletml.errors import Error
 from bulletml.expr import NumberDef, INumberDef
@@ -524,7 +527,7 @@ class BulletML(object):
     @classmethod
     def FromDocument(cls, source):
         """Return a BulletML instance based on a string or file-like."""
-        if isinstance(source, (str, unicode)):
+        if not hasattr(source, 'read'):
             source = StringIO(source)
 
         tree = ElementTree()
@@ -564,7 +567,7 @@ class BulletML(object):
     @property
     def top(self):
         """Get a list of all top-level actions."""
-        return [dfn for name, dfn in self.actions.iteritems()
+        return [dfn for name, dfn in self.actions.items()
                 if name and name.startswith("top")]
 
     def __repr__(self):