import argparse
import logging
import sys
from ..hooks import on_plugin_install
from . import get_plugins_directory, LOG_PARSER, PLUGINS_DIR_PARSER
logger = logging.getLogger(__name__)
default_plugins_directory = get_plugins_directory()
INSTALL_REQUIREMENTS_PARSER = \
argparse.ArgumentParser(add_help=False, parents=[LOG_PARSER,
PLUGINS_DIR_PARSER])
[docs]def validate_args(args):
logging.basicConfig(level=getattr(logging, args.log_level.upper()))
if all([args.plugins_directory is None,
args.config_file is None]):
args.plugins_directory = default_plugins_directory
logger.debug('Using default plugins directory: "%s"',
args.plugins_directory)
elif args.plugins_directory is None:
args.plugins_directory = get_plugins_directory(config_path=
args.config_file)
logger.debug('Plugins directory from config file: "%s"',
args.plugins_directory)
else:
logger.debug('Using explicit plugins directory: "%s"',
args.plugins_directory)
return args
[docs]def install_dependencies(plugins_directory, ostream=sys.stdout):
'''
Run ``on_plugin_install`` script for each plugin directory found in
specified plugins directory.
Parameters
----------
plugins_directory : str
File system path to directory containing zero or more plugin
subdirectories.
ostream : file-like
Output stream for status messages (default: ``sys.stdout``).
'''
plugin_directories = plugins_directory.realpath().dirs()
print >> ostream, 50 * '*'
print >> ostream, 'Processing plugins:'
print >> ostream, '\n'.join([' - {}'.format(p)
for p in plugin_directories])
print >> ostream, '\n' + 50 * '-' + '\n'
for plugin_dir_i in plugin_directories:
try:
on_plugin_install(plugin_dir_i, ostream=ostream)
except RuntimeError, exception:
print exception
print >> ostream, '\n' + 50 * '-' + '\n'
[docs]def parse_args(args=None):
'''Parses arguments, returns ``(options, args)``.'''
if args is None:
args = sys.argv
parser = argparse.ArgumentParser(description='MicroDrop plugin '
'dependencies installer',
parents=[INSTALL_REQUIREMENTS_PARSER])
return parser.parse_args()
[docs]def main(args=None):
if args is None:
args = parse_args()
args = validate_args(args)
logger.debug('Arguments: %s', args)
install_dependencies(args.plugins_directory)
if __name__ == '__main__':
main()