Spaces:
Sleeping
Sleeping
import sys | |
from importlib.metadata import EntryPoint | |
from unittest.mock import create_autospec, patch | |
import pytest | |
import fsspec | |
from fsspec.implementations.zip import ZipFileSystem | |
from fsspec.registry import ( | |
_registry, | |
filesystem, | |
get_filesystem_class, | |
known_implementations, | |
register_implementation, | |
registry, | |
) | |
from fsspec.spec import AbstractFileSystem | |
def clear_registry(): | |
try: | |
yield | |
finally: | |
_registry.clear() | |
known_implementations.pop("test", None) | |
def clean_imports(): | |
try: | |
real_module = sys.modules["fsspec"] | |
del sys.modules["fsspec"] | |
yield | |
finally: | |
sys.modules["fsspec"] = real_module | |
def test_registry_readonly(): | |
get_filesystem_class("file") | |
assert "file" in registry | |
assert "file" in list(registry) | |
with pytest.raises(TypeError): | |
del registry["file"] | |
with pytest.raises(TypeError): | |
registry["file"] = None | |
with pytest.raises(AttributeError): | |
registry.clear() | |
def test_register_cls(clear_registry): | |
with pytest.raises(ValueError): | |
get_filesystem_class("test") | |
register_implementation("test", AbstractFileSystem) | |
cls = get_filesystem_class("test") | |
assert cls is AbstractFileSystem | |
def test_register_str(clear_registry): | |
with pytest.raises(ValueError): | |
get_filesystem_class("test") | |
register_implementation("test", "fsspec.AbstractFileSystem") | |
assert "test" not in registry | |
cls = get_filesystem_class("test") | |
assert cls is AbstractFileSystem | |
assert "test" in registry | |
def test_register_fail(clear_registry): | |
register_implementation("test", "doesntexist.AbstractFileSystem") | |
with pytest.raises(ImportError): | |
get_filesystem_class("test") | |
# NOOP | |
register_implementation("test", "doesntexist.AbstractFileSystem", clobber=False) | |
with pytest.raises(ValueError): | |
register_implementation( | |
"test", "doesntexist.AbstractFileSystemm", clobber=False | |
) | |
# by default we do not allow clobbering | |
with pytest.raises(ValueError): | |
register_implementation("test", "doesntexist.AbstractFileSystemm") | |
register_implementation( | |
"test", "doesntexist.AbstractFileSystem", errtxt="hiho", clobber=True | |
) | |
with pytest.raises(ImportError) as e: | |
get_filesystem_class("test") | |
assert "hiho" in str(e.value) | |
register_implementation("test", AbstractFileSystem) | |
# NOOP | |
register_implementation("test", AbstractFileSystem) | |
with pytest.raises(ValueError): | |
register_implementation("test", ZipFileSystem) | |
register_implementation("test", AbstractFileSystem, clobber=True) | |
assert isinstance(fsspec.filesystem("test"), AbstractFileSystem) | |
def test_entry_points_registered_on_import(clear_registry, clean_imports): | |
mock_ep = create_autospec(EntryPoint, module="fsspec.spec.AbstractFileSystem") | |
mock_ep.name = "test" # this can't be set in the constructor... | |
mock_ep.value = "fsspec.spec.AbstractFileSystem" | |
import_location = "importlib.metadata.entry_points" | |
with patch(import_location, return_value={"fsspec.specs": [mock_ep]}): | |
assert "test" not in registry | |
import fsspec # noqa | |
get_filesystem_class("test") | |
assert "test" in registry | |
def test_filesystem_warning_arrow_hdfs_deprecated(clear_registry, clean_imports): | |
mock_ep = create_autospec(EntryPoint, module="fsspec.spec.AbstractFileSystem") | |
mock_ep.name = "arrow_hdfs" # this can't be set in the constructor... | |
mock_ep.value = "fsspec.spec.AbstractFileSystem" | |
import_location = "importlib.metadata.entry_points" | |
with patch(import_location, return_value={"fsspec.specs": [mock_ep]}): | |
import fsspec # noqa | |
with pytest.warns(DeprecationWarning): | |
filesystem("arrow_hdfs") | |
def test_old_s3(monkeypatch): | |
from fsspec.registry import _import_class | |
s3fs = pytest.importorskip("s3fs") | |
monkeypatch.setattr(s3fs, "__version__", "0.4.2") | |
with pytest.warns(): | |
_import_class("s3fs:S3FileSystem") | |
with pytest.warns(): | |
_import_class("s3fs.S3FileSystem") | |