|
from json.decoder import JSONDecodeError |
|
|
|
from .artifact import Artifact, UnitxtArtifactNotFoundError, fetch_artifact |
|
from .logging_utils import get_logger |
|
from .parsing_utils import parse_key_equals_value_string_to_dict |
|
from .register import _reset_env_local_catalogs, register_all_artifacts |
|
from .settings_utils import get_settings |
|
from .standard import BaseRecipe |
|
|
|
logger = get_logger() |
|
settings = get_settings() |
|
|
|
|
|
def fetch(artifact_name): |
|
try: |
|
artifact, _ = fetch_artifact(artifact_name) |
|
return artifact |
|
except (UnitxtArtifactNotFoundError, JSONDecodeError): |
|
return None |
|
|
|
|
|
def parse(query: str): |
|
return parse_key_equals_value_string_to_dict(query) |
|
|
|
|
|
def get_dataset_artifact(dataset): |
|
if isinstance(dataset, BaseRecipe): |
|
return dataset |
|
assert isinstance( |
|
dataset, str |
|
), "dataset should be string description of recipe, or recipe object." |
|
_reset_env_local_catalogs() |
|
register_all_artifacts() |
|
recipe = fetch(dataset) |
|
if recipe is None: |
|
args = parse(dataset) |
|
if "__type__" not in args: |
|
args["__type__"] = settings.default_recipe |
|
recipe = Artifact.from_dict(args) |
|
return recipe |
|
|