123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- from importlib.metadata import entry_points
- from . import caching
- from ._version import __version__ # noqa: F401
- from .callbacks import Callback
- from .compression import available_compressions
- from .core import get_fs_token_paths, open, open_files, open_local, url_to_fs
- from .exceptions import FSTimeoutError
- from .mapping import FSMap, get_mapper
- from .registry import (
- available_protocols,
- filesystem,
- get_filesystem_class,
- register_implementation,
- registry,
- )
- from .spec import AbstractFileSystem
- __all__ = [
- "AbstractFileSystem",
- "FSTimeoutError",
- "FSMap",
- "filesystem",
- "register_implementation",
- "get_filesystem_class",
- "get_fs_token_paths",
- "get_mapper",
- "open",
- "open_files",
- "open_local",
- "registry",
- "caching",
- "Callback",
- "available_protocols",
- "available_compressions",
- "url_to_fs",
- ]
- def process_entries():
- if entry_points is not None:
- try:
- eps = entry_points()
- except TypeError:
- pass # importlib-metadata < 0.8
- else:
- if hasattr(eps, "select"): # Python 3.10+ / importlib_metadata >= 3.9.0
- specs = eps.select(group="fsspec.specs")
- else:
- specs = eps.get("fsspec.specs", [])
- registered_names = {}
- for spec in specs:
- err_msg = f"Unable to load filesystem from {spec}"
- name = spec.name
- if name in registered_names:
- continue
- registered_names[name] = True
- register_implementation(
- name,
- spec.value.replace(":", "."),
- errtxt=err_msg,
- # We take our implementations as the ones to overload with if
- # for some reason we encounter some, may be the same, already
- # registered
- clobber=True,
- )
- process_entries()
|