altimate-code 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/bin/altimate +6 -0
  3. package/bin/altimate-code +6 -0
  4. package/dbt-tools/bin/altimate-dbt +2 -0
  5. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/__init__.py +0 -0
  6. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/fetch_schema.py +35 -0
  7. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/utils.py +353 -0
  8. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/validate_sql.py +114 -0
  9. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/__init__.py +178 -0
  10. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/__main__.py +96 -0
  11. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/_typing.py +17 -0
  12. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/__init__.py +3 -0
  13. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/__init__.py +18 -0
  14. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/_typing.py +18 -0
  15. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/column.py +332 -0
  16. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/dataframe.py +866 -0
  17. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/functions.py +1267 -0
  18. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/group.py +59 -0
  19. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/normalize.py +78 -0
  20. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/operations.py +53 -0
  21. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/readwriter.py +108 -0
  22. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/session.py +190 -0
  23. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/transforms.py +9 -0
  24. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/types.py +212 -0
  25. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/util.py +32 -0
  26. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/window.py +134 -0
  27. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/__init__.py +118 -0
  28. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/athena.py +166 -0
  29. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/bigquery.py +1331 -0
  30. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/clickhouse.py +1393 -0
  31. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/databricks.py +131 -0
  32. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/dialect.py +1915 -0
  33. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/doris.py +561 -0
  34. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/drill.py +157 -0
  35. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/druid.py +20 -0
  36. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/duckdb.py +1159 -0
  37. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/dune.py +16 -0
  38. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/hive.py +787 -0
  39. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/materialize.py +94 -0
  40. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/mysql.py +1324 -0
  41. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/oracle.py +378 -0
  42. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/postgres.py +778 -0
  43. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/presto.py +788 -0
  44. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/prql.py +203 -0
  45. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/redshift.py +448 -0
  46. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/risingwave.py +78 -0
  47. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/snowflake.py +1464 -0
  48. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/spark.py +202 -0
  49. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/spark2.py +349 -0
  50. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/sqlite.py +320 -0
  51. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/starrocks.py +343 -0
  52. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/tableau.py +61 -0
  53. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/teradata.py +356 -0
  54. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/trino.py +115 -0
  55. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/tsql.py +1403 -0
  56. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/diff.py +456 -0
  57. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/errors.py +93 -0
  58. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/__init__.py +95 -0
  59. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/context.py +101 -0
  60. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/env.py +246 -0
  61. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/python.py +460 -0
  62. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/table.py +155 -0
  63. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/expressions.py +8870 -0
  64. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/generator.py +4993 -0
  65. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/helper.py +582 -0
  66. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/jsonpath.py +227 -0
  67. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/lineage.py +423 -0
  68. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/__init__.py +11 -0
  69. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/annotate_types.py +589 -0
  70. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/canonicalize.py +222 -0
  71. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_ctes.py +43 -0
  72. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_joins.py +181 -0
  73. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_subqueries.py +189 -0
  74. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/isolate_table_selects.py +50 -0
  75. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/merge_subqueries.py +415 -0
  76. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/normalize.py +200 -0
  77. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/normalize_identifiers.py +64 -0
  78. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/optimize_joins.py +91 -0
  79. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/optimizer.py +94 -0
  80. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/pushdown_predicates.py +222 -0
  81. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/pushdown_projections.py +172 -0
  82. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify.py +104 -0
  83. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify_columns.py +1024 -0
  84. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify_tables.py +155 -0
  85. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/scope.py +904 -0
  86. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/simplify.py +1587 -0
  87. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/unnest_subqueries.py +302 -0
  88. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/parser.py +8501 -0
  89. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/planner.py +463 -0
  90. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/schema.py +588 -0
  91. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/serde.py +68 -0
  92. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/time.py +687 -0
  93. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/tokens.py +1520 -0
  94. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/transforms.py +1020 -0
  95. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/trie.py +81 -0
  96. package/dbt-tools/dist/altimate_python_packages/dbt_core_integration.py +825 -0
  97. package/dbt-tools/dist/altimate_python_packages/dbt_utils.py +157 -0
  98. package/dbt-tools/dist/index.js +23859 -0
  99. package/package.json +14 -18
  100. package/postinstall.mjs +42 -0
  101. package/skills/altimate-setup/SKILL.md +31 -0
