1
- import os
2
- from typing import Union
1
+ from pathlib import Path
3
2
4
3
import pytest
5
4
from hbreader import FileInfo
8
7
import tests .environment as test_base
9
8
from linkml_runtime .dumpers import yaml_dumper
10
9
from linkml_runtime .loaders import json_loader , yaml_loader
11
- from linkml_runtime .loaders .loader_root import Loader
12
- from linkml_runtime .utils .yamlutils import YAMLRoot
13
10
from tests .test_loaders_dumpers .environment import env
14
11
from tests .test_loaders_dumpers .models .books_normalized_pydantic import BookSeries
15
12
from tests .test_loaders_dumpers .models .kitchen_sink_pydantic import Dataset
16
13
17
14
18
- def loader_test (filename : str , model : Union [type [YAMLRoot ], type [BaseModel ]], loader : Loader ) -> None :
19
- """
20
- Test the various permutations of the supplied loader using the input file 'filename' -- both load and loads
21
-
22
- :param filename: un-pathed file name to load
23
- :param model: model to load the file name into
24
- :param loader: package that contains 'load' and 'loads' operations
25
- """
26
- metadata = FileInfo ()
27
- name , typ = filename .rsplit ("." , 1 )
28
- expected_yaml = env .expected_path ("load" , name + "_" + typ + ".yaml" )
29
- if issubclass (model , YAMLRoot ):
30
- python_obj : YAMLRoot = loader .load (filename , model , metadata = metadata , base_dir = env .indir )
31
- elif issubclass (model , BaseModel ):
32
- python_obj : BaseModel = loader .load (filename , model , metadata = metadata , base_dir = env .indir )
33
- else :
34
- raise TypeError (f"Unknown target class: { model } " )
35
- env .eval_single_file (expected_yaml , yaml_dumper .dumps (python_obj ))
36
-
37
- # Make sure metadata gets filled out properly
38
- rel_path = os .path .abspath (os .path .join (test_base .env .cwd , ".." ))
39
- assert os .path .normpath ("tests/test_loaders_dumpers/input" ) == os .path .normpath (
40
- os .path .relpath (metadata .base_path , rel_path )
41
- )
42
- assert os .path .normpath (f"tests/test_loaders_dumpers/input/{ filename } " ) == os .path .normpath (
43
- os .path .relpath (metadata .source_file , rel_path )
44
- )
45
-
46
-
47
15
@pytest .mark .parametrize (
48
16
"filename,model,loader" ,
49
17
[
@@ -53,5 +21,20 @@ def loader_test(filename: str, model: Union[type[YAMLRoot], type[BaseModel]], lo
53
21
("kitchen_sink_normalized_inst_01.json" , Dataset , json_loader ),
54
22
],
55
23
)
56
- def test_loader (filename , model , loader ):
57
- loader_test (filename , model , loader )
24
+ def test_loader_basemodel (filename , model , loader ):
25
+ name = Path (filename ).stem
26
+ type = Path (filename ).suffix .lstrip ("." )
27
+ expected_yaml = env .expected_path ("load" , f"{ name } _{ type } .yaml" )
28
+
29
+ metadata = FileInfo ()
30
+
31
+ python_obj : BaseModel = loader .load (filename , model , metadata = metadata , base_dir = env .indir )
32
+ assert env .eval_single_file (expected_yaml , yaml_dumper .dumps (python_obj ))
33
+
34
+ # Make sure metadata gets filled out properly using pathlib
35
+ rel_path = Path (test_base .env .cwd ).resolve ().parent
36
+ base_path = Path (metadata .base_path ).resolve ()
37
+ source_file = Path (metadata .source_file ).resolve ()
38
+
39
+ assert Path ("tests/test_loaders_dumpers/input" ) == base_path .relative_to (rel_path )
40
+ assert Path (f"tests/test_loaders_dumpers/input/{ filename } " ) == source_file .relative_to (rel_path )
0 commit comments