diff --git a/nengo_gui/compat.py b/nengo_gui/compat.py new file mode 100644 index 00000000..0f0945a7 --- /dev/null +++ b/nengo_gui/compat.py @@ -0,0 +1,34 @@ +from __future__ import absolute_import + +import collections +import sys + +import numpy as np + +# Only test for Python 2 so that we have less changes for Python 4 +PY2 = sys.version_info[0] == 2 + +# If something's changed from Python 2 to 3, we handle that here +if PY2: + from cgi import escape as cgi_escape + from StringIO import StringIO + + escape = lambda s, quote=True: cgi_escape(s, quote=quote) + iteritems = lambda d: d.iteritems() + + string_types = (str, unicode) + int_types = (int, long) + range = xrange + +else: + from html import escape + from io import StringIO + + iteritems = lambda d: iter(d.items()) + + +def is_iterable(obj): + if isinstance(obj, np.ndarray): + return obj.ndim > 0 # 0-d arrays give error if iterated over + else: + return isinstance(obj, collections.Iterable) diff --git a/nengo_gui/components/netgraph.py b/nengo_gui/components/netgraph.py index 811bf4a3..e5f07107 100644 --- a/nengo_gui/components/netgraph.py +++ b/nengo_gui/components/netgraph.py @@ -6,9 +6,9 @@ import numpy as np import nengo -from nengo.utils.compat import escape import json +from nengo_gui.compat import escape, iteritems from nengo_gui.components.component import Component from nengo_gui.components.value import Value from nengo_gui.components.slider import OverriddenOutput @@ -123,7 +123,7 @@ def _reload(self, code=None): # noqa: C901 # for Nodes, Ensembles, and Networks, this means to find the item # with the same uid. For Connections, we don't really have a uid, # so we use the uids of the pre and post objects. - for uid, old_item in nengo.utils.compat.iteritems(dict(self.uids)): + for uid, old_item in iteritems(dict(self.uids)): try: new_item = eval(uid, self.page.locals) except: diff --git a/nengo_gui/components/progress.py b/nengo_gui/components/progress.py index 655616f4..a67e4387 100644 --- a/nengo_gui/components/progress.py +++ b/nengo_gui/components/progress.py @@ -1,18 +1,8 @@ import json -try: - from nengo.utils.compat import escape -except ImportError: - import sys - PY2 = sys.version_info[0] == 2 - if PY2: - from cgi import escape as cgi_escape - escape = lambda s, quote=True: cgi_escape(s, quote=quote) - else: - from html import escape - from nengo.utils.progress import ProgressBar, timestamp2timedelta +from nengo_gui.compat import escape from nengo_gui.components.component import Component diff --git a/nengo_gui/components/slider.py b/nengo_gui/components/slider.py index c3092f72..62052fea 100644 --- a/nengo_gui/components/slider.py +++ b/nengo_gui/components/slider.py @@ -9,8 +9,8 @@ class Process(object): pass -from nengo.utils.compat import is_iterable +from nengo_gui.compat import is_iterable from nengo_gui.components.component import Component diff --git a/nengo_gui/exec_env.py b/nengo_gui/exec_env.py index 5e48b760..66b7d96c 100644 --- a/nengo_gui/exec_env.py +++ b/nengo_gui/exec_env.py @@ -4,7 +4,8 @@ import threading import traceback import sys -from nengo.utils.compat import StringIO + +from nengo_gui.compat import StringIO # list of Simulators to check for diff --git a/nengo_gui/user_action.py b/nengo_gui/user_action.py index ba9aa11e..be7114e5 100644 --- a/nengo_gui/user_action.py +++ b/nengo_gui/user_action.py @@ -1,7 +1,6 @@ """Respond to an action from the user on the NetGraph""" -from nengo.utils.compat import iteritems - +from nengo_gui.compat import iteritems import nengo_gui.components