shaped 2.0.1__py3-none-any.whl → 2.0.4__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.
- shaped/__init__.py +59 -4
- shaped/autogen/__init__.py +527 -66
- shaped/autogen/api/__init__.py +4 -3
- shaped/autogen/api/engine_api.py +1467 -0
- shaped/autogen/api/{dataset_api.py → query_api.py} +159 -194
- shaped/autogen/api/table_api.py +1494 -0
- shaped/autogen/api/{model_management_api.py → view_api.py} +179 -181
- shaped/autogen/api_client.py +18 -11
- shaped/autogen/configuration.py +22 -9
- shaped/autogen/exceptions.py +25 -5
- shaped/autogen/models/__init__.py +247 -52
- shaped/autogen/models/ai_enrichment_view_config.py +123 -0
- shaped/autogen/models/{path.py → algorithm.py} +19 -19
- shaped/autogen/models/amplitude_table_config.py +106 -0
- shaped/autogen/models/ascending.py +148 -0
- shaped/autogen/models/attn_dropout_prob.py +136 -0
- shaped/autogen/models/attribute_journey.py +124 -0
- shaped/autogen/models/attribute_value.py +178 -0
- shaped/autogen/models/autoscaling_config.py +95 -0
- shaped/autogen/models/aws_pinpoint_table_config.py +108 -0
- shaped/autogen/models/batch_size.py +136 -0
- shaped/autogen/models/batch_size1.py +136 -0
- shaped/autogen/models/batch_size2.py +136 -0
- shaped/autogen/models/big_query_table_config.py +147 -0
- shaped/autogen/models/bm25.py +136 -0
- shaped/autogen/models/boosted_reorder_step.py +125 -0
- shaped/autogen/models/canary_rollout.py +99 -0
- shaped/autogen/models/candidate_attributes_retrieve_step.py +113 -0
- shaped/autogen/models/candidate_ids_retrieve_step.py +113 -0
- shaped/autogen/models/candidate_retrieval_strategy.py +41 -0
- shaped/autogen/models/clickhouse_table_config.py +146 -0
- shaped/autogen/models/column_order_retrieve_step.py +123 -0
- shaped/autogen/models/column_ordering.py +91 -0
- shaped/autogen/models/create_table_response.py +87 -0
- shaped/autogen/models/create_view_response.py +87 -0
- shaped/autogen/models/custom_table_config.py +135 -0
- shaped/autogen/models/data_compute_config.py +89 -0
- shaped/autogen/models/data_config.py +145 -0
- shaped/autogen/models/data_config_interaction_table.py +146 -0
- shaped/autogen/models/data_split_config.py +88 -0
- shaped/autogen/models/data_split_strategy.py +37 -0
- shaped/autogen/models/data_tier.py +37 -0
- shaped/autogen/models/default.py +246 -0
- shaped/autogen/models/delete_engine_response.py +87 -0
- shaped/autogen/models/delete_table_response.py +87 -0
- shaped/autogen/models/delete_view_response.py +87 -0
- shaped/autogen/models/deployment_config.py +117 -0
- shaped/autogen/models/distance_function.py +38 -0
- shaped/autogen/models/diversity_reorder_step.py +137 -0
- shaped/autogen/models/dropout_rate.py +136 -0
- shaped/autogen/models/dynamo_db_table_config.py +160 -0
- shaped/autogen/models/dynamo_db_table_config_scan_kwargs_value.py +138 -0
- shaped/autogen/models/embedder_batch_size.py +136 -0
- shaped/autogen/models/embedding_config.py +93 -0
- shaped/autogen/models/embedding_dim.py +136 -0
- shaped/autogen/models/embedding_dims.py +136 -0
- shaped/autogen/models/embedding_size.py +136 -0
- shaped/autogen/models/encoder.py +140 -0
- shaped/autogen/models/encoding_pooling_strategy.py +38 -0
- shaped/autogen/models/engine.py +109 -0
- shaped/autogen/models/engine_config_v2.py +152 -0
- shaped/autogen/models/engine_details_response.py +120 -0
- shaped/autogen/models/engine_schema.py +113 -0
- shaped/autogen/models/engine_schema_user_inner.py +146 -0
- shaped/autogen/models/entity_config.py +109 -0
- shaped/autogen/models/entity_journey.py +161 -0
- shaped/autogen/models/entity_type.py +38 -0
- shaped/autogen/models/evaluation_config.py +92 -0
- shaped/autogen/models/exploration_reorder_step.py +125 -0
- shaped/autogen/models/expression_filter_step.py +106 -0
- shaped/autogen/models/factors.py +136 -0
- shaped/autogen/models/factors1.py +136 -0
- shaped/autogen/models/feature.py +90 -0
- shaped/autogen/models/feature_type.py +60 -0
- shaped/autogen/models/file_table_config.py +112 -0
- shaped/autogen/models/filter_config.py +99 -0
- shaped/autogen/models/filter_dataset.py +164 -0
- shaped/autogen/models/filter_index_type.py +36 -0
- shaped/autogen/models/filter_retrieve_step.py +113 -0
- shaped/autogen/models/filter_step_explanation.py +165 -0
- shaped/autogen/models/filter_table.py +140 -0
- shaped/autogen/models/filter_type.py +134 -0
- shaped/autogen/models/global_filter.py +102 -0
- shaped/autogen/models/hidden_dropout_prob.py +136 -0
- shaped/autogen/models/hidden_size.py +136 -0
- shaped/autogen/models/hidden_size1.py +136 -0
- shaped/autogen/models/http_problem_response.py +115 -0
- shaped/autogen/models/http_validation_error.py +2 -2
- shaped/autogen/models/hugging_face_encoder.py +115 -0
- shaped/autogen/models/iceberg_table_config.py +154 -0
- shaped/autogen/models/index_config.py +101 -0
- shaped/autogen/models/inner_entity_id.py +144 -0
- shaped/autogen/models/inner_size.py +136 -0
- shaped/autogen/models/inner_size1.py +136 -0
- shaped/autogen/models/inner_uid.py +144 -0
- shaped/autogen/models/interaction_config.py +122 -0
- shaped/autogen/models/interaction_pooling_encoder.py +104 -0
- shaped/autogen/models/interaction_round_robin_encoder.py +104 -0
- shaped/autogen/models/item_attribute_pooling_encoder.py +111 -0
- shaped/autogen/models/journey.py +140 -0
- shaped/autogen/models/kafka_table_config.py +129 -0
- shaped/autogen/models/kinesis_table_config.py +140 -0
- shaped/autogen/models/kinesis_table_config_column_schema_value.py +136 -0
- shaped/autogen/models/label.py +90 -0
- shaped/autogen/models/label_type.py +36 -0
- shaped/autogen/models/laplace_smoothing.py +136 -0
- shaped/autogen/models/latency_scaling_policy.py +112 -0
- shaped/autogen/models/learning_rate.py +136 -0
- shaped/autogen/models/learning_rate1.py +136 -0
- shaped/autogen/models/learning_rate2.py +136 -0
- shaped/autogen/models/learning_rate3.py +136 -0
- shaped/autogen/models/lexical_search_mode.py +99 -0
- shaped/autogen/models/list_engines_response.py +95 -0
- shaped/autogen/models/list_tables_response.py +95 -0
- shaped/autogen/models/list_views_response.py +95 -0
- shaped/autogen/models/location_inner.py +138 -0
- shaped/autogen/models/loss_types.py +37 -0
- shaped/autogen/models/lr.py +136 -0
- shaped/autogen/models/lr1.py +136 -0
- shaped/autogen/models/lr2.py +136 -0
- shaped/autogen/models/max_depth.py +136 -0
- shaped/autogen/models/max_leaves.py +136 -0
- shaped/autogen/models/max_seq_length.py +136 -0
- shaped/autogen/models/max_seq_length1.py +136 -0
- shaped/autogen/models/max_seq_length2.py +136 -0
- shaped/autogen/models/mode.py +134 -0
- shaped/autogen/models/mode1.py +136 -0
- shaped/autogen/models/mode2.py +150 -0
- shaped/autogen/models/models_inner.py +308 -0
- shaped/autogen/models/mongo_db_table_config.py +147 -0
- shaped/autogen/models/mssql_table_config.py +155 -0
- shaped/autogen/models/{my_sql_dataset_config.py → my_sql_table_config.py} +45 -28
- shaped/autogen/models/n_epochs.py +136 -0
- shaped/autogen/models/n_epochs1.py +136 -0
- shaped/autogen/models/n_epochs2.py +136 -0
- shaped/autogen/models/n_estimators.py +136 -0
- shaped/autogen/models/n_heads.py +136 -0
- shaped/autogen/models/n_layers.py +136 -0
- shaped/autogen/models/neg_per_positive.py +136 -0
- shaped/autogen/models/negative_samples_count.py +136 -0
- shaped/autogen/models/ngram_tokenizer.py +103 -0
- shaped/autogen/models/no_op_config.py +117 -0
- shaped/autogen/models/num_blocks.py +136 -0
- shaped/autogen/models/num_heads.py +136 -0
- shaped/autogen/models/num_leaves.py +136 -0
- shaped/autogen/models/objective.py +40 -0
- shaped/autogen/models/objective1.py +134 -0
- shaped/autogen/models/online_store_config.py +89 -0
- shaped/autogen/models/pagination_config.py +87 -0
- shaped/autogen/models/parameter_definition.py +96 -0
- shaped/autogen/models/parameters_value.py +240 -0
- shaped/autogen/models/passthrough_score.py +104 -0
- shaped/autogen/models/personal_filter.py +104 -0
- shaped/autogen/models/pipeline_stage_explanation.py +118 -0
- shaped/autogen/models/policy.py +134 -0
- shaped/autogen/models/pool_fn.py +152 -0
- shaped/autogen/models/pooling_function.py +37 -0
- shaped/autogen/models/{postgres_dataset_config.py → postgres_table_config.py} +66 -28
- shaped/autogen/models/posthog_table_config.py +133 -0
- shaped/autogen/models/prebuilt_filter_step.py +113 -0
- shaped/autogen/models/precomputed_item_embedding.py +99 -0
- shaped/autogen/models/precomputed_user_embedding.py +99 -0
- shaped/autogen/models/query.py +136 -0
- shaped/autogen/models/query1.py +136 -0
- shaped/autogen/models/query_any_of.py +172 -0
- shaped/autogen/models/query_config.py +140 -0
- shaped/autogen/models/query_definition.py +106 -0
- shaped/autogen/models/query_encoder.py +194 -0
- shaped/autogen/models/query_explanation.py +201 -0
- shaped/autogen/models/query_request.py +121 -0
- shaped/autogen/models/query_result.py +113 -0
- shaped/autogen/models/query_table_config.py +99 -0
- shaped/autogen/models/rank_item_attribute_values_query_config.py +122 -0
- shaped/autogen/models/rank_query_config.py +167 -0
- shaped/autogen/models/rank_query_config_filter_inner.py +149 -0
- shaped/autogen/models/rank_query_config_reorder_inner.py +186 -0
- shaped/autogen/models/rank_query_config_retrieve_inner.py +265 -0
- shaped/autogen/models/recreate_rollout.py +97 -0
- shaped/autogen/models/{redshift_dataset_config.py → redshift_table_config.py} +48 -25
- shaped/autogen/models/reference_table_config.py +113 -0
- shaped/autogen/models/regularization.py +136 -0
- shaped/autogen/models/reorder_inner.py +149 -0
- shaped/autogen/models/reorder_step_explanation.py +207 -0
- shaped/autogen/models/request.py +378 -0
- shaped/autogen/models/request1.py +140 -0
- shaped/autogen/models/requests_per_second_scaling_policy.py +112 -0
- shaped/autogen/models/resource_config.py +100 -0
- shaped/autogen/models/response_get_view_details_views_view_name_get.py +134 -0
- shaped/autogen/models/result.py +132 -0
- shaped/autogen/models/result_embeddings_value.py +127 -0
- shaped/autogen/models/retrieval_scores_value.py +127 -0
- shaped/autogen/models/retrieve_inner.py +196 -0
- shaped/autogen/models/retrieve_step_explanation.py +172 -0
- shaped/autogen/models/retriever.py +196 -0
- shaped/autogen/models/retriever1.py +196 -0
- shaped/autogen/models/rollout_config.py +91 -0
- shaped/autogen/models/rudderstack_table_config.py +106 -0
- shaped/autogen/models/sampling_strategy.py +36 -0
- shaped/autogen/models/saved_query_info_response.py +103 -0
- shaped/autogen/models/saved_query_list_response.py +87 -0
- shaped/autogen/models/saved_query_request.py +115 -0
- shaped/autogen/models/schema_config.py +117 -0
- shaped/autogen/models/score.py +134 -0
- shaped/autogen/models/score_ensemble.py +127 -0
- shaped/autogen/models/score_ensemble_policy_config.py +165 -0
- shaped/autogen/models/score_ensemble_policy_config_policies_inner.py +755 -0
- shaped/autogen/models/score_step_explanation.py +224 -0
- shaped/autogen/models/search_config.py +105 -0
- shaped/autogen/models/segment_table_config.py +106 -0
- shaped/autogen/models/sequence_length.py +136 -0
- shaped/autogen/models/server_config.py +100 -0
- shaped/autogen/models/setup_engine_response.py +87 -0
- shaped/autogen/models/shaped_internal_recsys_policies_als_model_policy_als_model_policy_config.py +154 -0
- shaped/autogen/models/shaped_internal_recsys_policies_beeformer_model_policy_beeformer_model_policy_beeformer_model_policy_config.py +160 -0
- shaped/autogen/models/shaped_internal_recsys_policies_bert_model_policy_bert_model_policy_bert_model_policy_config.py +215 -0
- shaped/autogen/models/shaped_internal_recsys_policies_chronological_model_policy_chronological_model_policy_config.py +156 -0
- shaped/autogen/models/shaped_internal_recsys_policies_elsa_model_policy_elsa_model_policy_elsa_model_policy_config.py +141 -0
- shaped/autogen/models/shaped_internal_recsys_policies_gsasrec_model_policy_gsasrec_model_policy_gsas_rec_model_policy_config.py +211 -0
- shaped/autogen/models/shaped_internal_recsys_policies_item2vec_model_policy_item2_vec_model_policy_config.py +140 -0
- shaped/autogen/models/shaped_internal_recsys_policies_item_content_similarity_model_policy_item_content_similarity_model_policy_config.py +195 -0
- shaped/autogen/models/shaped_internal_recsys_policies_lightgbm_model_policy_lightgbm_model_policy_light_gbm_model_policy_config.py +245 -0
- shaped/autogen/models/shaped_internal_recsys_policies_ngram_model_policy_ngram_model_policy_config.py +119 -0
- shaped/autogen/models/shaped_internal_recsys_policies_popular_model_policy_popular_model_policy_config.py +161 -0
- shaped/autogen/models/shaped_internal_recsys_policies_random_model_policy_random_model_policy_config.py +108 -0
- shaped/autogen/models/shaped_internal_recsys_policies_recently_popular_policy_recently_popular_policy_config.py +143 -0
- shaped/autogen/models/shaped_internal_recsys_policies_rising_popular_policy_rising_popular_policy_config.py +123 -0
- shaped/autogen/models/shaped_internal_recsys_policies_sasrec_model_policy_sasrec_model_policy_sas_rec_model_policy_config.py +230 -0
- shaped/autogen/models/shaped_internal_recsys_policies_svd_model_policy_svd_model_policy_config.py +119 -0
- shaped/autogen/models/shaped_internal_recsys_policies_two_tower_model_policy_two_tower_model_policy_two_tower_model_policy_config.py +165 -0
- shaped/autogen/models/shaped_internal_recsys_policies_user_item_content_similarity_model_policy_user_item_content_similarity_model_policy_config.py +153 -0
- shaped/autogen/models/shaped_internal_recsys_policies_widedeep_model_policy_wide_deep_model_policy_config.py +137 -0
- shaped/autogen/models/shaped_internal_recsys_policies_xgboost_model_policy_xg_boost_model_policy_config.py +155 -0
- shaped/autogen/models/shopify_table_config.py +156 -0
- shaped/autogen/models/similarity_retrieve_step.py +123 -0
- shaped/autogen/models/{snowflake_dataset_config.py → snowflake_table_config.py} +47 -18
- shaped/autogen/models/sql_transform_type.py +37 -0
- shaped/autogen/models/sql_view_config.py +111 -0
- shaped/autogen/models/stemmer_tokenizer.py +105 -0
- shaped/autogen/models/step_explanation.py +137 -0
- shaped/autogen/models/steps_inner.py +179 -0
- shaped/autogen/models/strategy.py +134 -0
- shaped/autogen/models/table.py +102 -0
- shaped/autogen/models/table_deployment_type.py +38 -0
- shaped/autogen/models/table_insert_arguments.py +87 -0
- shaped/autogen/models/table_insert_response.py +87 -0
- shaped/autogen/models/text_encoding.py +148 -0
- shaped/autogen/models/text_search_retrieve_step.py +121 -0
- shaped/autogen/models/time_frequency.py +136 -0
- shaped/autogen/models/time_window.py +136 -0
- shaped/autogen/models/time_window_in_days.py +154 -0
- shaped/autogen/models/tokenizer.py +149 -0
- shaped/autogen/models/trained_model_encoder.py +99 -0
- shaped/autogen/models/training_compute_config.py +99 -0
- shaped/autogen/models/training_config.py +121 -0
- shaped/autogen/models/training_config_models_inner.py +540 -0
- shaped/autogen/models/training_strategy.py +37 -0
- shaped/autogen/models/transform_status.py +41 -0
- shaped/autogen/models/trending_mode.py +37 -0
- shaped/autogen/models/truncate_filter_step.py +106 -0
- shaped/autogen/models/tunable_bool.py +97 -0
- shaped/autogen/models/tunable_float.py +118 -0
- shaped/autogen/models/tunable_int.py +118 -0
- shaped/autogen/models/tunable_int_categorical.py +99 -0
- shaped/autogen/models/tunable_string.py +99 -0
- shaped/autogen/models/tuning_config.py +89 -0
- shaped/autogen/models/type.py +150 -0
- shaped/autogen/models/update_table_response.py +87 -0
- shaped/autogen/models/update_view_response.py +87 -0
- shaped/autogen/models/user_attribute_pooling_encoder.py +124 -0
- shaped/autogen/models/user_inner.py +134 -0
- shaped/autogen/models/val_split.py +136 -0
- shaped/autogen/models/validation_error.py +13 -3
- shaped/autogen/models/validation_error_loc_inner.py +150 -0
- shaped/autogen/models/value_type.py +7 -5
- shaped/autogen/models/vector_search_mode.py +101 -0
- shaped/autogen/models/view.py +104 -0
- shaped/autogen/models/view_details_ai.py +140 -0
- shaped/autogen/models/view_details_ai_schema_value.py +153 -0
- shaped/autogen/models/view_details_sql.py +140 -0
- shaped/autogen/models/view_status.py +41 -0
- shaped/autogen/models/weight_decay.py +136 -0
- shaped/autogen/models/whitespace_tokenizer.py +97 -0
- shaped/autogen/models/window_size.py +136 -0
- shaped/autogen/rest.py +10 -4
- shaped/cli/shaped_cli.py +163 -35
- shaped/client.py +591 -171
- shaped/config_builders.py +705 -0
- shaped/query_builder.py +781 -0
- {shaped-2.0.1.dist-info → shaped-2.0.4.dist-info}/METADATA +141 -6
- shaped-2.0.4.dist-info/RECORD +296 -0
- {shaped-2.0.1.dist-info → shaped-2.0.4.dist-info}/WHEEL +1 -1
- shaped-2.0.4.dist-info/entry_points.txt +2 -0
- shaped/autogen/api/model_inference_api.py +0 -2825
- shaped/autogen/models/amplitude_dataset_config.py +0 -96
- shaped/autogen/models/aws_pinpoint_dataset_config.py +0 -96
- shaped/autogen/models/big_query_dataset_config.py +0 -114
- shaped/autogen/models/complement_items_request.py +0 -99
- shaped/autogen/models/complement_items_response.py +0 -89
- shaped/autogen/models/connectors_inner.py +0 -134
- shaped/autogen/models/create_dataset_arguments.py +0 -263
- shaped/autogen/models/create_embedding_response.py +0 -87
- shaped/autogen/models/create_item_embedding_request.py +0 -89
- shaped/autogen/models/create_model_arguments.py +0 -107
- shaped/autogen/models/create_model_response.py +0 -87
- shaped/autogen/models/create_user_embedding_request.py +0 -89
- shaped/autogen/models/custom_dataset_config.py +0 -115
- shaped/autogen/models/dataset_config.py +0 -101
- shaped/autogen/models/dataset_schema_type.py +0 -47
- shaped/autogen/models/datasets_inner.py +0 -91
- shaped/autogen/models/delete_model_response.py +0 -87
- shaped/autogen/models/fetch_config.py +0 -95
- shaped/autogen/models/file_config.py +0 -105
- shaped/autogen/models/file_source_config.py +0 -89
- shaped/autogen/models/inference_config.py +0 -101
- shaped/autogen/models/insert_model_response.py +0 -87
- shaped/autogen/models/interaction.py +0 -87
- shaped/autogen/models/list_datasets_response.py +0 -95
- shaped/autogen/models/list_models_response.py +0 -95
- shaped/autogen/models/model_config.py +0 -99
- shaped/autogen/models/model_response.py +0 -95
- shaped/autogen/models/mongo_db_dataset_config.py +0 -119
- shaped/autogen/models/post_rank_request.py +0 -117
- shaped/autogen/models/rank_attribute_response.py +0 -89
- shaped/autogen/models/rank_grid_attribute_request.py +0 -91
- shaped/autogen/models/rank_grid_attribute_request1.py +0 -93
- shaped/autogen/models/rank_grid_attribute_response.py +0 -91
- shaped/autogen/models/rank_response.py +0 -91
- shaped/autogen/models/retrieve_request.py +0 -101
- shaped/autogen/models/retrieve_response.py +0 -91
- shaped/autogen/models/retriever_top_k_override.py +0 -97
- shaped/autogen/models/rudder_stack_dataset_config.py +0 -96
- shaped/autogen/models/segment_dataset_config.py +0 -96
- shaped/autogen/models/similar_item_request.py +0 -101
- shaped/autogen/models/similar_response.py +0 -89
- shaped/autogen/models/similar_users_request.py +0 -99
- shaped/autogen/models/successful_response.py +0 -87
- shaped/autogen/models/view_model_response.py +0 -99
- shaped-2.0.1.dist-info/RECORD +0 -73
- shaped-2.0.1.dist-info/entry_points.txt +0 -2
- {shaped-2.0.1.dist-info → shaped-2.0.4.dist-info}/top_level.txt +0 -0
- {shaped-2.0.1.dist-info → shaped-2.0.4.dist-info}/zip-safe +0 -0
|
@@ -0,0 +1,705 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Fluent builders for constructing Shaped V2 configurations.
|
|
3
|
+
|
|
4
|
+
This module provides a fluent API for building Engine, Table, and View configurations
|
|
5
|
+
using Python objects instead of raw dictionaries or complex model instantiation.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any, Dict, List, Optional, Union
|
|
9
|
+
|
|
10
|
+
from shaped.autogen.models.ai_enrichment_view_config import AIEnrichmentViewConfig
|
|
11
|
+
from shaped.autogen.models.amplitude_table_config import AmplitudeTableConfig
|
|
12
|
+
from shaped.autogen.models.aws_pinpoint_table_config import AWSPinpointTableConfig
|
|
13
|
+
from shaped.autogen.models.big_query_table_config import BigQueryTableConfig
|
|
14
|
+
from shaped.autogen.models.clickhouse_table_config import ClickhouseTableConfig
|
|
15
|
+
from shaped.autogen.models.custom_table_config import CustomTableConfig
|
|
16
|
+
from shaped.autogen.models.data_config import DataConfig
|
|
17
|
+
from shaped.autogen.models.data_config_interaction_table import (
|
|
18
|
+
DataConfigInteractionTable,
|
|
19
|
+
)
|
|
20
|
+
from shaped.autogen.models.deployment_config import DeploymentConfig
|
|
21
|
+
from shaped.autogen.models.dynamo_db_table_config import DynamoDBTableConfig
|
|
22
|
+
from shaped.autogen.models.engine_config_v2 import EngineConfigV2
|
|
23
|
+
from shaped.autogen.models.file_table_config import FileTableConfig
|
|
24
|
+
from shaped.autogen.models.iceberg_table_config import IcebergTableConfig
|
|
25
|
+
|
|
26
|
+
# Other Imports
|
|
27
|
+
from shaped.autogen.models.index_config import IndexConfig
|
|
28
|
+
from shaped.autogen.models.kafka_table_config import KafkaTableConfig
|
|
29
|
+
from shaped.autogen.models.kinesis_table_config import KinesisTableConfig
|
|
30
|
+
from shaped.autogen.models.mongo_db_table_config import MongoDBTableConfig
|
|
31
|
+
from shaped.autogen.models.mssql_table_config import MSSQLTableConfig
|
|
32
|
+
from shaped.autogen.models.my_sql_table_config import MySQLTableConfig
|
|
33
|
+
|
|
34
|
+
# Table Config Imports
|
|
35
|
+
from shaped.autogen.models.postgres_table_config import PostgresTableConfig
|
|
36
|
+
from shaped.autogen.models.posthog_table_config import PosthogTableConfig
|
|
37
|
+
from shaped.autogen.models.query_definition import QueryDefinition
|
|
38
|
+
from shaped.autogen.models.query_table_config import QueryTableConfig
|
|
39
|
+
from shaped.autogen.models.rank_query_config import RankQueryConfig
|
|
40
|
+
from shaped.autogen.models.redshift_table_config import RedshiftTableConfig
|
|
41
|
+
from shaped.autogen.models.reference_table_config import ReferenceTableConfig
|
|
42
|
+
from shaped.autogen.models.rudderstack_table_config import RudderstackTableConfig
|
|
43
|
+
from shaped.autogen.models.segment_table_config import SegmentTableConfig
|
|
44
|
+
from shaped.autogen.models.shopify_table_config import ShopifyTableConfig
|
|
45
|
+
from shaped.autogen.models.snowflake_table_config import SnowflakeTableConfig
|
|
46
|
+
from shaped.autogen.models.sql_transform_type import SQLTransformType
|
|
47
|
+
|
|
48
|
+
# View Config Imports
|
|
49
|
+
from shaped.autogen.models.sql_view_config import SQLViewConfig
|
|
50
|
+
from shaped.autogen.models.training_config import TrainingConfig
|
|
51
|
+
|
|
52
|
+
# Type aliases for better type hints
|
|
53
|
+
TableConfig = Union[
|
|
54
|
+
PostgresTableConfig,
|
|
55
|
+
BigQueryTableConfig,
|
|
56
|
+
SnowflakeTableConfig,
|
|
57
|
+
FileTableConfig,
|
|
58
|
+
AmplitudeTableConfig,
|
|
59
|
+
AWSPinpointTableConfig,
|
|
60
|
+
ClickhouseTableConfig,
|
|
61
|
+
CustomTableConfig,
|
|
62
|
+
DynamoDBTableConfig,
|
|
63
|
+
IcebergTableConfig,
|
|
64
|
+
KafkaTableConfig,
|
|
65
|
+
KinesisTableConfig,
|
|
66
|
+
MongoDBTableConfig,
|
|
67
|
+
MSSQLTableConfig,
|
|
68
|
+
MySQLTableConfig,
|
|
69
|
+
PosthogTableConfig,
|
|
70
|
+
RedshiftTableConfig,
|
|
71
|
+
RudderstackTableConfig,
|
|
72
|
+
SegmentTableConfig,
|
|
73
|
+
ShopifyTableConfig,
|
|
74
|
+
]
|
|
75
|
+
ViewConfig = Union[SQLViewConfig, AIEnrichmentViewConfig]
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class Engine:
|
|
79
|
+
"""
|
|
80
|
+
Builder for Engine configurations with support for all V2 features.
|
|
81
|
+
|
|
82
|
+
Example:
|
|
83
|
+
engine = (Engine("my-engine")
|
|
84
|
+
.interactions("events")
|
|
85
|
+
.users("users")
|
|
86
|
+
.items("items")
|
|
87
|
+
.with_index_config(...)
|
|
88
|
+
.with_training_config(...)
|
|
89
|
+
.with_deployment_config(...)
|
|
90
|
+
.with_query("recommendations", "SELECT * FROM items ORDER BY score DESC"))
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
def __init__(self, name: str):
|
|
94
|
+
if not name:
|
|
95
|
+
raise ValueError("Engine name is required")
|
|
96
|
+
|
|
97
|
+
self._name = name
|
|
98
|
+
self._description: Optional[str] = None
|
|
99
|
+
self._interactions: Optional[Union[str, Dict[str, Any]]] = None
|
|
100
|
+
self._users: Optional[Union[str, Dict[str, Any]]] = None
|
|
101
|
+
self._items: Optional[Union[str, Dict[str, Any]]] = None
|
|
102
|
+
self._schedule: Optional[str] = None
|
|
103
|
+
self._schema_override: Optional[Dict[str, Any]] = None
|
|
104
|
+
self._compute: Optional[Dict[str, Any]] = None
|
|
105
|
+
self._filters: List[Dict[str, Any]] = []
|
|
106
|
+
self._reference_tables: Dict[str, Any] = {}
|
|
107
|
+
self._tags: Optional[Dict[str, str]] = None
|
|
108
|
+
self._index_config: Optional[IndexConfig] = None
|
|
109
|
+
self._training_config: Dict[str, Any] = {}
|
|
110
|
+
self._deployment_config: Dict[str, Any] = {}
|
|
111
|
+
self._queries: Dict[str, QueryDefinition] = {}
|
|
112
|
+
|
|
113
|
+
def description(self, description: str) -> "Engine":
|
|
114
|
+
"""Set the engine description."""
|
|
115
|
+
self._description = description
|
|
116
|
+
return self
|
|
117
|
+
|
|
118
|
+
def interactions(self, table: Union[str, Dict[str, Any]]) -> "Engine":
|
|
119
|
+
"""Set the interactions table configuration."""
|
|
120
|
+
self._interactions = table
|
|
121
|
+
return self
|
|
122
|
+
|
|
123
|
+
def users(self, table: Union[str, Dict[str, Any]]) -> "Engine":
|
|
124
|
+
"""Set the users table configuration."""
|
|
125
|
+
self._users = table
|
|
126
|
+
return self
|
|
127
|
+
|
|
128
|
+
def items(self, table: Union[str, Dict[str, Any]]) -> "Engine":
|
|
129
|
+
"""Set the items table configuration."""
|
|
130
|
+
self._items = table
|
|
131
|
+
return self
|
|
132
|
+
|
|
133
|
+
def schedule(self, schedule: str) -> "Engine":
|
|
134
|
+
"""Set the data refresh schedule."""
|
|
135
|
+
self._schedule = schedule
|
|
136
|
+
return self
|
|
137
|
+
|
|
138
|
+
def with_schema_override(self, schema: Dict[str, Any]) -> "Engine":
|
|
139
|
+
"""Override the default schema detection with custom schema."""
|
|
140
|
+
self._schema_override = schema
|
|
141
|
+
return self
|
|
142
|
+
|
|
143
|
+
def with_compute(self, compute: Dict[str, Any]) -> "Engine":
|
|
144
|
+
"""Configure compute resources for data processing."""
|
|
145
|
+
self._compute = compute
|
|
146
|
+
return self
|
|
147
|
+
|
|
148
|
+
def add_filter(self, filter_config: Dict[str, Any]) -> "Engine":
|
|
149
|
+
"""
|
|
150
|
+
Add a filter configuration.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
filter_config: Dictionary containing filter configuration
|
|
154
|
+
|
|
155
|
+
Returns:
|
|
156
|
+
The Engine instance for method chaining
|
|
157
|
+
"""
|
|
158
|
+
self._filters.append(filter_config)
|
|
159
|
+
return self
|
|
160
|
+
|
|
161
|
+
def add_filters(self, *filter_configs: Dict[str, Any]) -> "Engine":
|
|
162
|
+
"""
|
|
163
|
+
Add multiple filter configurations at once.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
*filter_configs: One or more filter configurations to add
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
The Engine instance for method chaining
|
|
170
|
+
"""
|
|
171
|
+
self._filters.extend(filter_configs)
|
|
172
|
+
return self
|
|
173
|
+
|
|
174
|
+
def add_reference_table(self, name: str, config: Dict[str, Any]) -> "Engine":
|
|
175
|
+
"""
|
|
176
|
+
Add a reference table configuration.
|
|
177
|
+
|
|
178
|
+
Args:
|
|
179
|
+
name: Name of the reference table
|
|
180
|
+
config: Configuration dictionary for the reference table
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
The Engine instance for method chaining
|
|
184
|
+
"""
|
|
185
|
+
self._reference_tables[name] = config
|
|
186
|
+
return self
|
|
187
|
+
|
|
188
|
+
def add_reference_tables(self, **tables: Dict[str, Any]) -> "Engine":
|
|
189
|
+
"""
|
|
190
|
+
Add multiple reference tables at once using keyword arguments.
|
|
191
|
+
|
|
192
|
+
Args:
|
|
193
|
+
**tables: Keyword arguments where keys are table names and values are configs
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
The Engine instance for method chaining
|
|
197
|
+
"""
|
|
198
|
+
self._reference_tables.update(tables)
|
|
199
|
+
return self
|
|
200
|
+
|
|
201
|
+
def with_tags(self, **tags: str) -> "Engine":
|
|
202
|
+
"""Add tags to the engine configuration."""
|
|
203
|
+
if self._tags is None:
|
|
204
|
+
self._tags = {}
|
|
205
|
+
self._tags.update(tags)
|
|
206
|
+
return self
|
|
207
|
+
|
|
208
|
+
def with_index_config(self, config: IndexConfig) -> "Engine":
|
|
209
|
+
"""Configure index settings."""
|
|
210
|
+
self._index_config = config
|
|
211
|
+
return self
|
|
212
|
+
|
|
213
|
+
def with_training_config(
|
|
214
|
+
self,
|
|
215
|
+
data_split_strategy: Optional[str] = None,
|
|
216
|
+
data_split_params: Optional[Dict[str, Any]] = None,
|
|
217
|
+
**kwargs,
|
|
218
|
+
) -> "Engine":
|
|
219
|
+
"""Configure model training settings."""
|
|
220
|
+
if data_split_strategy:
|
|
221
|
+
self._training_config["data_split"] = {
|
|
222
|
+
"strategy": data_split_strategy,
|
|
223
|
+
**(data_split_params or {}),
|
|
224
|
+
}
|
|
225
|
+
self._training_config.update(kwargs)
|
|
226
|
+
return self
|
|
227
|
+
|
|
228
|
+
def with_deployment_config(self, **kwargs) -> "Engine":
|
|
229
|
+
"""Configure deployment settings."""
|
|
230
|
+
self._deployment_config.update(kwargs)
|
|
231
|
+
return self
|
|
232
|
+
|
|
233
|
+
def with_query(self, name: str, query: Union[str, Dict[str, Any]]) -> "Engine":
|
|
234
|
+
"""Add a named query definition."""
|
|
235
|
+
if isinstance(query, str):
|
|
236
|
+
# Convert SQL string to a RankQueryConfig
|
|
237
|
+
query_def = QueryDefinition(query=RankQueryConfig(type="rank", sql=query))
|
|
238
|
+
else:
|
|
239
|
+
query_def = QueryDefinition(**query)
|
|
240
|
+
|
|
241
|
+
self._queries[name] = query_def
|
|
242
|
+
return self
|
|
243
|
+
|
|
244
|
+
def validate(self) -> List[str]:
|
|
245
|
+
"""
|
|
246
|
+
Validate the current configuration.
|
|
247
|
+
|
|
248
|
+
Returns:
|
|
249
|
+
List of error messages, empty if configuration is valid
|
|
250
|
+
"""
|
|
251
|
+
errors = []
|
|
252
|
+
|
|
253
|
+
if not self._interactions:
|
|
254
|
+
errors.append("Interactions table is required")
|
|
255
|
+
|
|
256
|
+
# Validate reference tables
|
|
257
|
+
for name, config in self._reference_tables.items():
|
|
258
|
+
if not isinstance(config, dict) or not config:
|
|
259
|
+
errors.append(f"Invalid configuration for reference table '{name}'")
|
|
260
|
+
|
|
261
|
+
# Validate queries
|
|
262
|
+
for name, query in self._queries.items():
|
|
263
|
+
if not query or not getattr(query, "query", None):
|
|
264
|
+
errors.append(f"Invalid query definition for query '{name}'")
|
|
265
|
+
|
|
266
|
+
return errors
|
|
267
|
+
|
|
268
|
+
def is_valid(self) -> bool:
|
|
269
|
+
"""
|
|
270
|
+
Check if the current configuration is valid.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
True if configuration is valid, False otherwise
|
|
274
|
+
"""
|
|
275
|
+
return not bool(self.validate())
|
|
276
|
+
|
|
277
|
+
def build(self) -> EngineConfigV2:
|
|
278
|
+
"""
|
|
279
|
+
Build the EngineConfigV2 object with all configured settings.
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
EngineConfigV2: The built engine configuration
|
|
283
|
+
|
|
284
|
+
Raises:
|
|
285
|
+
ValueError: If the configuration is invalid
|
|
286
|
+
"""
|
|
287
|
+
# Validate before building
|
|
288
|
+
if errors := self.validate():
|
|
289
|
+
raise ValueError(f"Invalid configuration: {', '.join(errors)}")
|
|
290
|
+
|
|
291
|
+
# Build data configuration
|
|
292
|
+
data_config = DataConfig(
|
|
293
|
+
interaction_table=self._create_data_table(self._interactions),
|
|
294
|
+
user_table=self._create_data_table(self._users) if self._users else None,
|
|
295
|
+
item_table=self._create_data_table(self._items) if self._items else None,
|
|
296
|
+
schedule=self._schedule,
|
|
297
|
+
schema=self._schema_override,
|
|
298
|
+
compute=self._compute,
|
|
299
|
+
filters=self._filters if self._filters else None,
|
|
300
|
+
reference_tables=self._reference_tables if self._reference_tables else None,
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
# Build engine config
|
|
304
|
+
config = EngineConfigV2(
|
|
305
|
+
name=self._name,
|
|
306
|
+
description=self._description,
|
|
307
|
+
data=data_config,
|
|
308
|
+
version="v2",
|
|
309
|
+
tags=self._tags,
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
# Add optional configurations
|
|
313
|
+
if self._index_config:
|
|
314
|
+
config.index = self._index_config
|
|
315
|
+
|
|
316
|
+
if self._training_config:
|
|
317
|
+
config.training = TrainingConfig(**self._training_config)
|
|
318
|
+
|
|
319
|
+
if self._deployment_config:
|
|
320
|
+
config.deployment = DeploymentConfig(**self._deployment_config)
|
|
321
|
+
|
|
322
|
+
if self._queries:
|
|
323
|
+
config.queries = self._queries
|
|
324
|
+
|
|
325
|
+
return config
|
|
326
|
+
|
|
327
|
+
def _create_data_table(
|
|
328
|
+
self, table: Union[str, Dict[str, Any], Any]
|
|
329
|
+
) -> Optional[DataConfigInteractionTable]:
|
|
330
|
+
"""
|
|
331
|
+
Create a DataConfigInteractionTable from input.
|
|
332
|
+
|
|
333
|
+
Args:
|
|
334
|
+
table: Can be a table name (str), a table config dict, or an existing config object.
|
|
335
|
+
|
|
336
|
+
Returns:
|
|
337
|
+
A properly configured DataConfigInteractionTable instance, or None if input is None.
|
|
338
|
+
|
|
339
|
+
Raises:
|
|
340
|
+
ValueError: If the input cannot be converted to a valid table configuration.
|
|
341
|
+
"""
|
|
342
|
+
if table is None:
|
|
343
|
+
return None
|
|
344
|
+
|
|
345
|
+
try:
|
|
346
|
+
if isinstance(table, str):
|
|
347
|
+
# It's a reference to a table by name
|
|
348
|
+
config = ReferenceTableConfig(name=table)
|
|
349
|
+
# Create the DataConfigInteractionTable with the config
|
|
350
|
+
result = DataConfigInteractionTable(actual_instance=config)
|
|
351
|
+
return result
|
|
352
|
+
|
|
353
|
+
if isinstance(table, dict):
|
|
354
|
+
# It's a config dictionary
|
|
355
|
+
if table.get("type") == "query":
|
|
356
|
+
config = QueryTableConfig(**table)
|
|
357
|
+
result = DataConfigInteractionTable(actual_instance=config)
|
|
358
|
+
return result
|
|
359
|
+
else:
|
|
360
|
+
config = ReferenceTableConfig(**table)
|
|
361
|
+
result = DataConfigInteractionTable(actual_instance=config)
|
|
362
|
+
return result
|
|
363
|
+
|
|
364
|
+
# Check if it's already a DataConfigInteractionTable
|
|
365
|
+
if hasattr(table, "actual_instance") and hasattr(table, "to_dict"):
|
|
366
|
+
return table
|
|
367
|
+
|
|
368
|
+
raise ValueError(
|
|
369
|
+
f"Unsupported table configuration type: {type(table).__name__}"
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
except Exception as e:
|
|
373
|
+
raise ValueError(f"Failed to create data table: {str(e)}")
|
|
374
|
+
|
|
375
|
+
|
|
376
|
+
class Table:
|
|
377
|
+
"""
|
|
378
|
+
Factory methods for Table configurations.
|
|
379
|
+
"""
|
|
380
|
+
|
|
381
|
+
@staticmethod
|
|
382
|
+
def Postgres(
|
|
383
|
+
name: str,
|
|
384
|
+
host: str,
|
|
385
|
+
port: int,
|
|
386
|
+
user: str,
|
|
387
|
+
password: str,
|
|
388
|
+
database: str,
|
|
389
|
+
table: str,
|
|
390
|
+
replication_key: str,
|
|
391
|
+
description: Optional[str] = None,
|
|
392
|
+
schema: Optional[str] = None, # database_schema
|
|
393
|
+
ssl_args: Optional[Dict[str, Any]] = None,
|
|
394
|
+
) -> PostgresTableConfig:
|
|
395
|
+
"""Create a Postgres table configuration."""
|
|
396
|
+
kwargs = {
|
|
397
|
+
"name": name,
|
|
398
|
+
"host": host,
|
|
399
|
+
"port": port,
|
|
400
|
+
"user": user,
|
|
401
|
+
"password": password,
|
|
402
|
+
"database": database,
|
|
403
|
+
"table": table,
|
|
404
|
+
"replication_key": replication_key,
|
|
405
|
+
"description": description,
|
|
406
|
+
"database_schema": schema,
|
|
407
|
+
}
|
|
408
|
+
if ssl_args:
|
|
409
|
+
kwargs.update(ssl_args)
|
|
410
|
+
return PostgresTableConfig(**kwargs)
|
|
411
|
+
|
|
412
|
+
@staticmethod
|
|
413
|
+
def BigQuery(
|
|
414
|
+
name: str,
|
|
415
|
+
project_id: str,
|
|
416
|
+
dataset_id: str,
|
|
417
|
+
table_id: str,
|
|
418
|
+
service_account_key: str,
|
|
419
|
+
replication_key: Optional[str] = None,
|
|
420
|
+
description: Optional[str] = None,
|
|
421
|
+
) -> BigQueryTableConfig:
|
|
422
|
+
"""Create a BigQuery table configuration."""
|
|
423
|
+
return BigQueryTableConfig(
|
|
424
|
+
name=name,
|
|
425
|
+
project=project_id,
|
|
426
|
+
dataset=dataset_id,
|
|
427
|
+
table=table_id,
|
|
428
|
+
service_account_keys=service_account_key,
|
|
429
|
+
replication_key=replication_key,
|
|
430
|
+
description=description,
|
|
431
|
+
)
|
|
432
|
+
|
|
433
|
+
@staticmethod
|
|
434
|
+
def Snowflake(
|
|
435
|
+
name: str,
|
|
436
|
+
account: str,
|
|
437
|
+
user: str,
|
|
438
|
+
password: str,
|
|
439
|
+
database: str,
|
|
440
|
+
schema: str,
|
|
441
|
+
table: str,
|
|
442
|
+
warehouse: str,
|
|
443
|
+
role: str,
|
|
444
|
+
replication_key: Optional[str] = None,
|
|
445
|
+
description: Optional[str] = None,
|
|
446
|
+
) -> SnowflakeTableConfig:
|
|
447
|
+
"""Create a Snowflake table configuration."""
|
|
448
|
+
return SnowflakeTableConfig(
|
|
449
|
+
name=name,
|
|
450
|
+
account=account,
|
|
451
|
+
user=user,
|
|
452
|
+
password=password,
|
|
453
|
+
database=database,
|
|
454
|
+
schema_name=schema,
|
|
455
|
+
table=table,
|
|
456
|
+
warehouse=warehouse,
|
|
457
|
+
role=role,
|
|
458
|
+
replication_key=replication_key,
|
|
459
|
+
description=description,
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
@staticmethod
|
|
463
|
+
def File(
|
|
464
|
+
name: str,
|
|
465
|
+
file_path: str,
|
|
466
|
+
file_type: str = "CSV",
|
|
467
|
+
description: Optional[str] = None,
|
|
468
|
+
) -> FileTableConfig:
|
|
469
|
+
"""Create a File table configuration (for CSV, Parquet, etc)."""
|
|
470
|
+
return FileTableConfig(
|
|
471
|
+
name=name,
|
|
472
|
+
path=file_path,
|
|
473
|
+
mime_type=file_type,
|
|
474
|
+
description=description,
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
@staticmethod
|
|
478
|
+
def MySQL(
|
|
479
|
+
name: str,
|
|
480
|
+
host: str,
|
|
481
|
+
port: int,
|
|
482
|
+
user: str,
|
|
483
|
+
password: str,
|
|
484
|
+
database: str,
|
|
485
|
+
table: str,
|
|
486
|
+
replication_key: str,
|
|
487
|
+
description: Optional[str] = None,
|
|
488
|
+
ssl_args: Optional[Dict[str, Any]] = None,
|
|
489
|
+
) -> MySQLTableConfig:
|
|
490
|
+
"""
|
|
491
|
+
Create a MySQL table configuration.
|
|
492
|
+
|
|
493
|
+
Args:
|
|
494
|
+
name: Name of the table configuration
|
|
495
|
+
host: MySQL server hostname or IP
|
|
496
|
+
port: MySQL server port
|
|
497
|
+
user: MySQL username
|
|
498
|
+
password: MySQL password
|
|
499
|
+
database: Name of the database
|
|
500
|
+
table: Name of the table
|
|
501
|
+
replication_key: Column name to use for change data capture
|
|
502
|
+
description: Optional description of the table
|
|
503
|
+
ssl_args: Optional SSL configuration parameters
|
|
504
|
+
|
|
505
|
+
Returns:
|
|
506
|
+
MySQLTableConfig: Configured MySQL table configuration
|
|
507
|
+
"""
|
|
508
|
+
kwargs = {
|
|
509
|
+
"name": name,
|
|
510
|
+
"host": host,
|
|
511
|
+
"port": port,
|
|
512
|
+
"user": user,
|
|
513
|
+
"password": password,
|
|
514
|
+
"database": database,
|
|
515
|
+
"table": table,
|
|
516
|
+
"replication_key": replication_key,
|
|
517
|
+
"description": description,
|
|
518
|
+
}
|
|
519
|
+
if ssl_args:
|
|
520
|
+
kwargs.update(ssl_args)
|
|
521
|
+
return MySQLTableConfig(**kwargs)
|
|
522
|
+
|
|
523
|
+
@staticmethod
|
|
524
|
+
def MSSQL(
|
|
525
|
+
name: str,
|
|
526
|
+
host: str,
|
|
527
|
+
port: int,
|
|
528
|
+
user: str,
|
|
529
|
+
password: str,
|
|
530
|
+
database: str,
|
|
531
|
+
schema: str,
|
|
532
|
+
table: str,
|
|
533
|
+
replication_key: str,
|
|
534
|
+
description: Optional[str] = None,
|
|
535
|
+
ssl_args: Optional[Dict[str, Any]] = None,
|
|
536
|
+
) -> MSSQLTableConfig:
|
|
537
|
+
"""
|
|
538
|
+
Create a Microsoft SQL Server table configuration.
|
|
539
|
+
|
|
540
|
+
Args:
|
|
541
|
+
name: Name of the table configuration
|
|
542
|
+
host: SQL Server hostname or IP
|
|
543
|
+
port: SQL Server port
|
|
544
|
+
user: SQL Server username
|
|
545
|
+
password: SQL Server password
|
|
546
|
+
database: Name of the database
|
|
547
|
+
schema: Database schema name (e.g., 'dbo')
|
|
548
|
+
table: Name of the table
|
|
549
|
+
replication_key: Column name to use for change data capture
|
|
550
|
+
description: Optional description of the table
|
|
551
|
+
ssl_args: Optional SSL configuration parameters
|
|
552
|
+
|
|
553
|
+
Returns:
|
|
554
|
+
MSSQLTableConfig: Configured SQL Server table configuration
|
|
555
|
+
"""
|
|
556
|
+
kwargs = {
|
|
557
|
+
"name": name,
|
|
558
|
+
"host": host,
|
|
559
|
+
"port": port,
|
|
560
|
+
"user": user,
|
|
561
|
+
"password": password,
|
|
562
|
+
"database": database,
|
|
563
|
+
"schema_name": schema,
|
|
564
|
+
"table": table,
|
|
565
|
+
"replication_key": replication_key,
|
|
566
|
+
"description": description,
|
|
567
|
+
}
|
|
568
|
+
if ssl_args:
|
|
569
|
+
kwargs.update(ssl_args)
|
|
570
|
+
return MSSQLTableConfig(**kwargs)
|
|
571
|
+
|
|
572
|
+
@staticmethod
|
|
573
|
+
def MongoDB(
|
|
574
|
+
name: str,
|
|
575
|
+
connection_uri: str,
|
|
576
|
+
database: str,
|
|
577
|
+
collection: str,
|
|
578
|
+
replication_key: str,
|
|
579
|
+
description: Optional[str] = None,
|
|
580
|
+
**kwargs: Any,
|
|
581
|
+
) -> MongoDBTableConfig:
|
|
582
|
+
"""
|
|
583
|
+
Create a MongoDB table configuration.
|
|
584
|
+
|
|
585
|
+
Args:
|
|
586
|
+
name: Name of the table configuration
|
|
587
|
+
connection_uri: MongoDB connection URI
|
|
588
|
+
database: Name of the database
|
|
589
|
+
collection: Name of the collection
|
|
590
|
+
replication_key: Field name to use for change data capture
|
|
591
|
+
description: Optional description of the table
|
|
592
|
+
**kwargs: Additional MongoDB connection parameters
|
|
593
|
+
|
|
594
|
+
Returns:
|
|
595
|
+
MongoDBTableConfig: Configured MongoDB table configuration
|
|
596
|
+
"""
|
|
597
|
+
return MongoDBTableConfig(
|
|
598
|
+
name=name,
|
|
599
|
+
connection_uri=connection_uri,
|
|
600
|
+
database=database,
|
|
601
|
+
collection=collection,
|
|
602
|
+
replication_key=replication_key,
|
|
603
|
+
description=description,
|
|
604
|
+
**kwargs,
|
|
605
|
+
)
|
|
606
|
+
|
|
607
|
+
@staticmethod
|
|
608
|
+
def Redshift(
|
|
609
|
+
name: str,
|
|
610
|
+
host: str,
|
|
611
|
+
port: int,
|
|
612
|
+
user: str,
|
|
613
|
+
password: str,
|
|
614
|
+
database: str,
|
|
615
|
+
schema: str,
|
|
616
|
+
table: str,
|
|
617
|
+
replication_key: str,
|
|
618
|
+
description: Optional[str] = None,
|
|
619
|
+
ssl_args: Optional[Dict[str, Any]] = None,
|
|
620
|
+
) -> RedshiftTableConfig:
|
|
621
|
+
"""
|
|
622
|
+
Create an Amazon Redshift table configuration.
|
|
623
|
+
|
|
624
|
+
Args:
|
|
625
|
+
name: Name of the table configuration
|
|
626
|
+
host: Redshift cluster endpoint
|
|
627
|
+
port: Redshift port (typically 5439)
|
|
628
|
+
user: Redshift username
|
|
629
|
+
password: Redshift password
|
|
630
|
+
database: Name of the database
|
|
631
|
+
schema: Database schema name
|
|
632
|
+
table: Name of the table
|
|
633
|
+
replication_key: Column name to use for change data capture
|
|
634
|
+
description: Optional description of the table
|
|
635
|
+
ssl_args: Optional SSL configuration parameters
|
|
636
|
+
|
|
637
|
+
Returns:
|
|
638
|
+
RedshiftTableConfig: Configured Redshift table configuration
|
|
639
|
+
"""
|
|
640
|
+
kwargs = {
|
|
641
|
+
"name": name,
|
|
642
|
+
"host": host,
|
|
643
|
+
"port": port,
|
|
644
|
+
"user": user,
|
|
645
|
+
"password": password,
|
|
646
|
+
"database": database,
|
|
647
|
+
"schema_name": schema,
|
|
648
|
+
"table": table,
|
|
649
|
+
"replication_key": replication_key,
|
|
650
|
+
"description": description,
|
|
651
|
+
}
|
|
652
|
+
if ssl_args:
|
|
653
|
+
kwargs.update(ssl_args)
|
|
654
|
+
return RedshiftTableConfig(**kwargs)
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
class View:
|
|
658
|
+
"""
|
|
659
|
+
Factory methods for View configurations.
|
|
660
|
+
"""
|
|
661
|
+
|
|
662
|
+
@staticmethod
|
|
663
|
+
def SQL(
|
|
664
|
+
name: str,
|
|
665
|
+
query: str,
|
|
666
|
+
description: Optional[str] = None,
|
|
667
|
+
materialized: bool = False,
|
|
668
|
+
) -> SQLViewConfig:
|
|
669
|
+
"""
|
|
670
|
+
Create a SQL view configuration.
|
|
671
|
+
"""
|
|
672
|
+
transform_type = "MATERIALIZED_VIEW" if materialized else "VIEW"
|
|
673
|
+
|
|
674
|
+
return SQLViewConfig(
|
|
675
|
+
name=name,
|
|
676
|
+
sql_query=query,
|
|
677
|
+
sql_transform_type=(
|
|
678
|
+
SQLTransformType(transform_type)
|
|
679
|
+
if isinstance(transform_type, str)
|
|
680
|
+
else transform_type
|
|
681
|
+
),
|
|
682
|
+
description=description,
|
|
683
|
+
)
|
|
684
|
+
|
|
685
|
+
@staticmethod
|
|
686
|
+
def AI(
|
|
687
|
+
name: str,
|
|
688
|
+
source_dataset: str,
|
|
689
|
+
source_columns: List[str],
|
|
690
|
+
output_columns: List[str],
|
|
691
|
+
prompt: str,
|
|
692
|
+
description: Optional[str] = None,
|
|
693
|
+
) -> AIEnrichmentViewConfig:
|
|
694
|
+
"""
|
|
695
|
+
Create an AI enrichment view configuration.
|
|
696
|
+
"""
|
|
697
|
+
return AIEnrichmentViewConfig(
|
|
698
|
+
name=name,
|
|
699
|
+
source_dataset=source_dataset,
|
|
700
|
+
source_columns=source_columns,
|
|
701
|
+
source_columns_in_output=source_columns,
|
|
702
|
+
enriched_output_columns=output_columns,
|
|
703
|
+
prompt=prompt,
|
|
704
|
+
description=description,
|
|
705
|
+
)
|