Skip to content

Commit

Permalink
Python 3 - Turn on absolute imports, and fix existing imports.
Browse files Browse the repository at this point in the history
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.

Differential Revision: http://reviews.llvm.org/D14342
Reviewed By: Todd Fiala

llvm-svn: 252191
  • Loading branch information
Zachary Turner committed Nov 5, 2015
1 parent 185a7aa commit c1b7cd7
Show file tree
Hide file tree
Showing 17 changed files with 130 additions and 53 deletions.
4 changes: 3 additions & 1 deletion lldb/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
1 change: 1 addition & 0 deletions lldb/packages/Python/lldbsuite/test/bench.py
Expand Up @@ -15,6 +15,7 @@
"""

from __future__ import print_function
from __future__ import absolute_import

import os, sys
import re
Expand Down
8 changes: 7 additions & 1 deletion lldb/packages/Python/lldbsuite/test/curses_results.py
Expand Up @@ -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"""

Expand Down
17 changes: 9 additions & 8 deletions lldb/packages/Python/lldbsuite/test/dosep.py
Expand Up @@ -33,8 +33,7 @@
"""

from __future__ import print_function


from __future__ import absolute_import

# system packages and modules
import asyncore
Expand All @@ -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
Expand Down
26 changes: 15 additions & 11 deletions lldb/packages/Python/lldbsuite/test/dotest.py
Expand Up @@ -18,31 +18,35 @@
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
import signal
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."""
Expand Down Expand Up @@ -1470,7 +1474,7 @@ def run_suite():
# 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")
Expand Down
6 changes: 6 additions & 0 deletions lldb/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

Expand Down
6 changes: 5 additions & 1 deletion lldb/packages/Python/lldbsuite/test/dotest_channels.py
Expand Up @@ -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.
Expand Down
6 changes: 6 additions & 0 deletions lldb/packages/Python/lldbsuite/test/lldb_pylint_helper.py
Expand Up @@ -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
Expand Down
10 changes: 8 additions & 2 deletions lldb/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
Expand Down
12 changes: 9 additions & 3 deletions lldb/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
Expand Down
12 changes: 9 additions & 3 deletions lldb/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 {
Expand Down
14 changes: 9 additions & 5 deletions lldb/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__)
Expand Down
8 changes: 8 additions & 0 deletions lldb/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'])
Expand Down
25 changes: 14 additions & 11 deletions lldb/packages/Python/lldbsuite/test/lldbtest.py
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -1890,7 +1893,7 @@ def getCompilerVersion(self):
""" Returns a string that represents the compiler version.
Supports: llvm, clang.
"""
from lldbutil import which
from .lldbutil import which
version = 'unknown'

compiler = self.getCompilerBinary()
Expand Down Expand Up @@ -2546,7 +2549,7 @@ def switch_to_thread_with_stop_reason(self, stop_reason):
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" %
Expand Down Expand Up @@ -2801,7 +2804,7 @@ def build(self, architecture=None, compiler=None, dictionary=None, clean=True):

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
Expand Down
15 changes: 10 additions & 5 deletions lldb/packages/Python/lldbsuite/test/lldbutil.py
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions lldb/packages/Python/lldbsuite/test/test_categories.py
Expand Up @@ -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',
Expand Down

0 comments on commit c1b7cd7

Please sign in to comment.