summaryrefslogtreecommitdiff
path: root/dotbot/cli.py
diff options
context:
space:
mode:
authorCasey Rodarmor <casey@rodarmor.com>2016-01-16 19:00:15 -0800
committerAnish Athalye <me@anishathalye.com>2016-02-06 15:14:35 -0500
commiteeb4c284fb71dd62eaf5ee7017e23b64c2c899d7 (patch)
tree0f79d448c9f0864153d96d36bf43b263b2a15e6d /dotbot/cli.py
parentba9e9cbe709b3a736d10dae0922b09a5eb0cde87 (diff)
Add plugin loader
Diffstat (limited to 'dotbot/cli.py')
-rw-r--r--dotbot/cli.py27
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')