(text: str)
| 208 | |
| 209 | |
| 210 | def _parse_iso8601_interval(text: str) -> _Interval: |
| 211 | if "/" not in text: |
| 212 | raise ParserError("Invalid interval") |
| 213 | |
| 214 | first, last = text.split("/") |
| 215 | |
| 216 | if not first or not last: |
| 217 | raise ParserError("Invalid interval.") |
| 218 | |
| 219 | start = end = duration = None |
| 220 | |
| 221 | if first[:1] == "P": |
| 222 | # duration/end |
| 223 | duration = parse_iso8601(first) |
| 224 | end = parse_iso8601(last) |
| 225 | elif last[:1] == "P": |
| 226 | # start/duration |
| 227 | start = parse_iso8601(first) |
| 228 | duration = parse_iso8601(last) |
| 229 | else: |
| 230 | # start/end |
| 231 | start = parse_iso8601(first) |
| 232 | end = parse_iso8601(last) |
| 233 | |
| 234 | return _Interval( |
| 235 | cast("datetime", start), cast("datetime", end), cast("Duration", duration) |
| 236 | ) |
| 237 | |
| 238 | |
| 239 | __all__ = ["parse", "parse_iso8601"] |
no test coverage detected
searching dependent graphs…