constants.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. """Constants used internally in arrow."""
  2. import sys
  3. from datetime import datetime
  4. from typing import Final
  5. # datetime.max.timestamp() errors on Windows, so we must hardcode
  6. # the highest possible datetime value that can output a timestamp.
  7. # tl;dr platform-independent max timestamps are hard to form
  8. # See: https://stackoverflow.com/q/46133223
  9. try:
  10. # Get max timestamp. Works on POSIX-based systems like Linux and macOS,
  11. # but will trigger an OverflowError, ValueError, or OSError on Windows
  12. _MAX_TIMESTAMP = datetime.max.timestamp()
  13. except (OverflowError, ValueError, OSError): # pragma: no cover
  14. # Fallback for Windows and 32-bit systems if initial max timestamp call fails
  15. # Must get max value of ctime on Windows based on architecture (x32 vs x64)
  16. # https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64
  17. # Note: this may occur on both 32-bit Linux systems (issue #930) along with Windows systems
  18. is_64bits = sys.maxsize > 2**32
  19. _MAX_TIMESTAMP = (
  20. datetime(3000, 1, 1, 23, 59, 59, 999999).timestamp()
  21. if is_64bits
  22. else datetime(2038, 1, 1, 23, 59, 59, 999999).timestamp()
  23. )
  24. MAX_TIMESTAMP: Final[float] = _MAX_TIMESTAMP
  25. MAX_TIMESTAMP_MS: Final[float] = MAX_TIMESTAMP * 1000
  26. MAX_TIMESTAMP_US: Final[float] = MAX_TIMESTAMP * 1_000_000
  27. MAX_ORDINAL: Final[int] = datetime.max.toordinal()
  28. MIN_ORDINAL: Final[int] = 1
  29. DEFAULT_LOCALE: Final[str] = "en-us"
  30. # Supported dehumanize locales
  31. DEHUMANIZE_LOCALES = {
  32. "en",
  33. "en-us",
  34. "en-gb",
  35. "en-au",
  36. "en-be",
  37. "en-jp",
  38. "en-za",
  39. "en-ca",
  40. "en-ph",
  41. "fr",
  42. "fr-fr",
  43. "fr-ca",
  44. "it",
  45. "it-it",
  46. "es",
  47. "es-es",
  48. "el",
  49. "el-gr",
  50. "ja",
  51. "ja-jp",
  52. "se",
  53. "se-fi",
  54. "se-no",
  55. "se-se",
  56. "sv",
  57. "sv-se",
  58. "fi",
  59. "fi-fi",
  60. "zh",
  61. "zh-cn",
  62. "zh-tw",
  63. "zh-hk",
  64. "nl",
  65. "nl-nl",
  66. "be",
  67. "be-by",
  68. "pl",
  69. "pl-pl",
  70. "ru",
  71. "ru-ru",
  72. "af",
  73. "bg",
  74. "bg-bg",
  75. "ua",
  76. "uk",
  77. "uk-ua",
  78. "mk",
  79. "mk-mk",
  80. "de",
  81. "de-de",
  82. "de-ch",
  83. "de-at",
  84. "nb",
  85. "nb-no",
  86. "nn",
  87. "nn-no",
  88. "pt",
  89. "pt-pt",
  90. "pt-br",
  91. "tl",
  92. "tl-ph",
  93. "vi",
  94. "vi-vn",
  95. "tr",
  96. "tr-tr",
  97. "az",
  98. "az-az",
  99. "da",
  100. "da-dk",
  101. "ml",
  102. "hi",
  103. "cs",
  104. "cs-cz",
  105. "sk",
  106. "sk-sk",
  107. "fa",
  108. "fa-ir",
  109. "mr",
  110. "ca",
  111. "ca-es",
  112. "ca-ad",
  113. "ca-fr",
  114. "ca-it",
  115. "eo",
  116. "eo-xx",
  117. "bn",
  118. "bn-bd",
  119. "bn-in",
  120. "rm",
  121. "rm-ch",
  122. "ro",
  123. "ro-ro",
  124. "sl",
  125. "sl-si",
  126. "id",
  127. "id-id",
  128. "ne",
  129. "ne-np",
  130. "ee",
  131. "et",
  132. "sw",
  133. "sw-ke",
  134. "sw-tz",
  135. "la",
  136. "la-va",
  137. "lt",
  138. "lt-lt",
  139. "ms",
  140. "ms-my",
  141. "ms-bn",
  142. "or",
  143. "or-in",
  144. "lb",
  145. "lb-lu",
  146. "zu",
  147. "zu-za",
  148. "sq",
  149. "sq-al",
  150. "ta",
  151. "ta-in",
  152. "ta-lk",
  153. "ur",
  154. "ur-pk",
  155. "ka",
  156. "ka-ge",
  157. "kk",
  158. "kk-kz",
  159. # "lo",
  160. # "lo-la",
  161. "am",
  162. "am-et",
  163. "hy-am",
  164. "hy",
  165. "uz",
  166. "uz-uz",
  167. }