167dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
267dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa# Use of this source code is governed by a BSD-style license that can be
367dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa# found in the LICENSE file.
467dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
567dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa"""Module containing import helper used by autoupdate utility."""
667dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
767dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosaimport imp
867dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosaimport os
967dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
1067dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosaimport common
1167dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosafrom autotest_lib.utils import build_externals, external_packages
1267dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
1367dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
1467dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosadef download_and_import(module_name, package_class):
152cfcfdbab21d848c1e35b7554173b7a43d4a7e93Chris Sosa    """Tries to import module, if it fails, downloads and imports it.
1667dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
1767dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    @param module_name: Name of the module e.g. devserver.
1867dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    @param package_class: autotest external_packages class to use.
1967dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    """
202cfcfdbab21d848c1e35b7554173b7a43d4a7e93Chris Sosa    try:
212cfcfdbab21d848c1e35b7554173b7a43d4a7e93Chris Sosa        return imp.load_module(module_name, *imp.find_module(module_name))
222cfcfdbab21d848c1e35b7554173b7a43d4a7e93Chris Sosa    except ImportError:
232cfcfdbab21d848c1e35b7554173b7a43d4a7e93Chris Sosa        pass
242cfcfdbab21d848c1e35b7554173b7a43d4a7e93Chris Sosa
2567dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    tot = external_packages.find_top_of_autotest_tree()
2667dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    install_dir = os.path.join(tot, build_externals.INSTALL_DIR)
2767dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    build_externals.build_and_install_packages(
2867dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa        [package_class], install_dir)
2967dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa
3067dbe59a00e09c5357fd3667487d2ee58dc30993Chris Sosa    return imp.load_module(module_name, *imp.find_module(module_name))
31