altimate-code 0.5.1 → 0.5.3

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 (102) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +1 -5
  3. package/bin/altimate +6 -0
  4. package/bin/altimate-code +6 -0
  5. package/dbt-tools/bin/altimate-dbt +2 -0
  6. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/__init__.py +0 -0
  7. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/fetch_schema.py +35 -0
  8. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/utils.py +353 -0
  9. package/dbt-tools/dist/altimate_python_packages/altimate_packages/altimate/validate_sql.py +114 -0
  10. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/__init__.py +178 -0
  11. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/__main__.py +96 -0
  12. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/_typing.py +17 -0
  13. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/__init__.py +3 -0
  14. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/__init__.py +18 -0
  15. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/_typing.py +18 -0
  16. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/column.py +332 -0
  17. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/dataframe.py +866 -0
  18. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/functions.py +1267 -0
  19. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/group.py +59 -0
  20. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/normalize.py +78 -0
  21. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/operations.py +53 -0
  22. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/readwriter.py +108 -0
  23. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/session.py +190 -0
  24. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/transforms.py +9 -0
  25. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/types.py +212 -0
  26. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/util.py +32 -0
  27. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dataframe/sql/window.py +134 -0
  28. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/__init__.py +118 -0
  29. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/athena.py +166 -0
  30. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/bigquery.py +1331 -0
  31. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/clickhouse.py +1393 -0
  32. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/databricks.py +131 -0
  33. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/dialect.py +1915 -0
  34. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/doris.py +561 -0
  35. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/drill.py +157 -0
  36. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/druid.py +20 -0
  37. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/duckdb.py +1159 -0
  38. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/dune.py +16 -0
  39. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/hive.py +787 -0
  40. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/materialize.py +94 -0
  41. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/mysql.py +1324 -0
  42. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/oracle.py +378 -0
  43. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/postgres.py +778 -0
  44. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/presto.py +788 -0
  45. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/prql.py +203 -0
  46. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/redshift.py +448 -0
  47. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/risingwave.py +78 -0
  48. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/snowflake.py +1464 -0
  49. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/spark.py +202 -0
  50. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/spark2.py +349 -0
  51. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/sqlite.py +320 -0
  52. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/starrocks.py +343 -0
  53. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/tableau.py +61 -0
  54. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/teradata.py +356 -0
  55. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/trino.py +115 -0
  56. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/dialects/tsql.py +1403 -0
  57. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/diff.py +456 -0
  58. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/errors.py +93 -0
  59. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/__init__.py +95 -0
  60. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/context.py +101 -0
  61. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/env.py +246 -0
  62. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/python.py +460 -0
  63. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/executor/table.py +155 -0
  64. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/expressions.py +8870 -0
  65. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/generator.py +4993 -0
  66. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/helper.py +582 -0
  67. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/jsonpath.py +227 -0
  68. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/lineage.py +423 -0
  69. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/__init__.py +11 -0
  70. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/annotate_types.py +589 -0
  71. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/canonicalize.py +222 -0
  72. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_ctes.py +43 -0
  73. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_joins.py +181 -0
  74. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/eliminate_subqueries.py +189 -0
  75. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/isolate_table_selects.py +50 -0
  76. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/merge_subqueries.py +415 -0
  77. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/normalize.py +200 -0
  78. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/normalize_identifiers.py +64 -0
  79. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/optimize_joins.py +91 -0
  80. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/optimizer.py +94 -0
  81. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/pushdown_predicates.py +222 -0
  82. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/pushdown_projections.py +172 -0
  83. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify.py +104 -0
  84. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify_columns.py +1024 -0
  85. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/qualify_tables.py +155 -0
  86. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/scope.py +904 -0
  87. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/simplify.py +1587 -0
  88. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/optimizer/unnest_subqueries.py +302 -0
  89. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/parser.py +8501 -0
  90. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/planner.py +463 -0
  91. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/schema.py +588 -0
  92. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/serde.py +68 -0
  93. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/time.py +687 -0
  94. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/tokens.py +1520 -0
  95. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/transforms.py +1020 -0
  96. package/dbt-tools/dist/altimate_python_packages/altimate_packages/sqlglot/trie.py +81 -0
  97. package/dbt-tools/dist/altimate_python_packages/dbt_core_integration.py +825 -0
  98. package/dbt-tools/dist/altimate_python_packages/dbt_utils.py +157 -0
  99. package/dbt-tools/dist/index.js +23859 -0
  100. package/package.json +13 -13
  101. package/postinstall.mjs +42 -0
  102. package/skills/altimate-setup/SKILL.md +31 -0
