Source code for idmtools_platform_local.cli.simulation

"""idmtools local platform simulation cli commands.

Copyright 2021, Bill & Melinda Gates Foundation. All rights reserved.
"""
from typing import Optional, Tuple, List, Dict, Any

import requests
from tabulate import tabulate


from idmtools_platform_local.cli.utils import colorize_status, urlize_data_path
from idmtools_platform_local.client.simulations_client import SimulationsClient
from idmtools_platform_local.config import API_PATH

SIMULATIONS_URL = f'{API_PATH}/simulations'


[docs]def prettify_simulation(simulation: Dict[str, Any]): """ Prettifies a JSON Simulation object for printing on a console. This includes - Making a pretty progress bar - URL-ifying the data paths Args: simulation: JSON representation of the Experiment(from API) Returns: Prettified simulation """ simulation['status'] = colorize_status(simulation['status']) simulation['data_path'] = urlize_data_path(simulation['data_path']) column_order = ("simulation_uid", "experiment_id", "status", "created", "tags", "extra_details", "updated", "data_path") return {co: simulation[co] for co in column_order}
[docs]def status(id: Optional[str], experiment_id: Optional[str], status: Optional[str], tags: Optional[List[Tuple[str, str]]]): """ List of statuses for simulation(s) with the ability to filter by id, experiment_id, status, and tags. Args: id (Optional[str]): Optional Id of simulation experiment_id (Optional[str]): Optional experiment id status (Optional[str]): Optional status string to filter by tag (Optional[List[Tuple[str, str]]]): Optional list of tuples in form of tag_name tag_value to user to filter experiments with Returns: None """ from idmtools_cli.cli.utils import show_error try: if id is None: simulations = SimulationsClient.get_all(status=status, tags=tags, per_page=100) else: simulations = [SimulationsClient.get_one(id, status=status, tags=tags)] simulations = list(map(lambda x: prettify_simulation(x), simulations)) print(tabulate(simulations, headers='keys', tablefmt='psql', showindex=False)) except RuntimeError as e: show_error(e.args[0]) except requests.exceptions.ConnectionError as e: show_error(f"Could not connect to the local platform: {e.request.url}. Is the local platform running?")