generated from daniil-berg/boilerplate-py
47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
|
import sys
|
||
|
from argparse import ArgumentParser
|
||
|
from asyncio import run
|
||
|
from pathlib import Path
|
||
|
from typing import Dict, Any
|
||
|
|
||
|
from .client import ControlClient, UnixControlClient
|
||
|
from .constants import PACKAGE_NAME
|
||
|
from .pool import TaskPool
|
||
|
from .server import ControlServer
|
||
|
|
||
|
|
||
|
CONN_TYPE = 'conn_type'
|
||
|
UNIX, TCP = 'unix', 'tcp'
|
||
|
SOCKET_PATH = 'path'
|
||
|
|
||
|
|
||
|
def parse_cli() -> Dict[str, Any]:
|
||
|
parser = ArgumentParser(
|
||
|
prog=PACKAGE_NAME,
|
||
|
description=f"CLI based {ControlClient.__name__} for {PACKAGE_NAME}"
|
||
|
)
|
||
|
subparsers = parser.add_subparsers(title="Connection types", dest=CONN_TYPE)
|
||
|
unix_parser = subparsers.add_parser(UNIX, help="Connect via unix socket")
|
||
|
unix_parser.add_argument(
|
||
|
SOCKET_PATH,
|
||
|
type=Path,
|
||
|
help=f"Path to the unix socket on which the {ControlServer.__name__} for the {TaskPool.__name__} is listening."
|
||
|
)
|
||
|
return vars(parser.parse_args())
|
||
|
|
||
|
|
||
|
async def main():
|
||
|
kwargs = parse_cli()
|
||
|
if kwargs[CONN_TYPE] == UNIX:
|
||
|
client = UnixControlClient(path=kwargs[SOCKET_PATH])
|
||
|
elif kwargs[CONN_TYPE] == TCP:
|
||
|
# TODO: Implement the TCP client class
|
||
|
client = UnixControlClient(path=kwargs[SOCKET_PATH])
|
||
|
else:
|
||
|
print("Invalid connection type", file=sys.stderr)
|
||
|
sys.exit(2)
|
||
|
await client.start()
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
run(main())
|