Skip to content

Commit e032e89

Browse files
authored
Fix handling of dict values and templates in ReferenceFileSystem (#1616)
1 parent 3675a7c commit e032e89

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

fsspec/implementations/reference.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,8 @@ def _render_jinja(u):
956956
if v.startswith("base64:"):
957957
self.references[k] = base64.b64decode(v[7:])
958958
self.references[k] = v
959+
elif isinstance(v, dict):
960+
self.references[k] = json.dumps(v)
959961
elif self.templates:
960962
u = v[0]
961963
if "{{" in u:
@@ -968,8 +970,6 @@ def _render_jinja(u):
968970
else:
969971
u = _render_jinja(u)
970972
self.references[k] = [u] if len(v) == 1 else [u, v[1], v[2]]
971-
elif isinstance(v, dict):
972-
self.references[k] = json.dumps(v)
973973
else:
974974
self.references[k] = v
975975
self.references.update(self._process_gen(references.get("gen", [])))

fsspec/implementations/tests/test_reference.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,8 @@ def test_defaults(server): # noqa: F811
229229

230230
def test_spec1_expand():
231231
pytest.importorskip("jinja2")
232+
from fsspec.implementations.reference import json as json_impl
233+
232234
in_data = {
233235
"version": 1,
234236
"templates": {"u": "server.domain/path", "f": "{{c}}"},
@@ -252,6 +254,7 @@ def test_spec1_expand():
252254
"key2": ["http://{{u}}", 10000, 100],
253255
"key3": ["http://{{f(c='text')}}", 10000, 100],
254256
"key4": ["http://target_url"],
257+
"key5": {"key": "value"},
255258
},
256259
}
257260
fs = fsspec.filesystem(
@@ -263,6 +266,7 @@ def test_spec1_expand():
263266
"key2": ["http://server.domain/path", 10000, 100],
264267
"key3": ["http://text", 10000, 100],
265268
"key4": ["http://target_url"],
269+
"key5": json_impl.dumps(in_data["refs"]["key5"]),
266270
"gen_key0": ["http://server.domain/path_0", 1000, 1000],
267271
"gen_key1": ["http://server.domain/path_1", 2000, 1000],
268272
"gen_key2": ["http://server.domain/path_2", 3000, 1000],
@@ -275,13 +279,16 @@ def test_spec1_expand():
275279

276280
def test_spec1_expand_simple():
277281
pytest.importorskip("jinja2")
282+
from fsspec.implementations.reference import json as json_impl
283+
278284
in_data = {
279285
"version": 1,
280286
"templates": {"u": "server.domain/path"},
281287
"refs": {
282288
"key0": "base64:ZGF0YQ==",
283289
"key2": ["http://{{u}}", 10000, 100],
284290
"key4": ["http://target_url"],
291+
"key5": {"key": "value"},
285292
},
286293
}
287294
fs = fsspec.filesystem("reference", fo=in_data, target_protocol="http")
@@ -294,6 +301,7 @@ def test_spec1_expand_simple():
294301
)
295302
assert fs.references["key2"] == ["http://not.org/p", 10000, 100]
296303
assert fs.cat("key0") == b"data"
304+
assert fs.cat("key5") == json_impl.dumps(in_data["refs"]["key5"]).encode("utf-8")
297305

298306

299307
def test_spec1_gen_variants():

0 commit comments

Comments
 (0)