__init__.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. from importlib.metadata import entry_points
  2. from . import caching
  3. from ._version import __version__ # noqa: F401
  4. from .callbacks import Callback
  5. from .compression import available_compressions
  6. from .core import get_fs_token_paths, open, open_files, open_local, url_to_fs
  7. from .exceptions import FSTimeoutError
  8. from .mapping import FSMap, get_mapper
  9. from .registry import (
  10. available_protocols,
  11. filesystem,
  12. get_filesystem_class,
  13. register_implementation,
  14. registry,
  15. )
  16. from .spec import AbstractFileSystem
  17. __all__ = [
  18. "AbstractFileSystem",
  19. "FSTimeoutError",
  20. "FSMap",
  21. "filesystem",
  22. "register_implementation",
  23. "get_filesystem_class",
  24. "get_fs_token_paths",
  25. "get_mapper",
  26. "open",
  27. "open_files",
  28. "open_local",
  29. "registry",
  30. "caching",
  31. "Callback",
  32. "available_protocols",
  33. "available_compressions",
  34. "url_to_fs",
  35. ]
  36. def process_entries():
  37. if entry_points is not None:
  38. try:
  39. eps = entry_points()
  40. except TypeError:
  41. pass # importlib-metadata < 0.8
  42. else:
  43. if hasattr(eps, "select"): # Python 3.10+ / importlib_metadata >= 3.9.0
  44. specs = eps.select(group="fsspec.specs")
  45. else:
  46. specs = eps.get("fsspec.specs", [])
  47. registered_names = {}
  48. for spec in specs:
  49. err_msg = f"Unable to load filesystem from {spec}"
  50. name = spec.name
  51. if name in registered_names:
  52. continue
  53. registered_names[name] = True
  54. register_implementation(
  55. name,
  56. spec.value.replace(":", "."),
  57. errtxt=err_msg,
  58. # We take our implementations as the ones to overload with if
  59. # for some reason we encounter some, may be the same, already
  60. # registered
  61. clobber=True,
  62. )
  63. process_entries()