7
7
from typing import List , Dict , Any , Optional
8
8
9
9
import sys
10
+ from pathlib import Path
10
11
11
12
# Some test modelspec classes to use in the tests
12
13
@@ -154,13 +155,17 @@ def test_save_load_json(tmp_path):
154
155
155
156
str_orig = str (net )
156
157
157
- filenamej = str (tmp_path / f"{ net .id } .json" )
158
+ filenamej = str (Path ( tmp_path ) / f"{ net .id } .json" )
158
159
net .to_json_file (filenamej )
159
160
160
- filenamey = str (tmp_path / f"{ net .id } .yaml" )
161
+ filenamey = str (Path ( tmp_path ) / f"{ net .id } .yaml" )
161
162
# net.id = net.id+'_yaml'
162
163
net .to_yaml_file (filenamey )
163
- from modelspec .utils import load_json , load_yaml
164
+
165
+ filenamex = str (Path (tmp_path ) / f"{ net .id } .xml" )
166
+ net .to_xml_file (filenamex )
167
+
168
+ from modelspec .utils import load_json , load_yaml , load_xml
164
169
165
170
dataj = load_json (filenamej )
166
171
print_v ("Loaded network specification from %s" % filenamej )
@@ -174,12 +179,20 @@ def test_save_load_json(tmp_path):
174
179
nety = NewNetwork .from_dict (datay )
175
180
str_nety = str (nety )
176
181
182
+ datax = load_xml (filenamex )
183
+ print_v ("Loaded network specification from %s" % filenamex )
184
+
185
+ netx = NewNetwork .from_dict (datax )
186
+ str_netx = str (netx )
187
+
177
188
print ("----- Before -----" )
178
189
print (str_orig )
179
190
print ("----- After via %s -----" % filenamej )
180
191
print (str_netj )
181
192
print ("----- After via %s -----" % filenamey )
182
193
print (str_nety )
194
+ print ("----- After via %s -----" % filenamex )
195
+ print (str_netx )
183
196
184
197
print ("Test JSON.." )
185
198
if sys .version_info [0 ] == 2 :
@@ -197,10 +210,19 @@ def test_save_load_json(tmp_path):
197
210
else :
198
211
assert str_orig == str_nety
199
212
213
+ print ("Test XML.." )
214
+ if sys .version_info [0 ] == 2 :
215
+ assert len (str_orig ) == len (
216
+ str_netx
217
+ ) # Order not preserved in py2, just test len
218
+ else :
219
+ assert str_orig == str_netx
220
+
200
221
print ("Test EvaluableExpressions" )
201
222
for i in range (7 ):
202
223
assert eval ("net.ee%i" % i ) == eval ("netj.ee%i" % i )
203
224
assert eval ("net.ee%i" % i ) == eval ("nety.ee%i" % i )
225
+ assert eval ("net.ee%i" % i ) == eval ("netx.ee%i" % i )
204
226
205
227
206
228
def test_generate_documentation ():
@@ -296,6 +318,7 @@ class Document(Base):
296
318
297
319
doc .to_json ()
298
320
doc .to_yaml ()
321
+ doc .to_xml ()
299
322
doc .generate_documentation (format = "markdown" )
300
323
doc .generate_documentation (format = "rst" )
301
324
@@ -314,10 +337,24 @@ class Node(Base):
314
337
model .to_json ()
315
338
316
339
340
+ def test_ndarray_xml_metadata ():
341
+ import numpy as np
342
+
343
+ @modelspec .define (eq = False )
344
+ class Node (Base ):
345
+ id : str = field (validator = instance_of (str ))
346
+ metadata : Optional [Dict [str , Any ]] = field (
347
+ kw_only = True , default = None , validator = optional (instance_of (dict ))
348
+ )
349
+
350
+ model = Node (id = "a" , metadata = {"b" : np .array ([0 ])})
351
+ model .to_xml ()
352
+
353
+
317
354
def test_bson_array (tmp_path ):
318
355
import numpy as np
319
356
320
- test_filename = str (tmp_path / "test_array.bson" )
357
+ test_filename = str (Path ( tmp_path ) / "test_array.bson" )
321
358
322
359
@modelspec .define (eq = False )
323
360
class ArrayTestModel (Base ):
@@ -339,3 +376,13 @@ class ArrayTestModel(Base):
339
376
np .testing .assert_array_equal (model .array , m2 .array )
340
377
assert model .list_of_lists == m2 .list_of_lists
341
378
assert model .ragged_list == m2 .ragged_list
379
+
380
+
381
+ if __name__ == "__main__" :
382
+ test_save_load_json ("." )
383
+ test_generate_documentation ()
384
+ test_ndarray_json_metadata ()
385
+ test_ndarray_xml_metadata ()
386
+ test_generate_documentation_example ()
387
+ test_bson_array ("." )
388
+
0 commit comments