• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Module containing import helper used by autoupdate utility."""
6
7import imp
8import os
9
10import common
11from autotest_lib.utils import build_externals, external_packages
12
13
14def download_and_import(module_name, package_class):
15    """Tries to import module, if it fails, downloads and imports it.
16
17    @param module_name: Name of the module e.g. devserver.
18    @param package_class: autotest external_packages class to use.
19    """
20    try:
21        return imp.load_module(module_name, *imp.find_module(module_name))
22    except ImportError:
23        pass
24
25    tot = external_packages.find_top_of_autotest_tree()
26    install_dir = os.path.join(tot, build_externals.INSTALL_DIR)
27    build_externals.build_and_install_packages(
28        [package_class], install_dir)
29
30    return imp.load_module(module_name, *imp.find_module(module_name))
31