from os.path import join, dirname import logging.config import json import click import yaml import jsonschema from .registrar import register_file from .daemon import run_daemon from .config import load_config def setup_logging(debug=False): logging.config.dictConfig({ 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'brief': { 'format': '%(levelname)s %(name)s: %(message)s' } }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'DEBUG' if debug else 'INFO', 'formatter': 'brief', } }, 'root': { 'handlers': ['console'], 'level': 'DEBUG' if debug else 'INFO', } }) def validate_config(config): with open(join(dirname(__file__), 'config-schema.yaml')) as f: schema = yaml.load(f) jsonschema.validate(config, schema) @click.group() def cli(): pass @cli.command(help='Run the registrar daemon, attaching to a Redis queue') @click.option('--config-file', type=click.File('r')) @click.option('--validate/--no-validate', default=False) @click.option('--replace/--no-replace', default=False) @click.option('--host', type=str) @click.option('--port', type=int) @click.option('--listen-queue', type=str) @click.option('--progress-set', type=str) @click.option('--failure-set', type=str) @click.option('--success-set', type=str) @click.option('--debug/--no-debug', default=False) def daemon(config_file=None, validate=False, replace=False, host=None, port=None, listen_queue=None, progress_set=None, failure_set=None, success_set=None, debug=False): setup_logging(debug) config = load_config(config_file) if validate: validate_config(config) run_daemon(config, replace, host, port, listen_queue, progress_set, failure_set, success_set) @cli.command(help='Run a single, one-off registration') @click.argument('file_path', type=str) @click.option('--config-file', type=click.File('r')) @click.option('--validate/--no-validate', default=False) @click.option('--replace/--no-replace', default=False) @click.option('--debug/--no-debug', default=False) def register(file_path, config_file=None, validate=False, replace=False, debug=False): setup_logging(debug) config = load_config(config_file) if validate: validate_config(config) register_file(config, file_path, replace) if __name__ == '__main__': cli()