Source code for satellighte.api
import errno
import os
import sys
from typing import List
from ..core import (
_download_file_from_url,
_get_arch_cls,
_get_arch_dir,
_get_from_config_file,
_get_list_of_dirs,
_get_model_dir,
_get_model_info,
)
# APIs for Model
[docs]def available_models() -> list:
"""
List of available models.
Returns:
list: List of available models.
"""
# pylint: disable=E1136
model_list = []
model_config = _get_from_config_file("MODEL")
for arch in model_config.keys():
for config in model_config[arch].keys():
for dataset in model_config[arch][config].keys():
model_list.append(f"{arch}_{config}_{dataset}")
return sorted(model_list)
[docs]def get_model_versions(model: str) -> list:
"""
Get list of available versions for the given model.
Args:
model (str): Model name.
Returns:
list: List of available versions.
"""
model_dir = _get_model_dir()
assert model in available_models(), f"given model: {model} not in the registry"
model_path = os.path.join(model_dir, model)
versions = []
for version in _get_list_of_dirs(model_path):
versions.append(version[1:])
return sorted(versions)
[docs]def get_model_latest_version(model: str) -> int:
"""
Get latest version of the given model.
Args:
model (str): Model name.
Returns:
int: Latest version.
"""
return max(get_model_versions(model))
[docs]def get_saved_model(model: str, version: str):
"""
Get saved model.
Args:
model (str): Model name.
version (str): Model version.
"""
model_dir = os.path.join(_get_model_dir(), model, f"v{version}")
info_dict = _get_model_info(model, f"v{version}")
url = info_dict.get("url")
try:
os.makedirs(model_dir)
except OSError as os_error:
if os_error.errno != errno.EEXIST:
raise
# time.sleep might help here
cached_file = os.path.join(model_dir, model + ".pth")
if not os.path.exists(cached_file):
sys.stderr.write(f'Downloading: "{url}" to {cached_file}\n')
_download_file_from_url(url, cached_file, progress=True)
# ToDo: Make it for zip file
# APIs for Architecture
[docs]def available_archs() -> List[str]:
"""
List of available architectures.
Returns:
List[str]: List of available architectures.
"""
archs_dir = _get_arch_dir()
dirs = _get_list_of_dirs(archs_dir)
return sorted(dirs)
[docs]def get_arch_configs(arch: str) -> List[str]:
"""
List of available configurations for the given architecture.
Args:
arch (str): Architecture name.
Returns:
List[str]: List of available configurations.
"""
cls = _get_arch_cls(arch)
configs = getattr(cls, "__CONFIGS__", {})
return sorted(list(configs.keys()))