__init__.py 2.0 KB

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