async def download(
url: str,
_fpath: StrPath | None = None,
*,
redo: bool = False,
verbose: bool | None = True,
expires: str | int | datetime.datetime | datetime.timedelta | None = None,
) -> Path:
if _fpath is None:
_fpath = os.path.basename(url) # noqa: PTH119
fpath: Path = Path(_fpath)
fname: str = fpath.name
fpath.parent.mkdir(parents=True, exist_ok=True)
stamp = ub.CacheStamp(
fname + ".stamp",
dpath=fpath.parent,
product=fpath,
verbose=verbose,
expires=expires,
ext=".json",
)
if redo or stamp.expired():
await _download(url, fpath)
stamp.renew()
return fpath