@@ -0,0 +1,687 @@
1
+ import typing as t
2
+ import datetime
3
+
4
+ # The generic time format is based on python time.strftime.
5
+ # https://docs.python.org/3/library/time.html#time.strftime
6
+ from sqlglot.trie import TrieResult, in_trie, new_trie
7
+
8
+
9
+ def format_time(
10
+ string: str, mapping: t.Dict[str, str], trie: t.Optional[t.Dict] = None
11
+ ) -> t.Optional[str]:
12
+ """
13
+ Converts a time string given a mapping.
14
+
15
+ Examples:
16
+ >>> format_time("%Y", {"%Y": "YYYY"})
17
+ 'YYYY'
18
+
19
+ Args:
20
+ mapping: dictionary of time format to target time format.
21
+ trie: optional trie, can be passed in for performance.
22
+
23
+ Returns:
24
+ The converted time string.
25
+ """
26
+ if not string:
27
+ return None
28
+
29
+ start = 0
30
+ end = 1
31
+ size = len(string)
32
+ trie = trie or new_trie(mapping)
33
+ current = trie
34
+ chunks = []
35
+ sym = None
36
+
37
+ while end <= size:
38
+ chars = string[start:end]
39
+ result, current = in_trie(current, chars[-1])
40
+
41
+ if result == TrieResult.FAILED:
42
+ if sym:
43
+ end -= 1
44
+ chars = sym
45
+ sym = None
46
+ else:
47
+ chars = chars[0]
48
+ end = start + 1
49
+
50
+ start += len(chars)
51
+ chunks.append(chars)
52
+ current = trie
53
+ elif result == TrieResult.EXISTS:
54
+ sym = chars
55
+
56
+ end += 1
57
+
58
+ if result != TrieResult.FAILED and end > size:
59
+ chunks.append(chars)
60
+
61
+ return "".join(mapping.get(chars, chars) for chars in chunks)
62
+
63
+
64
+ TIMEZONES = {
65
+ tz.lower()
66
+ for tz in (
67
+ "Africa/Abidjan",
68
+ "Africa/Accra",
69
+ "Africa/Addis_Ababa",
70
+ "Africa/Algiers",
71
+ "Africa/Asmara",
72
+ "Africa/Asmera",
73
+ "Africa/Bamako",
74
+ "Africa/Bangui",
75
+ "Africa/Banjul",
76
+ "Africa/Bissau",
77
+ "Africa/Blantyre",
78
+ "Africa/Brazzaville",
79
+ "Africa/Bujumbura",
80
+ "Africa/Cairo",
81
+ "Africa/Casablanca",
82
+ "Africa/Ceuta",
83
+ "Africa/Conakry",
84
+ "Africa/Dakar",
85
+ "Africa/Dar_es_Salaam",
86
+ "Africa/Djibouti",
87
+ "Africa/Douala",
88
+ "Africa/El_Aaiun",
89
+ "Africa/Freetown",
90
+ "Africa/Gaborone",
91
+ "Africa/Harare",
92
+ "Africa/Johannesburg",
93
+ "Africa/Juba",
94
+ "Africa/Kampala",
95
+ "Africa/Khartoum",
96
+ "Africa/Kigali",
97
+ "Africa/Kinshasa",
98
+ "Africa/Lagos",
99
+ "Africa/Libreville",
100
+ "Africa/Lome",
101
+ "Africa/Luanda",
102
+ "Africa/Lubumbashi",
103
+ "Africa/Lusaka",
104
+ "Africa/Malabo",
105
+ "Africa/Maputo",
106
+ "Africa/Maseru",
107
+ "Africa/Mbabane",
108
+ "Africa/Mogadishu",
109
+ "Africa/Monrovia",
110
+ "Africa/Nairobi",
111
+ "Africa/Ndjamena",
112
+ "Africa/Niamey",
113
+ "Africa/Nouakchott",
114
+ "Africa/Ouagadougou",
115
+ "Africa/Porto-Novo",
116
+ "Africa/Sao_Tome",
117
+ "Africa/Timbuktu",
118
+ "Africa/Tripoli",
119
+ "Africa/Tunis",
120
+ "Africa/Windhoek",
121
+ "America/Adak",
122
+ "America/Anchorage",
123
+ "America/Anguilla",
124
+ "America/Antigua",
125
+ "America/Araguaina",
126
+ "America/Argentina/Buenos_Aires",
127
+ "America/Argentina/Catamarca",
128
+ "America/Argentina/ComodRivadavia",
129
+ "America/Argentina/Cordoba",
130
+ "America/Argentina/Jujuy",
131
+ "America/Argentina/La_Rioja",
132
+ "America/Argentina/Mendoza",
133
+ "America/Argentina/Rio_Gallegos",
134
+ "America/Argentina/Salta",
135
+ "America/Argentina/San_Juan",
136
+ "America/Argentina/San_Luis",
137
+ "America/Argentina/Tucuman",
138
+ "America/Argentina/Ushuaia",
139
+ "America/Aruba",
140
+ "America/Asuncion",
141
+ "America/Atikokan",
142
+ "America/Atka",
143
+ "America/Bahia",
144
+ "America/Bahia_Banderas",
145
+ "America/Barbados",
146
+ "America/Belem",
147
+ "America/Belize",
148
+ "America/Blanc-Sablon",
149
+ "America/Boa_Vista",
150
+ "America/Bogota",
151
+ "America/Boise",
152
+ "America/Buenos_Aires",
153
+ "America/Cambridge_Bay",
154
+ "America/Campo_Grande",
155
+ "America/Cancun",
156
+ "America/Caracas",
157
+ "America/Catamarca",
158
+ "America/Cayenne",
159
+ "America/Cayman",
160
+ "America/Chicago",
161
+ "America/Chihuahua",
162
+ "America/Ciudad_Juarez",
163
+ "America/Coral_Harbour",
164
+ "America/Cordoba",
165
+ "America/Costa_Rica",
166
+ "America/Creston",
167
+ "America/Cuiaba",
168
+ "America/Curacao",
169
+ "America/Danmarkshavn",
170
+ "America/Dawson",
171
+ "America/Dawson_Creek",
172
+ "America/Denver",
173
+ "America/Detroit",
174
+ "America/Dominica",
175
+ "America/Edmonton",
176
+ "America/Eirunepe",
177
+ "America/El_Salvador",
178
+ "America/Ensenada",
179
+ "America/Fort_Nelson",
180
+ "America/Fort_Wayne",
181
+ "America/Fortaleza",
182
+ "America/Glace_Bay",
183
+ "America/Godthab",
184
+ "America/Goose_Bay",
185
+ "America/Grand_Turk",
186
+ "America/Grenada",
187
+ "America/Guadeloupe",
188
+ "America/Guatemala",
189
+ "America/Guayaquil",
190
+ "America/Guyana",
191
+ "America/Halifax",
192
+ "America/Havana",
193
+ "America/Hermosillo",
194
+ "America/Indiana/Indianapolis",
195
+ "America/Indiana/Knox",
196
+ "America/Indiana/Marengo",
197
+ "America/Indiana/Petersburg",
198
+ "America/Indiana/Tell_City",
199
+ "America/Indiana/Vevay",
200
+ "America/Indiana/Vincennes",
201
+ "America/Indiana/Winamac",
202
+ "America/Indianapolis",
203
+ "America/Inuvik",
204
+ "America/Iqaluit",
205
+ "America/Jamaica",
206
+ "America/Jujuy",
207
+ "America/Juneau",
208
+ "America/Kentucky/Louisville",
209
+ "America/Kentucky/Monticello",
210
+ "America/Knox_IN",
211
+ "America/Kralendijk",
212
+ "America/La_Paz",
213
+ "America/Lima",
214
+ "America/Los_Angeles",
215
+ "America/Louisville",
216
+ "America/Lower_Princes",
217
+ "America/Maceio",
218
+ "America/Managua",
219
+ "America/Manaus",
220
+ "America/Marigot",
221
+ "America/Martinique",
222
+ "America/Matamoros",
223
+ "America/Mazatlan",
224
+ "America/Mendoza",
225
+ "America/Menominee",
226
+ "America/Merida",
227
+ "America/Metlakatla",
228
+ "America/Mexico_City",
229
+ "America/Miquelon",
230
+ "America/Moncton",
231
+ "America/Monterrey",
232
+ "America/Montevideo",
233
+ "America/Montreal",
234
+ "America/Montserrat",
235
+ "America/Nassau",
236
+ "America/New_York",
237
+ "America/Nipigon",
238
+ "America/Nome",
239
+ "America/Noronha",
240
+ "America/North_Dakota/Beulah",
241
+ "America/North_Dakota/Center",
242
+ "America/North_Dakota/New_Salem",
243
+ "America/Nuuk",
244
+ "America/Ojinaga",
245
+ "America/Panama",
246
+ "America/Pangnirtung",
247
+ "America/Paramaribo",
248
+ "America/Phoenix",
249
+ "America/Port-au-Prince",
250
+ "America/Port_of_Spain",
251
+ "America/Porto_Acre",
252
+ "America/Porto_Velho",
253
+ "America/Puerto_Rico",
254
+ "America/Punta_Arenas",
255
+ "America/Rainy_River",
256
+ "America/Rankin_Inlet",
257
+ "America/Recife",
258
+ "America/Regina",
259
+ "America/Resolute",
260
+ "America/Rio_Branco",
261
+ "America/Rosario",
262
+ "America/Santa_Isabel",
263
+ "America/Santarem",
264
+ "America/Santiago",
265
+ "America/Santo_Domingo",
266
+ "America/Sao_Paulo",
267
+ "America/Scoresbysund",
268
+ "America/Shiprock",
269
+ "America/Sitka",
270
+ "America/St_Barthelemy",
271
+ "America/St_Johns",
272
+ "America/St_Kitts",
273
+ "America/St_Lucia",
274
+ "America/St_Thomas",
275
+ "America/St_Vincent",
276
+ "America/Swift_Current",
277
+ "America/Tegucigalpa",
278
+ "America/Thule",
279
+ "America/Thunder_Bay",
280
+ "America/Tijuana",
281
+ "America/Toronto",
282
+ "America/Tortola",
283
+ "America/Vancouver",
284
+ "America/Virgin",
285
+ "America/Whitehorse",
286
+ "America/Winnipeg",
287
+ "America/Yakutat",
288
+ "America/Yellowknife",
289
+ "Antarctica/Casey",
290
+ "Antarctica/Davis",
291
+ "Antarctica/DumontDUrville",
292
+ "Antarctica/Macquarie",
293
+ "Antarctica/Mawson",
294
+ "Antarctica/McMurdo",
295
+ "Antarctica/Palmer",
296
+ "Antarctica/Rothera",
297
+ "Antarctica/South_Pole",
298
+ "Antarctica/Syowa",
299
+ "Antarctica/Troll",
300
+ "Antarctica/Vostok",
301
+ "Arctic/Longyearbyen",
302
+ "Asia/Aden",
303
+ "Asia/Almaty",
304
+ "Asia/Amman",
305
+ "Asia/Anadyr",
306
+ "Asia/Aqtau",
307
+ "Asia/Aqtobe",
308
+ "Asia/Ashgabat",
309
+ "Asia/Ashkhabad",
310
+ "Asia/Atyrau",
311
+ "Asia/Baghdad",
312
+ "Asia/Bahrain",
313
+ "Asia/Baku",
314
+ "Asia/Bangkok",
315
+ "Asia/Barnaul",
316
+ "Asia/Beirut",
317
+ "Asia/Bishkek",
318
+ "Asia/Brunei",
319
+ "Asia/Calcutta",
320
+ "Asia/Chita",
321
+ "Asia/Choibalsan",
322
+ "Asia/Chongqing",
323
+ "Asia/Chungking",
324
+ "Asia/Colombo",
325
+ "Asia/Dacca",
326
+ "Asia/Damascus",
327
+ "Asia/Dhaka",
328
+ "Asia/Dili",
329
+ "Asia/Dubai",
330
+ "Asia/Dushanbe",
331
+ "Asia/Famagusta",
332
+ "Asia/Gaza",
333
+ "Asia/Harbin",
334
+ "Asia/Hebron",
335
+ "Asia/Ho_Chi_Minh",
336
+ "Asia/Hong_Kong",
337
+ "Asia/Hovd",
338
+ "Asia/Irkutsk",
339
+ "Asia/Istanbul",
340
+ "Asia/Jakarta",
341
+ "Asia/Jayapura",
342
+ "Asia/Jerusalem",
343
+ "Asia/Kabul",
344
+ "Asia/Kamchatka",
345
+ "Asia/Karachi",
346
+ "Asia/Kashgar",
347
+ "Asia/Kathmandu",
348
+ "Asia/Katmandu",
349
+ "Asia/Khandyga",
350
+ "Asia/Kolkata",
351
+ "Asia/Krasnoyarsk",
352
+ "Asia/Kuala_Lumpur",
353
+ "Asia/Kuching",
354
+ "Asia/Kuwait",
355
+ "Asia/Macao",
356
+ "Asia/Macau",
357
+ "Asia/Magadan",
358
+ "Asia/Makassar",
359
+ "Asia/Manila",
360
+ "Asia/Muscat",
361
+ "Asia/Nicosia",
362
+ "Asia/Novokuznetsk",
363
+ "Asia/Novosibirsk",
364
+ "Asia/Omsk",
365
+ "Asia/Oral",
366
+ "Asia/Phnom_Penh",
367
+ "Asia/Pontianak",
368
+ "Asia/Pyongyang",
369
+ "Asia/Qatar",
370
+ "Asia/Qostanay",
371
+ "Asia/Qyzylorda",
372
+ "Asia/Rangoon",
373
+ "Asia/Riyadh",
374
+ "Asia/Saigon",
375
+ "Asia/Sakhalin",
376
+ "Asia/Samarkand",
377
+ "Asia/Seoul",
378
+ "Asia/Shanghai",
379
+ "Asia/Singapore",
380
+ "Asia/Srednekolymsk",
381
+ "Asia/Taipei",
382
+ "Asia/Tashkent",
383
+ "Asia/Tbilisi",
384
+ "Asia/Tehran",
385
+ "Asia/Tel_Aviv",
386
+ "Asia/Thimbu",
387
+ "Asia/Thimphu",
388
+ "Asia/Tokyo",
389
+ "Asia/Tomsk",
390
+ "Asia/Ujung_Pandang",
391
+ "Asia/Ulaanbaatar",
392
+ "Asia/Ulan_Bator",
393
+ "Asia/Urumqi",
394
+ "Asia/Ust-Nera",
395
+ "Asia/Vientiane",
396
+ "Asia/Vladivostok",
397
+ "Asia/Yakutsk",
398
+ "Asia/Yangon",
399
+ "Asia/Yekaterinburg",
400
+ "Asia/Yerevan",
401
+ "Atlantic/Azores",
402
+ "Atlantic/Bermuda",
403
+ "Atlantic/Canary",
404
+ "Atlantic/Cape_Verde",
405
+ "Atlantic/Faeroe",
406
+ "Atlantic/Faroe",
407
+ "Atlantic/Jan_Mayen",
408
+ "Atlantic/Madeira",
409
+ "Atlantic/Reykjavik",
410
+ "Atlantic/South_Georgia",
411
+ "Atlantic/St_Helena",
412
+ "Atlantic/Stanley",
413
+ "Australia/ACT",
414
+ "Australia/Adelaide",
415
+ "Australia/Brisbane",
416
+ "Australia/Broken_Hill",
417
+ "Australia/Canberra",
418
+ "Australia/Currie",
419
+ "Australia/Darwin",
420
+ "Australia/Eucla",
421
+ "Australia/Hobart",
422
+ "Australia/LHI",
423
+ "Australia/Lindeman",
424
+ "Australia/Lord_Howe",
425
+ "Australia/Melbourne",
426
+ "Australia/NSW",
427
+ "Australia/North",
428
+ "Australia/Perth",
429
+ "Australia/Queensland",
430
+ "Australia/South",
431
+ "Australia/Sydney",
432
+ "Australia/Tasmania",
433
+ "Australia/Victoria",
434
+ "Australia/West",
435
+ "Australia/Yancowinna",
436
+ "Brazil/Acre",
437
+ "Brazil/DeNoronha",
438
+ "Brazil/East",
439
+ "Brazil/West",
440
+ "CET",
441
+ "CST6CDT",
442
+ "Canada/Atlantic",
443
+ "Canada/Central",
444
+ "Canada/Eastern",
445
+ "Canada/Mountain",
446
+ "Canada/Newfoundland",
447
+ "Canada/Pacific",
448
+ "Canada/Saskatchewan",
449
+ "Canada/Yukon",
450
+ "Chile/Continental",
451
+ "Chile/EasterIsland",
452
+ "Cuba",
453
+ "EET",
454
+ "EST",
455
+ "EST5EDT",
456
+ "Egypt",
457
+ "Eire",
458
+ "Etc/GMT",
459
+ "Etc/GMT+0",
460
+ "Etc/GMT+1",
461
+ "Etc/GMT+10",
462
+ "Etc/GMT+11",
463
+ "Etc/GMT+12",
464
+ "Etc/GMT+2",
465
+ "Etc/GMT+3",
466
+ "Etc/GMT+4",
467
+ "Etc/GMT+5",
468
+ "Etc/GMT+6",
469
+ "Etc/GMT+7",
470
+ "Etc/GMT+8",
471
+ "Etc/GMT+9",
472
+ "Etc/GMT-0",
473
+ "Etc/GMT-1",
474
+ "Etc/GMT-10",
475
+ "Etc/GMT-11",
476
+ "Etc/GMT-12",
477
+ "Etc/GMT-13",
478
+ "Etc/GMT-14",
479
+ "Etc/GMT-2",
480
+ "Etc/GMT-3",
481
+ "Etc/GMT-4",
482
+ "Etc/GMT-5",
483
+ "Etc/GMT-6",
484
+ "Etc/GMT-7",
485
+ "Etc/GMT-8",
486
+ "Etc/GMT-9",
487
+ "Etc/GMT0",
488
+ "Etc/Greenwich",
489
+ "Etc/UCT",
490
+ "Etc/UTC",
491
+ "Etc/Universal",
492
+ "Etc/Zulu",
493
+ "Europe/Amsterdam",
494
+ "Europe/Andorra",
495
+ "Europe/Astrakhan",
496
+ "Europe/Athens",
497
+ "Europe/Belfast",
498
+ "Europe/Belgrade",
499
+ "Europe/Berlin",
500
+ "Europe/Bratislava",
501
+ "Europe/Brussels",
502
+ "Europe/Bucharest",
503
+ "Europe/Budapest",
504
+ "Europe/Busingen",
505
+ "Europe/Chisinau",
506
+ "Europe/Copenhagen",
507
+ "Europe/Dublin",
508
+ "Europe/Gibraltar",
509
+ "Europe/Guernsey",
510
+ "Europe/Helsinki",
511
+ "Europe/Isle_of_Man",
512
+ "Europe/Istanbul",
513
+ "Europe/Jersey",
514
+ "Europe/Kaliningrad",
515
+ "Europe/Kiev",
516
+ "Europe/Kirov",
517
+ "Europe/Kyiv",
518
+ "Europe/Lisbon",
519
+ "Europe/Ljubljana",
520
+ "Europe/London",
521
+ "Europe/Luxembourg",
522
+ "Europe/Madrid",
523
+ "Europe/Malta",
524
+ "Europe/Mariehamn",
525
+ "Europe/Minsk",
526
+ "Europe/Monaco",
527
+ "Europe/Moscow",
528
+ "Europe/Nicosia",
529
+ "Europe/Oslo",
530
+ "Europe/Paris",
531
+ "Europe/Podgorica",
532
+ "Europe/Prague",
533
+ "Europe/Riga",
534
+ "Europe/Rome",
535
+ "Europe/Samara",
536
+ "Europe/San_Marino",
537
+ "Europe/Sarajevo",
538
+ "Europe/Saratov",
539
+ "Europe/Simferopol",
540
+ "Europe/Skopje",
541
+ "Europe/Sofia",
542
+ "Europe/Stockholm",
543
+ "Europe/Tallinn",
544
+ "Europe/Tirane",
545
+ "Europe/Tiraspol",
546
+ "Europe/Ulyanovsk",
547
+ "Europe/Uzhgorod",
548
+ "Europe/Vaduz",
549
+ "Europe/Vatican",
550
+ "Europe/Vienna",
551
+ "Europe/Vilnius",
552
+ "Europe/Volgograd",
553
+ "Europe/Warsaw",
554
+ "Europe/Zagreb",
555
+ "Europe/Zaporozhye",
556
+ "Europe/Zurich",
557
+ "GB",
558
+ "GB-Eire",
559
+ "GMT",
560
+ "GMT+0",
561
+ "GMT-0",
562
+ "GMT0",
563
+ "Greenwich",
564
+ "HST",
565
+ "Hongkong",
566
+ "Iceland",
567
+ "Indian/Antananarivo",
568
+ "Indian/Chagos",
569
+ "Indian/Christmas",
570
+ "Indian/Cocos",
571
+ "Indian/Comoro",
572
+ "Indian/Kerguelen",
573
+ "Indian/Mahe",
574
+ "Indian/Maldives",
575
+ "Indian/Mauritius",
576
+ "Indian/Mayotte",
577
+ "Indian/Reunion",
578
+ "Iran",
579
+ "Israel",
580
+ "Jamaica",
581
+ "Japan",
582
+ "Kwajalein",
583
+ "Libya",
584
+ "MET",
585
+ "MST",
586
+ "MST7MDT",
587
+ "Mexico/BajaNorte",
588
+ "Mexico/BajaSur",
589
+ "Mexico/General",
590
+ "NZ",
591
+ "NZ-CHAT",
592
+ "Navajo",
593
+ "PRC",
594
+ "PST8PDT",
595
+ "Pacific/Apia",
596
+ "Pacific/Auckland",
597
+ "Pacific/Bougainville",
598
+ "Pacific/Chatham",
599
+ "Pacific/Chuuk",
600
+ "Pacific/Easter",
601
+ "Pacific/Efate",
602
+ "Pacific/Enderbury",
603
+ "Pacific/Fakaofo",
604
+ "Pacific/Fiji",
605
+ "Pacific/Funafuti",
606
+ "Pacific/Galapagos",
607
+ "Pacific/Gambier",
608
+ "Pacific/Guadalcanal",
609
+ "Pacific/Guam",
610
+ "Pacific/Honolulu",
611
+ "Pacific/Johnston",
612
+ "Pacific/Kanton",
613
+ "Pacific/Kiritimati",
614
+ "Pacific/Kosrae",
615
+ "Pacific/Kwajalein",
616
+ "Pacific/Majuro",
617
+ "Pacific/Marquesas",
618
+ "Pacific/Midway",
619
+ "Pacific/Nauru",
620
+ "Pacific/Niue",
621
+ "Pacific/Norfolk",
622
+ "Pacific/Noumea",
623
+ "Pacific/Pago_Pago",
624
+ "Pacific/Palau",
625
+ "Pacific/Pitcairn",
626
+ "Pacific/Pohnpei",
627
+ "Pacific/Ponape",
628
+ "Pacific/Port_Moresby",
629
+ "Pacific/Rarotonga",
630
+ "Pacific/Saipan",
631
+ "Pacific/Samoa",
632
+ "Pacific/Tahiti",
633
+ "Pacific/Tarawa",
634
+ "Pacific/Tongatapu",
635
+ "Pacific/Truk",
636
+ "Pacific/Wake",
637
+ "Pacific/Wallis",
638
+ "Pacific/Yap",
639
+ "Poland",
640
+ "Portugal",
641
+ "ROC",
642
+ "ROK",
643
+ "Singapore",
644
+ "Turkey",
645
+ "UCT",
646
+ "US/Alaska",
647
+ "US/Aleutian",
648
+ "US/Arizona",
649
+ "US/Central",
650
+ "US/East-Indiana",
651
+ "US/Eastern",
652
+ "US/Hawaii",
653
+ "US/Indiana-Starke",
654
+ "US/Michigan",
655
+ "US/Mountain",
656
+ "US/Pacific",
657
+ "US/Samoa",
658
+ "UTC",
659
+ "Universal",
660
+ "W-SU",
661
+ "WET",
662
+ "Zulu",
663
+ )
664
+ }
665
+
666
+
667
+ def subsecond_precision(timestamp_literal: str) -> int:
668
+ """
669
+ Given an ISO-8601 timestamp literal, eg '2023-01-01 12:13:14.123456+00:00'
670
+ figure out its subsecond precision so we can construct types like DATETIME(6)
671
+
672
+ Note that in practice, this is either 3 or 6 digits (3 = millisecond precision, 6 = microsecond precision)
673
+ - 6 is the maximum because strftime's '%f' formats to microseconds and almost every database supports microsecond precision in timestamps
674
+ - Except Presto/Trino which in most cases only supports millisecond precision but will still honour '%f' and format to microseconds (replacing the remaining 3 digits with 0's)
675
+ - Python prior to 3.11 only supports 0, 3 or 6 digits in a timestamp literal. Any other amounts will throw a 'ValueError: Invalid isoformat string:' error
676
+ """
677
+ try:
678
+ parsed = datetime.datetime.fromisoformat(timestamp_literal)
679
+ subsecond_digit_count = len(str(parsed.microsecond).rstrip("0"))
680
+ precision = 0
681
+ if subsecond_digit_count > 3:
682
+ precision = 6
683
+ elif subsecond_digit_count > 0:
684
+ precision = 3
685
+ return precision
686
+ except ValueError:
687
+ return 0