Files @ 6eea4a4d3b10
Branch filter:

Location: FVDE/ennstatus/ennstatus/cli/commands/config.py

Dennis Fink
Added first version of the README
import json
import ipaddress

from pprint import pprint

import click

from ...utils import check_ip


@click.group(short_help='Configure ennstatus')
def config():
    pass


@config.command('show', short_help='Show current configuration')
@click.pass_obj
def show(obj):

    with obj['config_file'].open(encoding='utf-8') as f:
        config = json.load(f)
    pprint(config)


@config.group(short_help='Configure servers')
def server():
    pass


@server.command('add', short_help='Add server')
@click.argument('name')
@click.option('-i', '--ips', prompt='IPs (comma separated)')
@click.password_option()
@click.option('--bridgeprogram/--no-bridgeprogram', default=False)
@click.pass_obj
def add(obj, name, ips, password, bridgeprogram):

    with obj['config_file'].open() as f:
        config = json.load(f)

    name = name.lower()
    ips = [ip.strip() for ip in ips.split(',')]

    try:
        if name in config['ENNSTATUS_SERVERS']:
            try:
                click.confirm('Server already exits! Overwrite?', abort=True)
            except click.Abort as e:
                raise SystemExit from e
    except KeyError:
        config['ENNSTATUS_SERVERS'] = {}

    converted_ips = {ipaddress.ip_address(ip) for ip in ips}

    for ip in converted_ips:
        if not check_ip(ip):
            raise SystemExit('ip {} is not accepted!'.format(str(ip)))

    config['ENNSTATUS_SERVERS'][name] = {
        'IPS': ips,
        'PASSWORD': password
    }

    if bridgeprogram:
        try:
            config['ENNSTATUS_BRIDGE_PROGRAM'].append(name)
        except KeyError:
            config['ENNSTATUS_BRIDGE_PROGRAM'] = [name]

    with obj['config_file'].open(mode='w', encoding='utf-8') as f:
        json.dump(config, f, indent=4, sort_keys=True)


@server.command('delete', short_help='Remove server')
@click.argument('name')
@click.pass_obj
def delete(obj, name):

    with obj['config_file'].open() as f:
        config = json.load(f)
    name = name.lower()

    try:
        del config['ENNSTATUS_SERVERS'][name]
    except KeyError:
        raise SystemExit('{} does not exists!'.format(name))

    try:
        config['ENNSTATUS_BRIDGE_PROGRAM'].remove(name)
    except KeyError:
        pass

    with obj['config_file'].open(mode='w', encoding='utf-8') as f:
        json.dump(config, f, indent=4, sort_keys=True)

    filename = obj['data_dir'] / (name + '.json')
    try:
        filename.unlink()
    except FileNotFoundError:
        pass