diff options
author | Casey Rodarmor <casey@rodarmor.com> | 2016-01-16 19:00:15 -0800 |
---|---|---|
committer | Anish Athalye <me@anishathalye.com> | 2016-02-06 15:14:35 -0500 |
commit | eeb4c284fb71dd62eaf5ee7017e23b64c2c899d7 (patch) | |
tree | 0f79d448c9f0864153d96d36bf43b263b2a15e6d /dotbot/cli.py | |
parent | ba9e9cbe709b3a736d10dae0922b09a5eb0cde87 (diff) |
Add plugin loader
Diffstat (limited to 'dotbot/cli.py')
-rw-r--r-- | dotbot/cli.py | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/dotbot/cli.py b/dotbot/cli.py index dc90909..d77ab42 100644 --- a/dotbot/cli.py +++ b/dotbot/cli.py @@ -1,8 +1,11 @@ +import os, glob + from argparse import ArgumentParser from .config import ConfigReader, ReadingError from .dispatcher import Dispatcher, DispatchError from .messenger import Messenger from .messenger import Level +from .util import module def add_options(parser): parser.add_argument('-Q', '--super-quiet', dest='super_quiet', action='store_true', @@ -17,6 +20,12 @@ def add_options(parser): parser.add_argument('-c', '--config-file', nargs=1, dest='config_file', help='run commands given in CONFIGFILE', metavar='CONFIGFILE', required=True) + parser.add_argument('-p', '--plugin', action='append', dest='plugins', default=[], + help='load PLUGIN as a plugin', metavar='PLUGIN') + parser.add_argument('--disable-built-in-plugins', dest='disable_built_in_plugins', + action='store_true', help='disable built-in plugins') + parser.add_argument('--plugin-dir', action='append', dest='plugin_dirs', default=[], + metavar='PLUGIN_DIR', help='load all plugins in PLUGIN_DIR') def read_config(config_file): reader = ConfigReader(config_file) @@ -28,12 +37,24 @@ def main(): parser = ArgumentParser() add_options(parser) options = parser.parse_args() - if (options.super_quiet): + if options.super_quiet: log.set_level(Level.WARNING) - if (options.quiet): + if options.quiet: log.set_level(Level.INFO) - if (options.verbose): + if options.verbose: log.set_level(Level.DEBUG) + plugin_directories = list(options.plugin_dirs) + if not options.disable_built_in_plugins: + plugin_directories.append(os.path.join(os.path.dirname(__file__), '..', 'plugins')) + plugin_paths = [] + for directory in plugin_directories: + for plugin_path in glob.glob(os.path.join(directory, '*.py')): + plugin_paths.append(plugin_path) + for plugin_path in options.plugins: + plugin_paths.append(plugin_path) + for plugin_path in plugin_paths: + abspath = os.path.abspath(plugin_path) + module.load(abspath) tasks = read_config(options.config_file[0]) if not isinstance(tasks, list): raise ReadingError('Configuration file must be a list of tasks') |