add config cli commands
This commit is contained in:
parent
9839da906c
commit
c96640bfd7
|
@ -4,7 +4,7 @@ import yaml
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from .misc import DotDict
|
from .misc import DotDict, boolean
|
||||||
|
|
||||||
|
|
||||||
relay_software_names = [
|
relay_software_names = [
|
||||||
|
@ -51,10 +51,12 @@ class RelayConfig(DotDict):
|
||||||
assert isinstance(value, (list, set, tuple))
|
assert isinstance(value, (list, set, tuple))
|
||||||
|
|
||||||
elif key in ['port', 'workers', 'json', 'objects', 'digests']:
|
elif key in ['port', 'workers', 'json', 'objects', 'digests']:
|
||||||
assert isinstance(value, (int))
|
if not isinstance(value, int):
|
||||||
|
value = int(value)
|
||||||
|
|
||||||
elif key == 'whitelist_enabled':
|
elif key == 'whitelist_enabled':
|
||||||
assert isinstance(value, bool)
|
if not isinstance(value, bool):
|
||||||
|
value = boolean(value)
|
||||||
|
|
||||||
super().__setitem__(key, value)
|
super().__setitem__(key, value)
|
||||||
|
|
||||||
|
@ -216,6 +218,8 @@ class RelayConfig(DotDict):
|
||||||
|
|
||||||
self[k] = v
|
self[k] = v
|
||||||
|
|
||||||
|
continue
|
||||||
|
|
||||||
elif key not in self:
|
elif key not in self:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ from .config import relay_software_names
|
||||||
|
|
||||||
|
|
||||||
app = None
|
app = None
|
||||||
|
CONFIG_IGNORE = {'blocked_software', 'blocked_instances', 'whitelist'}
|
||||||
|
|
||||||
|
|
||||||
@click.group('cli', context_settings={'show_default': True}, invoke_without_command=True)
|
@click.group('cli', context_settings={'show_default': True}, invoke_without_command=True)
|
||||||
|
@ -30,9 +31,37 @@ def cli(ctx, config):
|
||||||
relay_run.callback()
|
relay_run.callback()
|
||||||
|
|
||||||
|
|
||||||
@cli.group('inbox')
|
# todo: add config default command for resetting config key
|
||||||
|
@cli.group('config', invoke_without_command=True)
|
||||||
@click.pass_context
|
@click.pass_context
|
||||||
def cli_inbox(ctx):
|
def cli_config(ctx):
|
||||||
|
'List the current relay config'
|
||||||
|
|
||||||
|
if ctx.invoked_subcommand:
|
||||||
|
return
|
||||||
|
|
||||||
|
click.echo('Relay Config:')
|
||||||
|
|
||||||
|
for key, value in app.config.items():
|
||||||
|
if key not in CONFIG_IGNORE:
|
||||||
|
key = f'{key}:'.ljust(20)
|
||||||
|
click.echo(f'- {key} {value}')
|
||||||
|
|
||||||
|
|
||||||
|
@cli_config.command('set')
|
||||||
|
@click.argument('key')
|
||||||
|
@click.argument('value')
|
||||||
|
def cli_config_set(key, value):
|
||||||
|
'Set a config value'
|
||||||
|
|
||||||
|
app.config[key] = value
|
||||||
|
app.config.save()
|
||||||
|
|
||||||
|
print(f'{key}: {app.config[key]}')
|
||||||
|
|
||||||
|
|
||||||
|
@cli.group('inbox')
|
||||||
|
def cli_inbox():
|
||||||
'Manage the inboxes in the database'
|
'Manage the inboxes in the database'
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,37 @@ def build_signing_string(headers, used_headers):
|
||||||
return '\n'.join(map(lambda x: ': '.join([x.lower(), headers[x]]), used_headers))
|
return '\n'.join(map(lambda x: ': '.join([x.lower(), headers[x]]), used_headers))
|
||||||
|
|
||||||
|
|
||||||
|
def boolean(value):
|
||||||
|
if isinstance(value, str):
|
||||||
|
if value.lower() in ['on', 'y', 'yes', 'true', 'enable', 'enabled', '1']:
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif value.lower() in ['off', 'n', 'no', 'false', 'disable', 'disable', '0']:
|
||||||
|
return False
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise TypeError(f'Cannot parse string "{value}" as a boolean')
|
||||||
|
|
||||||
|
elif isinstance(value, int):
|
||||||
|
if value == 1:
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif value == 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError('Integer value must be 1 or 0')
|
||||||
|
|
||||||
|
elif value == None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
return value.__bool__()
|
||||||
|
|
||||||
|
except AttributeError:
|
||||||
|
raise TypeError(f'Cannot convert object of type "{clsname(value)}"')
|
||||||
|
|
||||||
|
|
||||||
def check_open_port(host, port):
|
def check_open_port(host, port):
|
||||||
if host == '0.0.0.0':
|
if host == '0.0.0.0':
|
||||||
host = '127.0.0.1'
|
host = '127.0.0.1'
|
||||||
|
|
Loading…
Reference in a new issue