Source code for caspia.node.cli.commands

import asyncio
import os
import sys

import aiocan.cli_utils
import click

import caspia.toolbox.cli
from caspia.node.cli import utils

cmd_folder = os.path.abspath(os.path.dirname(__file__))


[docs]class CaspiaNodeCLI(click.MultiCommand):
[docs] def list_commands(self, ctx): rv = [] for filename in os.listdir(cmd_folder): if filename.endswith('.py') and \ filename.startswith('cmd_'): name = filename[4:-3].replace('_', '-') rv.append(name) rv.sort() return rv
[docs] def get_command(self, ctx, cmd_name): try: if sys.version_info[0] == 2: cmd_name = cmd_name.encode('ascii', 'replace') cmd_name = cmd_name.replace('-', '_') mod = __import__('caspia.node.cli.commands.cmd_' + cmd_name, None, None, [cmd_name]) except ImportError: return None return getattr(mod, cmd_name)
@click.command(cls=CaspiaNodeCLI) @click.option('--local-can-id', type=utils.canid_input(), envvar='LOCAL_CAN_ID', required=True) @caspia.toolbox.cli.logging_options() @aiocan.cli_utils.acan_bus_option() @click.pass_context @utils.async_command async def main(context, bus_creator, local_can_id): context.obj = {} loop = asyncio.get_event_loop() bus = await bus_creator(loop) context.obj['bus'] = bus context.obj['local_can_id'] = local_can_id # pylint: disable=unused-variable @context.call_on_close def on_close(): loop.run_until_complete(bus.shutdown())