From db51f7f103bbbd6c91c8f47d75b3482ef8939691 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 17 Dec 2023 15:32:20 +0100 Subject: Adding upstream version 3.0.0. Signed-off-by: Daniel Baumann --- src/pendulum/parsing/__init__.py | 235 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 src/pendulum/parsing/__init__.py (limited to 'src/pendulum/parsing/__init__.py') diff --git a/src/pendulum/parsing/__init__.py b/src/pendulum/parsing/__init__.py new file mode 100644 index 0000000..761f52c --- /dev/null +++ b/src/pendulum/parsing/__init__.py @@ -0,0 +1,235 @@ +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