diff --git a/osc/util/models.py b/osc/util/models.py index 0777b535..be41e5b9 100644 --- a/osc/util/models.py +++ b/osc/util/models.py @@ -594,6 +594,8 @@ class XmlModel(BaseModel): return value if field.origin_type is int: + if not value or not value.strip(): + return None value = int(value) return value diff --git a/tests/test_models_xmlmodel.py b/tests/test_models_xmlmodel.py index 665db5e2..4f63a0e4 100644 --- a/tests/test_models_xmlmodel.py +++ b/tests/test_models_xmlmodel.py @@ -185,6 +185,38 @@ class TestXmlModel(unittest.TestCase): self.assertEqual(m.child[1]._apiurl, apiurl) self.assertEqual(m.child[2]._apiurl, apiurl) + def test_empty_int_optional(self): + class TestModel(XmlModel): + XML_TAG = "model" + num_attr: Optional[int] = Field(xml_attribute=True) + num_elem: Optional[int] = Field() + + data = textwrap.dedent( + """ + + + + """ + ).strip() + m = TestModel.from_string(data) + self.assertEqual(m.num_attr, None) + self.assertEqual(m.num_elem, None) + + def test_empty_int(self): + class TestModel(XmlModel): + XML_TAG = "model" + num_attr: int = Field(xml_attribute=True) + num_elem: int = Field() + + data = textwrap.dedent( + """ + + + + """ + ).strip() + self.assertRaises(TypeError, TestModel.from_string, data) + if __name__ == "__main__": unittest.main()