Source code for yawning_titan.main

"""Provides a CLI using Typer as an entry point."""
import os
import sys

import typer

app = typer.Typer()


[docs]@app.command() def gui(): """Start the Yawning-Titan GUI.""" os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yawning_titan_server.settings.dev") """Method that is fired on execution of the command in the terminal.""" from yawning_titan_gui.management.commands.run_gui import Command command = Command() command.run()
[docs]@app.command() def build_dirs(): """Build the Yawning-Titan app directories.""" from yawning_titan.utils import setup_app_dirs setup_app_dirs.run()
[docs]@app.command() def reset_db(rebuild: bool = False): """ Force a reset of the default entries in the NetworkDB and GameModeDB. :param rebuild: If True, completely rebuild the DB, removing all custom Networks and GameModes. Default value is False. """ from yawning_titan.utils import reset_network_and_game_mode_db_defaults reset_network_and_game_mode_db_defaults.run(rebuild)
[docs]@app.command() def reset_notebooks(overwrite: bool = True): """ Force a reset of the default notebooks in the users notebooks directory. :param overwrite: If True, will overwrite existing default notebooks. """ from yawning_titan.utils import reset_default_notebooks reset_default_notebooks.run(overwrite)
[docs]@app.command() def logs(last_n: int = 10): """ Print the Yawning-Titan log file. :param last_n: The number of lines to print. Default value is 10. """ import re from platformdirs import PlatformDirs yt_platform_dirs = PlatformDirs(appname="yawning_titan") if sys.platform == "win32": log_dir = yt_platform_dirs.user_data_path / "logs" else: log_dir = yt_platform_dirs.user_log_path log_path = os.path.join(log_dir, "yawning_titan.log") if os.path.isfile(log_path): with open(log_path) as file: lines = file.readlines() for line in lines[-last_n:]: print(re.sub(r"\n*", "", line))
[docs]@app.command() def notebooks(): """Start Jupyter Lab in the users Yawning-Titan notebooks directory.""" from yawning_titan.notebooks.jupyter import start_jupyter_session start_jupyter_session()
[docs]@app.command() def docs(): """View the Yawning-Titan docs.""" import webbrowser webbrowser.open("https://dstl.github.io/YAWNING-TITAN/", new=2)
[docs]@app.command() def version(): """Get the installed Yawning-Titan version number.""" import yawning_titan print(yawning_titan.__version__)
[docs]@app.command() def release_notes(): """View the GitHub release notes of the installed Yawning-Titan version.""" import webbrowser import yawning_titan v = yawning_titan.__version__ url = f"https://github.com/dstl/YAWNING-TITAN/releases/tag/v{v}" webbrowser.open(url, new=2)
[docs]@app.command() def clean_up(): """Cleans up left over files from previous version installations.""" from yawning_titan.utils import old_installation_clean_up old_installation_clean_up.run()
[docs]@app.command() def setup(): """ Perform the Yawning-Titan first-time setup. WARNING: All user-data will be lost. """ from logging import getLogger import yawning_titan # noqa - Gets the Yawning-Titan logger config from yawning_titan.utils import ( old_installation_clean_up, reset_default_notebooks, reset_network_and_game_mode_db_defaults, setup_app_dirs, ) _LOGGER = getLogger(__name__) _LOGGER.info("Performing the Yawning-Titan first-time setup...") _LOGGER.info("Building the Yawning-Titan app directories...") setup_app_dirs.run() _LOGGER.info("Rebuilding the NetworkDB and GameModeDB...") reset_network_and_game_mode_db_defaults.run(rebuild=True) _LOGGER.info("Rebuilding the default notebooks...") reset_default_notebooks.run(overwrite_existing=True) _LOGGER.info("Performing a clean-up of previous Yawning-Titan installations...") old_installation_clean_up.run() _LOGGER.info("Yawning-Titan setup complete!")
[docs]@app.command() def keyboard_agent(): """Play Yawning-Titan using the Keyboard Agent.""" from stable_baselines3.common.env_checker import check_env from yawning_titan.agents.keyboard import KeyboardAgent from yawning_titan.envs.generic.core.blue_interface import BlueInterface from yawning_titan.envs.generic.core.network_interface import NetworkInterface from yawning_titan.envs.generic.core.red_interface import RedInterface from yawning_titan.envs.generic.generic_env import GenericNetworkEnv from yawning_titan.game_modes.game_mode_db import default_game_mode from yawning_titan.networks.network_db import default_18_node_network network = default_18_node_network() game_mode = default_game_mode() network_interface = NetworkInterface(game_mode=game_mode, network=network) red = RedInterface(network_interface) blue = BlueInterface(network_interface) env = GenericNetworkEnv(red, blue, network_interface) check_env(env, warn=True) _ = env.reset() kb = KeyboardAgent(env) kb.play(render_graphically=False)
if __name__ == "__main__": app()