pytrilogy 0.0.2.57__py3-none-any.whl → 0.0.3.0__py3-none-any.whl
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.
- {pytrilogy-0.0.2.57.dist-info → pytrilogy-0.0.3.0.dist-info}/METADATA +9 -2
- pytrilogy-0.0.3.0.dist-info/RECORD +99 -0
- {pytrilogy-0.0.2.57.dist-info → pytrilogy-0.0.3.0.dist-info}/WHEEL +1 -1
- trilogy/__init__.py +2 -2
- trilogy/core/enums.py +1 -7
- trilogy/core/env_processor.py +17 -5
- trilogy/core/environment_helpers.py +11 -25
- trilogy/core/exceptions.py +4 -0
- trilogy/core/functions.py +695 -261
- trilogy/core/graph_models.py +10 -10
- trilogy/core/internal.py +11 -2
- trilogy/core/models/__init__.py +0 -0
- trilogy/core/models/author.py +2110 -0
- trilogy/core/models/build.py +1845 -0
- trilogy/core/models/build_environment.py +151 -0
- trilogy/core/models/core.py +370 -0
- trilogy/core/models/datasource.py +297 -0
- trilogy/core/models/environment.py +696 -0
- trilogy/core/models/execute.py +931 -0
- trilogy/core/optimization.py +17 -22
- trilogy/core/optimizations/base_optimization.py +1 -1
- trilogy/core/optimizations/inline_constant.py +6 -6
- trilogy/core/optimizations/inline_datasource.py +17 -11
- trilogy/core/optimizations/predicate_pushdown.py +17 -16
- trilogy/core/processing/concept_strategies_v3.py +181 -146
- trilogy/core/processing/graph_utils.py +1 -1
- trilogy/core/processing/node_generators/basic_node.py +19 -18
- trilogy/core/processing/node_generators/common.py +51 -45
- trilogy/core/processing/node_generators/filter_node.py +26 -13
- trilogy/core/processing/node_generators/group_node.py +26 -21
- trilogy/core/processing/node_generators/group_to_node.py +13 -10
- trilogy/core/processing/node_generators/multiselect_node.py +60 -43
- trilogy/core/processing/node_generators/node_merge_node.py +76 -38
- trilogy/core/processing/node_generators/rowset_node.py +59 -36
- trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +27 -34
- trilogy/core/processing/node_generators/select_merge_node.py +161 -64
- trilogy/core/processing/node_generators/select_node.py +13 -13
- trilogy/core/processing/node_generators/union_node.py +12 -11
- trilogy/core/processing/node_generators/unnest_node.py +9 -7
- trilogy/core/processing/node_generators/window_node.py +19 -16
- trilogy/core/processing/nodes/__init__.py +21 -18
- trilogy/core/processing/nodes/base_node.py +92 -77
- trilogy/core/processing/nodes/filter_node.py +19 -13
- trilogy/core/processing/nodes/group_node.py +55 -40
- trilogy/core/processing/nodes/merge_node.py +47 -38
- trilogy/core/processing/nodes/select_node_v2.py +54 -40
- trilogy/core/processing/nodes/union_node.py +5 -7
- trilogy/core/processing/nodes/unnest_node.py +7 -11
- trilogy/core/processing/nodes/window_node.py +9 -4
- trilogy/core/processing/utility.py +108 -80
- trilogy/core/query_processor.py +67 -49
- trilogy/core/statements/__init__.py +0 -0
- trilogy/core/statements/author.py +413 -0
- trilogy/core/statements/build.py +0 -0
- trilogy/core/statements/common.py +30 -0
- trilogy/core/statements/execute.py +42 -0
- trilogy/dialect/base.py +152 -111
- trilogy/dialect/common.py +9 -10
- trilogy/dialect/duckdb.py +1 -1
- trilogy/dialect/enums.py +4 -2
- trilogy/dialect/presto.py +1 -1
- trilogy/dialect/sql_server.py +1 -1
- trilogy/executor.py +44 -32
- trilogy/hooks/base_hook.py +6 -4
- trilogy/hooks/query_debugger.py +110 -93
- trilogy/parser.py +1 -1
- trilogy/parsing/common.py +303 -64
- trilogy/parsing/parse_engine.py +263 -617
- trilogy/parsing/render.py +50 -26
- trilogy/scripts/trilogy.py +2 -1
- pytrilogy-0.0.2.57.dist-info/RECORD +0 -87
- trilogy/core/models.py +0 -4960
- {pytrilogy-0.0.2.57.dist-info → pytrilogy-0.0.3.0.dist-info}/LICENSE.md +0 -0
- {pytrilogy-0.0.2.57.dist-info → pytrilogy-0.0.3.0.dist-info}/entry_points.txt +0 -0
- {pytrilogy-0.0.2.57.dist-info → pytrilogy-0.0.3.0.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: pytrilogy
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3.0
|
|
4
4
|
Summary: Declarative, typed query language that compiles to SQL.
|
|
5
5
|
Home-page:
|
|
6
6
|
Author:
|
|
@@ -27,6 +27,13 @@ Provides-Extra: bigquery
|
|
|
27
27
|
Requires-Dist: sqlalchemy-bigquery; extra == "bigquery"
|
|
28
28
|
Provides-Extra: snowflake
|
|
29
29
|
Requires-Dist: snowflake-sqlalchemy; extra == "snowflake"
|
|
30
|
+
Dynamic: author-email
|
|
31
|
+
Dynamic: classifier
|
|
32
|
+
Dynamic: description
|
|
33
|
+
Dynamic: description-content-type
|
|
34
|
+
Dynamic: provides-extra
|
|
35
|
+
Dynamic: requires-dist
|
|
36
|
+
Dynamic: summary
|
|
30
37
|
|
|
31
38
|
## Trilogy
|
|
32
39
|
[](https://trilogydata.dev/)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
trilogy/__init__.py,sha256=NutBQIuxEOak6wIOXS3HLb_AXutozJpl1V0dd6o3D-Y,302
|
|
2
|
+
trilogy/compiler.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
trilogy/constants.py,sha256=qZ1d0hoKPPV2HHCoFwPYTVB7b6bXjpWvXd3lE-zEhy8,1494
|
|
4
|
+
trilogy/engine.py,sha256=yOPnR7XCjWG82Gym_LLZBkYKKJdLCvqdCyt8zguNcnM,1103
|
|
5
|
+
trilogy/executor.py,sha256=nvi8F8ls7stAXvYUIRs6zh8X4q6O_plZcfazPnL-hKw,16745
|
|
6
|
+
trilogy/parser.py,sha256=o4cfk3j3yhUFoiDKq9ZX_GjBF3dKhDjXEwb63rcBkBM,293
|
|
7
|
+
trilogy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
trilogy/utility.py,sha256=euQccZLKoYBz0LNg5tzLlvv2YHvXh9HArnYp1V3uXsM,763
|
|
9
|
+
trilogy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
trilogy/core/constants.py,sha256=7XaCpZn5mQmjTobbeBn56SzPWq9eMNDfzfsRU-fP0VE,171
|
|
11
|
+
trilogy/core/enums.py,sha256=aTFXL6nckmG0hpNLdCxI2kAT26cIsZPahF-pHzLQ9uc,7085
|
|
12
|
+
trilogy/core/env_processor.py,sha256=pFsxnluKIusGKx1z7tTnfsd_xZcPy9pZDungkjkyvI0,3170
|
|
13
|
+
trilogy/core/environment_helpers.py,sha256=oOpewPwMp8xOtx2ayeeyuLNUwr-cli7UanHKot5ebNY,7627
|
|
14
|
+
trilogy/core/ergonomics.py,sha256=ASLDd0RqKWrZiG3XcKHo8nyTjaB_8xfE9t4NZ1UvGpc,1639
|
|
15
|
+
trilogy/core/exceptions.py,sha256=JPYyBcit3T_pRtlHdtKSeVJkIyWUTozW2aaut25A2xI,673
|
|
16
|
+
trilogy/core/functions.py,sha256=7Pq9jYSJd45L2pxT7AI-_rXVZmeLnmTPp8d1lA4z4Vk,24440
|
|
17
|
+
trilogy/core/graph_models.py,sha256=z17EoO8oky2QOuO6E2aMWoVNKEVJFhLdsQZOhC4fNLU,2079
|
|
18
|
+
trilogy/core/internal.py,sha256=iicDBlC6nM8d7e7jqzf_ZOmpUsW8yrr2AA8AqEiLx-s,1577
|
|
19
|
+
trilogy/core/optimization.py,sha256=xGO8piVsLrpqrx-Aid_Y56_5slSv4eZmlP64hCHRiEc,7957
|
|
20
|
+
trilogy/core/query_processor.py,sha256=qh-72MBOpnhIrmBQW4_lLCvJS-H3Hq_vuy--mWamw7U,19336
|
|
21
|
+
trilogy/core/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
trilogy/core/models/author.py,sha256=Ai-AFBsr4sbm3T0WE3TxFwB73foGg7-uKUTyQtoBEXQ,67093
|
|
23
|
+
trilogy/core/models/build.py,sha256=uy9sJUHTnsY9sdpyzA8egPENnyTU9fryCKz3p8H0b4I,55562
|
|
24
|
+
trilogy/core/models/build_environment.py,sha256=8UggvlPU708GZWYPJMc_ou2r7M3TY2g69eqGvz03YX0,5528
|
|
25
|
+
trilogy/core/models/core.py,sha256=yie1uuq62uOQ5fjob9NMJbdvQPrCErXUT7JTCuYRyjI,9697
|
|
26
|
+
trilogy/core/models/datasource.py,sha256=c0tGxyH2WwTmAD047tr69U0a6GNVf-ug26H68yii7DA,9257
|
|
27
|
+
trilogy/core/models/environment.py,sha256=E7vdrhN0DR6_UKpxRP1KB3w9_GEcCfsKffQ4uv0_CzA,24779
|
|
28
|
+
trilogy/core/models/execute.py,sha256=ABylFQgtavjjCfFkEsFdUwfMB4UBQLHjdzQ9E67QlAE,33521
|
|
29
|
+
trilogy/core/optimizations/__init__.py,sha256=EBanqTXEzf1ZEYjAneIWoIcxtMDite5-n2dQ5xcfUtg,356
|
|
30
|
+
trilogy/core/optimizations/base_optimization.py,sha256=gzDOKImoFn36k7XBD3ysEYDnbnb6vdVIztUfFQZsGnM,513
|
|
31
|
+
trilogy/core/optimizations/inline_constant.py,sha256=lvNTIXaLNkw3HseJyXyDNk5R52doLU9sIg3pmU2_S08,1332
|
|
32
|
+
trilogy/core/optimizations/inline_datasource.py,sha256=AHuTGh2x0GQ8usOe0NiFncfTFQ_KogdgDl4uucmhIbI,4241
|
|
33
|
+
trilogy/core/optimizations/predicate_pushdown.py,sha256=g4AYE8Aw_iMlAh68TjNXGP754NTurrDduFECkUjoBnc,9399
|
|
34
|
+
trilogy/core/processing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
+
trilogy/core/processing/concept_strategies_v3.py,sha256=StDlgfoUIeuh2IoZlRlLgkJp5hA8polgdMmOzL_wLCo,39265
|
|
36
|
+
trilogy/core/processing/graph_utils.py,sha256=8QUVrkE9j-9C1AyrCb1nQEh8daCe0u1HuXl-Te85lag,1205
|
|
37
|
+
trilogy/core/processing/utility.py,sha256=Oc5tLGeDDpzhbfo2ZcF8ex1kez-NcJDMcG2Lm5BjS4c,20548
|
|
38
|
+
trilogy/core/processing/node_generators/__init__.py,sha256=s_YV1OYc336DuS9591259qjI_K_CtOCuhkf4t2aOgYs,733
|
|
39
|
+
trilogy/core/processing/node_generators/basic_node.py,sha256=UVsXMn6jTjm_ofVFt218jAS11s4RV4zD781vP4im-GI,3371
|
|
40
|
+
trilogy/core/processing/node_generators/common.py,sha256=ZsDzThjm_mAtdQpKAg8QIJiPVZ4KuUkKyilj4eOhSDs,9439
|
|
41
|
+
trilogy/core/processing/node_generators/filter_node.py,sha256=rlY7TbgjJlGhahYgdCIJpJbaSREAGVJEsyUIGaA38O0,8271
|
|
42
|
+
trilogy/core/processing/node_generators/group_node.py,sha256=94uoGZWvBKJ1eqjbDHCbZuRqMkux_lfpfkGZgAJTNCY,5876
|
|
43
|
+
trilogy/core/processing/node_generators/group_to_node.py,sha256=E5bEjovSx422d_MlAUCDFdY4P2WJVp61BmWwltkhzA8,3095
|
|
44
|
+
trilogy/core/processing/node_generators/multiselect_node.py,sha256=z9FQOxxUvxW31a0TckFfAvnuvU8vP1GyN224RTbXUAk,7114
|
|
45
|
+
trilogy/core/processing/node_generators/node_merge_node.py,sha256=sv55oynfqgpHEpo1OEtVDri-5fywzPhDlR85qaWikvY,16195
|
|
46
|
+
trilogy/core/processing/node_generators/rowset_node.py,sha256=x3rrdUkywAFiaYRk8lv-ra8KAdmBa8dLXj0FO55lz08,6213
|
|
47
|
+
trilogy/core/processing/node_generators/select_merge_node.py,sha256=VHCPMbnKfg7AOfoYa6PKxpNni-j5JEfliNUiltmZhds,19698
|
|
48
|
+
trilogy/core/processing/node_generators/select_node.py,sha256=Y-zO0AFkTrpi2LyebjpyHU7WWANr7nKZSS9rY7DH4Wo,1888
|
|
49
|
+
trilogy/core/processing/node_generators/union_node.py,sha256=zuMSmgF170vzlp2BBQEhKbqUMjVl2xQDqUB82Dhv-VU,2536
|
|
50
|
+
trilogy/core/processing/node_generators/unnest_node.py,sha256=cOEKnMRzXUW3bwmiOlgn3E1-B38osng0dh2pDykwITY,2410
|
|
51
|
+
trilogy/core/processing/node_generators/window_node.py,sha256=_W_bF-8nYi1fjeZ7rXg54Sf7SRDyjDOwk7S_RBoZCWM,3514
|
|
52
|
+
trilogy/core/processing/node_generators/select_helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
|
+
trilogy/core/processing/node_generators/select_helpers/datasource_injection.py,sha256=GMW07bb6hXurhF0hZLYoMAKSIS65tat5hwBjvqqPeSA,6516
|
|
54
|
+
trilogy/core/processing/nodes/__init__.py,sha256=DqPG3Y8vl5-UTeox6hn1EE6iwPIJpsM-XeZALHSgLZQ,5058
|
|
55
|
+
trilogy/core/processing/nodes/base_node.py,sha256=FHrY8GsTKPuMJklOjILbhGqCt5s1nmlj62Z-molARDA,16835
|
|
56
|
+
trilogy/core/processing/nodes/filter_node.py,sha256=5VtRfKbCORx0dV-vQfgy3gOEkmmscL9f31ExvlODwvY,2461
|
|
57
|
+
trilogy/core/processing/nodes/group_node.py,sha256=qwX1CaCZJzH6oYFlGRKbi-Q7KXOjfYKplz8JDU8oy5c,7998
|
|
58
|
+
trilogy/core/processing/nodes/merge_node.py,sha256=bEz1QU2o-fl_O-VotE5dN1GmlZPClufMvUOvL2-2Uo8,15262
|
|
59
|
+
trilogy/core/processing/nodes/select_node_v2.py,sha256=Xyfq8lU7rP7JTAd8VV0ATDNal64n4xIBgWQsOuMe_Ak,8824
|
|
60
|
+
trilogy/core/processing/nodes/union_node.py,sha256=fDFzLAUh5876X6_NM7nkhoMvHEdGJ_LpvPokpZKOhx4,1425
|
|
61
|
+
trilogy/core/processing/nodes/unnest_node.py,sha256=oLKMMNMx6PLDPlt2V5neFMFrFWxET8r6XZElAhSNkO0,2181
|
|
62
|
+
trilogy/core/processing/nodes/window_node.py,sha256=STvwheVttxSWVHB-yUQUSo-Pyz7Uk8G1txFDAbWMp-s,1380
|
|
63
|
+
trilogy/core/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
+
trilogy/core/statements/author.py,sha256=p3gLiPzXAHNNWVh8Xm9xECmywfG-LKDHB9U-Z6GdWCM,14246
|
|
65
|
+
trilogy/core/statements/build.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
|
+
trilogy/core/statements/common.py,sha256=KxEmz2ySySyZ6CTPzn0fJl5NX2KOk1RPyuUSwWhnK1g,759
|
|
67
|
+
trilogy/core/statements/execute.py,sha256=cSlvpHFOqpiZ89pPZ5GDp9Hu6j6uj-5_h21FWm_L-KM,1248
|
|
68
|
+
trilogy/dialect/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
+
trilogy/dialect/base.py,sha256=uvow18PxtFdabf59x0mAXbazV9bqGAfbBxcCAe8JaFs,40212
|
|
70
|
+
trilogy/dialect/bigquery.py,sha256=mKC3zoEU232h9RtIXJjqiZ72lWH8a6S28p6wAZKrAfg,2952
|
|
71
|
+
trilogy/dialect/common.py,sha256=cbTo_vamdp8pj9spSjGSH-bSZpy4FpNJ12k5vMvyT2Y,3942
|
|
72
|
+
trilogy/dialect/config.py,sha256=UiBY2tBbNk9owx-zxP_3lN9lErEUXhXIU_bcXA18AvU,2992
|
|
73
|
+
trilogy/dialect/duckdb.py,sha256=2tH_OetgLJoKf_f4bdeeB0ozGC8f0h_xQ271I8qD-Oo,3690
|
|
74
|
+
trilogy/dialect/enums.py,sha256=JICGp0KQhxNuVDSU36mve2XTZLbPpFRWUDkjvwni4eM,3979
|
|
75
|
+
trilogy/dialect/postgres.py,sha256=VH4EB4myjIeZTHeFU6vK00GxY9c53rCBjg2mLbdaCEE,3254
|
|
76
|
+
trilogy/dialect/presto.py,sha256=bAxaDcLL21fivPg7hmBd3HJmd0yYJdPdwNgNA5ga7DE,3391
|
|
77
|
+
trilogy/dialect/snowflake.py,sha256=wmao9p26jX5yIX5SC8sRAZTXkPGTvq6ixO693QTfhz8,2989
|
|
78
|
+
trilogy/dialect/sql_server.py,sha256=IN91uEM0MpsiVAlsYC89uMQkiVn0i86B8Tst6v9uFkU,3129
|
|
79
|
+
trilogy/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
+
trilogy/hooks/base_hook.py,sha256=I_l-NBMNC7hKTDx1JgHZPVOOCvLQ36m2oIGaR5EUMXY,1180
|
|
81
|
+
trilogy/hooks/graph_hook.py,sha256=c-vC-IXoJ_jDmKQjxQyIxyXPOuUcLIURB573gCsAfzQ,2940
|
|
82
|
+
trilogy/hooks/query_debugger.py,sha256=qds0xnW1cxH6Nv9U1L3gqSqD9OrE3TDQKEjyHyuzkFI,5558
|
|
83
|
+
trilogy/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
+
trilogy/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
|
+
trilogy/parsing/common.py,sha256=ti_2s3EEMAz5NwmctchiB0DpVPVusTehc2l3bZQdMQI,20500
|
|
86
|
+
trilogy/parsing/config.py,sha256=Z-DaefdKhPDmSXLgg5V4pebhSB0h590vI0_VtHnlukI,111
|
|
87
|
+
trilogy/parsing/exceptions.py,sha256=92E5i2frv5hj9wxObJZsZqj5T6bglvPzvdvco_vW1Zk,38
|
|
88
|
+
trilogy/parsing/helpers.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
89
|
+
trilogy/parsing/parse_engine.py,sha256=7WU9jWH8tc6PSgBo_FcDA51QuhytzPTrZYFagCRw9Ec,53869
|
|
90
|
+
trilogy/parsing/render.py,sha256=o_XuQWhcwx1lD9eGVqkqZEwkmQK0HdmWWokGBtdeH4I,17837
|
|
91
|
+
trilogy/parsing/trilogy.lark,sha256=EazfEvYPuvkPkNjUnVzFi0uD9baavugbSI8CyfawShk,12573
|
|
92
|
+
trilogy/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
|
+
trilogy/scripts/trilogy.py,sha256=1L0XrH4mVHRt1C9T1HnaDv2_kYEfbWTb5_-cBBke79w,3774
|
|
94
|
+
pytrilogy-0.0.3.0.dist-info/LICENSE.md,sha256=5ZRvtTyCCFwz1THxDTjAu3Lidds9WjPvvzgVwPSYNDo,1042
|
|
95
|
+
pytrilogy-0.0.3.0.dist-info/METADATA,sha256=z1DV_FX4ZThTyGzGCqQwyg78lSPcjDyOLO3NypXMJXk,8983
|
|
96
|
+
pytrilogy-0.0.3.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
97
|
+
pytrilogy-0.0.3.0.dist-info/entry_points.txt,sha256=0petKryjvvtEfTlbZC1AuMFumH_WQ9v8A19LvoS6G6c,54
|
|
98
|
+
pytrilogy-0.0.3.0.dist-info/top_level.txt,sha256=cAy__NW_eMAa_yT9UnUNlZLFfxcg6eimUAZ184cdNiE,8
|
|
99
|
+
pytrilogy-0.0.3.0.dist-info/RECORD,,
|
trilogy/__init__.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from trilogy.constants import CONFIG
|
|
2
|
-
from trilogy.core.models import Environment
|
|
2
|
+
from trilogy.core.models.environment import Environment
|
|
3
3
|
from trilogy.dialect.enums import Dialects
|
|
4
4
|
from trilogy.executor import Executor
|
|
5
5
|
from trilogy.parser import parse
|
|
6
6
|
|
|
7
|
-
__version__ = "0.0.
|
|
7
|
+
__version__ = "0.0.3.0"
|
|
8
8
|
|
|
9
9
|
__all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
|
trilogy/core/enums.py
CHANGED
|
@@ -38,7 +38,7 @@ class Purpose(Enum):
|
|
|
38
38
|
return super()._missing_(value)
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
class
|
|
41
|
+
class Derivation(Enum):
|
|
42
42
|
BASIC = "basic"
|
|
43
43
|
WINDOW = "window"
|
|
44
44
|
AGGREGATE = "aggregate"
|
|
@@ -323,12 +323,6 @@ class ShowCategory(Enum):
|
|
|
323
323
|
CONCEPTS = "concepts"
|
|
324
324
|
|
|
325
325
|
|
|
326
|
-
class SelectFiltering(Enum):
|
|
327
|
-
NONE = "none"
|
|
328
|
-
EXPLICIT = "explicit" # the filtering contains only selected values
|
|
329
|
-
IMPLICIT = "implicit" # the filtering contains unselected values
|
|
330
|
-
|
|
331
|
-
|
|
332
326
|
class IOType(Enum):
|
|
333
327
|
CSV = "csv"
|
|
334
328
|
|
trilogy/core/env_processor.py
CHANGED
|
@@ -3,22 +3,29 @@ from trilogy.core.graph_models import (
|
|
|
3
3
|
concept_to_node,
|
|
4
4
|
datasource_to_node,
|
|
5
5
|
)
|
|
6
|
-
from trilogy.core.models import
|
|
6
|
+
from trilogy.core.models.build import BuildConcept, BuildDatasource
|
|
7
|
+
from trilogy.core.models.build_environment import BuildEnvironment
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
def add_concept(
|
|
10
|
-
concept:
|
|
11
|
+
concept: BuildConcept, g: ReferenceGraph, concept_mapping: dict[str, BuildConcept]
|
|
11
12
|
):
|
|
12
13
|
g.add_node(concept)
|
|
13
14
|
# if we have sources, recursively add them
|
|
14
15
|
node_name = concept_to_node(concept)
|
|
15
16
|
if concept.concept_arguments:
|
|
16
17
|
for source in concept.concept_arguments:
|
|
18
|
+
if not isinstance(source, BuildConcept):
|
|
19
|
+
raise ValueError(
|
|
20
|
+
f"Invalid non-build concept {source} passed into graph generation from {concept}"
|
|
21
|
+
)
|
|
17
22
|
generic = source.with_default_grain()
|
|
18
23
|
add_concept(generic, g, concept_mapping)
|
|
19
24
|
|
|
20
25
|
g.add_edge(generic, node_name)
|
|
21
26
|
for ps_address in concept.pseudonyms:
|
|
27
|
+
if ps_address not in concept_mapping:
|
|
28
|
+
raise SyntaxError(f"Concept {concept} has invalid pseudonym {ps_address}")
|
|
22
29
|
pseudonym = concept_mapping[ps_address]
|
|
23
30
|
pseudonym = pseudonym.with_default_grain()
|
|
24
31
|
pseudonym_node = concept_to_node(pseudonym)
|
|
@@ -35,15 +42,19 @@ def add_concept(
|
|
|
35
42
|
|
|
36
43
|
|
|
37
44
|
def generate_adhoc_graph(
|
|
38
|
-
concepts: list[
|
|
39
|
-
datasources: list[
|
|
45
|
+
concepts: list[BuildConcept],
|
|
46
|
+
datasources: list[BuildDatasource],
|
|
40
47
|
restrict_to_listed: bool = False,
|
|
41
48
|
) -> ReferenceGraph:
|
|
42
49
|
g = ReferenceGraph()
|
|
43
50
|
concept_mapping = {x.address: x for x in concepts}
|
|
51
|
+
for concept in concepts:
|
|
52
|
+
if not isinstance(concept, BuildConcept):
|
|
53
|
+
raise ValueError(f"Invalid non-build concept {concept}")
|
|
44
54
|
|
|
45
55
|
# add all parsed concepts
|
|
46
56
|
for concept in concepts:
|
|
57
|
+
|
|
47
58
|
add_concept(concept, g, concept_mapping)
|
|
48
59
|
|
|
49
60
|
for dataset in datasources:
|
|
@@ -66,8 +77,9 @@ def generate_adhoc_graph(
|
|
|
66
77
|
|
|
67
78
|
|
|
68
79
|
def generate_graph(
|
|
69
|
-
environment:
|
|
80
|
+
environment: BuildEnvironment,
|
|
70
81
|
) -> ReferenceGraph:
|
|
82
|
+
|
|
71
83
|
return generate_adhoc_graph(
|
|
72
84
|
list(environment.concepts.values())
|
|
73
85
|
+ list(environment.alias_origin_lookup.values()),
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
from trilogy.constants import DEFAULT_NAMESPACE
|
|
2
2
|
from trilogy.core.enums import ConceptSource, FunctionType, Purpose
|
|
3
3
|
from trilogy.core.functions import AttrAccess
|
|
4
|
-
from trilogy.core.models import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Function,
|
|
9
|
-
Metadata,
|
|
10
|
-
StructType,
|
|
11
|
-
)
|
|
12
|
-
from trilogy.parsing.common import Meta, arg_to_datatype, process_function_args
|
|
4
|
+
from trilogy.core.models.author import Concept, Function, Metadata
|
|
5
|
+
from trilogy.core.models.core import DataType, StructType, arg_to_datatype
|
|
6
|
+
from trilogy.core.models.environment import Environment
|
|
7
|
+
from trilogy.parsing.common import Meta, process_function_args
|
|
13
8
|
|
|
14
9
|
FUNCTION_DESCRIPTION_MAPS = {
|
|
15
10
|
FunctionType.DATE: "The date part of a timestamp/date. Integer, 0-31 depending on month.",
|
|
@@ -51,16 +46,13 @@ def generate_date_concepts(concept: Concept, environment: Environment):
|
|
|
51
46
|
output_purpose=default_type,
|
|
52
47
|
arguments=[concept],
|
|
53
48
|
)
|
|
54
|
-
namespace = (
|
|
55
|
-
None if concept.namespace == DEFAULT_NAMESPACE else concept.namespace
|
|
56
|
-
)
|
|
57
49
|
new_concept = Concept(
|
|
58
50
|
name=f"{concept.name}.{fname}",
|
|
59
51
|
datatype=DataType.INTEGER,
|
|
60
52
|
purpose=default_type,
|
|
61
53
|
lineage=const_function,
|
|
62
|
-
grain=
|
|
63
|
-
namespace=namespace,
|
|
54
|
+
grain=concept.grain,
|
|
55
|
+
namespace=concept.namespace,
|
|
64
56
|
keys=set(
|
|
65
57
|
concept.address,
|
|
66
58
|
),
|
|
@@ -102,16 +94,13 @@ def generate_datetime_concepts(concept: Concept, environment: Environment):
|
|
|
102
94
|
output_purpose=default_type,
|
|
103
95
|
arguments=[concept],
|
|
104
96
|
)
|
|
105
|
-
namespace = (
|
|
106
|
-
None if concept.namespace == DEFAULT_NAMESPACE else concept.namespace
|
|
107
|
-
)
|
|
108
97
|
new_concept = Concept(
|
|
109
98
|
name=f"{concept.name}.{fname}",
|
|
110
99
|
datatype=DataType.INTEGER,
|
|
111
100
|
purpose=default_type,
|
|
112
101
|
lineage=const_function,
|
|
113
|
-
grain=
|
|
114
|
-
namespace=namespace,
|
|
102
|
+
grain=concept.grain,
|
|
103
|
+
namespace=concept.namespace,
|
|
115
104
|
keys=set(
|
|
116
105
|
concept.address,
|
|
117
106
|
),
|
|
@@ -144,16 +133,13 @@ def generate_key_concepts(concept: Concept, environment: Environment):
|
|
|
144
133
|
output_purpose=default_type,
|
|
145
134
|
arguments=[concept],
|
|
146
135
|
)
|
|
147
|
-
namespace = (
|
|
148
|
-
None if concept.namespace == DEFAULT_NAMESPACE else concept.namespace
|
|
149
|
-
)
|
|
150
136
|
new_concept = Concept(
|
|
151
137
|
name=f"{concept.name}.{fname}",
|
|
152
138
|
datatype=DataType.INTEGER,
|
|
153
139
|
purpose=default_type,
|
|
154
140
|
lineage=const_function,
|
|
155
|
-
grain=
|
|
156
|
-
namespace=namespace,
|
|
141
|
+
grain=concept.grain,
|
|
142
|
+
namespace=concept.namespace,
|
|
157
143
|
keys={
|
|
158
144
|
concept.address,
|
|
159
145
|
},
|
|
@@ -203,7 +189,7 @@ def generate_related_concepts(
|
|
|
203
189
|
and environment.namespace != DEFAULT_NAMESPACE
|
|
204
190
|
else concept.name
|
|
205
191
|
),
|
|
206
|
-
lineage=AttrAccess(args),
|
|
192
|
+
lineage=AttrAccess(args, environment=environment),
|
|
207
193
|
)
|
|
208
194
|
environment.add_concept(auto, meta=meta)
|
|
209
195
|
if isinstance(value, Concept):
|