uncloud-cli/uncloud_cli/commands/helper.py

72 lines
1.9 KiB
Python
Raw Normal View History

import json
2019-12-31 14:54:08 +00:00
import binascii
import click
import requests
2019-07-17 14:58:39 +00:00
2019-12-31 14:54:08 +00:00
from os.path import join as join_path
2019-07-17 14:58:39 +00:00
2019-12-31 14:54:08 +00:00
from pyotp import TOTP
from uncloud_cli.config import config, config_file
def load_dump_pretty(content):
if isinstance(content, bytes):
2019-12-31 15:18:14 +00:00
content = content.decode('utf-8')
parsed = json.loads(content)
return json.dumps(parsed, indent=4, sort_keys=True)
2019-12-31 14:54:08 +00:00
def make_request(*args, data=None, request_method=requests.post):
r = request_method(
2019-12-31 15:18:14 +00:00
join_path(config.get('client', 'api_server'), *args), json=data
2019-12-31 14:54:08 +00:00
)
2019-12-31 15:18:14 +00:00
try:
print(load_dump_pretty(r.content))
except Exception:
print('Error occurred while getting output from api server.')
2019-12-31 14:54:08 +00:00
def get_token(ctx, param, value):
if value is not None:
try:
token = TOTP(value).now()
except binascii.Error:
2019-12-31 15:18:14 +00:00
raise click.BadParameter('')
2019-12-31 14:54:08 +00:00
else:
param.name = 'token'
return token
def add_otp_options(f):
options = [
click.option(
2019-12-31 15:18:14 +00:00
'--name', required=True, default=config.get('client', 'name', fallback=''),
show_default='name mentioned in {}'.format(config_file), prompt=True
2019-12-31 14:54:08 +00:00
),
click.option(
2019-12-31 15:18:14 +00:00
'--realm', required=True, default=config.get('client', 'realm', fallback=''),
show_default='realm mentioned in {}'.format(config_file), prompt=True
2019-12-31 14:54:08 +00:00
),
click.option(
2019-12-31 15:18:14 +00:00
'--seed', required=True, default=config.get('client', 'seed', fallback=''),
callback=get_token, prompt=True,
show_default='seed mentioned in {}'.format(config_file)
2019-12-31 14:54:08 +00:00
)
]
for opt in reversed(options):
f = opt(f)
return f
def add_vm_options(f):
options = [
click.option('--vm-name', required=True),
click.option('--action', required=True, default=f.__name__)
]
for opt in reversed(options):
f = opt(f)
return f