Simple user command may work now..

This commit is contained in:
Michael Woods
2025-02-18 22:22:55 -05:00
parent c210cd2594
commit e4d10bef0c
3 changed files with 36 additions and 16 deletions

View File

@@ -35,6 +35,9 @@ class Client:
def exit_gracefully(self, signum, frame):
self.stop()
def __del__(self):
self.stop()
@property
def connections(self) -> dict:
if not self.started:
@@ -82,6 +85,7 @@ class Client:
self.started = True
def clear_connections(self):
if self.app._engine is not None:
cm = self.app._engine._active_handler._handlers[1]._connection_map
for key in cm._connections.keys():
cm._connections[key].close()

View File

@@ -38,10 +38,12 @@ def cli(ctx, conf, server, agwpe, port, callsign):
if 'callsign' in cfg['cli']:
ctx.obj['callsign'] = cfg['cli']['callsign']
else:
raise ValueError("You must provide client station's callsign.")
click.echo("You must provide client station's callsign.", err=True)
sys.exit(1)
if not ax25.Address.valid_call(ctx.obj['callsign']):
raise ValueError(f"Provided client callsign '{ctx.obj['callsign']}' is invalid.")
click.echo(f"Provided client callsign '{ctx.obj['callsign']}' is invalid.", err=True)
sys.exit(1)
if server.strip() != '':
ctx.obj['server'] = server.strip().upper()
@@ -49,10 +51,12 @@ def cli(ctx, conf, server, agwpe, port, callsign):
if 'server' in cfg['cli']:
ctx.obj['server'] = cfg['cli']['server']
else:
raise ValueError("Remote BBS server callsign must be specified.")
click.echo("Remote BBS server callsign must be specified.", err=True)
sys.exit(1)
if not ax25.Address.valid_call(ctx.obj['server']):
raise ValueError(f"Provided remote server callsign '{ctx.obj['server']}' is invalid.")
click.echo(f"Provided remote server callsign '{ctx.obj['server']}' is invalid.", err=True)
sys.exit(1)
if agwpe.strip() != '':
ctx.obj['agwpe_server'] = agwpe.strip()
@@ -73,32 +77,44 @@ def cli(ctx, conf, server, agwpe, port, callsign):
storage = ZODB.FileStorage.FileStorage(os.path.join(cfg['cli']['directory'], DEFAULT_DB_FILE))
db = ZODB.DB(storage)
client = Client(ctx.obj['agwpe_server'], ctx.obj['port'], ctx.obj['callsign'], keep_log=True)
try:
client.start()
except Exception as e:
click.echo(f"Error connecting to TNC: {str(e)}", err=True)
sys.exit(1)
ctx.obj['client'] = client
ctx.obj['CONFIG'] = cfg
ctx.obj['bbs'] = server
ctx.obj['db'] = db
@click.command()
@click.argument('username', required=False, default='', help="the username (CALLSIGN) to lookup on the bbs")
@click.argument('username', required=False, default='')
@click.option('--list-users', '-l', is_flag=True, default=False, help="If set, downloads list of all users.")
@click.option("--output-format", "-f", default="table", help="Print data as table[default], list, or JSON",
type=click.Choice(['table', 'json', 'list'], case_sensitive=False))
@click.pass_context
def user(ctx, list_users, output_format, username):
"""Query users on the BBS."""
"""Query users on the BBS. Either listing multiple users or looking up information of USERNAME"""
client = ctx.obj['client']
# validate args
if list_users and (username.strip() != ""):
raise ValueError("Can't specify a username while listing all users.")
click.echo("Can't specify a username while listing all users.", err=True)
sys.exit(1)
if not list_users and (username.strip() == ""):
raise ValueError("Must provide either a username or --list-users flag.")
click.echo("Must provide either a username or --list-users flag.", err=True)
sys.exit(1)
output_objects = []
try:
if list_users:
output_objects = users.get_users(client, ctx.obj['bbs'])
else:
output_objects.append(users.get_user_by_username(client, ctx.obj['bbs'], username))
except Exception as e:
click.echo(str(e), err=True)
sys.exit(1)
click.echo(format_list_dicts([x.pretty_dict() for x in output_objects], output_format=output_format.lower()))

View File

@@ -34,7 +34,7 @@ class JobStatus(Enum):
FAILED = 7
TIMED_OUT = 8
def get_orchestrator_from_config(cfg: dict) -> Union[Orchestrator, PodmanOrchestrator]:
def get_orchestrator_from_config(cfg: dict) -> Orchestrator:
if 'runner' in cfg:
val = cfg['runner'].lower().strip()
if val == "podman":