diff options
author | Gerhard Weis <g.weis@uq.edu.au> | 2021-12-13 08:06:56 +1000 |
---|---|---|
committer | Gerhard Weis <g.weis@uq.edu.au> | 2021-12-13 08:06:56 +1000 |
commit | 07d1602048083415bc22dc72cff152c9c2e0e021 (patch) | |
tree | 6fc5875daf4002f4e8dd4b672da47083aad82b0c /src/isodate/isoduration.py | |
parent | 4f36d7e6f6adee4c1ec719bb9beb035df4a7d76c (diff) | |
download | isodate-07d1602048083415bc22dc72cff152c9c2e0e021.tar.gz |
white space
Diffstat (limited to 'src/isodate/isoduration.py')
-rw-r--r-- | src/isodate/isoduration.py | 90 |
1 files changed, 55 insertions, 35 deletions
diff --git a/src/isodate/isoduration.py b/src/isodate/isoduration.py index 88829f7..bbfa7a4 100644 --- a/src/isodate/isoduration.py +++ b/src/isodate/isoduration.py @@ -24,18 +24,16 @@ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT ############################################################################## -''' +""" This module provides an ISO 8601:2004 duration parser. It also provides a wrapper to strftime. This wrapper makes it easier to format timedelta or Duration instances as ISO conforming strings. -''' +""" from datetime import timedelta from decimal import Decimal import re -from six import string_types - from isodate.duration import Duration from isodate.isoerror import ISO8601Error from isodate.isodatetime import parse_datetime @@ -50,7 +48,8 @@ ISO8601_PERIOD_REGEX = re.compile( r"(?P<days>[0-9]+([,.][0-9]+)?D)?" r"((?P<separator>T)(?P<hours>[0-9]+([,.][0-9]+)?H)?" r"(?P<minutes>[0-9]+([,.][0-9]+)?M)?" - r"(?P<seconds>[0-9]+([,.][0-9]+)?S)?)?$") + r"(?P<seconds>[0-9]+([,.][0-9]+)?S)?)?$" +) # regular expression to parse ISO duartion strings. @@ -82,7 +81,7 @@ def parse_duration(datestring): The alternative format does not support durations with years, months or days set to 0. """ - if not isinstance(datestring, string_types): + if not isinstance(datestring, str): raise TypeError("Expecting a string %r" % datestring) match = ISO8601_PERIOD_REGEX.match(datestring) if not match: @@ -91,61 +90,82 @@ def parse_duration(datestring): durdt = parse_datetime(datestring[1:]) if durdt.year != 0 or durdt.month != 0: # 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) + ret = Duration( + 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(days=durdt.day, seconds=durdt.second, - microseconds=durdt.microsecond, - minutes=durdt.minute, hours=durdt.hour) + ret = timedelta( + days=durdt.day, + seconds=durdt.second, + microseconds=durdt.microsecond, + minutes=durdt.minute, + hours=durdt.hour, + ) return ret raise ISO8601Error("Unable to parse duration string %r" % datestring) groups = match.groupdict() for key, val in groups.items(): - if key not in ('separator', 'sign'): + if key not in ("separator", "sign"): if val is None: groups[key] = "0n" # print groups[key] - if key in ('years', 'months'): - groups[key] = Decimal(groups[key][:-1].replace(',', '.')) + if key in ("years", "months"): + groups[key] = Decimal(groups[key][:-1].replace(",", ".")) else: # these values are passed into a timedelta object, # which works with floats. - groups[key] = float(groups[key][:-1].replace(',', '.')) + groups[key] = float(groups[key][:-1].replace(",", ".")) if groups["years"] == 0 and groups["months"] == 0: - ret = timedelta(days=groups["days"], hours=groups["hours"], - minutes=groups["minutes"], seconds=groups["seconds"], - weeks=groups["weeks"]) - if groups["sign"] == '-': + ret = timedelta( + days=groups["days"], + hours=groups["hours"], + minutes=groups["minutes"], + seconds=groups["seconds"], + weeks=groups["weeks"], + ) + if groups["sign"] == "-": ret = timedelta(0) - ret else: - ret = Duration(years=groups["years"], months=groups["months"], - days=groups["days"], hours=groups["hours"], - minutes=groups["minutes"], seconds=groups["seconds"], - weeks=groups["weeks"]) - if groups["sign"] == '-': + ret = Duration( + years=groups["years"], + months=groups["months"], + days=groups["days"], + hours=groups["hours"], + minutes=groups["minutes"], + seconds=groups["seconds"], + weeks=groups["weeks"], + ) + if groups["sign"] == "-": ret = Duration(0) - ret return ret def duration_isoformat(tduration, format=D_DEFAULT): - ''' + """ Format duration strings. This method is just a wrapper around isodate.isostrf.strftime and uses P%P (D_DEFAULT) as default format. - ''' + """ # TODO: implement better decision for negative Durations. # should be done in Duration class in consistent way with timedelta. - if (((isinstance(tduration, Duration) and - (tduration.years < 0 or tduration.months < 0 or - tduration.tdelta < timedelta(0))) or - (isinstance(tduration, timedelta) and - (tduration < timedelta(0))))): - ret = '-' + if ( + isinstance(tduration, Duration) + and ( + tduration.years < 0 + or tduration.months < 0 + or tduration.tdelta < timedelta(0) + ) + ) or (isinstance(tduration, timedelta) and (tduration < timedelta(0))): + ret = "-" else: - ret = '' + ret = "" ret += strftime(tduration, format) return ret |