Source code for cached_path.schemes

from typing import Set, Type

from cached_path.schemes.gs import GsClient
from cached_path.schemes.hf import hf_get_from_cache
from cached_path.schemes.http import HttpClient
from cached_path.schemes.s3 import S3Client
from cached_path.schemes.scheme_client import SchemeClient

_SCHEME_TO_CLIENT = {}


[docs]def add_scheme_client(client: Type[SchemeClient]) -> None: """ Add a new :class:`SchemeClient`. This can be used to extend :func:`cached_path.cached_path()` to handle custom schemes, or handle existing schemes differently. """ global _SCHEME_TO_CLIENT if isinstance(client.scheme, tuple): for scheme in client.scheme: _SCHEME_TO_CLIENT[scheme] = client elif isinstance(client.scheme, str): _SCHEME_TO_CLIENT[client.scheme] = client else: raise ValueError(f"Unexpected type for {client} scheme: {client.scheme}")
for client in (HttpClient, S3Client, GsClient): add_scheme_client(client) # type: ignore def get_scheme_client(resource: str) -> SchemeClient: """ Get the right client for the given resource. """ maybe_scheme = resource.split("://")[0] return _SCHEME_TO_CLIENT.get(maybe_scheme, HttpClient)(resource) def get_supported_schemes() -> Set[str]: """ Return all supported URL schemes. """ return set(_SCHEME_TO_CLIENT.keys()) | {"hf"}