6
6
import uuid
7
7
8
8
from simvue .api .objects import Metrics , Folder , Run
9
+ from simvue .models import DATETIME_FORMAT
10
+ from simvue .sender import sender
9
11
10
12
@pytest .mark .api
11
13
@pytest .mark .online
@@ -38,9 +40,60 @@ def test_metrics_creation_online() -> None:
38
40
)
39
41
assert _metrics .to_dict ()
40
42
_metrics .commit ()
41
- assert _metrics .get (metrics = ["x" , "y" , "z" ], xaxis = "step" )
43
+ assert _metrics .get (metrics = ["x" , "y" , "z" ], xaxis = "step" , runs = [ _run . id ] )
42
44
assert _metrics .span (run_ids = [_run .id ])
43
45
assert _metrics .names (run_ids = [_run .id ])
44
46
_run .delete ()
45
47
_folder .delete (recursive = True , delete_runs = True , runs_only = False )
46
48
49
+ @pytest .mark .api
50
+ @pytest .mark .offline
51
+ def test_metrics_creation_offline () -> None :
52
+ _uuid : str = f"{ uuid .uuid4 ()} " .split ("-" )[0 ]
53
+ _folder_name = f"/simvue_unit_testing/{ _uuid } "
54
+ _folder = Folder .new (path = _folder_name , offline = True )
55
+ _run = Run .new (name = "hello" , folder = _folder_name , offline = True )
56
+ _folder .commit ()
57
+ _run .commit ()
58
+
59
+ _values = {
60
+ "x" : 1 ,
61
+ "y" : 2.0 ,
62
+ "z" : True
63
+ }
64
+ _time : int = 1
65
+ _step : int = 1
66
+ _timestamp = datetime .datetime .now ().strftime (DATETIME_FORMAT )
67
+ _metrics = Metrics .new (
68
+ run = _run .id ,
69
+ metrics = [
70
+ {
71
+ "timestamp" : _timestamp ,
72
+ "time" : _time ,
73
+ "step" : _step ,
74
+ "values" : _values ,
75
+ }
76
+ ],
77
+ offline = True
78
+ )
79
+ _metrics .commit ()
80
+ with _metrics ._local_staging_file .open () as in_f :
81
+ _local_data = json .load (in_f )
82
+
83
+ assert _local_data .get ("run" ) == _run .id
84
+ assert _local_data .get ("metrics" )[0 ].get ("values" ) == _values
85
+ assert _local_data .get ("metrics" )[0 ].get ("timestamp" ) == _timestamp
86
+ assert _local_data .get ("metrics" )[0 ].get ("step" ) == _step
87
+ assert _local_data .get ("metrics" )[0 ].get ("time" ) == _time
88
+
89
+ _id_mapping = sender (_metrics ._local_staging_file .parents [1 ], 1 , 10 , ["folders" , "runs" , "metrics" ])
90
+ time .sleep (1 )
91
+
92
+ # Get online version of metrics
93
+ _online_metrics = Metrics (_id_mapping .get (_metrics .id ))
94
+ _data = _online_metrics .get (metrics = ["x" , "y" , "z" ], runs = [_id_mapping .get (_run .id )], xaxis = "step" )
95
+ assert sorted (_online_metrics .names (run_ids = [_id_mapping .get (_run .id )])) == sorted (_values .keys ())
96
+ assert _data .get (_id_mapping .get (_run .id )).get ('y' )[0 ].get ('value' ) == 2.0
97
+ assert _data .get (_id_mapping .get (_run .id )).get ('y' )[0 ].get ('step' ) == 1
98
+ _run .delete ()
99
+ _folder .delete (recursive = True , delete_runs = True , runs_only = False )
0 commit comments