@@ -170,3 +170,50 @@ class TestModel(BaseXmlModel, tag='model'):
170170 },
171171 },
172172 ]
173+
174+
175+ def test_models_union_errors ():
176+ class TestSubModel1 (BaseXmlModel , tag = 'submodel1' ):
177+ data : int
178+
179+ class TestSubModel2 (BaseXmlModel , tag = 'submodel2' ):
180+ data : float
181+
182+ class TestModel (BaseXmlModel , tag = 'model' ):
183+ submodel : List [Union [TestSubModel1 , TestSubModel2 ]]
184+
185+ xml = '''
186+ <model>
187+ <submodel2>a</submodel2>
188+ <submodel1>b</submodel1>
189+ </model>
190+ '''
191+
192+ with pytest .raises (pd .ValidationError ) as exc :
193+ TestModel .from_xml (xml )
194+
195+ err = exc .value
196+ assert err .title == 'TestModel'
197+ assert err .error_count () == 2
198+ assert err .errors () == [
199+ {
200+ 'input' : 'a' ,
201+ 'loc' : ('submodel' , 0 , 'data' ),
202+ 'msg' : f'[line { fmt_sourceline (3 )} ]: Input should be a valid number, unable to parse string as a number' ,
203+ 'type' : 'float_parsing' ,
204+ 'ctx' : {
205+ 'orig' : 'Input should be a valid number, unable to parse string as a number' ,
206+ 'sourceline' : fmt_sourceline (3 ),
207+ },
208+ },
209+ {
210+ 'input' : 'b' ,
211+ 'loc' : ('submodel' , 1 , 'data' ),
212+ 'msg' : f'[line { fmt_sourceline (4 )} ]: Input should be a valid integer, unable to parse string as an integer' ,
213+ 'type' : 'int_parsing' ,
214+ 'ctx' : {
215+ 'orig' : 'Input should be a valid integer, unable to parse string as an integer' ,
216+ 'sourceline' : fmt_sourceline (4 ),
217+ },
218+ },
219+ ]
0 commit comments