Skip to content

Commit 8edfbc2

Browse files
authored
Bugfix resolving references to document fragments. (#74)
* Bugfix resolving references to document fragments.
1 parent a3ba891 commit 8edfbc2

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

schema_salad/ref_resolver.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,10 +380,12 @@ def resolve_ref(self,
380380
mixin = None # type: Dict[unicode, Any]
381381

382382
if not base_url:
383-
if isinstance(ref, unicode):
384-
ref = pathlib2.Path(os.path.join(os.getcwd(), ref)).as_uri()
385383
base_url = pathlib2.Path(os.getcwd()).as_uri() + '/'
386384

385+
if isinstance(ref, (str, unicode)) and os.sep == "\\":
386+
# Convert Windows paths
387+
ref = ref.replace("\\", "/")
388+
387389
sl = SourceLine(obj, None, ValueError)
388390
# If `ref` is a dict, look for special directives.
389391
if isinstance(ref, CommentedMap):

schema_salad/tests/frag.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- id: foo1
2+
bar: b1
3+
- id: foo2
4+
bar: b2

schema_salad/tests/test_examples.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def test_examples(self):
243243
self.assertEqual(proc, src)
244244

245245
def test_yaml_float_test(self):
246-
self.assertEqual(ruamel.yaml.load("float-test: 2e-10")["float-test"],
246+
self.assertEqual(ruamel.yaml.safe_load("float-test: 2e-10")["float-test"],
247247
2e-10)
248248

249249
def test_typedsl_ref(self):
@@ -341,13 +341,13 @@ def test_scoped_id(self):
341341
print(g.serialize(format="n3"))
342342

343343
def test_mixin(self):
344+
base_url = "file://" + os.getcwd() + "/tests/"
344345
ldr = schema_salad.ref_resolver.Loader({})
345346
ra = ldr.resolve_ref(cmap({"$mixin": get_data("tests/mixin.yml"), "one": "five"}),
346-
base_url="file://" + os.getcwd() + "/tests/")
347+
base_url=base_url)
347348
self.assertEqual({'id': 'four', 'one': 'five'}, ra[0])
348-
349349
ldr = schema_salad.ref_resolver.Loader({"id": "@id"})
350-
base_url = "file://" + os.getcwd() + "/tests/"
350+
351351
ra = ldr.resolve_all(cmap([{
352352
"id": "a",
353353
"m": {"$mixin": get_data("tests/mixin.yml")}
@@ -368,6 +368,11 @@ def test_mixin(self):
368368
'one': 'two'}
369369
}], ra[0])
370370

371+
def test_fragment(self):
372+
ldr = schema_salad.ref_resolver.Loader({"id": "@id"})
373+
b, _ = ldr.resolve_ref("schema_salad/tests/frag.yml#foo2")
374+
self.assertEquals({"id": b["id"], "bar":"b2"}, b)
375+
371376

372377
if __name__ == '__main__':
373378
unittest.main()

0 commit comments

Comments
 (0)