Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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)