Skip to content

Commit 221d923

Browse files
backbordmvantellingen
authored andcommitted
Improve handling of str values for Duration
Passing a str to `Duration.xmlvalue(value)` will result in a properly formatted iso duration.
1 parent aedbb06 commit 221d923

2 files changed

Lines changed: 7 additions & 1 deletion

File tree

src/zeep/xsd/types/builtins.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,12 @@ def pythonvalue(self, value):
124124

125125
class Duration(BuiltinType):
126126
_default_qname = xsd_ns("duration")
127-
accepted_types = [isodate.duration.Duration, str]
127+
accepted_types = [isodate.duration.Duration, datetime.timedelta, str]
128128

129129
@check_no_collection
130130
def xmlvalue(self, value):
131+
if isinstance(value, str):
132+
value = isodate.parse_duration(value)
131133
return isodate.duration_isoformat(value)
132134

133135
@treat_whitespace("collapse")

tests/test_xsd_builtins.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ def test_xmlvalue(self):
139139
instance = builtins.Duration()
140140
value = isodate.parse_duration("P0Y1347M0D")
141141
assert instance.xmlvalue(value) == "P1347M"
142+
assert instance.xmlvalue("P0Y1347M0D") == "P1347M"
143+
assert instance.xmlvalue(datetime.timedelta(days=1347)) == "P1347D"
144+
with pytest.raises(ValueError):
145+
instance.xmlvalue("P15T")
142146

143147
def test_pythonvalue(self):
144148
instance = builtins.Duration()

0 commit comments

Comments
 (0)