Spaces:
Runtime error
Runtime error
import os | |
from warnings import catch_warnings | |
import pytest | |
import fsspec | |
from fsspec.config import conf, set_conf_env, set_conf_files | |
def clean_conf(): | |
"""Tests should start and end with clean config dict""" | |
conf.clear() | |
yield | |
conf.clear() | |
def test_from_env_ignored(clean_conf): | |
env = { | |
"FSSPEC": "missing_protocol", | |
"FSSPEC_": "missing_protocol", | |
"FSSPEC__INVALID_KEY": "invalid_protocol", | |
"FSSPEC_INVALID1": "not_json_dict", | |
"FSSPEC_INVALID2": '["not_json_dict"]', | |
} | |
cd = {} | |
with catch_warnings(record=True) as w: | |
set_conf_env(conf_dict=cd, envdict=env) | |
assert len(w) == 5 | |
assert "unexpected name" in str(w[0].message) | |
assert "unexpected name" in str(w[1].message) | |
assert "unexpected name" in str(w[2].message) | |
assert "parse failure" in str(w[3].message) | |
assert "not being a dict" in str(w[4].message) | |
assert cd == {} | |
def test_from_env_kwargs(clean_conf): | |
env = { | |
"FSSPEC_PROTO_KEY": "value", | |
"FSSPEC_PROTO_LONG_KEY": "othervalue", | |
"FSSPEC_MALFORMED": "novalue", | |
} | |
cd = {} | |
with catch_warnings(record=True) as w: | |
set_conf_env(conf_dict=cd, envdict=env) | |
assert len(w) == 1 | |
assert "parse failure" in str(w[0].message) | |
assert cd == {"proto": {"key": "value", "long_key": "othervalue"}} | |
def test_from_env_protocol_dict(clean_conf): | |
env = { | |
"FSSPEC_PROTO": '{"int": 1, "float": 2.3, "bool": true, "dict": {"key": "val"}}' | |
} | |
cd = {} | |
set_conf_env(conf_dict=cd, envdict=env) | |
assert cd == { | |
"proto": {"int": 1, "float": 2.3, "bool": True, "dict": {"key": "val"}} | |
} | |
def test_from_env_kwargs_override_protocol_dict(clean_conf): | |
env = { | |
"FSSPEC_PROTO_LONG_KEY": "override1", | |
"FSSPEC_PROTO": '{"key": "value1", "long_key": "value2", "otherkey": "value3"}', | |
"FSSPEC_PROTO_KEY": "override2", | |
} | |
cd = {} | |
set_conf_env(conf_dict=cd, envdict=env) | |
assert cd == { | |
"proto": {"key": "override2", "long_key": "override1", "otherkey": "value3"} | |
} | |
def test_from_file_ini(clean_conf, tmpdir): | |
file1 = os.path.join(tmpdir, "1.ini") | |
file2 = os.path.join(tmpdir, "2.ini") | |
with open(file1, "w") as f: | |
f.write( | |
"""[proto] | |
key=value | |
other_key:othervalue | |
overwritten=dont_see | |
""" | |
) | |
with open(file2, "w") as f: | |
f.write( | |
"""[proto] | |
overwritten=see | |
""" | |
) | |
cd = {} | |
set_conf_files(tmpdir, cd) | |
assert cd == { | |
"proto": {"key": "value", "other_key": "othervalue", "overwritten": "see"} | |
} | |
def test_from_file_json(clean_conf, tmpdir): | |
file1 = os.path.join(tmpdir, "1.json") | |
file2 = os.path.join(tmpdir, "2.json") | |
with open(file1, "w") as f: | |
f.write( | |
"""{"proto": | |
{"key": "value", | |
"other_key": "othervalue", | |
"overwritten": false}} | |
""" | |
) | |
with open(file2, "w") as f: | |
f.write( | |
"""{"proto": | |
{"overwritten": true}} | |
""" | |
) | |
cd = {} | |
set_conf_files(tmpdir, cd) | |
assert cd == { | |
"proto": {"key": "value", "other_key": "othervalue", "overwritten": True} | |
} | |
def test_apply(clean_conf): | |
conf["file"] = {"auto_mkdir": "test"} | |
fs = fsspec.filesystem("file") | |
assert fs.auto_mkdir == "test" | |
fs = fsspec.filesystem("file", auto_mkdir=True) | |
assert fs.auto_mkdir is True | |