| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """This package contains all valid cros commands and their unittests. |
| |
| All commands can be either imported directly or looked up using this module. |
| This modules contains a dictionary called commands mapping |
| command names -> command classes e.g. image->cros_image.ImageCommand. |
| """ |
| |
| from __future__ import print_function |
| |
| import glob |
| import imp |
| import os |
| |
| from chromite import cros |
| |
| |
| def _FindModules(subdir_path): |
| """Returns a list of all the relevant python modules in |sub_dir_path|""" |
| # We only load cros_[!unittest] modules. |
| modules = [] |
| for file_path in glob.glob(subdir_path + '/cros_*.py'): |
| if not file_path.endswith('_unittest.py'): |
| modules.append(file_path) |
| |
| return modules |
| |
| |
| def _ImportCommands(): |
| """Directly imports all cros_[!unittest] python modules. |
| |
| This method imports the cros_[!unittest] modules which may contain |
| commands. When these modules are loaded, declared commands (those that use |
| the cros.CommandDecorator) will automatically get added to cros._commands. |
| """ |
| subdir_path = os.path.dirname(__file__) |
| for file_path in _FindModules(subdir_path): |
| file_name = os.path.basename(file_path) |
| mod_name = os.path.splitext(file_name)[0] |
| imp.load_module(mod_name, *imp.find_module(mod_name, [subdir_path])) |
| |
| |
| def ListCommands(): |
| """Return a dictionary mapping command names to classes.""" |
| # pylint: disable=W0212 |
| return cros._commands.copy() |
| |
| |
| _ImportCommands() |
| |