Source code for message_ix_models.util.pooch

"""Utilities for using :doc:`Pooch <pooch:about>`."""
import logging
from pathlib import Path

import pooch

from .context import Context

log = logging.getLogger(__name__)


[docs]def fetch(args, **kwargs) -> Path: """Create a :class:`~pooch.Pooch` instance and fetch a single file. Files are stored under the directory identified by :meth:`.Context.get_cache_path`, unless `args` provides another location. Parameters ---------- args Passed to :func:`pooch.create`. kwargs Passed to :meth:`pooch.Pooch.fetch`. Returns ------- Path Path to the fetched file. See also -------- :func:`.snapshot.load` """ args.setdefault("path", Context.get_instance(-1).get_cache_path()) p = pooch.create(**args) if len(p.registry) > 1: # pragma: no cover raise NotImplementedError("fetch() with registries with >1 files") path = Path(p.fetch(next(iter(p.registry.keys())), **kwargs)) log.info(f"Fetched {path}") return path