import sys
import os
import lldb


def check_has_dir_in_path(dirname):
    return sys.path.__contains__(dirname)


def ensure_has_dir_in_path(dirname):
    dirname = os.path.abspath(dirname)
    if not (check_has_dir_in_path(dirname)):
        sys.path.append(dirname)


def do_import(debugger, modname):
    if (len(modname) > 4 and modname[-4:] == '.pyc'):
        modname = modname[:-4]
    if (len(modname) > 3 and modname[-3:] == '.py'):
        modname = modname[:-3]
    debugger.HandleCommand("script import " + modname)


def pyimport_cmd(debugger, args, result, dict):
    """Import a Python module given its full path"""
    print 'WARNING: obsolete feature - use native command "command script import"'
    if args == "":
        return "no module path given"
    if not (os.sep in args):
        modname = args
        ensure_has_dir_in_path('.')
    else:
        endofdir = args.rfind(os.sep)
        modname = args[endofdir + 1:]
        args = args[0:endofdir]
        ensure_has_dir_in_path(args)
    do_import(debugger, modname)
    return None
