| 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 | |