diff --git a/apptools/appscripting/action/api.py b/apptools/appscripting/action/api.py index 6011afd28..21662f389 100644 --- a/apptools/appscripting/action/api.py +++ b/apptools/appscripting/action/api.py @@ -12,5 +12,5 @@ # Description: #------------------------------------------------------------------------------ -from start_recording_action import StartRecordingAction -from stop_recording_action import StopRecordingAction +from .start_recording_action import StartRecordingAction +from .stop_recording_action import StopRecordingAction diff --git a/apptools/appscripting/api.py b/apptools/appscripting/api.py index dca72669b..b4447a055 100644 --- a/apptools/appscripting/api.py +++ b/apptools/appscripting/api.py @@ -12,9 +12,9 @@ # Description: #------------------------------------------------------------------------------ -from scriptable_type import create_scriptable_type, make_object_scriptable -from i_bind_event import IBindEvent -from i_script_manager import IScriptManager -from package_globals import get_script_manager, set_script_manager -from script_manager import ScriptManager -from scriptable import scriptable, Scriptable +from .scriptable_type import create_scriptable_type, make_object_scriptable +from .i_bind_event import IBindEvent +from .i_script_manager import IScriptManager +from .package_globals import get_script_manager, set_script_manager +from .script_manager import ScriptManager +from .scriptable import scriptable, Scriptable diff --git a/apptools/appscripting/bind_event.py b/apptools/appscripting/bind_event.py index 5a64867cf..2c289bf7d 100644 --- a/apptools/appscripting/bind_event.py +++ b/apptools/appscripting/bind_event.py @@ -17,7 +17,7 @@ from traits.api import Any, HasTraits, provides, Str # Local imports. -from i_bind_event import IBindEvent +from .i_bind_event import IBindEvent @provides(IBindEvent) diff --git a/apptools/appscripting/i_script_manager.py b/apptools/appscripting/i_script_manager.py index e406cd108..cf029ba09 100644 --- a/apptools/appscripting/i_script_manager.py +++ b/apptools/appscripting/i_script_manager.py @@ -17,7 +17,7 @@ from traits.api import Bool, Event, Instance, Interface, Unicode # Local imports. -from i_bind_event import IBindEvent +from .i_bind_event import IBindEvent class IScriptManager(Interface): diff --git a/apptools/appscripting/lazy_namespace.py b/apptools/appscripting/lazy_namespace.py index 59ff0b804..af04c9400 100644 --- a/apptools/appscripting/lazy_namespace.py +++ b/apptools/appscripting/lazy_namespace.py @@ -17,9 +17,9 @@ from traits.api import Any, Callable, HasTraits # Local imports. -from bind_event import BindEvent -from package_globals import get_script_manager -from scriptable_type import make_object_scriptable +from .bind_event import BindEvent +from .package_globals import get_script_manager +from .scriptable_type import make_object_scriptable class FactoryWrapper(HasTraits): diff --git a/apptools/appscripting/package_globals.py b/apptools/appscripting/package_globals.py index 8a25ab8f2..635a8fc5c 100644 --- a/apptools/appscripting/package_globals.py +++ b/apptools/appscripting/package_globals.py @@ -24,7 +24,7 @@ def get_script_manager(): global _script_manager if _script_manager is None: - from script_manager import ScriptManager + from .script_manager import ScriptManager _script_manager = ScriptManager() diff --git a/apptools/appscripting/script_manager.py b/apptools/appscripting/script_manager.py index 996b8de80..d25260485 100644 --- a/apptools/appscripting/script_manager.py +++ b/apptools/appscripting/script_manager.py @@ -23,11 +23,11 @@ implements, Instance, Int, List, Property, Str, Unicode # Local imports. -from bind_event import BindEvent -from i_bind_event import IBindEvent -from i_script_manager import IScriptManager -from lazy_namespace import add_to_namespace, FactoryWrapper, LazyNamespace -from scriptable_type import make_object_scriptable +from .bind_event import BindEvent +from .i_bind_event import IBindEvent +from .i_script_manager import IScriptManager +from .lazy_namespace import add_to_namespace, FactoryWrapper, LazyNamespace +from .scriptable_type import make_object_scriptable @provides(IScriptManager) @@ -405,11 +405,11 @@ def run(self, script): # Initialise the namespace with all explicitly bound objects. nspace = LazyNamespace() - for name, bo in self._namespace.iteritems(): + for name, bo in self._namespace.items(): if bo.explicitly_bound: add_to_namespace(bo.obj, name, nspace) - exec script in nspace + exec(script, nspace) def run_file(self, file_name): """ Run the given script file. @@ -510,7 +510,7 @@ def new_object(self, obj, scripted_type, args=None, kwargs=None, name=None, # Doing this now avoids problems with mutable arguments. so.args = [self._scriptable_object_as_string(a) for a in args] - for n, value in kwargs.iteritems(): + for n, value in kwargs.items(): so.kwargs[n] = self._scriptable_object_as_string(value) so.explicitly_bound = False @@ -540,7 +540,7 @@ def args_as_string_list(args, kwargs, so_needed=None): s = ScriptManager.arg_as_string(arg, so_needed) all_args.append(s) - for name, value in kwargs.iteritems(): + for name, value in kwargs.items(): s = ScriptManager.arg_as_string(value, so_needed) all_args.append('%s=%s' % (name, s)) @@ -589,10 +589,10 @@ def _new_method(self, func, args, kwargs): nargs = nargs[1:] nkwargs = {} - for name, value in kwargs.iteritems(): + for name, value in kwargs.items(): nkwargs[name] = self._object_as_string(value) - return _ScriptMethod(name=func.func_name, so=so, args=nargs, + return _ScriptMethod(name=func.__name__, so=so, args=nargs, kwargs=nkwargs) def _add_method(self, entry, result): @@ -691,7 +691,7 @@ def _gc_script_obj(obj_ref): """ # Avoid recursive imports. - from package_globals import get_script_manager + from .package_globals import get_script_manager sm = get_script_manager() so = sm._so_by_ref[obj_ref] diff --git a/apptools/appscripting/scriptable.py b/apptools/appscripting/scriptable.py index 841082413..329e18fde 100644 --- a/apptools/appscripting/scriptable.py +++ b/apptools/appscripting/scriptable.py @@ -18,7 +18,7 @@ from traits.traits import trait_cast # Local imports. -from package_globals import get_script_manager +from .package_globals import get_script_manager # This is the guard that ensures that only outermost scriptable methods get @@ -44,7 +44,7 @@ def _scripter(*args, **kwargs): # See if there is an script manager set. sm = get_script_manager() - if func.func_name == '__init__': + if func.__name__ == '__init__': sm.new_object(args[0], type(args[0]), args[1:], kwargs) try: diff --git a/apptools/appscripting/scriptable_type.py b/apptools/appscripting/scriptable_type.py index 5cc10dea1..e55dc43ed 100644 --- a/apptools/appscripting/scriptable_type.py +++ b/apptools/appscripting/scriptable_type.py @@ -21,8 +21,8 @@ from traits.api import HasTraits # Local imports. -from package_globals import get_script_manager -from scriptable import scriptable, Scriptable +from .package_globals import get_script_manager +from .scriptable import scriptable, Scriptable def create_scriptable_type(scripted_type, name=None, bind_policy='auto', @@ -98,7 +98,7 @@ def __init__(self, *args, **kwargs): except KeyError: pass - names = ndict.keys() + names = list(ndict.keys()) # Create the type dictionary containing replacements for everything that # needs to be scriptable. diff --git a/apptools/help/help_plugin/action/demo_action.py b/apptools/help/help_plugin/action/demo_action.py index 837e886d8..84fa088bb 100644 --- a/apptools/help/help_plugin/action/demo_action.py +++ b/apptools/help/help_plugin/action/demo_action.py @@ -29,7 +29,7 @@ # This module's parent package. PARENT = '.'.join(__name__.split('.')[:-2]) -from util import get_sys_prefix_relative_filename +from .util import get_sys_prefix_relative_filename # Implementation of the ImageResource class to be used for the DocAction class. @provides(IExtensionPointUser) @@ -87,7 +87,7 @@ def perform(self, event): if filename is not None: try: Popen([sys.executable, filename]) - except OSError, err: + except OSError as err: logger.error( 'Could not execute Python file for Demo "%s".\n\n' \ % self.my_help_code.label + str(err) + \ diff --git a/apptools/help/help_plugin/action/doc_action.py b/apptools/help/help_plugin/action/doc_action.py index 0fb567659..9851439e0 100644 --- a/apptools/help/help_plugin/action/doc_action.py +++ b/apptools/help/help_plugin/action/doc_action.py @@ -26,7 +26,7 @@ from apptools.help.help_plugin.api import HelpDoc # Local imports -from util import get_sys_prefix_relative_filename +from .util import get_sys_prefix_relative_filename # Logging. logger = logging.getLogger(__name__) @@ -100,7 +100,7 @@ def perform(self, event): import webbrowser try: webbrowser.open(filename) - except (OSError, webbrowser.Error), msg: + except (OSError, webbrowser.Error) as msg: logger.error('Could not open page in browser for '+ \ 'Document "%s":\n\n' % self.my_help_doc.label + \ str(msg) + '\n\nTry changing Dcoument Preferences.') @@ -108,7 +108,7 @@ def perform(self, event): # Run the viewer, passing it the filename try: Popen([self.my_help_doc.viewer, filename]) - except OSError, msg: + except OSError as msg: logger.error('Could not execute program for Document' + \ ' "%s":\n\n ' % self.my_help_doc.label + str(msg) + \ '\n\nTry changing Document Preferences.') diff --git a/apptools/help/help_plugin/action/example_action.py b/apptools/help/help_plugin/action/example_action.py index 53e971b86..54d663096 100644 --- a/apptools/help/help_plugin/action/example_action.py +++ b/apptools/help/help_plugin/action/example_action.py @@ -25,7 +25,7 @@ ExamplesPreferences # Local import -from util import get_sys_prefix_relative_filename +from .util import get_sys_prefix_relative_filename # Logging. logger = logging.getLogger(__name__) @@ -71,7 +71,7 @@ def perform(self, event): # Run the editor, passing it the filename try: Popen([self.preferences.editor, filename]) - except OSError, err: + except OSError as err: logger.error( 'Could not execute program for Example "%s":\n\n ' \ % self.my_help_code.label + str(err) + '\n\nTry ' +\ diff --git a/apptools/help/help_plugin/action/load_url_action.py b/apptools/help/help_plugin/action/load_url_action.py index 478e99818..bdc4b11ab 100644 --- a/apptools/help/help_plugin/action/load_url_action.py +++ b/apptools/help/help_plugin/action/load_url_action.py @@ -10,12 +10,13 @@ # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! -# Enthought library imports. -from doc_action import DocAction +# Local imports. +from .doc_action import DocAction # This module's parent package. PARENT = '.'.join(__name__.split('.')[:-2]) + class LoadURLAction(DocAction): """ Workbench Action for displaying a url in a web browser. """ diff --git a/apptools/help/help_plugin/api.py b/apptools/help/help_plugin/api.py index f5639d589..5f64a170b 100644 --- a/apptools/help/help_plugin/api.py +++ b/apptools/help/help_plugin/api.py @@ -9,8 +9,8 @@ # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! -from help_code import HelpCode -from help_doc import HelpDoc -from help_plugin import HelpPlugin -from i_help_code import IHelpCode -from i_help_doc import IHelpDoc +from .help_code import HelpCode +from .help_doc import HelpDoc +from .help_plugin import HelpPlugin +from .i_help_code import IHelpCode +from .i_help_doc import IHelpDoc diff --git a/apptools/help/help_plugin/help_code.py b/apptools/help/help_plugin/help_code.py index 19446b994..613c76f1c 100644 --- a/apptools/help/help_plugin/help_code.py +++ b/apptools/help/help_plugin/help_code.py @@ -12,10 +12,11 @@ # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! -from apptools.preferences.api import PreferencesHelper from traits.api import File, Str, provides -from i_help_code import IHelpCode +from apptools.preferences.api import PreferencesHelper +from .i_help_code import IHelpCode + @provides(IHelpCode) class HelpCode(PreferencesHelper): diff --git a/apptools/help/help_plugin/help_doc.py b/apptools/help/help_plugin/help_doc.py index 1f8a1ce54..fd0a7d3f9 100644 --- a/apptools/help/help_plugin/help_doc.py +++ b/apptools/help/help_plugin/help_doc.py @@ -10,10 +10,11 @@ # is also available online at http://www.enthought.com/licenses/BSD.txt # Thanks for using Enthought open source! -from apptools.preferences.api import PreferencesHelper from traits.api import Either, File, Str, provides, Bool -from i_help_doc import IHelpDoc +from apptools.preferences.api import PreferencesHelper +from .i_help_doc import IHelpDoc + @provides(IHelpDoc) class HelpDoc(PreferencesHelper): diff --git a/apptools/help/help_plugin/help_plugin.py b/apptools/help/help_plugin/help_plugin.py index 2cf2bf610..1bebb9317 100644 --- a/apptools/help/help_plugin/help_plugin.py +++ b/apptools/help/help_plugin/help_plugin.py @@ -22,10 +22,10 @@ from traits.api import Instance, List, Str # Local imports -from help_code import HelpCode -from help_doc import HelpDoc -from i_help_code import IHelpCode -from i_help_doc import IHelpDoc +from .help_code import HelpCode +from .help_doc import HelpDoc +from .i_help_code import IHelpCode +from .i_help_doc import IHelpDoc # Logging. logger = logging.getLogger(__name__) diff --git a/apptools/help/help_plugin/help_submenu_manager.py b/apptools/help/help_plugin/help_submenu_manager.py index 6dcdbeb1a..fc23ca5ce 100644 --- a/apptools/help/help_plugin/help_submenu_manager.py +++ b/apptools/help/help_plugin/help_submenu_manager.py @@ -20,13 +20,13 @@ from traits.api import Any, provides, Instance, List, Property # Local imports. -from action.doc_action import DocAction -from action.demo_action import DemoAction -from action.example_action import ExampleAction -from action.load_url_action import LoadURLAction -from examples_preferences import ExamplesPreferences -from i_help_doc import IHelpDoc -from i_help_code import IHelpCode +from .action.doc_action import DocAction +from .action.demo_action import DemoAction +from .action.example_action import ExampleAction +from .action.load_url_action import LoadURLAction +from .examples_preferences import ExamplesPreferences +from .i_help_doc import IHelpDoc +from .i_help_code import IHelpCode # Logging. logger = logging.getLogger(__name__) diff --git a/apptools/io/__init__.py b/apptools/io/__init__.py index 4e00eff5d..b16cbb9dd 100644 --- a/apptools/io/__init__.py +++ b/apptools/io/__init__.py @@ -14,4 +14,4 @@ """ Provides an abstraction for files and folders in a file system. Part of the AppTools project of the Enthought Tool Suite. """ -from api import * +from apptools.io.api import * diff --git a/apptools/io/api.py b/apptools/io/api.py index 5a4e7cdb4..9f2a44be4 100644 --- a/apptools/io/api.py +++ b/apptools/io/api.py @@ -11,4 +11,4 @@ # Author: Enthought, Inc. # Description: #------------------------------------------------------------------------------ -from file import File +from .file import File diff --git a/apptools/io/h5/dict_node.py b/apptools/io/h5/dict_node.py index 94cb9d612..aa82f4f05 100644 --- a/apptools/io/h5/dict_node.py +++ b/apptools/io/h5/dict_node.py @@ -213,8 +213,12 @@ def _handle_array_values(cls, pyt_file, group_path, data): # Remove stored arrays which are no longer in the data dictionary. pyt_children = group._v_children + nodes_to_remove = [] for key in pyt_children.keys(): if key not in data: - pyt_file.remove_node(group, key) + nodes_to_remove.append(key) + + for key in nodes_to_remove: + pyt_file.remove_node(group, key) return out_data diff --git a/apptools/io/h5/file.py b/apptools/io/h5/file.py index fc41ede64..7dce5408d 100644 --- a/apptools/io/h5/file.py +++ b/apptools/io/h5/file.py @@ -423,11 +423,11 @@ def root(self): @property def children_names(self): - return self._h5_group._v_children.keys() + return list(self._h5_group._v_children.keys()) @property def subgroup_names(self): - return self._h5_group._v_groups.keys() + return list(self._h5_group._v_groups.keys()) def iter_groups(self): """ Iterate over `H5Group` nodes that are children of this group. """ diff --git a/apptools/io/h5/table_node.py b/apptools/io/h5/table_node.py index 66c0c4219..546f68839 100644 --- a/apptools/io/h5/table_node.py +++ b/apptools/io/h5/table_node.py @@ -1,5 +1,6 @@ import numpy as np from pandas import DataFrame +import six from tables.table import Table as PyTablesTable @@ -78,7 +79,7 @@ def append(self, data): data : dict A dictionary of column name -> values items """ - rows = zip(*[data[name] for name in self.keys()]) + rows = list(zip(*[data[name] for name in self.keys()])) self._h5_table.append(rows) def __getitem__(self, col_or_cols): @@ -95,7 +96,7 @@ def __getitem__(self, col_or_cols): An array of column data with the column order matching that of `col_or_cols`. """ - if isinstance(col_or_cols, basestring): + if isinstance(col_or_cols, six.string_types): return self._h5_table.col(col_or_cols) column_data = [self._h5_table.col(name) for name in col_or_cols] diff --git a/apptools/io/h5/tests/test_dict_node.py b/apptools/io/h5/tests/test_dict_node.py index 48bfa4157..4a84c1a91 100644 --- a/apptools/io/h5/tests/test_dict_node.py +++ b/apptools/io/h5/tests/test_dict_node.py @@ -1,5 +1,6 @@ import numpy as np from numpy.testing import raises, assert_allclose +import six from ..dict_node import H5DictNode from .utils import open_h5file, temp_h5_file, temp_file @@ -170,14 +171,14 @@ def test_basic_dtypes(): h5dict = H5DictNode.add_to_h5file(h5, NODE, data) assert isinstance(h5dict['a_int'], int) assert isinstance(h5dict['a_float'], float) - assert isinstance(h5dict['a_str'], basestring) + assert isinstance(h5dict['a_str'], six.string_types) def test_mixed_type_list(): with temp_h5_file() as h5: data = dict(a=[1, 1.0, 'abc']) h5dict = H5DictNode.add_to_h5file(h5, NODE, data) - for value, dtype in zip(h5dict['a'], (int, float, basestring)): + for value, dtype in zip(h5dict['a'], (int, float, six.string_types)): assert isinstance(value, dtype) diff --git a/apptools/io/h5/tests/test_file.py b/apptools/io/h5/tests/test_file.py index a521d6759..f4cf24f11 100644 --- a/apptools/io/h5/tests/test_file.py +++ b/apptools/io/h5/tests/test_file.py @@ -509,15 +509,15 @@ def test_attribute_iteration_methods(): attrs['count'] = 42 attrs['alpha'] = 0xff - items = attrs.items() + items = list(attrs.items()) assert all(isinstance(x, tuple) for x in items) # unfold the pairs - keys, vals = map(list, zip(*items)) + keys, vals = [list(item) for item in zip(*items)] - assert keys == attrs.keys() - assert vals == attrs.values() + assert keys == list(attrs.keys()) + assert vals == list(attrs.values()) # Check that __iter__ is consistent assert keys == list(iter(attrs)) diff --git a/apptools/logger/agent/quality_agent_mailer.py b/apptools/logger/agent/quality_agent_mailer.py index 2d18213d9..1525b49f8 100644 --- a/apptools/logger/agent/quality_agent_mailer.py +++ b/apptools/logger/agent/quality_agent_mailer.py @@ -88,7 +88,7 @@ def create_email_message(fromaddr, toaddrs, ccaddrs, subject, priority, """ try: entries = [] - for key, value in os.environ.iteritems(): + for key, value in os.environ.items(): entries.append('%30s : %s\n' % (key, value)) ctype = 'application/octet-stream' diff --git a/apptools/logger/api.py b/apptools/logger/api.py index 20c082c2c..603c6d971 100644 --- a/apptools/logger/api.py +++ b/apptools/logger/api.py @@ -1,5 +1,5 @@ -from logger import add_log_queue_handler, create_log_file_handler -from logger import FORMATTER, LEVEL, LogFileHandler -from log_point import log_point -from filtering_handler import FilteringHandler -from null_handler import NullHandler +from .logger import add_log_queue_handler, create_log_file_handler +from .logger import FORMATTER, LEVEL, LogFileHandler +from .log_point import log_point +from .filtering_handler import FilteringHandler +from .null_handler import NullHandler diff --git a/apptools/logger/filtering_handler.py b/apptools/logger/filtering_handler.py index 5785208e0..0beb009df 100644 --- a/apptools/logger/filtering_handler.py +++ b/apptools/logger/filtering_handler.py @@ -15,13 +15,14 @@ # Standard library imports. +from __future__ import print_function import logging, inspect, os # Local imports. # # fixme: This module was just copied over from 'envisage.core' (so # that we don't rely on Envisage here!). Where should this module go? -from util import get_module_name +from .util import get_module_name class FilteringHandler(logging.Handler): @@ -99,7 +100,7 @@ def emit(self, record): def filtered_emit(self, record): """ Emits a log record if it has not been filtered. """ - print record.getMessage() + print(record.getMessage()) return diff --git a/apptools/logger/log_queue_handler.py b/apptools/logger/log_queue_handler.py index 31e8c1c3c..6ba9a8dc1 100644 --- a/apptools/logger/log_queue_handler.py +++ b/apptools/logger/log_queue_handler.py @@ -16,7 +16,7 @@ from logging import Handler # Local imports. -from ring_buffer import RingBuffer +from .ring_buffer import RingBuffer class LogQueueHandler(Handler): @@ -46,7 +46,7 @@ def emit(self, record): if self._view is not None: try: self._view.update() - except Exception, e: + except Exception as e: pass self.dirty = True return @@ -57,7 +57,7 @@ def get(self): try: result = self.ring.get() - except Exception, msg: + except Exception as msg: # we did our best and it won't cause too much damage # to just return a bogus message result = [] @@ -75,7 +75,7 @@ def reset(self): if self._view is not None: try: self._view.update() - except Exception, e: + except Exception as e: pass self.dirty = True return diff --git a/apptools/logger/logger.py b/apptools/logger/logger.py index d3b64f274..55382772c 100644 --- a/apptools/logger/logger.py +++ b/apptools/logger/logger.py @@ -22,7 +22,7 @@ from traits.util.api import deprecated # Local imports. -from log_queue_handler import LogQueueHandler +from .log_queue_handler import LogQueueHandler # The default logging level. diff --git a/apptools/logger/plugin/logger_plugin.py b/apptools/logger/plugin/logger_plugin.py index ed4abcdad..5f81d02a4 100644 --- a/apptools/logger/plugin/logger_plugin.py +++ b/apptools/logger/plugin/logger_plugin.py @@ -23,8 +23,8 @@ from traits.api import Callable, List # Local imports. -from logger_preferences import LoggerPreferences -from logger_service import LoggerService +from .logger_preferences import LoggerPreferences +from .logger_service import LoggerService ID = 'apptools.logger' diff --git a/apptools/logger/plugin/logger_service.py b/apptools/logger/plugin/logger_service.py index 5c30a3a59..26b01d7de 100644 --- a/apptools/logger/plugin/logger_service.py +++ b/apptools/logger/plugin/logger_service.py @@ -132,7 +132,7 @@ def send_bug_report(self, smtp_server, fromaddr, toaddrs, ccaddrs, message): #server.set_debuglevel(1) server.sendmail(fromaddr, toaddrs + ccaddrs, message.as_string()) server.quit() - except Exception, e: + except Exception as e: logger.exception("Problem sending error report") #### Traits stuff ######################################################### diff --git a/apptools/lru_cache/__init__.py b/apptools/lru_cache/__init__.py index c0163fc68..3aae4b199 100644 --- a/apptools/lru_cache/__init__.py +++ b/apptools/lru_cache/__init__.py @@ -1,3 +1,3 @@ # -*- coding: utf-8 -*- -from lru_cache import LRUCache +from .lru_cache import LRUCache diff --git a/apptools/lru_cache/lru_cache.py b/apptools/lru_cache/lru_cache.py index eeae7ec80..f798e7c9b 100644 --- a/apptools/lru_cache/lru_cache.py +++ b/apptools/lru_cache/lru_cache.py @@ -88,7 +88,7 @@ def __setitem__(self, key, result): if dropped and self.cache_drop_callback is not None: self.cache_drop_callback(*dropped) finally: - self.updated = self.keys() + self.updated = list(self.keys()) def get(self, key, default=None): try: @@ -98,15 +98,15 @@ def get(self, key, default=None): def items(self): with self._lock: - return self._cache.items() + return list(self._cache.items()) def keys(self): with self._lock: - return self._cache.keys() + return list(self._cache.keys()) def values(self): with self._lock: - return self._cache.values() + return list(self._cache.values()) def clear(self): with self._lock: diff --git a/apptools/lru_cache/tests/test_lru_cache.py b/apptools/lru_cache/tests/test_lru_cache.py index b1e9fe9d2..7c95ccc7e 100644 --- a/apptools/lru_cache/tests/test_lru_cache.py +++ b/apptools/lru_cache/tests/test_lru_cache.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from __future__ import division, print_function +from __future__ import division from nose.tools import assert_equal @@ -113,7 +113,7 @@ def test_cache_keys_values(): expected = [1, 2] assert_equal(expected, sorted(c.keys())) - assert_equal(map(str, expected), sorted(c.values())) + assert_equal([str(val) for val in expected], sorted(c.values())) def test_cache_clear(): @@ -141,7 +141,6 @@ def test_updated_event(): c.on_trait_change(lambda x: events.append(x), 'updated') c[0] = 0 - print(c.keys()) assert_equal(sorted(events), [[0]]) c[1] = 1 diff --git a/apptools/naming/__init__.py b/apptools/naming/__init__.py index 7556f7381..b24666f51 100644 --- a/apptools/naming/__init__.py +++ b/apptools/naming/__init__.py @@ -15,4 +15,4 @@ preferences. Part of the AppTools project of the Enthought Tool Suite. """ -from api import * +from apptools.naming.api import * diff --git a/apptools/naming/adapter/__init__.py b/apptools/naming/adapter/__init__.py index b69959fe0..cc14aac8d 100644 --- a/apptools/naming/adapter/__init__.py +++ b/apptools/naming/adapter/__init__.py @@ -1 +1 @@ -from api import * +from apptools.naming.adapter.api import * diff --git a/apptools/naming/adapter/api.py b/apptools/naming/adapter/api.py index 4a84e56c9..3f49410cd 100644 --- a/apptools/naming/adapter/api.py +++ b/apptools/naming/adapter/api.py @@ -1,12 +1,12 @@ -from dict_context_adapter import DictContextAdapter -from dict_context_adapter_factory import DictContextAdapterFactory -from instance_context_adapter import InstanceContextAdapter -from instance_context_adapter_factory import InstanceContextAdapterFactory -from list_context_adapter import ListContextAdapter -from list_context_adapter_factory import ListContextAdapterFactory -from trait_list_context_adapter import TraitListContextAdapter -from trait_list_context_adapter_factory import TraitListContextAdapterFactory -from tuple_context_adapter import TupleContextAdapter -from tuple_context_adapter_factory import TupleContextAdapterFactory +from .dict_context_adapter import DictContextAdapter +from .dict_context_adapter_factory import DictContextAdapterFactory +from .instance_context_adapter import InstanceContextAdapter +from .instance_context_adapter_factory import InstanceContextAdapterFactory +from .list_context_adapter import ListContextAdapter +from .list_context_adapter_factory import ListContextAdapterFactory +from .trait_list_context_adapter import TraitListContextAdapter +from .trait_list_context_adapter_factory import TraitListContextAdapterFactory +from .tuple_context_adapter import TupleContextAdapter +from .tuple_context_adapter_factory import TupleContextAdapterFactory -from trait_dict_context_adapter import TraitDictContextAdapter +from .trait_dict_context_adapter import TraitDictContextAdapter diff --git a/apptools/naming/adapter/dict_context_adapter_factory.py b/apptools/naming/adapter/dict_context_adapter_factory.py index 175261763..e2f4478d1 100644 --- a/apptools/naming/adapter/dict_context_adapter_factory.py +++ b/apptools/naming/adapter/dict_context_adapter_factory.py @@ -5,7 +5,7 @@ from apptools.naming.api import ContextAdapterFactory # Local imports. -from dict_context_adapter import DictContextAdapter +from .dict_context_adapter import DictContextAdapter class DictContextAdapterFactory(ContextAdapterFactory): diff --git a/apptools/naming/adapter/instance_context_adapter.py b/apptools/naming/adapter/instance_context_adapter.py index d38b91d36..4e0e1edc0 100644 --- a/apptools/naming/adapter/instance_context_adapter.py +++ b/apptools/naming/adapter/instance_context_adapter.py @@ -144,7 +144,7 @@ def _get_public_attribute_names(self, obj): names = obj.trait_names() elif hasattr(obj, '__dict__'): - names = self.adaptee.__dict__.keys() + names = list(self.adaptee.__dict__.keys()) else: names = [] diff --git a/apptools/naming/adapter/instance_context_adapter_factory.py b/apptools/naming/adapter/instance_context_adapter_factory.py index fec5e20a6..b6dde2c99 100644 --- a/apptools/naming/adapter/instance_context_adapter_factory.py +++ b/apptools/naming/adapter/instance_context_adapter_factory.py @@ -7,7 +7,7 @@ from apptools.type_manager import PythonObject # Local imports. -from instance_context_adapter import InstanceContextAdapter +from .instance_context_adapter import InstanceContextAdapter class InstanceContextAdapterFactory(ContextAdapterFactory): diff --git a/apptools/naming/adapter/list_context_adapter_factory.py b/apptools/naming/adapter/list_context_adapter_factory.py index e430a264e..4c953dec8 100644 --- a/apptools/naming/adapter/list_context_adapter_factory.py +++ b/apptools/naming/adapter/list_context_adapter_factory.py @@ -5,7 +5,7 @@ from apptools.naming.api import ContextAdapterFactory # Local imports. -from list_context_adapter import ListContextAdapter +from .list_context_adapter import ListContextAdapter class ListContextAdapterFactory(ContextAdapterFactory): diff --git a/apptools/naming/adapter/trait_dict_context_adapter.py b/apptools/naming/adapter/trait_dict_context_adapter.py index d0f330d51..2556f5b2a 100644 --- a/apptools/naming/adapter/trait_dict_context_adapter.py +++ b/apptools/naming/adapter/trait_dict_context_adapter.py @@ -5,7 +5,7 @@ from traits.api import Dict, Property, Str # Local imports. -from dict_context_adapter import DictContextAdapter +from .dict_context_adapter import DictContextAdapter class TraitDictContextAdapter(DictContextAdapter): diff --git a/apptools/naming/adapter/trait_dict_context_adapter_factory.py b/apptools/naming/adapter/trait_dict_context_adapter_factory.py index 2b40dd95f..373b60116 100644 --- a/apptools/naming/adapter/trait_dict_context_adapter_factory.py +++ b/apptools/naming/adapter/trait_dict_context_adapter_factory.py @@ -6,7 +6,7 @@ from traits.api import Str, TraitDict # Local imports. -from trait_dict_context_adapter import TraitDictContextAdapter +from .trait_dict_context_adapter import TraitDictContextAdapter class TraitDictContextAdapterFactory(ContextAdapterFactory): diff --git a/apptools/naming/adapter/trait_list_context_adapter.py b/apptools/naming/adapter/trait_list_context_adapter.py index c09b5c0d2..a7b0a7425 100644 --- a/apptools/naming/adapter/trait_list_context_adapter.py +++ b/apptools/naming/adapter/trait_list_context_adapter.py @@ -5,7 +5,7 @@ from traits.api import Any, List, Property, Str # Local imports. -from list_context_adapter import ListContextAdapter +from .list_context_adapter import ListContextAdapter class TraitListContextAdapter(ListContextAdapter): diff --git a/apptools/naming/adapter/trait_list_context_adapter_factory.py b/apptools/naming/adapter/trait_list_context_adapter_factory.py index 58c976589..191110cb8 100644 --- a/apptools/naming/adapter/trait_list_context_adapter_factory.py +++ b/apptools/naming/adapter/trait_list_context_adapter_factory.py @@ -6,7 +6,7 @@ from traits.api import Str, TraitList # Local imports. -from trait_list_context_adapter import TraitListContextAdapter +from .trait_list_context_adapter import TraitListContextAdapter class TraitListContextAdapterFactory(ContextAdapterFactory): diff --git a/apptools/naming/adapter/tuple_context_adapter.py b/apptools/naming/adapter/tuple_context_adapter.py index 6e62774bc..f5f6e9ecb 100644 --- a/apptools/naming/adapter/tuple_context_adapter.py +++ b/apptools/naming/adapter/tuple_context_adapter.py @@ -5,7 +5,7 @@ from traits.api import Tuple # Local imports. -from list_context_adapter import ListContextAdapter +from .list_context_adapter import ListContextAdapter class TupleContextAdapter(ListContextAdapter): diff --git a/apptools/naming/adapter/tuple_context_adapter_factory.py b/apptools/naming/adapter/tuple_context_adapter_factory.py index 628313719..c87f2d58d 100644 --- a/apptools/naming/adapter/tuple_context_adapter_factory.py +++ b/apptools/naming/adapter/tuple_context_adapter_factory.py @@ -5,7 +5,7 @@ from apptools.naming.api import ContextAdapterFactory # Local imports. -from tuple_context_adapter import TupleContextAdapter +from .tuple_context_adapter import TupleContextAdapter class TupleContextAdapterFactory(ContextAdapterFactory): diff --git a/apptools/naming/api.py b/apptools/naming/api.py index bd2aaefcd..9bd6e227c 100644 --- a/apptools/naming/api.py +++ b/apptools/naming/api.py @@ -11,31 +11,31 @@ # Author: Enthought, Inc. # Description: #------------------------------------------------------------------------------ -from exception import NamingError, InvalidNameError, NameAlreadyBoundError -from exception import NameNotFoundError, NotContextError -from exception import OperationNotSupportedError +from .exception import NamingError, InvalidNameError, NameAlreadyBoundError +from .exception import NameNotFoundError, NotContextError +from .exception import OperationNotSupportedError -from address import Address -from binding import Binding -from context import Context -from context_adapter import ContextAdapter -from context_adapter_factory import ContextAdapterFactory -from dynamic_context import DynamicContext -from dir_context import DirContext -from initial_context import InitialContext -from initial_context_factory import InitialContextFactory -from naming_event import NamingEvent -from naming_manager import naming_manager -from object_factory import ObjectFactory -from object_serializer import ObjectSerializer -from py_context import PyContext -from py_object_factory import PyObjectFactory -from pyfs_context import PyFSContext -from pyfs_context_factory import PyFSContextFactory -from pyfs_initial_context_factory import PyFSInitialContextFactory -from pyfs_object_factory import PyFSObjectFactory -from pyfs_state_factory import PyFSStateFactory -from reference import Reference -from referenceable import Referenceable -from referenceable_state_factory import ReferenceableStateFactory -from state_factory import StateFactory +from .address import Address +from .binding import Binding +from .context import Context +from .context_adapter import ContextAdapter +from .context_adapter_factory import ContextAdapterFactory +from .dynamic_context import DynamicContext +from .dir_context import DirContext +from .initial_context import InitialContext +from .initial_context_factory import InitialContextFactory +from .naming_event import NamingEvent +from .naming_manager import naming_manager +from .object_factory import ObjectFactory +from .object_serializer import ObjectSerializer +from .py_context import PyContext +from .py_object_factory import PyObjectFactory +from .pyfs_context import PyFSContext +from .pyfs_context_factory import PyFSContextFactory +from .pyfs_initial_context_factory import PyFSInitialContextFactory +from .pyfs_object_factory import PyFSObjectFactory +from .pyfs_state_factory import PyFSStateFactory +from .reference import Reference +from .referenceable import Referenceable +from .referenceable_state_factory import ReferenceableStateFactory +from .state_factory import StateFactory diff --git a/apptools/naming/context.py b/apptools/naming/context.py index 8ee7a2334..fa4d66795 100644 --- a/apptools/naming/context.py +++ b/apptools/naming/context.py @@ -20,15 +20,15 @@ from apptools.type_manager.api import TypeManager # Local imports. -from binding import Binding -from exception import InvalidNameError, NameAlreadyBoundError -from exception import NameNotFoundError, NotContextError -from exception import OperationNotSupportedError -from naming_event import NamingEvent -from naming_manager import naming_manager -from object_factory import ObjectFactory -from state_factory import StateFactory -from unique_name import make_unique_name +from .binding import Binding +from .exception import InvalidNameError, NameAlreadyBoundError +from .exception import NameNotFoundError, NotContextError +from .exception import OperationNotSupportedError +from .naming_event import NamingEvent +from .naming_manager import naming_manager +from .object_factory import ObjectFactory +from .state_factory import StateFactory +from .unique_name import make_unique_name # Constants for environment property keys. @@ -698,7 +698,7 @@ def _list_bindings(self): def _list_names(self): """ Lists the names bound in this context. """ - return self._bindings.keys() + return list(self._bindings.keys()) def _is_context(self, name): """ Returns True if a name is bound to a context. """ diff --git a/apptools/naming/context_adapter.py b/apptools/naming/context_adapter.py index d52e5d722..f6ca834e6 100644 --- a/apptools/naming/context_adapter.py +++ b/apptools/naming/context_adapter.py @@ -18,7 +18,7 @@ from traits.api import Any, Dict, Instance, Property, Str # Local imports. -from context import Context +from .context import Context class ContextAdapter(Context): diff --git a/apptools/naming/context_adapter_factory.py b/apptools/naming/context_adapter_factory.py index 7bcac0109..0289e4c8e 100644 --- a/apptools/naming/context_adapter_factory.py +++ b/apptools/naming/context_adapter_factory.py @@ -18,7 +18,7 @@ from apptools.type_manager.api import AdapterFactory # Local imports. -from context import Context +from .context import Context class ContextAdapterFactory(AdapterFactory): diff --git a/apptools/naming/dir_context.py b/apptools/naming/dir_context.py index 37d006054..d8b73cfa2 100644 --- a/apptools/naming/dir_context.py +++ b/apptools/naming/dir_context.py @@ -18,8 +18,8 @@ from traits.api import Dict # Local imports. -from context import Context -from exception import NameNotFoundError, NotContextError +from .context import Context +from .exception import NameNotFoundError, NotContextError class DirContext(Context): diff --git a/apptools/naming/dynamic_context.py b/apptools/naming/dynamic_context.py index 3646b92cf..19c2d5478 100644 --- a/apptools/naming/dynamic_context.py +++ b/apptools/naming/dynamic_context.py @@ -44,9 +44,9 @@ import logging # Local imports -from binding import Binding -from context import Context -from exception import OperationNotSupportedError +from .binding import Binding +from .context import Context +from .exception import OperationNotSupportedError # Setup a logger for this module. diff --git a/apptools/naming/initial_context.py b/apptools/naming/initial_context.py index e6e18bb7e..3a1d5750d 100644 --- a/apptools/naming/initial_context.py +++ b/apptools/naming/initial_context.py @@ -15,7 +15,7 @@ # Local imports. -from context import Context +from .context import Context def InitialContext(environment): diff --git a/apptools/naming/initial_context_factory.py b/apptools/naming/initial_context_factory.py index 287cc96c4..8b302b43f 100644 --- a/apptools/naming/initial_context_factory.py +++ b/apptools/naming/initial_context_factory.py @@ -18,7 +18,7 @@ from traits.api import HasTraits # Local imports. -from context import Context +from .context import Context class InitialContextFactory(HasTraits): diff --git a/apptools/naming/naming_event.py b/apptools/naming/naming_event.py index f811c0b6d..92c0836e3 100644 --- a/apptools/naming/naming_event.py +++ b/apptools/naming/naming_event.py @@ -18,7 +18,7 @@ from traits.api import HasTraits, Instance # Local imports. -from binding import Binding +from .binding import Binding # Classes for event traits. diff --git a/apptools/naming/naming_manager.py b/apptools/naming/naming_manager.py index 0adfb0152..25798ee29 100644 --- a/apptools/naming/naming_manager.py +++ b/apptools/naming/naming_manager.py @@ -39,7 +39,7 @@ def get_state_to_bind(self, obj, name, context): """ # Local imports. - from context import Context + from .context import Context # We get the state factories from the context's environment. state_factories = context.environment[Context.STATE_FACTORIES] @@ -68,7 +68,7 @@ def get_object_instance(self, info, name, context): """ # Local imports. - from context import Context + from .context import Context # We get the object factories from the context's environment. object_factories = context.environment[Context.OBJECT_FACTORIES] diff --git a/apptools/naming/object_serializer.py b/apptools/naming/object_serializer.py index 70e3ed2a5..751a80825 100644 --- a/apptools/naming/object_serializer.py +++ b/apptools/naming/object_serializer.py @@ -59,7 +59,7 @@ def load(self, path): obj = sweet_pickle.load(f) # obj = cPickle.load(f) # obj = pickle.load(f) - except Exception, ex: + except Exception as ex: print_exc() logger.exception( "Failed to load pickle file: %s, %s" % (path, ex)) @@ -89,7 +89,7 @@ def save(self, path, obj): sweet_pickle.dump(obj, f, 1) # cPickle.dump(obj, f, 1) # pickle.dump(obj, f, 1) - except Exception, ex: + except Exception as ex: logger.exception( "Failed to pickle into file: %s, %s, object:%s" % (path, ex, obj)) print_exc() diff --git a/apptools/naming/py_context.py b/apptools/naming/py_context.py index 03ed0d0ad..df38b43ec 100644 --- a/apptools/naming/py_context.py +++ b/apptools/naming/py_context.py @@ -18,14 +18,14 @@ from traits.api import Any, Dict, Instance, Property # Local imports. -from address import Address -from binding import Binding -from context import Context -from naming_manager import naming_manager -from py_object_factory import PyObjectFactory -from reference import Reference -from referenceable import Referenceable -from referenceable_state_factory import ReferenceableStateFactory +from .address import Address +from .binding import Binding +from .context import Context +from .naming_manager import naming_manager +from .py_object_factory import PyObjectFactory +from .reference import Reference +from .referenceable import Referenceable +from .referenceable_state_factory import ReferenceableStateFactory # The default environment. @@ -192,7 +192,7 @@ def _list_bindings(self): def _list_names(self): """ Lists the names bound in this context. """ - return self.namespace.keys() + return list(self.namespace.keys()) ########################################################################### # Private interface. diff --git a/apptools/naming/py_object_factory.py b/apptools/naming/py_object_factory.py index 987aa8da6..be5006725 100644 --- a/apptools/naming/py_object_factory.py +++ b/apptools/naming/py_object_factory.py @@ -15,8 +15,8 @@ # Local imports. -from object_factory import ObjectFactory -from reference import Reference +from .object_factory import ObjectFactory +from .reference import Reference class PyObjectFactory(ObjectFactory): diff --git a/apptools/naming/pyfs_context.py b/apptools/naming/pyfs_context.py index d34ecd92f..14cf4f7a1 100644 --- a/apptools/naming/pyfs_context.py +++ b/apptools/naming/pyfs_context.py @@ -15,27 +15,32 @@ # Standard library imports. -import cPickle, glob, logging, os +import glob +import logging +import os from os.path import join, splitext +# Third-party library imports. +import six.moves.cPickle as pickle + # Enthought library imports. from apptools.io.api import File from traits.api import Any, Dict, Instance, Property, Str # Local imports. -from address import Address -from binding import Binding -from context import Context -from dir_context import DirContext -from exception import NameNotFoundError, NotContextError -from naming_event import NamingEvent -from naming_manager import naming_manager -from object_serializer import ObjectSerializer -from pyfs_context_factory import PyFSContextFactory -from pyfs_object_factory import PyFSObjectFactory -from pyfs_state_factory import PyFSStateFactory -from reference import Reference -from referenceable import Referenceable +from .address import Address +from .binding import Binding +from .context import Context +from .dir_context import DirContext +from .exception import NameNotFoundError, NotContextError +from .naming_event import NamingEvent +from .naming_manager import naming_manager +from .object_serializer import ObjectSerializer +from .pyfs_context_factory import PyFSContextFactory +from .pyfs_object_factory import PyFSObjectFactory +from .pyfs_state_factory import PyFSStateFactory +from .reference import Reference +from .referenceable import Referenceable # Setup a logger for this module. @@ -443,7 +448,7 @@ def _destroy_subcontext(self, name): def _list_names(self): """ Lists the names bound in this context. """ - return self._name_to_filename_map.keys() + return list(self._name_to_filename_map.keys()) # fixme: YFI this is not part of the protected 'Context' interface so # what is it doing here? @@ -509,7 +514,7 @@ def _save_attributes(self): path = join(self.path, self.ATTRIBUTES_FILE) f = open(path, 'wb') - cPickle.dump(self._attributes, f, 1) + pickle.dump(self._attributes, f, 1) f.close() return @@ -553,7 +558,7 @@ def __attributes_default(self): attributes_file = File(join(self.path, self.ATTRIBUTES_FILE)) if attributes_file.is_file: f = open(attributes_file.path, 'rb') - attributes = cPickle.load(f) + attributes = pickle.load(f) f.close() else: diff --git a/apptools/naming/pyfs_context_factory.py b/apptools/naming/pyfs_context_factory.py index c4d89ebd1..d2f733ec8 100644 --- a/apptools/naming/pyfs_context_factory.py +++ b/apptools/naming/pyfs_context_factory.py @@ -15,8 +15,8 @@ # Local imports. -from object_factory import ObjectFactory -from reference import Reference +from .object_factory import ObjectFactory +from .reference import Reference class PyFSContextFactory(ObjectFactory): diff --git a/apptools/naming/pyfs_initial_context_factory.py b/apptools/naming/pyfs_initial_context_factory.py index 8ea6a4c0a..8932ec09a 100644 --- a/apptools/naming/pyfs_initial_context_factory.py +++ b/apptools/naming/pyfs_initial_context_factory.py @@ -15,13 +15,13 @@ # Local imports. -from context import Context -from initial_context_factory import InitialContextFactory -from object_serializer import ObjectSerializer -from pyfs_context import PyFSContext -from pyfs_context_factory import PyFSContextFactory -from pyfs_object_factory import PyFSObjectFactory -from pyfs_state_factory import PyFSStateFactory +from .context import Context +from .initial_context_factory import InitialContextFactory +from .object_serializer import ObjectSerializer +from .pyfs_context import PyFSContext +from .pyfs_context_factory import PyFSContextFactory +from .pyfs_object_factory import PyFSObjectFactory +from .pyfs_state_factory import PyFSStateFactory class PyFSInitialContextFactory(InitialContextFactory): diff --git a/apptools/naming/pyfs_object_factory.py b/apptools/naming/pyfs_object_factory.py index 43604bf8a..117fbb324 100644 --- a/apptools/naming/pyfs_object_factory.py +++ b/apptools/naming/pyfs_object_factory.py @@ -18,8 +18,8 @@ from apptools.io.api import File # Local imports. -from object_factory import ObjectFactory -from reference import Reference +from .object_factory import ObjectFactory +from .reference import Reference class PyFSObjectFactory(ObjectFactory): diff --git a/apptools/naming/pyfs_state_factory.py b/apptools/naming/pyfs_state_factory.py index f30ffbfc2..2fcd58472 100644 --- a/apptools/naming/pyfs_state_factory.py +++ b/apptools/naming/pyfs_state_factory.py @@ -18,9 +18,9 @@ from apptools.io.api import File # Local imports. -from address import Address -from reference import Reference -from state_factory import StateFactory +from .address import Address +from .reference import Reference +from .state_factory import StateFactory class PyFSStateFactory(StateFactory): diff --git a/apptools/naming/reference.py b/apptools/naming/reference.py index 933cea8f1..07504990f 100644 --- a/apptools/naming/reference.py +++ b/apptools/naming/reference.py @@ -18,7 +18,7 @@ from traits.api import Any, HasPrivateTraits, List, Str # Local imports. -from address import Address +from .address import Address class Reference(HasPrivateTraits): diff --git a/apptools/naming/referenceable.py b/apptools/naming/referenceable.py index 38a5498d9..7e322e49f 100644 --- a/apptools/naming/referenceable.py +++ b/apptools/naming/referenceable.py @@ -18,7 +18,7 @@ from traits.api import HasPrivateTraits, Instance # Local imports. -from reference import Reference +from .reference import Reference class Referenceable(HasPrivateTraits): diff --git a/apptools/naming/referenceable_state_factory.py b/apptools/naming/referenceable_state_factory.py index 10cb1a45d..9857fb9ac 100644 --- a/apptools/naming/referenceable_state_factory.py +++ b/apptools/naming/referenceable_state_factory.py @@ -15,8 +15,8 @@ # Local imports. -from referenceable import Referenceable -from state_factory import StateFactory +from .referenceable import Referenceable +from .state_factory import StateFactory class ReferenceableStateFactory(StateFactory): diff --git a/apptools/naming/trait_defs/__init__.py b/apptools/naming/trait_defs/__init__.py index a471ec35f..a3b96dd45 100644 --- a/apptools/naming/trait_defs/__init__.py +++ b/apptools/naming/trait_defs/__init__.py @@ -14,4 +14,4 @@ # Imports: #------------------------------------------------------------------------------ -from api import * +from apptools.naming.trait_defs.api import * diff --git a/apptools/naming/trait_defs/api.py b/apptools/naming/trait_defs/api.py index b57f8bb9f..681fe634a 100644 --- a/apptools/naming/trait_defs/api.py +++ b/apptools/naming/trait_defs/api.py @@ -10,4 +10,4 @@ # #------------------------------------------------------------------------------ -from naming_traits import NamingInstance +from .naming_traits import NamingInstance diff --git a/apptools/naming/trait_defs/naming_traits.py b/apptools/naming/trait_defs/naming_traits.py index 48bd01f0f..01719560f 100644 --- a/apptools/naming/trait_defs/naming_traits.py +++ b/apptools/naming/trait_defs/naming_traits.py @@ -16,6 +16,8 @@ import sys +import six + from traits.api \ import Trait, TraitHandler, TraitFactory @@ -57,11 +59,11 @@ def __init__ ( self, aClass, or_none, module ): self.module = module self.aClass = aClass if (aClass is not None) \ - and (not isinstance( aClass, ( basestring, type ) )): + and (not isinstance( aClass, ( six.string_types, type ) )): self.aClass = aClass.__class__ def validate ( self, object, name, value ): - if isinstance( value, basestring ): + if isinstance( value, six.string_types ): if value == '': if self.or_none: return '' @@ -72,7 +74,7 @@ def validate ( self, object, name, value ): except: self.validate_failed( object, name, value ) - if isinstance(self.aClass, basestring): + if isinstance(self.aClass, six.string_types): self.resolve_class( object, name, value ) if (isinstance( value, Binding ) and diff --git a/apptools/naming/ui/api.py b/apptools/naming/ui/api.py index e66c1bbd8..565ef7274 100644 --- a/apptools/naming/ui/api.py +++ b/apptools/naming/ui/api.py @@ -11,10 +11,10 @@ # Author: Enthought, Inc. # Description: #------------------------------------------------------------------------------ -from context_monitor import ContextMonitor -from context_node_type import ContextNodeType -from explorer import Explorer, explore -from naming_node_manager import NamingNodeManager -from naming_tree import NamingTree -from naming_tree_model import NamingTreeModel -from object_node_type import ObjectNodeType +from .context_monitor import ContextMonitor +from .context_node_type import ContextNodeType +from .explorer import Explorer, explore +from .naming_node_manager import NamingNodeManager +from .naming_tree import NamingTree +from .naming_tree_model import NamingTreeModel +from .object_node_type import ObjectNodeType diff --git a/apptools/naming/ui/context_node_type.py b/apptools/naming/ui/context_node_type.py index c3d95394d..447e7684b 100644 --- a/apptools/naming/ui/context_node_type.py +++ b/apptools/naming/ui/context_node_type.py @@ -13,13 +13,14 @@ #------------------------------------------------------------------------------ """ The node type for contexts in a naming system. """ +from __future__ import print_function # Enthought library imports. from apptools.naming.api import Context from pyface.tree.api import NodeType # Local imports. -from context_monitor import ContextMonitor +from .context_monitor import ContextMonitor class ContextNodeType(NodeType): @@ -78,8 +79,8 @@ def can_set_text(self, node, text): def set_text(self, node, text): """ Sets the label text for a node. """ - print 'Setting text on', node.name, node.obj - print 'Context details', node.obj.name, node.obj.path + print('Setting text on', node.name, node.obj) + print('Context details', node.obj.name, node.obj.path) # Do the rename in the naming system. node.context.rename(node.name, text) diff --git a/apptools/naming/ui/explorer.py b/apptools/naming/ui/explorer.py index cf51aecd6..6f60c916a 100644 --- a/apptools/naming/ui/explorer.py +++ b/apptools/naming/ui/explorer.py @@ -20,7 +20,7 @@ from traits.api import Float, Instance, Str # Local imports. -from naming_tree import NamingTree +from .naming_tree import NamingTree # Factory function for exploring a Python namespace. diff --git a/apptools/naming/ui/naming_tree.py b/apptools/naming/ui/naming_tree.py index 582e4ed9e..f36d3251a 100644 --- a/apptools/naming/ui/naming_tree.py +++ b/apptools/naming/ui/naming_tree.py @@ -20,7 +20,7 @@ from traits.api import Instance # Local imports. -from naming_tree_model import NamingTreeModel +from .naming_tree_model import NamingTreeModel class NamingTree(NodeTree): diff --git a/apptools/naming/ui/naming_tree_model.py b/apptools/naming/ui/naming_tree_model.py index 6a92ff198..c1927373d 100644 --- a/apptools/naming/ui/naming_tree_model.py +++ b/apptools/naming/ui/naming_tree_model.py @@ -20,9 +20,9 @@ from traits.api import Instance # Local imports. -from context_node_type import ContextNodeType -from naming_node_manager import NamingNodeManager -from object_node_type import ObjectNodeType +from .context_node_type import ContextNodeType +from .naming_node_manager import NamingNodeManager +from .object_node_type import ObjectNodeType class NamingTreeModel(NodeTreeModel): diff --git a/apptools/permissions/action/api.py b/apptools/permissions/action/api.py index 5970725b7..a946c1c26 100644 --- a/apptools/permissions/action/api.py +++ b/apptools/permissions/action/api.py @@ -12,6 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from login_action import LoginAction -from logout_action import LogoutAction -from user_menu_manager import UserMenuManager +from .login_action import LoginAction +from .logout_action import LogoutAction +from .user_menu_manager import UserMenuManager diff --git a/apptools/permissions/action/user_menu_manager.py b/apptools/permissions/action/user_menu_manager.py index b51ed1540..e18e2d95e 100644 --- a/apptools/permissions/action/user_menu_manager.py +++ b/apptools/permissions/action/user_menu_manager.py @@ -19,8 +19,8 @@ # Local imports. from apptools.permissions.package_globals import get_permissions_manager -from login_action import LoginAction -from logout_action import LogoutAction +from .login_action import LoginAction +from .logout_action import LogoutAction class UserMenuManager(MenuManager): diff --git a/apptools/permissions/adapter_base.py b/apptools/permissions/adapter_base.py index 3a29ea1af..f832dd506 100644 --- a/apptools/permissions/adapter_base.py +++ b/apptools/permissions/adapter_base.py @@ -17,8 +17,8 @@ from traits.api import Any, Bool, HasTraits, Instance, List # Local imports. -from package_globals import get_permissions_manager -from permission import Permission +from .package_globals import get_permissions_manager +from .permission import Permission class AdapterBase(HasTraits): @@ -63,7 +63,7 @@ def factory(cls, proxied, permissions, show): if isinstance(proxied, object_type): break else: - raise TypeError, "no SecureProxy adapter registered for %s" % proxied + raise TypeError("no SecureProxy adapter registered for %s" % proxied) adapter = adapter_type(proxied=proxied, permissions=permissions, show=show) diff --git a/apptools/permissions/api.py b/apptools/permissions/api.py index 1a9ad9569..030dd87fe 100644 --- a/apptools/permissions/api.py +++ b/apptools/permissions/api.py @@ -12,11 +12,11 @@ # Description: #------------------------------------------------------------------------------ -from adapter_base import AdapterBase -from i_policy_manager import IPolicyManager -from i_user import IUser -from i_user_manager import IUserManager -from package_globals import get_permissions_manager, set_permissions_manager -from permission import ManagePolicyPermission, ManageUsersPermission, Permission -from permissions_manager import PermissionsManager -from secure_proxy import SecureHandler, SecureProxy +from .adapter_base import AdapterBase +from .i_policy_manager import IPolicyManager +from .i_user import IUser +from .i_user_manager import IUserManager +from .package_globals import get_permissions_manager, set_permissions_manager +from .permission import ManagePolicyPermission, ManageUsersPermission, Permission +from .permissions_manager import PermissionsManager +from .secure_proxy import SecureHandler, SecureProxy diff --git a/apptools/permissions/default/api.py b/apptools/permissions/default/api.py index 3a4552bb9..8214cbf88 100644 --- a/apptools/permissions/default/api.py +++ b/apptools/permissions/default/api.py @@ -12,9 +12,9 @@ # Description: #------------------------------------------------------------------------------ -from i_policy_storage import IPolicyStorage, PolicyStorageError -from i_user_database import IUserDatabase -from i_user_storage import IUserStorage, UserStorageError -from policy_manager import PolicyManager -from user_database import UserDatabase -from user_manager import UserManager +from .i_policy_storage import IPolicyStorage, PolicyStorageError +from .i_user_database import IUserDatabase +from .i_user_storage import IUserStorage, UserStorageError +from .policy_manager import PolicyManager +from .user_database import UserDatabase +from .user_manager import UserManager diff --git a/apptools/permissions/default/i_user_database.py b/apptools/permissions/default/i_user_database.py index 42bc5dc50..5de6e723f 100644 --- a/apptools/permissions/default/i_user_database.py +++ b/apptools/permissions/default/i_user_database.py @@ -17,7 +17,7 @@ from traits.api import Bool, Instance, Interface # Local imports. -from i_user_storage import IUserStorage +from .i_user_storage import IUserStorage class IUserDatabase(Interface): diff --git a/apptools/permissions/default/persistent.py b/apptools/permissions/default/persistent.py index 7a388cd7f..543adc5ce 100644 --- a/apptools/permissions/default/persistent.py +++ b/apptools/permissions/default/persistent.py @@ -14,10 +14,12 @@ # Standard library imports. -import cPickle as pickle import errno import os +# Third-party imports. +import six.moves.cPickle as pickle + # Enthought library imports. from traits.etsconfig.api import ETSConfig @@ -54,7 +56,7 @@ def lock(self): try: os.mkdir(self._lock) - except OSError, e: + except OSError as e: if e.errno == errno.EEXIST: msg = "The lock on %s is held by another application or user." % self._desc else: @@ -67,7 +69,7 @@ def unlock(self): try: os.rmdir(self._lock) - except OSError, e: + except OSError as e: raise PersistentError("Unable to release lock on %s: %s." % (self._desc, e)) def read(self): @@ -83,7 +85,7 @@ def read(self): raise PersistentError("Unable to read %s." % self._desc) finally: f.close() - except IOError, e: + except IOError as e: if e.errno == errno.ENOENT: data = self._factory() else: @@ -104,7 +106,7 @@ def write(self, data): raise PersistentError("Unable to write %s." % self._desc) finally: f.close() - except IOError, e: + except IOError as e: raise PersistentError("Unable to create %s: %s." % (self._desc, e)) diff --git a/apptools/permissions/default/policy_manager.py b/apptools/permissions/default/policy_manager.py index b49782608..f5d52ba04 100644 --- a/apptools/permissions/default/policy_manager.py +++ b/apptools/permissions/default/policy_manager.py @@ -22,9 +22,9 @@ from apptools.permissions.i_policy_manager import IPolicyManager from apptools.permissions.permission import ManagePolicyPermission, Permission from apptools.permissions.secure_proxy import SecureProxy -from i_policy_storage import IPolicyStorage, PolicyStorageError -from role_assignment import role_assignment -from role_definition import role_definition +from .i_policy_storage import IPolicyStorage, PolicyStorageError +from .role_assignment import role_assignment +from .role_definition import role_definition @provides(IPolicyManager) @@ -77,7 +77,7 @@ def load_policy(self, user): # Get the user's policy. try: user_name, perm_ids = self.policy_storage.get_policy(user.name) - except PolicyStorageError, e: + except PolicyStorageError as e: error(None, str(e)) return @@ -93,12 +93,12 @@ def load_policy(self, user): def register_permission(self, permission): """Register the given permission.""" - if self.permissions.has_key(permission.id): + if permission.id in self.permissions: other = self.permissions[permission.id] if other.application_defined: if permission.application_defined: - raise KeyError, 'permission "%s" has already been defined' % permission.id + raise KeyError('permission "%s" has already been defined' % permission.id) # Use the description from the policy manager, if there is # one, in preference to the application supplied one. @@ -113,7 +113,7 @@ def register_permission(self, permission): else: # This should never happen if the policy manager is working # properly. - raise KeyError, 'permission "%s" has already been defined by the same policy manager' % permission.id + raise KeyError('permission "%s" has already been defined by the same policy manager' % permission.id) else: self.permissions[permission.id] = permission diff --git a/apptools/permissions/default/policy_storage.py b/apptools/permissions/default/policy_storage.py index 4cc732841..c94453d26 100644 --- a/apptools/permissions/default/policy_storage.py +++ b/apptools/permissions/default/policy_storage.py @@ -17,8 +17,8 @@ from traits.api import HasTraits, Instance, provides # Local imports. -from i_policy_storage import IPolicyStorage, PolicyStorageError -from persistent import Persistent, PersistentError +from .i_policy_storage import IPolicyStorage, PolicyStorageError +from .persistent import Persistent, PersistentError @provides(IPolicyStorage) @@ -49,7 +49,7 @@ def add_role(self, name, description, perm_ids): try: roles, assigns = self._db.read() - if roles.has_key(name): + if name in roles: raise PolicyStorageError("The role \"%s\" already exists." % name) roles[name] = (description, perm_ids) @@ -72,7 +72,7 @@ def delete_role(self, name): try: roles, assigns = self._db.read() - if not roles.has_key(name): + if name not in roles: raise PolicyStorageError("The role \"%s\" does not exist." % name) del roles[name] @@ -149,7 +149,7 @@ def modify_role(self, name, description, perm_ids): try: roles, assigns = self._db.read() - if not roles.has_key(name): + if name not in roles: raise PolicyStorageError("The role \"%s\" does not exist." % name) roles[name] = (description, perm_ids) @@ -203,7 +203,7 @@ def _readonly_copy(self): data = self._db.read() finally: self._db.unlock() - except PersistentError, e: + except PersistentError as e: raise PolicyStorageError(str(e)) return data diff --git a/apptools/permissions/default/role_assignment.py b/apptools/permissions/default/role_assignment.py index f049af70e..f5b3aeb06 100644 --- a/apptools/permissions/default/role_assignment.py +++ b/apptools/permissions/default/role_assignment.py @@ -21,8 +21,8 @@ # Local imports. from apptools.permissions.package_globals import get_permissions_manager -from i_policy_storage import PolicyStorageError -from policy_data import Assignment, Role +from .i_policy_storage import PolicyStorageError +from .policy_data import Assignment, Role class _AssignmentView(View): @@ -43,7 +43,7 @@ def __init__(self, all_roles, **traits): buttons = [Action(name="Search"), Action(name="Save"), CancelButton] - roles_editor = SetEditor(values=all_roles.values(), + roles_editor = SetEditor(values=list(all_roles.values()), left_column_title="Available Roles", right_column_title="Assigned Roles") @@ -78,7 +78,7 @@ def _search_clicked(self, info): try: user_name, role_names = pm.policy_manager.policy_storage.get_assignment(user.name) - except PolicyStorageError, e: + except PolicyStorageError as e: self._ps_error(e) return @@ -99,7 +99,7 @@ def _save_clicked(self, info): get_permissions_manager().policy_manager.policy_storage.set_assignment(assignment.user_name, [r.name for r in assignment.roles]) info.ui.dispose() - except PolicyStorageError, e: + except PolicyStorageError as e: self._ps_error(e) ########################################################################### @@ -164,7 +164,7 @@ def role_assignment(): try: roles = get_permissions_manager().policy_manager.policy_storage.all_roles() - except PolicyStorageError, e: + except PolicyStorageError as e: error(None, str(e)) return diff --git a/apptools/permissions/default/role_definition.py b/apptools/permissions/default/role_definition.py index ae9b5744c..e3b3bbd8c 100644 --- a/apptools/permissions/default/role_definition.py +++ b/apptools/permissions/default/role_definition.py @@ -22,9 +22,9 @@ # Local imports. from apptools.permissions.package_globals import get_permissions_manager from apptools.permissions.permission import Permission -from i_policy_storage import PolicyStorageError -from policy_data import Role -from select_role import select_role +from .i_policy_storage import PolicyStorageError +from .policy_data import Role +from .select_role import select_role class _RoleView(View): @@ -46,7 +46,7 @@ def __init__(self, **traits): buttons = [Action(name="Search"), Action(name="Add"), Action(name="Modify"), Action(name="Delete"), CancelButton] - all_perms = get_permissions_manager().policy_manager.permissions.values() + all_perms = list(get_permissions_manager().policy_manager.permissions.values()) perms_editor = SetEditor(values=all_perms, left_column_title="Available Permissions", @@ -75,7 +75,7 @@ def _search_clicked(self, info): # Get all roles that satisfy the criteria. try: roles = get_permissions_manager().policy_manager.policy_storage.matching_roles(role.name) - except PolicyStorageError, e: + except PolicyStorageError as e: self._ps_error(e) return @@ -104,7 +104,7 @@ def _add_clicked(self, info): role.name, role.description, [p.id for p in role.permissions]) info.ui.dispose() - except PolicyStorageError, e: + except PolicyStorageError as e: self._ps_error(e) def _modify_clicked(self, info): @@ -120,7 +120,7 @@ def _modify_clicked(self, info): role.name, role.description, [p.id for p in role.permissions]) info.ui.dispose() - except PolicyStorageError, e: + except PolicyStorageError as e: self._ps_error(e) def _delete_clicked(self, info): @@ -136,7 +136,7 @@ def _delete_clicked(self, info): get_permissions_manager().policy_manager.policy_storage.delete_role(role.name) info.ui.dispose() - except PolicyStorageError, e: + except PolicyStorageError as e: self._ps_error(e) ########################################################################### diff --git a/apptools/permissions/default/user_database.py b/apptools/permissions/default/user_database.py index e590d0821..d7d88824a 100644 --- a/apptools/permissions/default/user_database.py +++ b/apptools/permissions/default/user_database.py @@ -25,9 +25,9 @@ # Local imports. from apptools.permissions.i_user import IUser -from i_user_database import IUserDatabase -from i_user_storage import IUserStorage, UserStorageError -from select_user import select_user +from .i_user_database import IUserDatabase +from .i_user_storage import IUserStorage, UserStorageError +from .select_user import select_user @provides(IUser) @@ -312,7 +312,7 @@ def authenticate_user(self, user): try: name, description, blob = self.user_storage.authenticate_user( lu.name.strip(), lu.password) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) return False @@ -349,7 +349,7 @@ def change_password(self, user): # Update the password in the database. try: self.user_storage.update_password(name, np.new_password) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) def add_user(self): @@ -365,7 +365,7 @@ def add_user(self): try: self.user_storage.add_user(vuac.name.strip(), vuac.description, vuac.password) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) def modify_user(self): @@ -381,7 +381,7 @@ def modify_user(self): try: self.user_storage.modify_user(vuac.name.strip(), vuac.description, vuac.password) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) def delete_user(self): @@ -400,7 +400,7 @@ def delete_user(self): # Delete the data from the database. try: self.user_storage.delete_user(name) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) def matching_user(self, name): @@ -463,7 +463,7 @@ def _blob_changed(self, user, tname, old, new): if not self._updating_blob_internally: try: self.user_storage.update_blob(user.name, user.blob) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) ########################################################################### @@ -477,7 +477,7 @@ def _select_user(self, name): # Get all users that satisfy the criteria. try: users = self.user_storage.matching_users(name) - except UserStorageError, e: + except UserStorageError as e: self._us_error(e) return '', '' diff --git a/apptools/permissions/default/user_manager.py b/apptools/permissions/default/user_manager.py index e7f97cccb..d720f208a 100644 --- a/apptools/permissions/default/user_manager.py +++ b/apptools/permissions/default/user_manager.py @@ -23,7 +23,7 @@ from apptools.permissions.i_user_manager import IUserManager from apptools.permissions.package_globals import get_permissions_manager from apptools.permissions.permission import ManageUsersPermission -from i_user_database import IUserDatabase +from .i_user_database import IUserDatabase @provides(IUserManager) diff --git a/apptools/permissions/default/user_storage.py b/apptools/permissions/default/user_storage.py index 5551d257b..3b17e5fb7 100644 --- a/apptools/permissions/default/user_storage.py +++ b/apptools/permissions/default/user_storage.py @@ -17,8 +17,8 @@ from traits.api import HasTraits, Instance, provides # Local imports. -from i_user_storage import IUserStorage, UserStorageError -from persistent import Persistent, PersistentError +from .i_user_storage import IUserStorage, UserStorageError +from .persistent import Persistent, PersistentError @provides(IUserStorage) @@ -51,7 +51,7 @@ def add_user(self, name, description, password): try: users = self._db.read() - if users.has_key(name): + if name in users: raise UserStorageError("The user \"%s\" already exists." % name) users[name] = (description, {}, password) @@ -190,7 +190,7 @@ def _readonly_copy(self): data = self._db.read() finally: self._db.unlock() - except PersistentError, e: + except PersistentError as e: raise UserStorageError(str(e)) return data diff --git a/apptools/permissions/i_user_manager.py b/apptools/permissions/i_user_manager.py index 509f8dab9..9ad01579a 100644 --- a/apptools/permissions/i_user_manager.py +++ b/apptools/permissions/i_user_manager.py @@ -18,7 +18,7 @@ from traits.api import Bool, Event, Instance, Interface, List # Local imports. -from i_user import IUser +from .i_user import IUser class IUserManager(Interface): diff --git a/apptools/permissions/package_globals.py b/apptools/permissions/package_globals.py index f037b9427..f99fae2a3 100644 --- a/apptools/permissions/package_globals.py +++ b/apptools/permissions/package_globals.py @@ -24,7 +24,7 @@ def get_permissions_manager(): global _permissions_manager if _permissions_manager is None: - from permissions_manager import PermissionsManager + from .permissions_manager import PermissionsManager _permissions_manager = PermissionsManager() diff --git a/apptools/permissions/permission.py b/apptools/permissions/permission.py index e4488905e..c03dcacb3 100644 --- a/apptools/permissions/permission.py +++ b/apptools/permissions/permission.py @@ -17,7 +17,7 @@ from traits.api import Bool, HasTraits, Property, Str, Unicode # Locals imports. -from package_globals import get_permissions_manager +from .package_globals import get_permissions_manager class Permission(HasTraits): diff --git a/apptools/permissions/permissions_manager.py b/apptools/permissions/permissions_manager.py index d7604ffac..d972fba01 100644 --- a/apptools/permissions/permissions_manager.py +++ b/apptools/permissions/permissions_manager.py @@ -17,8 +17,8 @@ from traits.api import Bool, HasTraits, Instance # Local imports. -from i_policy_manager import IPolicyManager -from i_user_manager import IUserManager +from .i_policy_manager import IPolicyManager +from .i_user_manager import IUserManager class PermissionsManager(HasTraits): diff --git a/apptools/permissions/secure_proxy.py b/apptools/permissions/secure_proxy.py index a564bf256..3d1018921 100644 --- a/apptools/permissions/secure_proxy.py +++ b/apptools/permissions/secure_proxy.py @@ -18,17 +18,17 @@ from traitsui.api import Handler # Local imports. -from adapter_base import AdapterBase -from package_globals import get_permissions_manager +from .adapter_base import AdapterBase +from .package_globals import get_permissions_manager # Register the bundled adapters. -from adapters import pyface_action +from .adapters import pyface_action if ETSConfig.toolkit == 'wx': - from adapters import wx_window + from .adapters import wx_window elif ETSConfig.toolkit == 'qt4': - from adapters import qt4_widget + from .adapters import qt4_widget class SecureProxy(object): diff --git a/apptools/persistence/project_loader.py b/apptools/persistence/project_loader.py index 2ddbe34c1..9e4f3caf0 100644 --- a/apptools/persistence/project_loader.py +++ b/apptools/persistence/project_loader.py @@ -26,7 +26,7 @@ def load_project(pickle_filename, updater_path, application_version, protocol, project_version = metadata.get('version', False) if not project_version: - raise ValueError, "Could not read version number from the project file" + raise ValueError("Could not read version number from the project file") logger.debug('Project version: %d, Application version: %d' % (project_version, application_version)) diff --git a/apptools/persistence/tests/__init__.py b/apptools/persistence/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apptools/persistence/versioned_unpickler.py b/apptools/persistence/versioned_unpickler.py index 2dcc0acbb..05de7ef50 100644 --- a/apptools/persistence/versioned_unpickler.py +++ b/apptools/persistence/versioned_unpickler.py @@ -72,7 +72,7 @@ def initialize(self, max_pass): raise UnpicklingError(msg) for o, g in generators[:]: try: - g.next() + next(g) except StopIteration: generators.remove((o, g)) diff --git a/apptools/preferences/preference_binding.py b/apptools/preferences/preference_binding.py index 7f0d8446c..e9dc29142 100644 --- a/apptools/preferences/preference_binding.py +++ b/apptools/preferences/preference_binding.py @@ -5,6 +5,9 @@ from traits.api import Any, HasTraits, Instance, Str, Undefined from traits.api import Unicode +# Third-party librart imports. +import six + # Local imports. from .i_preferences import IPreferences from .package_globals import get_default_preferences @@ -101,7 +104,7 @@ def _get_value(self, trait_name, value): # If the trait type is 'Unicode' then we convert the raw value. elif type(handler) is Unicode: - value = unicode(value) + value = six.text_type(value) # Otherwise, we eval it! else: diff --git a/apptools/preferences/preferences.py b/apptools/preferences/preferences.py index 330bdeae1..18f00a84e 100644 --- a/apptools/preferences/preferences.py +++ b/apptools/preferences/preferences.py @@ -5,6 +5,9 @@ # Standard library imports. import logging, threading +# Third-party library imports. +import six + # Enthought library imports. from traits.api import Any, Callable, Dict, HasTraits, Instance, List from traits.api import Property, Str, Undefined, provides @@ -493,7 +496,7 @@ def _keys(self): """ Return the preference keys of this node. """ self._lk.acquire() - keys = self._preferences.keys() + keys = list(self._preferences.keys()) self._lk.release() return keys @@ -515,7 +518,7 @@ def _node_names(self): """ Return the names of the children of this node. """ self._lk.acquire() - node_names = self._children.keys() + node_names = list(self._children.keys()) self._lk.release() return node_names @@ -546,7 +549,7 @@ def _set(self, key, value): # everything must be unicode encoded so that ConfigObj configuration # can properly serialize the data. Python str are supposed to be ASCII # encoded. - value = unicode(value) + value = six.text_type(value) self._lk.acquire() old = self._preferences.get(key) diff --git a/apptools/preferences/tests/preferences_test_case.py b/apptools/preferences/tests/preferences_test_case.py index d5c4ee33c..75a228aaa 100644 --- a/apptools/preferences/tests/preferences_test_case.py +++ b/apptools/preferences/tests/preferences_test_case.py @@ -164,15 +164,14 @@ def test_keys(self): p = self.preferences # It should be empty to start with! - self.assertEqual([], p.keys()) + self.assertEqual([], list(p.keys())) # Set some preferences in the node. p.set('a', '1') p.set('b', '2') p.set('c', '3') - keys = p.keys() - keys.sort() + keys = sorted(p.keys()) self.assertEqual(['a', 'b', 'c'], keys) @@ -181,8 +180,7 @@ def test_keys(self): p.set('acme.b', '2') p.set('acme.c', '3') - keys = p.keys('acme') - keys.sort() + keys = sorted(p.keys('acme')) self.assertEqual(['a', 'b', 'c'], keys) @@ -191,8 +189,7 @@ def test_keys(self): p.set('acme.ui.b', '2') p.set('acme.ui.c', '3') - keys = p.keys('acme.ui') - keys.sort() + keys = sorted(p.keys('acme.ui')) self.assertEqual(['a', 'b', 'c'], keys) @@ -263,8 +260,7 @@ def test_node_names(self): p.node('b') p.node('c') - names = p.node_names() - names.sort() + names = sorted(p.node_names()) self.assertEqual(['a', 'b', 'c'], names) @@ -273,8 +269,7 @@ def test_node_names(self): p.node('acme.b') p.node('acme.c') - names = p.node_names('acme') - names.sort() + names = sorted(p.node_names('acme')) self.assertEqual(['a', 'b', 'c'], names) @@ -283,8 +278,7 @@ def test_node_names(self): p.node('acme.ui.b') p.node('acme.ui.c') - names = p.node_names('acme.ui') - names.sort() + names = sorted(p.node_names('acme.ui')) self.assertEqual(['a', 'b', 'c'], names) diff --git a/apptools/preferences/tests/py_config_file.py b/apptools/preferences/tests/py_config_file.py index 900298667..02ecc10cf 100644 --- a/apptools/preferences/tests/py_config_file.py +++ b/apptools/preferences/tests/py_config_file.py @@ -1,4 +1,7 @@ """ A Python based configuration file with hierarchical sections. """ +from __future__ import print_function + +import six class PyConfigFile(dict): @@ -121,7 +124,7 @@ def _get_file(self, file_or_filename, mode='r'): """ - if isinstance(file_or_filename, basestring): + if isinstance(file_or_filename, six.string_types): f = open(file_or_filename, mode) else: @@ -167,7 +170,7 @@ def _parse_section(self, section_name, section_body): # # [acme.blargle] # blitzel = acme.foo.bar + acme.foo.baz - exec section_body in self._namespaces, section + exec(section_body, self._namespaces, section) # The '__builtins__' dictionary gets added to 'self._namespaces' as # by the call to 'exec'. However, we want 'self._namespaces' to only @@ -201,7 +204,7 @@ def _pretty_print_namespaces(self): """ Pretty print the 'dotted' namespaces. """ for name, value in self._namespaces.items(): - print 'Namespace:', name + print('Namespace:', name) value.pretty_print(' ') return @@ -250,11 +253,11 @@ def pretty_print(self, indent=''): for name, value in self.__dict__.items(): if isinstance(value, _Namespace): - print indent, 'Namespace:', name + print(indent, 'Namespace:', name) value.pretty_print(indent + ' ') else: - print indent, name, ':', value + print(indent, name, ':', value) return diff --git a/apptools/preferences/tests/py_config_file_test_case.py b/apptools/preferences/tests/py_config_file_test_case.py index fec301064..00770d71a 100644 --- a/apptools/preferences/tests/py_config_file_test_case.py +++ b/apptools/preferences/tests/py_config_file_test_case.py @@ -9,7 +9,7 @@ from pkg_resources import resource_filename # Enthought library imports. -from py_config_file import PyConfigFile +from .py_config_file import PyConfigFile # This module's package. diff --git a/apptools/preferences/tests/scoped_preferences_test_case.py b/apptools/preferences/tests/scoped_preferences_test_case.py index 8a1f3ed8d..c54c0db87 100644 --- a/apptools/preferences/tests/scoped_preferences_test_case.py +++ b/apptools/preferences/tests/scoped_preferences_test_case.py @@ -12,7 +12,7 @@ from apptools.preferences.api import Preferences, ScopedPreferences # Local imports. -from preferences_test_case import PreferencesTestCase +from .preferences_test_case import PreferencesTestCase # This module's package. diff --git a/apptools/preferences/ui/api.py b/apptools/preferences/ui/api.py index 5e829e3f6..8eccdc052 100644 --- a/apptools/preferences/ui/api.py +++ b/apptools/preferences/ui/api.py @@ -1,4 +1,4 @@ -from i_preferences_page import IPreferencesPage +from .i_preferences_page import IPreferencesPage -from preferences_manager import PreferencesManager -from preferences_page import PreferencesPage +from .preferences_manager import PreferencesManager +from .preferences_page import PreferencesPage diff --git a/apptools/preferences/ui/preferences_manager.py b/apptools/preferences/ui/preferences_manager.py index fa0e58a92..67f023f37 100644 --- a/apptools/preferences/ui/preferences_manager.py +++ b/apptools/preferences/ui/preferences_manager.py @@ -9,8 +9,8 @@ from traitsui.menu import Action # Local imports. -from preferences_node import PreferencesNode -from preferences_page import PreferencesPage +from .preferences_node import PreferencesNode +from .preferences_page import PreferencesPage # fixme: This is part of the attempt to allow developers to use non-Traits UI # preferences pages. It doesn't work yet! diff --git a/apptools/preferences/ui/preferences_node.py b/apptools/preferences/ui/preferences_node.py index 8d741bbd4..dd38f02a6 100644 --- a/apptools/preferences/ui/preferences_node.py +++ b/apptools/preferences/ui/preferences_node.py @@ -13,13 +13,14 @@ #------------------------------------------------------------------------------ """ Abstract base class for a node in a preferences dialog. """ +from __future__ import print_function # Enthought library imports. from traits.api import Delegate, Instance, Str # Local imports. -from i_preferences_page import IPreferencesPage -from tree_item import TreeItem +from .i_preferences_page import IPreferencesPage +from .tree_item import TreeItem class PreferencesNode(TreeItem): @@ -91,7 +92,7 @@ def lookup(self, name): def dump(self, indent=''): """ Pretty-print the node to stdout. """ - print indent, 'Node', str(self) + print(indent, 'Node', str(self)) for child in self.children: child.dump(indent+' ') diff --git a/apptools/preferences/ui/preferences_page.py b/apptools/preferences/ui/preferences_page.py index b55f63ac6..fa410db53 100644 --- a/apptools/preferences/ui/preferences_page.py +++ b/apptools/preferences/ui/preferences_page.py @@ -6,7 +6,7 @@ from traits.api import Any, Dict, Str, provides # Local imports. -from i_preferences_page import IPreferencesPage +from .i_preferences_page import IPreferencesPage @provides(IPreferencesPage) diff --git a/apptools/scripting/recorder.py b/apptools/scripting/recorder.py index 9b6bb2554..d2f4c20da 100644 --- a/apptools/scripting/recorder.py +++ b/apptools/scripting/recorder.py @@ -10,9 +10,9 @@ # License: BSD Style. import warnings -import sys -PY_VER = sys.version_info[0] -import __builtin__ + +import six +import six.moves.builtins from traits.api import (HasTraits, List, Str, Dict, Bool, Unicode, Property, Int, Instance) @@ -221,7 +221,7 @@ def register(self, object, parent=None, trait_name_on_parent='', # Always ignore these. ignore.extend(['trait_added', 'trait_modified']) - sub_recordables = object.traits(record=True).keys() + sub_recordables = list(object.traits(record=True).keys()) # Find all the trait names we must ignore. ignore.extend(object.traits(record=False).keys()) # The traits to listen for. @@ -373,10 +373,10 @@ def save(self, file): """Save the recorded lines to the given file. It does not close the file. """ - if PY_VER == 3: + if six.PY3: file.write(self.get_code()) else: - file.write(unicode(self.get_code(), encoding='utf-8')) + file.write(six.text_type(self.get_code(), encoding='utf-8')) file.flush() def record_function(self, func, args, kw): @@ -429,7 +429,7 @@ def clear(self): # First unregister any registered objects. registry = self._registry while len(registry) > 0: - self.unregister(registry.keys()[0]) + self.unregister(list(registry.keys())[0]) # Clear the various lists. self.lines[:] = [] self._registry.clear() @@ -503,7 +503,7 @@ def _get_unique_name(self, obj): nm = self._name_map result = '' builtin = False - if cname in __builtin__.__dict__: + if cname in six.moves.builtins.__dict__: builtin = True if hasattr(obj, '__name__'): cname = obj.__name__ @@ -625,7 +625,7 @@ def _analyze_code(self, code): def _function_as_string(self, func, args, kw): """Return a string representing the function call.""" func_name = func.__name__ - func_code = func.func_code + func_code = func.__code__ # Even if func is really a decorated method it never shows up as # a bound or unbound method here, so we have to inspect the # argument names to figure out if this is a method or function. @@ -649,7 +649,7 @@ def _function_as_string(self, func, args, kw): # Convert the keyword args. kwl = ['%s=%s'%(key, self._object_as_string(value)) - for key, value in kw.iteritems()] + for key, value in kw.items()] argl.extend(kwl) # Make a string representation of the args, kw. @@ -691,7 +691,7 @@ def _return_as_string(self, object): """Return a string given a returned object from a function. """ result = '' - long_type = long if PY_VER == 2 else int + long_type = long if six.PY2 else int ignore = (float, complex, bool, int, long_type, str) if object is not None and type(object) not in ignore: # If object is not know, register it. @@ -710,7 +710,7 @@ def _import_class_string(self, cls): """ cname = cls.__name__ result = '' - if cname not in __builtin__.__dict__: + if cname not in six.moves.builtins.__dict__: mod = cls.__module__ typename = '%s.%s'%(mod, cname) if typename not in self._known_types: diff --git a/apptools/scripting/recorder_with_ui.py b/apptools/scripting/recorder_with_ui.py index 659f79ee6..ad752e427 100644 --- a/apptools/scripting/recorder_with_ui.py +++ b/apptools/scripting/recorder_with_ui.py @@ -69,8 +69,8 @@ def on_ui_close(self): """Called from the CloseHandler when the UI is closed. This method basically stops the recording. """ - from util import stop_recording - from package_globals import get_recorder + from .util import stop_recording + from .package_globals import get_recorder if get_recorder() is self: stop_recording(self.root, save=False) diff --git a/apptools/selection/tests/test_list_selection.py b/apptools/selection/tests/test_list_selection.py index 17173f3aa..7c874e9c5 100644 --- a/apptools/selection/tests/test_list_selection.py +++ b/apptools/selection/tests/test_list_selection.py @@ -26,7 +26,7 @@ def test_list_selection_of_sequence_items(self): self.assertEqual(list_selection.indices, [2, 1]) def test_list_selection_of_numpy_array_items(self): - data = numpy.array(range(10)) + data = numpy.arange(10) all_items = [data, data + 10, data + 30] selected = [all_items[0], all_items[2]] @@ -37,7 +37,7 @@ def test_list_selection_of_numpy_array_items(self): self.assertEqual(list_selection.indices, [0, 2]) def test_list_selection_with_invalid_selected_items(self): - data = numpy.array(range(10)) + data = numpy.arange(10) all_items = [data, data + 10, data + 30] selected = [data-10, ] diff --git a/apptools/selection/tests/test_selection_service.py b/apptools/selection/tests/test_selection_service.py index 1f5aae094..7196fca49 100644 --- a/apptools/selection/tests/test_selection_service.py +++ b/apptools/selection/tests/test_selection_service.py @@ -222,7 +222,7 @@ def test_disconnect_unknown_listener(self): def test_set_selection(self): service = SelectionService() - provider = SimpleListProvider(items=range(10)) + provider = SimpleListProvider(items=list(range(10))) service.add_selection_provider(provider) provider_id = provider.provider_id @@ -253,7 +253,7 @@ def test_ignore_missing(self): # raise an exception. service = SelectionService() - provider = SimpleListProvider(items=range(10)) + provider = SimpleListProvider(items=list(range(10))) service.add_selection_provider(provider) new_selection = [0, 11, 1] diff --git a/apptools/sweet_pickle/__init__.py b/apptools/sweet_pickle/__init__.py index c5b6930c3..f7bb7b1f1 100644 --- a/apptools/sweet_pickle/__init__.py +++ b/apptools/sweet_pickle/__init__.py @@ -106,7 +106,7 @@ ############################################################################## # Expose our custom pickler as the standard Unpickler -from versioned_unpickler import VersionedUnpickler as Unpickler +from .versioned_unpickler import VersionedUnpickler as Unpickler # Use our custom unpickler to load from files def load(file, max_pass=-1): @@ -121,18 +121,18 @@ def loads(str, max_pass=-1): # We don't customize the Python pickler, though we do use the cPickle module # for improved performance. -from cPickle import Pickler +from six.moves.cPickle import Pickler # Implement the dump and dumps methods so that all traits in a HasTraits object # get included in the pickle. def dump(obj, file, protocol=2): _flush_traits(obj) - from cPickle import dump as d + from six.moves.cPickle import dump as d return d(obj, file, protocol) def dumps(obj, protocol=2): _flush_traits(obj) - from cPickle import dumps as ds + from six.moves.cPickle import dumps as ds return ds(obj, protocol) # We don't customize exceptions so just map to the Python pickle package @@ -143,14 +143,14 @@ def dumps(obj, protocol=2): # Allow retrieval of the global registry ############################################################################## -from global_registry import get_global_registry +from .global_registry import get_global_registry ############################################################################## # Expose our Updater class so users can explicitly create their own. ############################################################################## -from updater import Updater +from .updater import Updater ############################################################################## diff --git a/apptools/sweet_pickle/global_registry.py b/apptools/sweet_pickle/global_registry.py index 79b4d30c8..37f69e0a5 100644 --- a/apptools/sweet_pickle/global_registry.py +++ b/apptools/sweet_pickle/global_registry.py @@ -39,9 +39,9 @@ class instances into the project. """ try: - import thread as _thread + import six.moves._thread as _thread except ImportError: - import dummy_thread as _thread + import six.moves._dummy_thread as _thread ############################################################################## @@ -65,7 +65,7 @@ def get_global_registry(): _global_registry_lock.acquire() try: if _global_registry is None: - from updater import Updater + from .updater import Updater _global_registry = Updater() finally: _global_registry_lock.release() diff --git a/apptools/sweet_pickle/tests/two_stage_unpickler_test_case.py b/apptools/sweet_pickle/tests/two_stage_unpickler_test_case.py index 1862031a8..6ab694126 100644 --- a/apptools/sweet_pickle/tests/two_stage_unpickler_test_case.py +++ b/apptools/sweet_pickle/tests/two_stage_unpickler_test_case.py @@ -8,6 +8,7 @@ #----------------------------------------------------------------------------- # Test cases. +from __future__ import print_function import random import pickle import apptools.sweet_pickle as sweet_pickle @@ -61,7 +62,7 @@ def __initialize__(self): def test_generic(): - print '\nRunning generic test...' + print('\nRunning generic test...') a = A() b = B() @@ -74,19 +75,19 @@ def test_generic(): s = pickle.dumps(a) new_a = pickle.loads(s) try: - print '\ta.x: %s' % new_a.x - print '\ta.b_ref.y: %s' % new_a.b_ref.y - except Exception, msg: - print '\t%s' % 'Expected Error'.center(75,'*') - print '\t%s' % msg - print '\t%s' % ('*'*75) + print('\ta.x: %s' % new_a.x) + print('\ta.b_ref.y: %s' % new_a.b_ref.y) + except Exception as msg: + print('\t%s' % 'Expected Error'.center(75,'*')) + print('\t%s' % msg) + print('\t%s' % ('*'*75)) # This will work! s = pickle.dumps(a) new_a = sweet_pickle.loads(s) assert new_a.x == new_a.b_ref.y == value - print 'Generic test succesfull.\n\n' + print('Generic test succesfull.\n\n') ######################################## @@ -145,12 +146,12 @@ def __init__(self): self.finder = StringFinder(self.reader, 'e') def get(self): - print '\t%s' % self.finder.data - print '\t%s' % self.reader.data + print('\t%s' % self.finder.data) + print('\t%s' % self.reader.data) def test_toy_app(): - print '\nRunning toy app test...' + print('\nRunning toy app test...') a = Application() a.finder.find() @@ -160,19 +161,19 @@ def test_toy_app(): # Won't work. try: b.get() - except Exception, msg: - print '\t%s' % 'Expected Error'.center(75,'*') - print '\t%s' % msg - print '\t%s' % ('*'*75) + except Exception as msg: + print('\t%s' % 'Expected Error'.center(75,'*')) + print('\t%s' % msg) + print('\t%s' % ('*'*75)) # Works fine. c = sweet_pickle.loads(s) c.get() - print 'Toy app test succesfull.\n\n' + print('Toy app test succesfull.\n\n') if __name__ == '__main__': test_generic() test_toy_app() - print 'ALL TESTS SUCCESFULL\n' + print('ALL TESTS SUCCESFULL\n') diff --git a/apptools/sweet_pickle/tests/updater_test_case.py b/apptools/sweet_pickle/tests/updater_test_case.py index 5728229e7..22c469179 100644 --- a/apptools/sweet_pickle/tests/updater_test_case.py +++ b/apptools/sweet_pickle/tests/updater_test_case.py @@ -211,9 +211,9 @@ def fn1(): self.assertEqual(1, len(self.registry.state_functions)) self.assertEqual(1, len(self.registry.version_attribute_map)) self.assertEqual(1, len(self.registry._state_function_classes)) - self._validate_class_map_contents(updater.class_map.items()) + self._validate_class_map_contents(list(updater.class_map.items())) counts = {('foo', 'Foo'): 1} - self._validate_state_function_contents(updater.state_functions.items(), + self._validate_state_function_contents(list(updater.state_functions.items()), counts) # Merge in a second updater and validate the state of the registry is @@ -238,8 +238,9 @@ def fn2(): self.assertEqual(2, len(self.registry.state_functions)) self.assertEqual(2, len(self.registry.version_attribute_map)) self.assertEqual(1, len(self.registry._state_function_classes)) - self._validate_class_map_contents(updater.class_map.items() + \ - updater2.class_map.items()) + self._validate_class_map_contents( + list(updater.class_map.items()) + list(updater2.class_map.items()) + ) counts = {('foo', 'Foo'): 3} self._validate_state_function_contents( [ (('foo', 'Foo', 1), [fn1, fn2]), (('foo', 'Foo', 2), [fn2]) ], @@ -291,11 +292,11 @@ def _validate_exactly_one_state_function(self, key, value): self.assertEqual(1, len(self.registry.state_functions)) self.assertEqual(0, len(self.registry.version_attribute_map)) self.assertEqual(1, len(self.registry._state_function_classes)) - self.assertEqual(key, self.registry.state_functions.keys()[0]) + self.assertEqual(key, list(self.registry.state_functions.keys())[0]) self.assertEqual(value, self.registry.state_functions[key]) classes_key = (key[0], key[1]) self.assertEqual(classes_key, - self.registry._state_function_classes.keys()[0]) + list(self.registry._state_function_classes.keys())[0]) self.assertEqual(len(value), self.registry._state_function_classes[classes_key]) diff --git a/apptools/sweet_pickle/versioned_unpickler.py b/apptools/sweet_pickle/versioned_unpickler.py index 8e339cbbc..8fb29366b 100644 --- a/apptools/sweet_pickle/versioned_unpickler.py +++ b/apptools/sweet_pickle/versioned_unpickler.py @@ -161,7 +161,7 @@ def initialize(self, max_pass): raise UnpicklingError(msg) for o, g in generators[:]: try: - g.next() + next(g) except StopIteration: generators.remove((o, g)) @@ -218,7 +218,7 @@ def __init__(self, file, **kws): self._file = file if self.updater is None: - from global_registry import get_global_registry + from .global_registry import get_global_registry self.updater = get_global_registry() logger.debug('VersionedUnpickler [%s] using Updater [%s]', self, self.updater) @@ -276,7 +276,7 @@ def find_class(self, module, name): # Retrieve the target class definition try: klass = super(VersionedUnpickler, self).find_class(module, name) - except Exception, e: + except Exception as e: from apptools.sweet_pickle import UnpicklingError logger.debug('Traceback when finding class [%s.%s]:' \ % (module, name), exc_info=True) diff --git a/apptools/template/api.py b/apptools/template/api.py index e86fa15a8..db5d5942a 100644 --- a/apptools/template/api.py +++ b/apptools/template/api.py @@ -17,31 +17,31 @@ # Imports: #------------------------------------------------------------------------------- -from template_traits \ +from .template_traits \ import TDataSource, TInstance, TList, TInt, TFloat, TStr, TBool, TRange, \ TEnum, TDerived -from itemplate \ +from .itemplate \ import ITemplate -from imutable_template \ +from .imutable_template \ import IMutableTemplate -from itemplate_data_context \ +from .itemplate_data_context \ import ITemplateDataContext, ITemplateDataContextError -from template_data_name \ +from .template_data_name \ import TemplateDataName -from template_data_names \ +from .template_data_names \ import TemplateDataNames -from template_impl \ +from .template_impl \ import Template -from mutable_template \ +from .mutable_template \ import MutableTemplate -from template_choice \ +from .template_choice \ import TemplateChoice diff --git a/apptools/template/impl/any_context_data_name_item.py b/apptools/template/impl/any_context_data_name_item.py index 5a997c787..c03132671 100644 --- a/apptools/template/impl/any_context_data_name_item.py +++ b/apptools/template/impl/any_context_data_name_item.py @@ -35,7 +35,7 @@ from apptools.template.template_impl \ import Template -from template_data_context \ +from .template_data_context \ import TemplateDataContext #------------------------------------------------------------------------------- @@ -128,7 +128,7 @@ def inputs_changed ( self ): # If the result set is not empty, create an output context for it: n = len( contexts ) if n == 1: - output_context = values.values()[0] + output_context = list(values.values())[0] elif n > 1: output_context = TemplateDataContext( data_context_path = input_context.data_context_path, diff --git a/apptools/template/impl/any_data_name_item.py b/apptools/template/impl/any_data_name_item.py index b7b413050..058c50698 100644 --- a/apptools/template/impl/any_data_name_item.py +++ b/apptools/template/impl/any_data_name_item.py @@ -36,10 +36,10 @@ from apptools.template.template_impl \ import Template -from template_data_context \ +from .template_data_context \ import TemplateDataContext -from helper \ +from .helper \ import path_for #------------------------------------------------------------------------------- diff --git a/apptools/template/impl/api.py b/apptools/template/impl/api.py index 10fe0c098..62bb6f677 100644 --- a/apptools/template/impl/api.py +++ b/apptools/template/impl/api.py @@ -10,25 +10,25 @@ # #------------------------------------------------------------------------------- -from any_context_data_name_item \ +from .any_context_data_name_item \ import AnyContextDataNameItem -from any_data_name_item \ +from .any_data_name_item \ import AnyDataNameItem -from context_data_name_item \ +from .context_data_name_item \ import ContextDataNameItem -from template_data_context \ +from .template_data_context \ import TemplateDataContext -from template_data_source \ +from .template_data_source \ import TemplateDataSource -from value_data_name_item \ +from .value_data_name_item \ import ValueDataNameItem -from value_nd_data_name_item \ +from .value_nd_data_name_item \ import ValueNDDataNameItem, Value1DDataNameItem, Value2DDataNameItem, \ Value3DDataNameItem diff --git a/apptools/template/impl/context_data_name_item.py b/apptools/template/impl/context_data_name_item.py index ca9d4fb4f..0e4c52b7e 100644 --- a/apptools/template/impl/context_data_name_item.py +++ b/apptools/template/impl/context_data_name_item.py @@ -24,10 +24,10 @@ from apptools.template.template_traits \ import TStr -from any_context_data_name_item \ +from .any_context_data_name_item \ import AnyContextDataNameItem -from helper \ +from .helper \ import path_for, parse_name #------------------------------------------------------------------------------- diff --git a/apptools/template/impl/i_context_adapter.py b/apptools/template/impl/i_context_adapter.py index 64864111f..21514b16e 100644 --- a/apptools/template/impl/i_context_adapter.py +++ b/apptools/template/impl/i_context_adapter.py @@ -32,7 +32,7 @@ from apptools.template.itemplate_data_context \ import ITemplateDataContext, ITemplateDataContextError -from helper \ +from .helper \ import path_for #------------------------------------------------------------------------------- @@ -84,7 +84,7 @@ def get_data_context_value ( self, name ): raise ITemplateDataContextError( "No value named '%s' found." % name ) - except Exception, excp: + except Exception as excp: raise ITemplateDataContextError( str( excp ) ) def get_data_context ( self, name ): @@ -113,7 +113,7 @@ def get_data_context ( self, name ): raise ITemplateDataContextError( "No context named '%s' found." % name ) - except Exception, excp: + except Exception as excp: raise ITemplateDataContextError( str( excp ) ) #-- Traits Event Handlers -------------------------------------------------- diff --git a/apptools/template/impl/template_data_context.py b/apptools/template/impl/template_data_context.py index 8974ae822..4d4fc2e2c 100644 --- a/apptools/template/impl/template_data_context.py +++ b/apptools/template/impl/template_data_context.py @@ -69,14 +69,12 @@ class TemplateDataContext ( HasPrivateTraits ): @cached_property def _get_data_context_values ( self ): - values = self.values.keys() - values.sort() + values = sorted(self.values.keys()) return values @cached_property def _get_data_contexts ( self ): - contexts = self.contexts.keys() - contexts.sort() + contexts = sorted(self.contexts.keys()) return contexts #-- 'ITemplateDataContext' Interface Implementation ------------------------ diff --git a/apptools/template/impl/value_data_name_item.py b/apptools/template/impl/value_data_name_item.py index 45bbabf29..7456c1c49 100644 --- a/apptools/template/impl/value_data_name_item.py +++ b/apptools/template/impl/value_data_name_item.py @@ -35,10 +35,10 @@ from apptools.template.itemplate_data_context \ import ITemplateDataContext -from any_data_name_item \ +from .any_data_name_item \ import AnyDataNameItem -from helper \ +from .helper \ import parse_name, path_for #------------------------------------------------------------------------------- diff --git a/apptools/template/impl/value_nd_data_name_item.py b/apptools/template/impl/value_nd_data_name_item.py index 2bd74e86f..bfd5d619f 100644 --- a/apptools/template/impl/value_nd_data_name_item.py +++ b/apptools/template/impl/value_nd_data_name_item.py @@ -32,7 +32,7 @@ from apptools.template.template_choice \ import TemplateChoice -from any_data_name_item \ +from .any_data_name_item \ import AnyDataNameItem #------------------------------------------------------------------------------- diff --git a/apptools/template/imutable_template.py b/apptools/template/imutable_template.py index 3fa424228..60a9d3237 100644 --- a/apptools/template/imutable_template.py +++ b/apptools/template/imutable_template.py @@ -20,7 +20,7 @@ from traits.api \ import Event -from itemplate \ +from .itemplate \ import ITemplate #------------------------------------------------------------------------------- diff --git a/apptools/template/itemplate_data_name_item.py b/apptools/template/itemplate_data_name_item.py index da6819828..c58ad9db8 100644 --- a/apptools/template/itemplate_data_name_item.py +++ b/apptools/template/itemplate_data_name_item.py @@ -22,10 +22,10 @@ from traits.api \ import Interface, Instance, List -from itemplate_data_context \ +from .itemplate_data_context \ import ITemplateDataContext -from itemplate_choice \ +from .itemplate_choice \ import ITemplateChoice #------------------------------------------------------------------------------- diff --git a/apptools/template/mutable_template.py b/apptools/template/mutable_template.py index 62bae7a48..4ddc40752 100644 --- a/apptools/template/mutable_template.py +++ b/apptools/template/mutable_template.py @@ -20,10 +20,10 @@ from traits.api \ import Event, provides -from template_impl \ +from .template_impl \ import Template -from imutable_template \ +from .imutable_template \ import IMutableTemplate #------------------------------------------------------------------------------- diff --git a/apptools/template/template_choice.py b/apptools/template/template_choice.py index c457f2340..a02addc1b 100644 --- a/apptools/template/template_choice.py +++ b/apptools/template/template_choice.py @@ -18,7 +18,7 @@ from traits.api \ import HasPrivateTraits, Str, provides -from itemplate_choice \ +from .itemplate_choice \ import ITemplateChoice #------------------------------------------------------------------------------- diff --git a/apptools/template/template_data_name.py b/apptools/template/template_data_name.py index a9b1cecf8..8e2b7d076 100644 --- a/apptools/template/template_data_name.py +++ b/apptools/template/template_data_name.py @@ -23,16 +23,16 @@ import HasPrivateTraits, Instance, Bool, Property, Undefined, \ on_trait_change, cached_property -from itemplate_data_name_item \ +from .itemplate_data_name_item \ import ITemplateDataNameItem -from itemplate_data_context \ +from .itemplate_data_context \ import ITemplateDataContext -from template_impl \ +from .template_impl \ import Template -from template_traits \ +from .template_traits \ import TList, TStr, TBool #------------------------------------------------------------------------------- diff --git a/apptools/template/template_data_names.py b/apptools/template/template_data_names.py index 8b2e54335..336a4565d 100644 --- a/apptools/template/template_data_names.py +++ b/apptools/template/template_data_names.py @@ -29,13 +29,13 @@ from traitsui.table_column \ import ObjectColumn -from template_data_name \ +from .template_data_name \ import TemplateDataName -from itemplate_data_context \ +from .itemplate_data_context \ import ITemplateDataContext -from template_choice \ +from .template_choice \ import TemplateChoice #------------------------------------------------------------------------------- diff --git a/apptools/template/template_impl.py b/apptools/template/template_impl.py index a96d3a9ac..5913652aa 100644 --- a/apptools/template/template_impl.py +++ b/apptools/template/template_impl.py @@ -22,7 +22,7 @@ from traits.api \ import HasPrivateTraits, Undefined, provides -from itemplate \ +from .itemplate \ import ITemplate #------------------------------------------------------------------------------- diff --git a/apptools/template/template_traits.py b/apptools/template/template_traits.py index 0bff18c8c..b277a7a12 100644 --- a/apptools/template/template_traits.py +++ b/apptools/template/template_traits.py @@ -20,7 +20,7 @@ from traits.api \ import Instance, Int, Float, Str, List, Bool, Range, TraitType, Undefined -from itemplate_data_source \ +from .itemplate_data_source \ import ITemplateDataSource #------------------------------------------------------------------------------- diff --git a/apptools/template/test/scatter_plot.py b/apptools/template/test/scatter_plot.py index 8534a0e82..d0ea06b5b 100644 --- a/apptools/template/test/scatter_plot.py +++ b/apptools/template/test/scatter_plot.py @@ -48,7 +48,7 @@ from apptools.template.impl.api \ import TemplateDataSource, ValueDataNameItem -from enable_editor \ +from .enable_editor \ import EnableEditor #------------------------------------------------------------------------------- diff --git a/apptools/template/test/scatter_plot_2.py b/apptools/template/test/scatter_plot_2.py index 3bf020e0c..91a769c81 100644 --- a/apptools/template/test/scatter_plot_2.py +++ b/apptools/template/test/scatter_plot_2.py @@ -44,10 +44,10 @@ from apptools.template.api \ import Template, TRange, TStr, TInstance, TDerived -from enable_editor \ +from .enable_editor \ import EnableEditor -from scatter_plot \ +from .scatter_plot \ import ScatterPlot #------------------------------------------------------------------------------- diff --git a/apptools/template/test/scatter_plot_nm.py b/apptools/template/test/scatter_plot_nm.py index 9762e3f98..699608ce0 100644 --- a/apptools/template/test/scatter_plot_nm.py +++ b/apptools/template/test/scatter_plot_nm.py @@ -44,10 +44,10 @@ from apptools.template.api \ import MutableTemplate, TRange, TStr, TList, TDerived -from enable_editor \ +from .enable_editor \ import EnableEditor -from scatter_plot \ +from .scatter_plot \ import ScatterPlot #------------------------------------------------------------------------------- diff --git a/apptools/template/test/template_view.py b/apptools/template/test/template_view.py index 45fb82a58..3f7ddf77f 100644 --- a/apptools/template/test/template_view.py +++ b/apptools/template/test/template_view.py @@ -49,7 +49,7 @@ from apptools.template.api \ import ITemplate, ITemplateDataContext, TemplateDataNames, Template -from enable_editor \ +from .enable_editor \ import EnableEditor #-- Adapters that might be used ------------------------------------------------ @@ -287,7 +287,7 @@ def _load_python_template ( self, file_name ): self.template = template self.template_file_name = file_name - except Exception, excp: + except Exception as excp: self.template_view = Message( str( excp ) ) # Clean up the Python path: @@ -309,7 +309,7 @@ def _load_pickled_template ( self, file_name ): module = __import__( module_name ) self.template = load( fh ) self.template_file_name = file_name - except Exception, excp: + except Exception as excp: import traceback traceback.print_exc() self.template_view = Message( str( excp ) ) @@ -325,7 +325,7 @@ def _load_las_file ( self, file_name ): """ try: self.context = import_log_files( file_name, 'las' ) - except Exception, excp: + except Exception as excp: self.names_view = Message( str( excp ) ) def _save_pickled_template ( self ): diff --git a/apptools/type_manager/__init__.py b/apptools/type_manager/__init__.py index ce4b5efe5..7d6b32092 100644 --- a/apptools/type_manager/__init__.py +++ b/apptools/type_manager/__init__.py @@ -6,4 +6,4 @@ hooks for methods and functions. Part of the AppTools project of the Enthought Tool Suite. """ -from api import * +from apptools.type_manager.api import * diff --git a/apptools/type_manager/abstract_adapter_factory.py b/apptools/type_manager/abstract_adapter_factory.py index fa49f165b..eb72aa175 100644 --- a/apptools/type_manager/abstract_adapter_factory.py +++ b/apptools/type_manager/abstract_adapter_factory.py @@ -7,7 +7,7 @@ from traits.api import Delegate, HasTraits, Instance # Local imports. -from adapter_manager import AdapterManager +from .adapter_manager import AdapterManager logger = logging.getLogger(__name__) diff --git a/apptools/type_manager/adaptable.py b/apptools/type_manager/adaptable.py index 594a3d5e4..6a996b45d 100644 --- a/apptools/type_manager/adaptable.py +++ b/apptools/type_manager/adaptable.py @@ -5,7 +5,7 @@ from traits.api import HasTraits, Instance # Local imports. -from adapter_manager import AdapterManager +from .adapter_manager import AdapterManager class Adaptable(HasTraits): diff --git a/apptools/type_manager/adapter_factory.py b/apptools/type_manager/adapter_factory.py index 336f7bd11..8d2188ba7 100644 --- a/apptools/type_manager/adapter_factory.py +++ b/apptools/type_manager/adapter_factory.py @@ -5,7 +5,7 @@ from traits.api import Any # Local imports. -from abstract_adapter_factory import AbstractAdapterFactory +from .abstract_adapter_factory import AbstractAdapterFactory class AdapterFactory(AbstractAdapterFactory): diff --git a/apptools/type_manager/adapter_manager.py b/apptools/type_manager/adapter_manager.py index a627e2030..2de9c3252 100644 --- a/apptools/type_manager/adapter_manager.py +++ b/apptools/type_manager/adapter_manager.py @@ -1,12 +1,17 @@ """ A manager for adapter factories. """ +# Standard library imports +import warnings + +# Third-party imports +import six # Enthought library imports. from traits.api import Dict, HasTraits, Instance, Property # Local imports. -from abstract_type_system import AbstractTypeSystem -from python_type_system import PythonTypeSystem +from .abstract_type_system import AbstractTypeSystem +from .python_type_system import PythonTypeSystem class AdapterManager(HasTraits): @@ -141,7 +146,7 @@ def register_type_adapters(self, factory, adaptee_class): """ - if isinstance(adaptee_class, basestring): + if isinstance(adaptee_class, six.string_types): adaptee_class_name = adaptee_class else: @@ -179,7 +184,10 @@ def register_adapters(self, factory, adaptee_class): """ - print 'DEPRECATED: use "register_type_adapters" instead.' + warnings.warn( + 'Use "register_type_adapters" instead.', + DeprecationWarning + ) self.register_type_adapters(factory, adaptee_class) @@ -188,7 +196,10 @@ def register_adapters(self, factory, adaptee_class): def unregister_adapters(self, factory): """ Unregisters an adapter factory. """ - print 'DEPRECATED: use "unregister_type_adapters" instead.' + warnings.warn( + 'use "unregister_type_adapters" instead.', + DeprecationWarning + ) self.unregister_type_adapters(factory) diff --git a/apptools/type_manager/api.py b/apptools/type_manager/api.py index b7fe5c79d..6779c3937 100644 --- a/apptools/type_manager/api.py +++ b/apptools/type_manager/api.py @@ -1,11 +1,11 @@ -from abstract_adapter_factory import AbstractAdapterFactory -from abstract_factory import AbstractFactory -from abstract_type_system import AbstractTypeSystem -from adaptable import Adaptable -from adapter import Adapter -from adapter_factory import AdapterFactory -from adapter_manager import AdapterManager -from factory import Factory -from hook import add_pre, add_post, remove_pre, remove_post -from python_type_system import PythonObject, PythonTypeSystem -from type_manager import TypeManager +from .abstract_adapter_factory import AbstractAdapterFactory +from .abstract_factory import AbstractFactory +from .abstract_type_system import AbstractTypeSystem +from .adaptable import Adaptable +from .adapter import Adapter +from .adapter_factory import AdapterFactory +from .adapter_manager import AdapterManager +from .factory import Factory +from .hook import add_pre, add_post, remove_pre, remove_post +from .python_type_system import PythonObject, PythonTypeSystem +from .type_manager import TypeManager diff --git a/apptools/type_manager/factory.py b/apptools/type_manager/factory.py index c036723a8..ae70191ee 100644 --- a/apptools/type_manager/factory.py +++ b/apptools/type_manager/factory.py @@ -5,7 +5,7 @@ from traits.api import Any # Local imports. -from abstract_factory import AbstractFactory +from .abstract_factory import AbstractFactory class Factory(AbstractFactory): diff --git a/apptools/type_manager/hook.py b/apptools/type_manager/hook.py index 7eb83960e..e885f7de7 100644 --- a/apptools/type_manager/hook.py +++ b/apptools/type_manager/hook.py @@ -71,7 +71,7 @@ def hooked_method(self, *args, **kw): # Python < 2.4 does not allow this. try: - hooked_method.func_name = method_name + hooked_method.__name__ = method_name except: pass @@ -81,7 +81,7 @@ def hooked_method(self, *args, **kw): # Is the original method actually defined on the class, or is it # inherited? - hooked_method.__inherited__ = not klass.__dict__.has_key(method_name) + hooked_method.__inherited__ = method_name not in klass.__dict__ # Save the original method... # diff --git a/apptools/type_manager/python_type_system.py b/apptools/type_manager/python_type_system.py index d22efc533..6cd14e5d2 100644 --- a/apptools/type_manager/python_type_system.py +++ b/apptools/type_manager/python_type_system.py @@ -5,7 +5,7 @@ import inspect # Local imports. -from abstract_type_system import AbstractTypeSystem +from .abstract_type_system import AbstractTypeSystem class PythonObject: diff --git a/apptools/type_manager/type_manager.py b/apptools/type_manager/type_manager.py index dfb7c9ca7..eff74eea7 100644 --- a/apptools/type_manager/type_manager.py +++ b/apptools/type_manager/type_manager.py @@ -5,11 +5,11 @@ from traits.api import HasTraits, Instance, Property, Str # Local imports. -from abstract_type_system import AbstractTypeSystem -from adapter_manager import AdapterManager -from factory import Factory -from hook import add_pre, add_post, remove_pre, remove_post -from python_type_system import PythonTypeSystem +from .abstract_type_system import AbstractTypeSystem +from .adapter_manager import AdapterManager +from .factory import Factory +from .hook import add_pre, add_post, remove_pre, remove_post +from .python_type_system import PythonTypeSystem class TypeManager(HasTraits): diff --git a/apptools/type_registry/tests/dummies.py b/apptools/type_registry/tests/dummies.py index 83d98ecbf..a64cee6a2 100644 --- a/apptools/type_registry/tests/dummies.py +++ b/apptools/type_registry/tests/dummies.py @@ -1,5 +1,7 @@ import abc +import six + class A(object): pass @@ -21,8 +23,8 @@ class Mixed(A, D): pass -class Abstract(object): - __metaclass__ = abc.ABCMeta +class Abstract(six.with_metaclass(abc.ABCMeta, object)): + pass class Concrete(object): diff --git a/apptools/type_registry/type_registry.py b/apptools/type_registry/type_registry.py index 4faec06f0..789c939d4 100644 --- a/apptools/type_registry/type_registry.py +++ b/apptools/type_registry/type_registry.py @@ -1,3 +1,6 @@ +import six + + def get_mro(obj_class): """ Get a reasonable method resolution order of a class and its superclasses for both old-style and new-style classes. @@ -54,7 +57,7 @@ def push(self, typ, obj): obj : object The object to register. """ - if isinstance(typ, basestring): + if isinstance(typ, six.string_types): # Check the cached types. for cls in self.type_map: if _mod_name_key(cls) == typ: @@ -97,7 +100,7 @@ def pop(self, typ): ------ KeyError if the type is not registered. """ - if isinstance(typ, basestring): + if isinstance(typ, six.string_types): if typ not in self.name_map: # We may have it cached in the type map. We will have to # iterate over all of the types to check. @@ -204,7 +207,7 @@ def lookup_all_by_type(self, typ): return objs # None of the concrete superclasses. Check the ABCs. - for abstract, objs in self.abc_map.iteritems(): + for abstract, objs in self.abc_map.items(): if issubclass(typ, abstract) and objs: return objs diff --git a/apptools/undo/abstract_command.py b/apptools/undo/abstract_command.py index 4deb01c52..90818a7e3 100644 --- a/apptools/undo/abstract_command.py +++ b/apptools/undo/abstract_command.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from traits.api import Any, HasTraits, Unicode, provides diff --git a/apptools/undo/action/abstract_command_stack_action.py b/apptools/undo/action/abstract_command_stack_action.py index 2b6a32431..f9fccacea 100644 --- a/apptools/undo/action/abstract_command_stack_action.py +++ b/apptools/undo/action/abstract_command_stack_action.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from pyface.action.api import Action from traits.api import Instance diff --git a/apptools/undo/action/api.py b/apptools/undo/action/api.py index e56d0e17f..b9d0c7d6b 100644 --- a/apptools/undo/action/api.py +++ b/apptools/undo/action/api.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - from .command_action import CommandAction from .redo_action import RedoAction from .undo_action import UndoAction diff --git a/apptools/undo/action/command_action.py b/apptools/undo/action/command_action.py index c572a0d4a..82be27eaa 100644 --- a/apptools/undo/action/command_action.py +++ b/apptools/undo/action/command_action.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from pyface.action.api import Action from traits.api import Any, Callable, Instance diff --git a/apptools/undo/action/redo_action.py b/apptools/undo/action/redo_action.py index 0e4b31369..1d9aa8074 100644 --- a/apptools/undo/action/redo_action.py +++ b/apptools/undo/action/redo_action.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Local imports. from .abstract_command_stack_action import AbstractCommandStackAction diff --git a/apptools/undo/action/undo_action.py b/apptools/undo/action/undo_action.py index f3dd15b89..c95463a92 100644 --- a/apptools/undo/action/undo_action.py +++ b/apptools/undo/action/undo_action.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Local imports. from .abstract_command_stack_action import AbstractCommandStackAction diff --git a/apptools/undo/api.py b/apptools/undo/api.py index 54dee78d3..d110cee2e 100644 --- a/apptools/undo/api.py +++ b/apptools/undo/api.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - from .abstract_command import AbstractCommand from .command_stack import CommandStack from .i_command import ICommand diff --git a/apptools/undo/command_stack.py b/apptools/undo/command_stack.py index 367c1150f..6e6270c14 100644 --- a/apptools/undo/command_stack.py +++ b/apptools/undo/command_stack.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from traits.api import Bool, HasTraits, Instance, Int, List, Property, \ Unicode, provides diff --git a/apptools/undo/i_command_stack.py b/apptools/undo/i_command_stack.py index 143e8b60a..9fb6c7310 100644 --- a/apptools/undo/i_command_stack.py +++ b/apptools/undo/i_command_stack.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from traits.api import Bool, Instance, Interface, Unicode diff --git a/apptools/undo/i_undo_manager.py b/apptools/undo/i_undo_manager.py index 591dfca75..27636a980 100644 --- a/apptools/undo/i_undo_manager.py +++ b/apptools/undo/i_undo_manager.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from traits.api import Bool, Event, Instance, Int, Interface, Unicode diff --git a/apptools/undo/tests/test_command_stack.py b/apptools/undo/tests/test_command_stack.py index be23e86c5..c10b8fd9d 100644 --- a/apptools/undo/tests/test_command_stack.py +++ b/apptools/undo/tests/test_command_stack.py @@ -12,10 +12,11 @@ # # ----------------------------------------------------------------------------- -from traits.testing.unittest_tools import unittest from contextlib import contextmanager + from nose.tools import assert_equal +from traits.testing.unittest_tools import unittest from apptools.undo.api import CommandStack, UndoManager from apptools.undo.tests.testing_commands import SimpleCommand, UnnamedCommand diff --git a/apptools/undo/undo_manager.py b/apptools/undo/undo_manager.py index 7ca9aed7d..fb09d10c8 100644 --- a/apptools/undo/undo_manager.py +++ b/apptools/undo/undo_manager.py @@ -12,8 +12,6 @@ # Description: #------------------------------------------------------------------------------ -from __future__ import absolute_import - # Enthought library imports. from traits.api import Bool, Event, HasTraits, Instance, Int, Property, \ Unicode, provides diff --git a/setup.py b/setup.py index e6fb23dea..23f17fc0d 100644 --- a/setup.py +++ b/setup.py @@ -137,5 +137,4 @@ def write_version_py(filename='apptools/_version.py'): packages=find_packages(), platforms=["Windows", "Linux", "Mac OS-X", "Unix", "Solaris"], zip_safe=False, - use_2to3=True )