Source code for figanos._testing
from collections.abc import Callable
from functools import wraps
from typing import IO
__all__ = ["pitou"]
[docs]
def pitou():
"""Return a Pooch instance for the figanos testing data."""
from figanos import __version__ as __figanos_version__
try:
import pooch
except ImportError as err:
raise ImportError(
"The 'pooch' package is required to fetch the figanos testing data. "
"You can install it using 'pip install pooch' or 'pip install \"figanos[docs]\"'."
) from err
_pitou = pooch.Pooch(
path=pooch.os_cache("figanos"),
base_url="https://raw.githubusercontent.com/Ouranosinc/figanos/main/src/figanos/data/test_data/",
registry={
"hatchmap-ens_stats.nc": "fc52d0551747fa0a7153f1ecfebf3e697993590c6c7c4c6a6f9f32700df9d32d",
"hatchmap-inf_5.nc": "8f22522dc153d8d347bdf97bf85e49d08a5ecbc61c64372e713a0d25638e48ac",
"hatchmap-sup_8.nc": "a409ebbd6ce3c0ca319f676cc21677ba500983b80ff65a64ef3d467008db824a",
},
)
# Add a custom fetch method to the Pooch instance
# Needed to address: https://github.com/readthedocs/readthedocs.org/issues/11763
_pitou.fetch_diversion = _pitou.fetch
# Overload the fetch method to add user-agent headers
@wraps(_pitou.fetch_diversion)
def _fetch(*args: str, **kwargs: bool | Callable) -> str:
def _downloader(
url: str,
output_file: str | IO,
poocher: pooch.Pooch,
check_only: bool | None = False,
) -> None:
"""Download the file from the URL and save it to the save_path."""
headers = {"User-Agent": f"figanos ({__figanos_version__})"}
downloader = pooch.HTTPDownloader(headers=headers)
return downloader(url, output_file, poocher, check_only=check_only)
# default to our http/s downloader with user-agent headers
kwargs.setdefault("downloader", _downloader)
return _pitou.fetch_diversion(*args, **kwargs)
# Replace the fetch method with the custom fetch method
_pitou.fetch = _fetch
return _pitou