zturner created this revision. zturner added a reviewer: tfiala. zturner added a subscriber: lldb-commits.
Enable absolute imports in lldbsuite. Absolute imports were introduced in Python 2.5 as a feature (e.g. from __future__ import absolute_import), and made default in Python 3. When absolute imports are enabled, the import system changes in a couple of ways: 1) The `import foo` syntax will *only* search sys.path. If `foo` isn't in sys.path, it won't be found. Period. Without absolute imports, the import system will also search the same directory that the importing file resides in, so that you can easily import from the same folder. 2) From inside a package, you can use a dot syntax to refer to higher levels of the current package. For example, if you are in the package lldbsuite.test.utility, then ..foo refers to lldbsuite.test.foo. You can use this notation with the `from X import Y` syntax to write intra-package references. For example, using the previous locationa s a starting point, writing `from ..support import seven` would import lldbsuite.support.seven Since this is now the default behavior in Python 3, this means that importing from the same directory with `import foo` *no longer works*. As a result, the only way to have portable code is to force absolute imports for all versions of Python. See PEP 0328 [https://www.python.org/dev/peps/pep-0328/] for more information about absolute and relative imports. http://reviews.llvm.org/D14342 Files: packages/Python/lldbsuite/test/__init__.py packages/Python/lldbsuite/test/bench.py packages/Python/lldbsuite/test/curses_results.py packages/Python/lldbsuite/test/dosep.py packages/Python/lldbsuite/test/dotest.py packages/Python/lldbsuite/test/dotest_args.py packages/Python/lldbsuite/test/dotest_channels.py packages/Python/lldbsuite/test/lldb_pylint_helper.py packages/Python/lldbsuite/test/lldbbench.py packages/Python/lldbsuite/test/lldbcurses.py packages/Python/lldbsuite/test/lldbinline.py packages/Python/lldbsuite/test/lldbpexpect.py packages/Python/lldbsuite/test/lldbplatformutil.py packages/Python/lldbsuite/test/lldbtest.py packages/Python/lldbsuite/test/lldbutil.py packages/Python/lldbsuite/test/test_categories.py packages/Python/lldbsuite/test/test_results.py
Index: packages/Python/lldbsuite/test/test_results.py =================================================================== --- packages/Python/lldbsuite/test/test_results.py +++ packages/Python/lldbsuite/test/test_results.py @@ -9,9 +9,9 @@ """ from __future__ import print_function +from __future__ import absolute_import - - +# System modules import argparse import inspect import os @@ -23,9 +23,11 @@ import traceback import xml.sax.saxutils +# Third-party modules import six from six.moves import cPickle +# LLDB modules class EventBuilder(object): """Helper class to build test result event dictionaries.""" Index: packages/Python/lldbsuite/test/test_categories.py =================================================================== --- packages/Python/lldbsuite/test/test_categories.py +++ packages/Python/lldbsuite/test/test_categories.py @@ -2,8 +2,15 @@ Provides definitions for various lldb test categories """ +from __future__ import absolute_import + +# System modules import sys +# Third-party modules + +# LLDB modules + all_categories = { 'dataformatters': 'Tests related to the type command and the data formatters subsystem', 'expression' : 'Tests related to the expression parser', Index: packages/Python/lldbsuite/test/lldbutil.py =================================================================== --- packages/Python/lldbsuite/test/lldbutil.py +++ packages/Python/lldbsuite/test/lldbutil.py @@ -5,16 +5,21 @@ """ from __future__ import print_function +from __future__ import absolute_import - - -import lldb -import os, sys +# System modules +import collections +import os import re +import sys +# Third-party modules from six import StringIO as SixStringIO import six -import collections + +# LLDB modules +import lldb + # =================================================== # Utilities for locating/checking executable programs Index: packages/Python/lldbsuite/test/lldbtest.py =================================================================== --- packages/Python/lldbsuite/test/lldbtest.py +++ packages/Python/lldbsuite/test/lldbtest.py @@ -32,10 +32,11 @@ """ from __future__ import print_function +from __future__ import absolute_import - - +# System modules import abc +import collections import gc import glob import os, sys, traceback @@ -45,17 +46,19 @@ from subprocess import * import time import types -import unittest2 -import lldb -import lldbtest_config -import lldbutil -import test_categories +# Third-party modules +import unittest2 from six import add_metaclass from six import StringIO as SixStringIO from six.moves.urllib import parse as urlparse import six -import collections + +# LLDB modules +import lldb +from . import lldbtest_config +from . import lldbutil +from . import test_categories # dosep.py starts lots and lots of dotest instances # This option helps you find if two (or more) dotest instances are using the same @@ -1886,7 +1889,7 @@ """ Returns a string that represents the compiler version. Supports: llvm, clang. """ - from lldbutil import which + from .lldbutil import which version = 'unknown' compiler = self.getCompilerBinary() @@ -2542,7 +2545,7 @@ Run the 'thread list' command, and select the thread with stop reason as 'stop_reason'. If no such thread exists, no select action is done. """ - from lldbutil import stop_reason_to_str + from .lldbutil import stop_reason_to_str self.runCmd('thread list') output = self.res.GetOutput() thread_line_pattern = re.compile("^[ *] thread #([0-9]+):.*stop reason = %s" % @@ -2797,7 +2800,7 @@ def DebugSBValue(self, val): """Debug print a SBValue object, if traceAlways is True.""" - from lldbutil import value_type_to_str + from .lldbutil import value_type_to_str if not traceAlways: return Index: packages/Python/lldbsuite/test/lldbplatformutil.py =================================================================== --- packages/Python/lldbsuite/test/lldbplatformutil.py +++ packages/Python/lldbsuite/test/lldbplatformutil.py @@ -1,6 +1,14 @@ """ This module contains functions used by the test cases to hide the architecture and/or the platform dependent nature of the tests. """ +from __future__ import absolute_import + +# System modules + +# Third-party modules + +# LLDB modules + def check_first_register_readable(test_case): if test_case.getArchitecture() in ['x86_64', 'i386']: test_case.expect("register read eax", substrs = ['eax = 0x']) Index: packages/Python/lldbsuite/test/lldbpexpect.py =================================================================== --- packages/Python/lldbsuite/test/lldbpexpect.py +++ packages/Python/lldbsuite/test/lldbpexpect.py @@ -1,14 +1,18 @@ from __future__ import print_function +from __future__ import absolute_import - - -import lldb -from lldbtest import * -import lldbutil +# System modules import os import sys + +# Third-party modules import pexpect +# LLDB Modules +import lldb +from .lldbtest import * +from . import lldbutil + class PExpectTest(TestBase): mydir = TestBase.compute_mydir(__file__) Index: packages/Python/lldbsuite/test/lldbinline.py =================================================================== --- packages/Python/lldbsuite/test/lldbinline.py +++ packages/Python/lldbsuite/test/lldbinline.py @@ -1,11 +1,17 @@ from __future__ import print_function +from __future__ import absolute_import -import lldb -from lldbtest import * -import lldbutil +# System modules import os import sys +# Third-party modules + +# LLDB modules +import lldb +from .lldbtest import * +from . import lldbutil + def source_type(filename): _, extension = os.path.splitext(filename) return { Index: packages/Python/lldbsuite/test/lldbcurses.py =================================================================== --- packages/Python/lldbsuite/test/lldbcurses.py +++ packages/Python/lldbsuite/test/lldbcurses.py @@ -1,10 +1,16 @@ +from __future__ import absolute_import - -import curses, curses.panel +# System modules +import curses +import curses.panel import sys -import six import time +# Third-party modules +import six + +# LLDB modules + class Point(object): def __init__(self, x, y): self.x = x Index: packages/Python/lldbsuite/test/lldbbench.py =================================================================== --- packages/Python/lldbsuite/test/lldbbench.py +++ packages/Python/lldbsuite/test/lldbbench.py @@ -1,6 +1,12 @@ +from __future__ import absolute_import + +# System modules import time -#import numpy -from lldbtest import * + +# Third-party modules + +# LLDB modules +from .lldbtest import * class Stopwatch(object): """Stopwatch provides a simple utility to start/stop your stopwatch multiple Index: packages/Python/lldbsuite/test/lldb_pylint_helper.py =================================================================== --- packages/Python/lldbsuite/test/lldb_pylint_helper.py +++ packages/Python/lldbsuite/test/lldb_pylint_helper.py @@ -13,12 +13,18 @@ """ from __future__ import print_function +from __future__ import absolute_import +# System modules import os import platform import subprocess import sys +# Third-party modules + +# LLDB modules + def add_lldb_test_paths(check_dir): # pylint: disable=line-too-long Index: packages/Python/lldbsuite/test/dotest_channels.py =================================================================== --- packages/Python/lldbsuite/test/dotest_channels.py +++ packages/Python/lldbsuite/test/dotest_channels.py @@ -15,14 +15,18 @@ """ from __future__ import print_function +from __future__ import absolute_import - +# System modules import asyncore import socket +# Third-party modules from six.moves import cPickle +# LLDB modules + class UnpicklingForwardingReaderChannel(asyncore.dispatcher): """Provides an unpickling, forwarding asyncore dispatch channel reader. Index: packages/Python/lldbsuite/test/dotest_args.py =================================================================== --- packages/Python/lldbsuite/test/dotest_args.py +++ packages/Python/lldbsuite/test/dotest_args.py @@ -1,11 +1,17 @@ from __future__ import print_function +from __future__ import absolute_import +# System modules import argparse import sys import multiprocessing import os import textwrap +# Third-party modules + +# LLDB modules + class ArgParseNamespace(object): pass Index: packages/Python/lldbsuite/test/dotest.py =================================================================== --- packages/Python/lldbsuite/test/dotest.py +++ packages/Python/lldbsuite/test/dotest.py @@ -18,16 +18,14 @@ for available options. """ +from __future__ import absolute_import from __future__ import print_function -import sys - -import lldbsuite -import lldbtest_config +# System modules +import sys import atexit import importlib import os -import dotest_args import errno import platform import progress @@ -35,14 +33,20 @@ import socket import subprocess import sys -import test_results -from test_results import EventBuilder import inspect -import unittest2 -import test_categories +# Third-party modules import six -import lldbsuite.support.seven as seven +import unittest2 + +# LLDB Modules +import lldbsuite +from . import dotest_args +from . import lldbtest_config +from . import test_categories +from . import test_results +from .test_results import EventBuilder +from ..support import seven def is_exe(fpath): """Returns true if fpath is an executable.""" @@ -1451,7 +1455,7 @@ # If we are running as the multiprocess test runner, kick off the # multiprocess test runner here. if isMultiprocessTestRunner(): - import dosep + from . import dosep dosep.main(output_on_success, num_threads, multiprocess_test_subdir, test_runner_name, results_formatter_object) raise Exception("should never get here") Index: packages/Python/lldbsuite/test/dosep.py =================================================================== --- packages/Python/lldbsuite/test/dosep.py +++ packages/Python/lldbsuite/test/dosep.py @@ -33,8 +33,7 @@ """ from __future__ import print_function - - +from __future__ import absolute_import # system packages and modules import asyncore @@ -51,15 +50,17 @@ from six.moves import queue -# Add our local test_runner/lib dir to the python path. -sys.path.append(os.path.join(os.path.dirname(__file__), "test_runner", "lib")) - # Our packages and modules -import dotest_channels -import dotest_args +import lldbsuite.support.seven as seven + +from . import dotest_channels +from . import dotest_args + +# Todo: Convert this folder layout to be relative-import friendly and don't hack up +# sys.path like this +sys.path.append(os.path.join(os.path.dirname(__file__), "test_runner", "lib")) import lldb_utils import process_control -import lldbsuite.support.seven as seven # Status codes for running command with timeout. eTimedOut, ePassed, eFailed = 124, 0, 1 Index: packages/Python/lldbsuite/test/curses_results.py =================================================================== --- packages/Python/lldbsuite/test/curses_results.py +++ packages/Python/lldbsuite/test/curses_results.py @@ -10,15 +10,21 @@ """ from __future__ import print_function +from __future__ import absolute_import +# System modules import curses import datetime -import lldbcurses import math import sys import test_results import time +# Third-party modules + +# LLDB modules +from . import lldbcurses + class Curses(test_results.ResultsFormatter): """Receives live results from tests that are running and reports them to the terminal in a curses GUI""" Index: packages/Python/lldbsuite/test/bench.py =================================================================== --- packages/Python/lldbsuite/test/bench.py +++ packages/Python/lldbsuite/test/bench.py @@ -15,6 +15,7 @@ """ from __future__ import print_function +from __future__ import absolute_import import os, sys import re Index: packages/Python/lldbsuite/test/__init__.py =================================================================== --- packages/Python/lldbsuite/test/__init__.py +++ packages/Python/lldbsuite/test/__init__.py @@ -1,4 +1,6 @@ # Module level initialization for the `lldbsuite.test` module. -import dotest +from __future__ import absolute_import + +from . import dotest run_suite = dotest.run_suite
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits