EOX GitLab Instance

Skip to content
Snippets Groups Projects
cli.py 2.47 KiB
Newer Older
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()