from __future__ import annotations import contextlib import copy import os import re import struct from datetime import date from datetime import datetime from datetime import time from typing import Any from typing import Optional from typing import cast from dateutil import parser from pendulum.parsing.exceptions import ParserError with_extensions = os.getenv("PENDULUM_EXTENSIONS", "1") == "1" try: if not with_extensions or struct.calcsize("P") == 4: raise ImportError() from pendulum._pendulum import Duration from pendulum._pendulum import parse_iso8601 except ImportError: from pendulum.duration import Duration # type: ignore[assignment] from pendulum.parsing.iso8601 import parse_iso8601 # type: ignore[assignment] COMMON = re.compile( # Date (optional) # noqa: ERA001 "^" "(?P" " (?P" # Classic date (YYYY-MM-DD) r" (?P\d{4})" # Year " (?P" r" (?P[/:])?(?P\d{2})" # Month (optional) r" ((?P[/:])?(?P\d{2}))" # Day (optional) " )?" " )" ")?" # Time (optional) # noqa: ERA001 "(?P