@@ -19,12 +19,26 @@ def __new__(cls, value: str, xml_value: str | None = None) -> Self:
1919 return obj
2020
2121 @classmethod
22- def from_xml (cls , value : str | None ) -> Self :
23- """Convert from xml value."""
22+ def _from_xml (cls , value : str | None ) -> Self | None :
23+ """Convert from xml value, returning None if the value is not supported ."""
2424 if value :
2525 for member in cls :
2626 if member .xml_value == value :
2727 return member
28+ return None
29+
30+ @classmethod
31+ def is_valid_xml_value (cls , value : str | None ) -> bool :
32+ """Convert from xml value."""
33+ result = cls ._from_xml (value )
34+ return result is not None
35+
36+ @classmethod
37+ def from_xml (cls , value : str | None ) -> Self :
38+ """Convert from xml value."""
39+ result = cls ._from_xml (value )
40+ if result is not None :
41+ return result
2842
2943 msg = f"{ value } is not a valid { cls .__name__ } "
3044 raise ValueError (msg )
@@ -43,12 +57,26 @@ def __new__(cls, value: int, xml_value: str | None = None) -> Self:
4357 return obj
4458
4559 @classmethod
46- def from_xml (cls , value : str | None ) -> Self :
47- """Convert from xml value."""
60+ def _from_xml (cls , value : str | None ) -> Self | None :
61+ """Convert from xml value, returning None if the value is not supported ."""
4862 if value :
4963 for member in cls :
5064 if member .xml_value == value :
5165 return member
66+ return None
67+
68+ @classmethod
69+ def is_valid_xml_value (cls , value : str | None ) -> bool :
70+ """Convert from xml value."""
71+ result = cls ._from_xml (value )
72+ return result is not None
73+
74+ @classmethod
75+ def from_xml (cls , value : str | None ) -> Self :
76+ """Convert from xml value."""
77+ result = cls ._from_xml (value )
78+ if result is not None :
79+ return result
5280
5381 msg = f"{ value } is not a valid { cls .__name__ } "
5482 raise ValueError (msg )
0 commit comments