summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerhard Weis <g.weis@uq.edu.au>2021-12-13 10:28:23 +1000
committerGerhard Weis <g.weis@uq.edu.au>2021-12-13 10:28:23 +1000
commit2de055391bfb3c46f2e6f6a1578a699f51931b31 (patch)
treef42d3d0bbaa61db40b0eee1c519d2e7b6f7f066f
parent89f80896e074c072e6014b6196cd768d9e75d0b0 (diff)
parent43b894e61ca5c48b26124d284296779f85e44873 (diff)
downloadisodate-2de055391bfb3c46f2e6f6a1578a699f51931b31.tar.gz
Merge branch 'PR64'
* PR64: Flake8 Remove type annotation to support python 2 Allow control over return type of parse_duration. # Conflicts: # src/isodate/isoduration.py
-rw-r--r--src/isodate/isoduration.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/isodate/isoduration.py b/src/isodate/isoduration.py
index 2218e06..fc536a1 100644
--- a/src/isodate/isoduration.py
+++ b/src/isodate/isoduration.py
@@ -24,10 +24,10 @@ ISO8601_PERIOD_REGEX = re.compile(
r"(?P<minutes>[0-9]+([,.][0-9]+)?M)?"
r"(?P<seconds>[0-9]+([,.][0-9]+)?S)?)?$"
)
-# regular expression to parse ISO duartion strings.
+# regular expression to parse ISO duration strings.
-def parse_duration(datestring):
+def parse_duration(datestring, as_timedelta_if_possible=True):
"""
Parses an ISO 8601 durations into datetime.timedelta or Duration objects.
@@ -62,25 +62,26 @@ def parse_duration(datestring):
# try alternative format:
if datestring.startswith("P"):
durdt = parse_datetime(datestring[1:])
- if durdt.year != 0 or durdt.month != 0:
- # create Duration
- ret = Duration(
+ if as_timedelta_if_possible and durdt.year == 0 and durdt.month == 0:
+ # FIXME: currently not possible in alternative format
+ # create timedelta
+ ret = timedelta(
days=durdt.day,
seconds=durdt.second,
microseconds=durdt.microsecond,
minutes=durdt.minute,
hours=durdt.hour,
- months=durdt.month,
- years=durdt.year,
)
- else: # FIXME: currently not possible in alternative format
- # create timedelta
- ret = timedelta(
+ else:
+ # create Duration
+ ret = Duration(
days=durdt.day,
seconds=durdt.second,
microseconds=durdt.microsecond,
minutes=durdt.minute,
hours=durdt.hour,
+ months=durdt.month,
+ years=durdt.year,
)
return ret
raise ISO8601Error("Unable to parse duration string %r" % datestring)
@@ -96,7 +97,7 @@ def parse_duration(datestring):
# these values are passed into a timedelta object,
# which works with floats.
groups[key] = float(groups[key][:-1].replace(",", "."))
- if groups["years"] == 0 and groups["months"] == 0:
+ if as_timedelta_if_possible and groups["years"] == 0 and groups["months"] == 0:
ret = timedelta(
days=groups["days"],
hours=groups["hours"],