| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- """Constants used internally in arrow."""
- import sys
- from datetime import datetime
- from typing import Final
- # 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",
- }
|