Source code for frame_cli.utils
"""Set of functions used in multiple other modules."""
from json import JSONDecodeError
from typing import Any
import requests
from .config import API_URL, REQUESTS_TIMEOUT
[docs]
def get_unit_id_and_version(name: str) -> tuple[str, str | None]:
"""Extract unit ID and version from a name."""
if ":" in name:
unit_id, version = name.split(":", 1)
else:
unit_id, version = name, None
return unit_id, version
[docs]
def retrieve_model_info(name: str) -> dict[str, Any] | None:
"""Retrieve online info of a hybrid model."""
id, version = get_unit_id_and_version(name)
url = f"{API_URL}/hybrid_models/{id}"
if version is not None:
url += f"?model_version={version}"
response = requests.get(url, timeout=REQUESTS_TIMEOUT)
if response.status_code == 404:
print(f'Remote hybrid model "{name}" not found.')
return None
if response.status_code != 200:
print(f"Error fetching remote hybrid model ({response.status_code}). Check the API URL.")
return None
try:
info = response.json()
except JSONDecodeError:
print("Error decoding JSON. Check the API URL.")
return None
return info
[docs]
def retrieve_component_info(name: str) -> tuple[dict[str, Any] | None, str | None]:
"""Retrieve online info of a component."""
id, version = get_unit_id_and_version(name)
url_physics_based = f"{API_URL}/components/physics_based/{id}"
url_machine_learning = f"{API_URL}/components/machine_learning/{id}"
if version is not None:
url_physics_based += f"?component_version={version}"
url_machine_learning += f"?component_version={version}"
response = requests.get(url_physics_based, timeout=REQUESTS_TIMEOUT)
component_type = "Physics-based"
if response.status_code == 404:
response = requests.get(url_machine_learning, timeout=REQUESTS_TIMEOUT)
component_type = "Machine learning"
if response.status_code == 404:
print(f'Remote component "{name}" not found.')
return None, None
if response.status_code != 200:
print(f"Error fetching remote component ({response.status_code}). Check the API URL.")
return None, None
try:
info = response.json()
except JSONDecodeError:
print("Error decoding JSON. Check the API URL.")
return None, None
return info, component_type