from isoduration.parser.exceptions import EmptyDuration | |
from isoduration.parser.parsing import parse_date_duration | |
from isoduration.parser.util import is_period | |
from isoduration.types import Duration | |
def parse_duration(duration_str: str) -> Duration: | |
if len(duration_str) < 2: | |
raise EmptyDuration("No duration information provided") | |
beginning = 1 | |
first = duration_str[beginning - 1] | |
sign = +1 | |
if first == "+": | |
beginning += 1 | |
if first == "-": | |
sign = -1 | |
beginning += 1 | |
prefix = duration_str[beginning - 1] | |
duration = duration_str[beginning:] | |
if not is_period(prefix): | |
raise EmptyDuration("No prefix provided") | |
return parse_date_duration(duration, sign) | |