import re | |
from typing import Dict | |
from isoduration.constants import PERIOD_PREFIX, TIME_PREFIX, WEEK_PREFIX | |
from isoduration.parser.exceptions import OutOfDesignators | |
def is_period(ch: str) -> bool: | |
return ch == PERIOD_PREFIX | |
def is_time(ch: str) -> bool: | |
return ch == TIME_PREFIX | |
def is_week(ch: str) -> bool: | |
return ch == WEEK_PREFIX | |
def is_number(ch: str) -> bool: | |
return bool(re.match(r"[+\-0-9.,eE]", ch)) | |
def is_letter(ch: str) -> bool: | |
return ch.isalpha() and ch.lower() != "e" | |
def parse_designator(designators: Dict[str, str], target: str) -> str: | |
while True: | |
try: | |
key, value = designators.popitem(last=False) # type: ignore | |
except KeyError as exc: | |
raise OutOfDesignators from exc | |
if key == target: | |
return value | |