@@ -0,0 +1,157 @@
1
+ import os
2
+ import sys
3
+ import contextlib
4
+ from typing import (
5
+ Dict,
6
+ List,
7
+ Optional,
8
+ )
9
+ from decimal import Decimal
10
+ from collections.abc import Iterable
11
+ from datetime import date, datetime, time
12
+
13
+ try:
14
+ import agate
15
+ HAS_AGATE = True
16
+ except ImportError:
17
+ HAS_AGATE = False
18
+
19
+
20
+ def to_dict(obj, visited=None):
21
+ if visited is None:
22
+ visited = set()
23
+
24
+ # Check for circular references using object id
25
+ obj_id = id(obj)
26
+ if obj_id in visited:
27
+ return "<circular reference>"
28
+
29
+ if HAS_AGATE and isinstance(obj, agate.Table):
30
+ visited.add(obj_id)
31
+ result = {
32
+ "rows": [to_dict(row, visited) for row in obj.rows],
33
+ "column_names": obj.column_names,
34
+ "column_types": list(map(lambda x: x.__class__.__name__, obj.column_types)),
35
+ }
36
+ visited.remove(obj_id)
37
+ return result
38
+ if isinstance(obj, str):
39
+ return obj
40
+ if isinstance(obj, Decimal):
41
+ return float(obj)
42
+ if isinstance(obj, (datetime, date, time)):
43
+ return obj.isoformat()
44
+ elif isinstance(obj, dict):
45
+ visited.add(obj_id)
46
+ result = dict((key, to_dict(val, visited)) for key, val in obj.items())
47
+ visited.remove(obj_id)
48
+ return result
49
+ elif isinstance(obj, Iterable):
50
+ visited.add(obj_id)
51
+ result = [to_dict(val, visited) for val in obj]
52
+ visited.remove(obj_id)
53
+ return result
54
+ elif hasattr(obj, "__dict__"):
55
+ visited.add(obj_id)
56
+ result = to_dict(vars(obj), visited)
57
+ visited.remove(obj_id)
58
+ return result
59
+ elif hasattr(obj, "__slots__"):
60
+ visited.add(obj_id)
61
+ result = to_dict(
62
+ dict((name, getattr(obj, name)) for name in getattr(obj, "__slots__")), visited
63
+ )
64
+ visited.remove(obj_id)
65
+ return result
66
+ return obj
67
+
68
+
69
+ @contextlib.contextmanager
70
+ def add_path(path):
71
+ sys.path.append(path)
72
+ try:
73
+ yield
74
+ finally:
75
+ sys.path.remove(path)
76
+
77
+
78
+ def validate_whether_sql_has_columns(sql: str, dialect: str):
79
+ try:
80
+ ALTIMATE_PACKAGE_PATH = os.path.join(
81
+ os.path.dirname(os.path.abspath(__file__)), "altimate_packages"
82
+ )
83
+ with add_path(ALTIMATE_PACKAGE_PATH):
84
+ from altimate.fetch_schema import validate_whether_sql_has_columns
85
+
86
+ return validate_whether_sql_has_columns(sql, dialect)
87
+ except Exception as e:
88
+ raise Exception(str(e))
89
+
90
+
91
+ def validate_sql(
92
+ sql: str,
93
+ dialect: str,
94
+ models: List[Dict],
95
+ ):
96
+ try:
97
+ ALTIMATE_PACKAGE_PATH = os.path.join(
98
+ os.path.dirname(os.path.abspath(__file__)), "altimate_packages"
99
+ )
100
+ with add_path(ALTIMATE_PACKAGE_PATH):
101
+ from altimate.validate_sql import validate_sql_from_models
102
+
103
+ return validate_sql_from_models(sql, dialect, models)
104
+ except Exception as e:
105
+ raise Exception(str(e))
106
+
107
+ def fetch_schema_from_sql(sql: str, dialect: str):
108
+ try:
109
+ ALTIMATE_PACKAGE_PATH = os.path.join(
110
+ os.path.dirname(os.path.abspath(__file__)), "altimate_packages"
111
+ )
112
+ with add_path(ALTIMATE_PACKAGE_PATH):
113
+ from altimate.fetch_schema import fetch_schema
114
+
115
+ return fetch_schema(sql, dialect)
116
+ except Exception as e:
117
+ raise Exception(str(e))
118
+
119
+
120
+ def project_healthcheck(
121
+ manifest_path, catalog_path=None, config_path=None, config=None, token=None, tenant=None, backend_url: Optional[str] = None,
122
+ ):
123
+ try:
124
+ import logging
125
+ import json
126
+
127
+ from datapilot.config.config import load_config
128
+ from datapilot.core.platforms.dbt.utils import load_catalog
129
+ from datapilot.core.platforms.dbt.utils import load_manifest
130
+ from datapilot.core.platforms.dbt.constants import MODEL
131
+ from datapilot.core.platforms.dbt.executor import DBTInsightGenerator
132
+
133
+ logging.basicConfig(level=logging.INFO)
134
+ manifest = load_manifest(manifest_path)
135
+ catalog = load_catalog(catalog_path) if catalog_path else None
136
+ if not config and config_path:
137
+ config = load_config(config_path)
138
+ insight_generator = DBTInsightGenerator(
139
+ manifest=manifest,
140
+ catalog=catalog,
141
+ config=config,
142
+ token=token,
143
+ instance_name=tenant,
144
+ backend_url=backend_url,
145
+ )
146
+ reports = insight_generator.run()
147
+
148
+ # package_insights = reports[PROJECT]
149
+ model_insights = {
150
+ k: [json.loads(item.json()) for item in v]
151
+ for k, v in reports[MODEL].items()
152
+ }
153
+
154
+ return {"model_insights": model_insights}
155
+
156
+ except Exception as e:
157
+ raise Exception(str(e))