"""Somewhat useful 'python -m gd' implementation""" import platform import sys from typing import Any, Generator import aiohttp import click import gd @click.option("--version", "-v", is_flag=True, help="Show different versions of software.") @click.group(invoke_without_command=True, no_args_is_help=True) def gd_group(version: bool) -> None: if version: click.echo("\n".join(collect_versions())) @gd_group.command(short_help="Run gd.server web application.") def server() -> None: gd.server.start() @gd_group.command(short_help="Run IPython console, with aiohttp and gd added to namespace.") def console() -> None: from IPython import start_ipython start_ipython(argv=[], user_ns={"aiohttp": aiohttp, "gd": gd}) def version_from_info(version_info: Any) -> str: return "v{0.major}.{0.minor}.{0.micro}-{0.releaselevel}".format(version_info) def collect_versions() -> Generator[str, None, None]: yield f"- python {version_from_info(sys.version_info)}" yield f"- gd.py {version_from_info(gd.version_info)}" yield f"- aiohttp v{aiohttp.__version__}" yield f"- click v{click.__version__}" yield "- system {0.system} {0.release} {0.version}".format(platform.uname()) # run main if __name__ == "__main__": gd_group()