modular-service-cli/modular_service_cli/group/modularservice.py (77 lines of code) (raw):

import click from modular_service_cli.group import ContextObj from modular_service_cli.group import cli_response, ViewCommand from modular_service_cli.group.application import application from modular_service_cli.group.customer import customer from modular_service_cli.group.policy import policy from modular_service_cli.group.region import region from modular_service_cli.group.role import role from modular_service_cli.group.tenant import tenant from modular_service_cli.group.users import users from modular_service_cli.service.api_client import ApiResponse from modular_service_cli.service.utils import validate_api_link from modular_service_cli.version import __version__ @click.group() @click.version_option(__version__) def modularservice(): """ Cli to manage modular entities """ @modularservice.command(cls=ViewCommand, name='configure') @click.option('--api_link', '-api', type=str, required=True, help='Link to the Modular API host.') @cli_response(check_access_token=False, check_api_link=False) def configure(ctx: ContextObj, api_link: str, **kwargs): """ Configures modularadmin tool to work with Modular API. """ if message := validate_api_link(api_link): return ApiResponse.build(message) ctx.config.api_link = api_link return ApiResponse.build('Api link was configured!') @modularservice.command(cls=ViewCommand, name='login') @click.option('--username', '-u', type=str, required=True, help='Modular user username.') @click.option('--password', '-p', type=str, required=True, hide_input=True, prompt=True, help='Modular user password.') @cli_response(check_access_token=False) def login(ctx: ContextObj, username: str, password: str, **kwargs): """ Authenticates user to work with Modular API. """ resp = ctx.api_client.login(username=username, password=password) if resp.exc or not resp.ok: return resp # check_version_compatibility(resp.api_version) ctx.config.access_token = resp.data['access_token'] if rt := resp.data.get('refresh_token'): ctx.config.refresh_token = rt resp.data = {'message': 'Logged in successfully'} # if rt := resp.data.get('refresh_token'): # ctx['config'].refresh_token = rt return resp @modularservice.command(cls=ViewCommand, name='signup') @click.option('--username', '-u', type=str, required=True, help='Modular user username.') @click.option('--password', '-p', type=str, required=True, hide_input=True, prompt=True, help='Modular user password.') @click.option('--customer_name', '-cn', type=str, required=True, help='Customer name to sign up this user for') @click.option('--customer_display_name', '-dn', type=str, required=True, help='Customer display name') @click.option('--customer_admin', '-ca', multiple=True, type=str, required=True, help='List of admin emails attached to customer.') @cli_response(check_access_token=False) def signup(ctx: ContextObj, username, password, customer_name, customer_display_name, customer_admin, customer_id): """ Signs up a new user """ return ctx.api_client.signup( username=username, password=password, customer_name=customer_name, customer_display_name=customer_display_name, customer_admins=customer_admin ) @modularservice.command(cls=ViewCommand, name='cleanup') @cli_response(check_access_token=False, check_api_link=False) def cleanup(ctx: ContextObj, **kwargs): """ Removes all the configuration data related to the tool. """ ctx.config.clear() return ApiResponse.build('Configuration was cleaned') modularservice.add_command(policy) modularservice.add_command(role) modularservice.add_command(customer) modularservice.add_command(application) modularservice.add_command(tenant) modularservice.add_command(region) modularservice.add_command(users)