"""Constants used internally in arrow.""" import sys from datetime import datetime if sys.version_info < (3, 8): # pragma: no cover from typing_extensions import Final else: from typing import Final # pragma: no cover # datetime.max.timestamp() errors on Windows, so we must hardcode # the highest possible datetime value that can output a timestamp. # tl;dr platform-independent max timestamps are hard to form # See: https://stackoverflow.com/q/46133223 try: # Get max timestamp. Works on POSIX-based systems like Linux and macOS, # but will trigger an OverflowError, ValueError, or OSError on Windows _MAX_TIMESTAMP = datetime.max.timestamp() except (OverflowError, ValueError, OSError): # pragma: no cover # Fallback for Windows and 32-bit systems if initial max timestamp call fails # Must get max value of ctime on Windows based on architecture (x32 vs x64) # https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64 # Note: this may occur on both 32-bit Linux systems (issue #930) along with Windows systems is_64bits = sys.maxsize > 2**32 _MAX_TIMESTAMP = ( datetime(3000, 1, 1, 23, 59, 59, 999999).timestamp() if is_64bits else datetime(2038, 1, 1, 23, 59, 59, 999999).timestamp() ) MAX_TIMESTAMP: Final[float] = _MAX_TIMESTAMP MAX_TIMESTAMP_MS: Final[float] = MAX_TIMESTAMP * 1000 MAX_TIMESTAMP_US: Final[float] = MAX_TIMESTAMP * 1_000_000 MAX_ORDINAL: Final[int] = datetime.max.toordinal() MIN_ORDINAL: Final[int] = 1 DEFAULT_LOCALE: Final[str] = "en-us" # Supported dehumanize locales DEHUMANIZE_LOCALES = { "en", "en-us", "en-gb", "en-au", "en-be", "en-jp", "en-za", "en-ca", "en-ph", "fr", "fr-fr", "fr-ca", "it", "it-it", "es", "es-es", "el", "el-gr", "ja", "ja-jp", "se", "se-fi", "se-no", "se-se", "sv", "sv-se", "fi", "fi-fi", "zh", "zh-cn", "zh-tw", "zh-hk", "nl", "nl-nl", "be", "be-by", "pl", "pl-pl", "ru", "ru-ru", "af", "bg", "bg-bg", "ua", "uk", "uk-ua", "mk", "mk-mk", "de", "de-de", "de-ch", "de-at", "nb", "nb-no", "nn", "nn-no", "pt", "pt-pt", "pt-br", "tl", "tl-ph", "vi", "vi-vn", "tr", "tr-tr", "az", "az-az", "da", "da-dk", "ml", "hi", "cs", "cs-cz", "sk", "sk-sk", "fa", "fa-ir", "mr", "ca", "ca-es", "ca-ad", "ca-fr", "ca-it", "eo", "eo-xx", "bn", "bn-bd", "bn-in", "rm", "rm-ch", "ro", "ro-ro", "sl", "sl-si", "id", "id-id", "ne", "ne-np", "ee", "et", "sw", "sw-ke", "sw-tz", "la", "la-va", "lt", "lt-lt", "ms", "ms-my", "ms-bn", "or", "or-in", "lb", "lb-lu", "zu", "zu-za", "sq", "sq-al", "ta", "ta-in", "ta-lk", "ur", "ur-pk", "ka", "ka-ge", "kk", "kk-kz", # "lo", # "lo-la", "am", "am-et", "hy-am", "hy", "uz", "uz-uz", }