qwak-core 0.1.37__py3-none-any.whl → 0.5.19__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.
Potentially problematic release.
This version of qwak-core might be problematic. Click here for more details.
- _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py +29 -0
- _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi +70 -0
- _qwak_proto/jfml/hosting_gateway/v1/build_upload_url_pb2_grpc.py +4 -0
- _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.py +32 -0
- _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.pyi +48 -0
- _qwak_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2_grpc.py +67 -0
- _qwak_proto/qwak/administration/account/v1/account_pb2.py +29 -60
- _qwak_proto/qwak/administration/account/v1/account_pb2.pyi +120 -2
- _qwak_proto/qwak/administration/account/v1/account_service_pb2.py +67 -0
- _qwak_proto/qwak/administration/account/v1/account_service_pb2.pyi +345 -0
- _qwak_proto/qwak/administration/account/v1/account_service_pb2_grpc.py +338 -0
- _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.py +49 -0
- _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.pyi +209 -0
- _qwak_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/account/v1/personalization_pb2.py +8 -24
- _qwak_proto/qwak/administration/account/v1/preferences_pb2.py +6 -14
- _qwak_proto/qwak/administration/account/v1/terms_pb2.py +35 -0
- _qwak_proto/qwak/administration/account/v1/terms_pb2.pyi +94 -0
- _qwak_proto/qwak/administration/account/v1/terms_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/authenticated_user/v1/authenticated_user_service_pb2.py +18 -67
- _qwak_proto/qwak/administration/authenticated_user/v1/credentials_pb2.py +8 -24
- _qwak_proto/qwak/administration/authenticated_user/v1/credentials_pb2.pyi +1 -1
- _qwak_proto/qwak/administration/authenticated_user/v1/details_pb2.py +14 -54
- _qwak_proto/qwak/administration/cluster/v2/cluster_pb2.py +62 -0
- _qwak_proto/qwak/administration/cluster/v2/cluster_pb2.pyi +354 -0
- _qwak_proto/qwak/administration/cluster/v2/cluster_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.py +32 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.pyi +65 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.pyi +36 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.py +29 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.pyi +49 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.pyi +89 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.py +34 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.pyi +97 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.pyi +39 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.py +34 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.pyi +79 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.py +29 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.pyi +46 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.pyi +39 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.pyi +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.py +32 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.pyi +66 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.py +42 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.pyi +159 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.py +39 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.pyi +126 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.py +40 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.pyi +146 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.pyi +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.py +28 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.pyi +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.py +36 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.pyi +107 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/network_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.pyi +93 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.pyi +79 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.py +36 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.pyi +72 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.py +33 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.pyi +83 -0
- _qwak_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2_grpc.py +4 -0
- _qwak_proto/qwak/administration/v0/authentication/authentication_service_pb2.py +14 -47
- _qwak_proto/qwak/administration/v0/environments/configuration_pb2.py +23 -55
- _qwak_proto/qwak/administration/v0/environments/configuration_pb2.pyi +103 -7
- _qwak_proto/qwak/administration/v0/environments/environment_pb2.py +15 -33
- _qwak_proto/qwak/administration/v0/environments/environment_pb2.pyi +50 -2
- _qwak_proto/qwak/administration/v0/environments/environment_service_pb2.py +36 -158
- _qwak_proto/qwak/administration/v0/environments/personalization_pb2.py +8 -24
- _qwak_proto/qwak/administration/v0/users/user_pb2.py +18 -71
- _qwak_proto/qwak/admiral/secret/v0/secret_pb2.py +53 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_pb2.pyi +256 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_pb2_grpc.py +4 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2.py +40 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2.pyi +93 -0
- _qwak_proto/qwak/admiral/secret/v0/secret_service_pb2_grpc.py +135 -0
- _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2.py +40 -0
- _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2.pyi +101 -0
- _qwak_proto/qwak/admiral/secret/v0/system_secret_service_pb2_grpc.py +135 -0
- _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.py +39 -105
- _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.pyi +131 -3
- _qwak_proto/qwak/admiral/user_application_instance/v0/user_application_instance_service_pb2.py +22 -87
- _qwak_proto/qwak/analytics/analytics_pb2.py +28 -123
- _qwak_proto/qwak/analytics/analytics_pb2.pyi +5 -1
- _qwak_proto/qwak/analytics/analytics_service_pb2.py +48 -149
- _qwak_proto/qwak/analytics/analytics_service_pb2.pyi +87 -0
- _qwak_proto/qwak/analytics/analytics_service_pb2_grpc.py +101 -0
- _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2.py +29 -0
- _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2.pyi +57 -0
- _qwak_proto/qwak/artifactory_settings/artifactory_settings_pb2_grpc.py +4 -0
- _qwak_proto/qwak/audience/v1/audience_api_pb2.py +30 -127
- _qwak_proto/qwak/audience/v1/audience_pb2.py +27 -114
- _qwak_proto/qwak/audience/v1/audience_pb2.pyi +5 -1
- _qwak_proto/qwak/auto_scaling/v1/auto_scaling_pb2.py +18 -79
- _qwak_proto/qwak/auto_scaling/v1/auto_scaling_service_pb2.py +10 -27
- _qwak_proto/qwak/automation/v1/action_pb2.py +42 -164
- _qwak_proto/qwak/automation/v1/action_pb2.pyi +82 -7
- _qwak_proto/qwak/automation/v1/auto_scaling_pb2.py +19 -77
- _qwak_proto/qwak/automation/v1/auto_scaling_pb2.pyi +6 -0
- _qwak_proto/qwak/automation/v1/automation_execution_pb2.py +12 -43
- _qwak_proto/qwak/automation/v1/automation_management_service_pb2.py +56 -258
- _qwak_proto/qwak/automation/v1/automation_pb2.py +11 -35
- _qwak_proto/qwak/automation/v1/automation_pb2.pyi +8 -1
- _qwak_proto/qwak/automation/v1/common_pb2.py +11 -33
- _qwak_proto/qwak/automation/v1/common_pb2.pyi +6 -0
- _qwak_proto/qwak/automation/v1/notification_pb2.py +16 -68
- _qwak_proto/qwak/automation/v1/trigger_pb2.py +14 -54
- _qwak_proto/qwak/batch_job/v1/batch_job_events_pb2.py +27 -116
- _qwak_proto/qwak/batch_job/v1/batch_job_events_pb2.pyi +6 -1
- _qwak_proto/qwak/batch_job/v1/batch_job_resources_pb2.py +9 -26
- _qwak_proto/qwak/batch_job/v1/batch_job_resources_pb2.pyi +2 -0
- _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2.py +121 -502
- _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2.pyi +111 -4
- _qwak_proto/qwak/batch_job/v1/batch_job_service_pb2_grpc.py +67 -0
- _qwak_proto/qwak/build/v1/build_api_pb2.py +98 -278
- _qwak_proto/qwak/build/v1/build_api_pb2.pyi +220 -0
- _qwak_proto/qwak/build/v1/build_api_pb2_grpc.py +198 -0
- _qwak_proto/qwak/build/v1/build_pb2.py +115 -417
- _qwak_proto/qwak/build/v1/build_pb2.pyi +294 -5
- _qwak_proto/qwak/build_settings/build_settings_api_pb2.py +40 -0
- _qwak_proto/qwak/build_settings/build_settings_api_pb2.pyi +106 -0
- _qwak_proto/qwak/build_settings/build_settings_api_pb2_grpc.py +132 -0
- _qwak_proto/qwak/build_settings/build_settings_pb2.py +39 -0
- _qwak_proto/qwak/build_settings/build_settings_pb2.pyi +148 -0
- _qwak_proto/qwak/build_settings/build_settings_pb2_grpc.py +4 -0
- _qwak_proto/qwak/builds/build_pb2.py +46 -200
- _qwak_proto/qwak/builds/build_pb2.pyi +111 -5
- _qwak_proto/qwak/builds/build_url_pb2.py +27 -54
- _qwak_proto/qwak/builds/build_url_pb2.pyi +131 -2
- _qwak_proto/qwak/builds/build_values_pb2.py +82 -0
- _qwak_proto/qwak/builds/build_values_pb2.pyi +559 -0
- _qwak_proto/qwak/builds/build_values_pb2_grpc.py +4 -0
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py +93 -168
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +342 -3
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +166 -0
- _qwak_proto/qwak/builds/builds_pb2.py +87 -528
- _qwak_proto/qwak/builds/builds_pb2.pyi +5 -192
- _qwak_proto/qwak/builds/builds_pb2_grpc.py +0 -233
- _qwak_proto/qwak/builds/internal_builds_orchestrator_service_pb2.py +12 -37
- _qwak_proto/qwak/data_versioning/data_versioning_pb2.py +9 -15
- _qwak_proto/qwak/data_versioning/data_versioning_pb2.pyi +21 -0
- _qwak_proto/qwak/data_versioning/data_versioning_service_pb2.py +15 -48
- _qwak_proto/qwak/data_versioning/data_versioning_service_pb2.pyi +12 -1
- _qwak_proto/qwak/deployment/alert_pb2.py +25 -108
- _qwak_proto/qwak/deployment/alert_pb2.pyi +2 -0
- _qwak_proto/qwak/deployment/alert_service_pb2.py +30 -127
- _qwak_proto/qwak/deployment/deployment_messages_pb2.py +6 -14
- _qwak_proto/qwak/deployment/deployment_pb2.py +127 -578
- _qwak_proto/qwak/deployment/deployment_pb2.pyi +51 -8
- _qwak_proto/qwak/deployment/deployment_service_pb2.py +91 -400
- _qwak_proto/qwak/deployment/deployment_service_pb2.pyi +30 -0
- _qwak_proto/qwak/deployment/deployment_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2.py +72 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2.pyi +489 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_pb2_grpc.py +4 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.py +44 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.pyi +144 -0
- _qwak_proto/qwak/ecosystem/jfrog/v0/token_service_pb2_grpc.py +169 -0
- _qwak_proto/qwak/ecosystem/v0/auth_pb2.py +28 -0
- _qwak_proto/qwak/ecosystem/v0/auth_pb2.pyi +37 -0
- _qwak_proto/qwak/ecosystem/v0/auth_pb2_grpc.py +4 -0
- _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2.py +37 -0
- _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2.pyi +117 -0
- _qwak_proto/qwak/ecosystem/v0/azure_credentials_pb2_grpc.py +4 -0
- _qwak_proto/qwak/ecosystem/v0/credentials_pb2.py +13 -26
- _qwak_proto/qwak/ecosystem/v0/credentials_pb2.pyi +33 -3
- _qwak_proto/qwak/ecosystem/v0/ecosystem_pb2.py +34 -140
- _qwak_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi +45 -7
- _qwak_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.py +54 -229
- _qwak_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.pyi +22 -3
- _qwak_proto/qwak/execution/v1/backfill_pb2.py +18 -74
- _qwak_proto/qwak/execution/v1/batch_pb2.py +10 -34
- _qwak_proto/qwak/execution/v1/deletion_pb2.py +33 -0
- _qwak_proto/qwak/execution/v1/deletion_pb2.pyi +67 -0
- _qwak_proto/qwak/execution/v1/deletion_pb2_grpc.py +4 -0
- _qwak_proto/qwak/execution/v1/execution_pb2.py +20 -60
- _qwak_proto/qwak/execution/v1/execution_pb2.pyi +61 -4
- _qwak_proto/qwak/execution/v1/execution_service_pb2.py +70 -108
- _qwak_proto/qwak/execution/v1/execution_service_pb2.pyi +306 -0
- _qwak_proto/qwak/execution/v1/execution_service_pb2_grpc.py +304 -2
- _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.py +27 -0
- _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.pyi +29 -0
- _qwak_proto/qwak/execution/v1/internal/deployment/platform_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/execution/v1/jobs/job_pb2.py +19 -67
- _qwak_proto/qwak/execution/v1/jobs/job_pb2.pyi +33 -2
- _qwak_proto/qwak/execution/v1/jobs/job_service_pb2.py +56 -88
- _qwak_proto/qwak/execution/v1/jobs/job_service_pb2.pyi +311 -0
- _qwak_proto/qwak/execution/v1/jobs/job_service_pb2_grpc.py +231 -0
- _qwak_proto/qwak/execution/v1/jobs/reports/report_pb2.py +21 -75
- _qwak_proto/qwak/execution/v1/jobs/reports/report_pb2.pyi +29 -2
- _qwak_proto/qwak/execution/v1/state/execution_state_pb2.py +6 -14
- _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2.py +31 -108
- _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2.pyi +30 -0
- _qwak_proto/qwak/execution/v1/state/execution_state_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/execution/v1/state/featureset_state_pb2.py +6 -14
- _qwak_proto/qwak/execution/v1/state/spark_execution_state_pb2.py +14 -68
- _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2.py +42 -0
- _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2.pyi +165 -0
- _qwak_proto/qwak/execution/v1/streaming_aggregation_pb2_grpc.py +4 -0
- _qwak_proto/qwak/execution/v1/streaming_pb2.py +33 -0
- _qwak_proto/qwak/execution/v1/streaming_pb2.pyi +79 -0
- _qwak_proto/qwak/execution/v1/streaming_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/entities/entity_pb2.py +16 -57
- _qwak_proto/qwak/feature_store/entities/entity_service_pb2.py +30 -127
- _qwak_proto/qwak/feature_store/features/aggregation_pb2.py +38 -175
- _qwak_proto/qwak/feature_store/features/deployment_pb2.py +36 -167
- _qwak_proto/qwak/feature_store/features/deployment_service_pb2.py +10 -27
- _qwak_proto/qwak/feature_store/features/execution_pb2.py +14 -56
- _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2.py +28 -0
- _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2.pyi +33 -0
- _qwak_proto/qwak/feature_store/features/feature_set_attribute_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/features/feature_set_pb2.py +49 -106
- _qwak_proto/qwak/feature_store/features/feature_set_pb2.pyi +154 -8
- _qwak_proto/qwak/feature_store/features/feature_set_service_pb2.py +101 -349
- _qwak_proto/qwak/feature_store/features/feature_set_service_pb2.pyi +160 -0
- _qwak_proto/qwak/feature_store/features/feature_set_service_pb2_grpc.py +170 -0
- _qwak_proto/qwak/feature_store/features/feature_set_state_pb2.py +38 -181
- _qwak_proto/qwak/feature_store/features/feature_set_state_service_pb2.py +26 -107
- _qwak_proto/qwak/feature_store/features/feature_set_types_pb2.py +84 -298
- _qwak_proto/qwak/feature_store/features/feature_set_types_pb2.pyi +123 -7
- _qwak_proto/qwak/feature_store/features/monitoring_pb2.py +10 -34
- _qwak_proto/qwak/feature_store/features/real_time_feature_extractor_pb2.py +32 -143
- _qwak_proto/qwak/feature_store/jobs/job_pb2.py +12 -46
- _qwak_proto/qwak/feature_store/jobs/job_service_pb2.py +30 -127
- _qwak_proto/qwak/feature_store/jobs/v1/job_pb2.py +13 -36
- _qwak_proto/qwak/feature_store/jobs/v1/job_pb2.pyi +19 -0
- _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2.py +44 -148
- _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2.pyi +64 -0
- _qwak_proto/qwak/feature_store/jobs/v1/job_service_pb2_grpc.py +67 -0
- _qwak_proto/qwak/feature_store/platform/platform_details_pb2.py +30 -0
- _qwak_proto/qwak/feature_store/platform/platform_details_pb2.pyi +54 -0
- _qwak_proto/qwak/feature_store/platform/platform_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/reports/report_pb2.py +14 -53
- _qwak_proto/qwak/feature_store/repository/common/platform_pb2.py +31 -0
- _qwak_proto/qwak/feature_store/repository/common/platform_pb2.pyi +70 -0
- _qwak_proto/qwak/feature_store/repository/common/platform_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/serving/management_pb2.py +36 -0
- _qwak_proto/qwak/feature_store/serving/management_pb2.pyi +72 -0
- _qwak_proto/qwak/feature_store/serving/management_pb2_grpc.py +101 -0
- _qwak_proto/qwak/feature_store/serving/metadata_pb2.py +13 -35
- _qwak_proto/qwak/feature_store/serving/metadata_pb2.pyi +27 -0
- _qwak_proto/qwak/feature_store/serving/serving_pb2.py +50 -222
- _qwak_proto/qwak/feature_store/serving/v1/value_pb2.py +8 -24
- _qwak_proto/qwak/feature_store/sinks/sink_pb2.py +36 -0
- _qwak_proto/qwak/feature_store/sinks/sink_pb2.pyi +137 -0
- _qwak_proto/qwak/feature_store/sinks/sink_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/sources/batch_pb2.py +80 -175
- _qwak_proto/qwak/feature_store/sources/batch_pb2.pyi +461 -13
- _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2.py +28 -0
- _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2.pyi +33 -0
- _qwak_proto/qwak/feature_store/sources/data_source_attribute_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/sources/data_source_pb2.py +21 -55
- _qwak_proto/qwak/feature_store/sources/data_source_pb2.pyi +39 -4
- _qwak_proto/qwak/feature_store/sources/data_source_service_pb2.py +41 -148
- _qwak_proto/qwak/feature_store/sources/data_source_service_pb2.pyi +25 -0
- _qwak_proto/qwak/feature_store/sources/data_source_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/feature_store/sources/streaming_pb2.py +34 -146
- _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.py +27 -0
- _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.pyi +30 -0
- _qwak_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.py +32 -0
- _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.pyi +77 -0
- _qwak_proto/qwak/feature_store/v1/common/source_code/source_code_pb2_grpc.py +4 -0
- _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.py +39 -0
- _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.pyi +99 -0
- _qwak_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2_grpc.py +99 -0
- _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.py +31 -0
- _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.pyi +46 -0
- _qwak_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2_grpc.py +66 -0
- _qwak_proto/qwak/features_operator/v1/features_operator_pb2.py +14 -54
- _qwak_proto/qwak/features_operator/v1/features_operator_service_pb2.py +14 -47
- _qwak_proto/qwak/features_operator/v2/features_operator_pb2.py +16 -64
- _qwak_proto/qwak/features_operator/v2/features_operator_service_pb2.py +12 -37
- _qwak_proto/qwak/features_operator/v3/features_operator_async_service_pb2.py +26 -107
- _qwak_proto/qwak/features_operator/v3/features_operator_pb2.py +16 -64
- _qwak_proto/qwak/file_versioning/file_versioning_pb2.py +11 -24
- _qwak_proto/qwak/file_versioning/file_versioning_pb2.pyi +21 -0
- _qwak_proto/qwak/file_versioning/file_versioning_service_pb2.py +15 -48
- _qwak_proto/qwak/file_versioning/file_versioning_service_pb2.pyi +12 -1
- _qwak_proto/qwak/fitness_service/constructs_pb2.py +23 -93
- _qwak_proto/qwak/fitness_service/constructs_pb2.pyi +59 -1
- _qwak_proto/qwak/fitness_service/fitness_pb2.py +7 -34
- _qwak_proto/qwak/fitness_service/fitness_pb2.pyi +0 -77
- _qwak_proto/qwak/fitness_service/status_pb2.py +17 -107
- _qwak_proto/qwak/fitness_service/status_pb2.pyi +1 -117
- _qwak_proto/qwak/inference/feedback/feedback_pb2.py +28 -96
- _qwak_proto/qwak/instance_template/instance_template_pb2.py +13 -41
- _qwak_proto/qwak/instance_template/instance_template_pb2.pyi +13 -1
- _qwak_proto/qwak/instance_template/instance_template_service_pb2.py +14 -47
- _qwak_proto/qwak/integration/hugging_face_integration_pb2.py +37 -0
- _qwak_proto/qwak/integration/hugging_face_integration_pb2.pyi +106 -0
- _qwak_proto/qwak/integration/hugging_face_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/integration_pb2.py +55 -0
- _qwak_proto/qwak/integration/integration_pb2.pyi +357 -0
- _qwak_proto/qwak/integration/integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/integration_service_pb2.py +56 -0
- _qwak_proto/qwak/integration/integration_service_pb2.pyi +234 -0
- _qwak_proto/qwak/integration/integration_service_pb2_grpc.py +271 -0
- _qwak_proto/qwak/integration/open_a_i_integration_pb2.py +37 -0
- _qwak_proto/qwak/integration/open_a_i_integration_pb2.pyi +109 -0
- _qwak_proto/qwak/integration/open_a_i_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/opsgenie_integration_pb2.py +43 -0
- _qwak_proto/qwak/integration/opsgenie_integration_pb2.pyi +168 -0
- _qwak_proto/qwak/integration/opsgenie_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/pagerduty_integration_pb2.py +47 -0
- _qwak_proto/qwak/integration/pagerduty_integration_pb2.pyi +195 -0
- _qwak_proto/qwak/integration/pagerduty_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/integration/slack_app_integration_pb2.py +47 -0
- _qwak_proto/qwak/integration/slack_app_integration_pb2.pyi +198 -0
- _qwak_proto/qwak/integration/slack_app_integration_pb2_grpc.py +4 -0
- _qwak_proto/qwak/kube_deployment_captain/alert_pb2.py +22 -97
- _qwak_proto/qwak/kube_deployment_captain/alerting_pb2.py +12 -44
- _qwak_proto/qwak/kube_deployment_captain/batch_job_pb2.py +76 -249
- _qwak_proto/qwak/kube_deployment_captain/batch_job_pb2.pyi +283 -6
- _qwak_proto/qwak/kube_deployment_captain/deployment_pb2.py +45 -161
- _qwak_proto/qwak/kube_deployment_captain/deployment_pb2.pyi +52 -1
- _qwak_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.py +33 -145
- _qwak_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.pyi +6 -2
- _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.py +111 -510
- _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.pyi +24 -1
- _qwak_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/kube_deployment_captain/traffic_mapping_pb2.py +8 -24
- _qwak_proto/qwak/logging/log_filter_pb2.py +12 -44
- _qwak_proto/qwak/logging/log_line_pb2.py +8 -25
- _qwak_proto/qwak/logging/log_reader_service_pb2.py +10 -27
- _qwak_proto/qwak/logging/log_source_pb2.py +30 -134
- _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.py +40 -0
- _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2.pyi +215 -0
- _qwak_proto/qwak/model_descriptor/open_ai_descriptor_pb2_grpc.py +4 -0
- _qwak_proto/qwak/model_group/model_group_pb2.py +47 -0
- _qwak_proto/qwak/model_group/model_group_pb2.pyi +192 -0
- _qwak_proto/qwak/model_group/model_group_pb2_grpc.py +169 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2.py +43 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2.pyi +172 -0
- _qwak_proto/qwak/model_group/model_group_repository_details_pb2_grpc.py +4 -0
- _qwak_proto/qwak/models/models_pb2.py +101 -356
- _qwak_proto/qwak/models/models_pb2.pyi +221 -6
- _qwak_proto/qwak/models/models_pb2_grpc.py +68 -0
- _qwak_proto/qwak/models/models_query_pb2.py +37 -0
- _qwak_proto/qwak/models/models_query_pb2.pyi +157 -0
- _qwak_proto/qwak/models/models_query_pb2_grpc.py +4 -0
- _qwak_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.py +30 -127
- _qwak_proto/qwak/monitoring/v0/alerting_channel_pb2.py +34 -152
- _qwak_proto/qwak/monitoring/v0/alerting_channel_sync_service_pb2.py +14 -47
- _qwak_proto/qwak/offline/serving/v1/feature_values_pb2.py +27 -0
- _qwak_proto/qwak/offline/serving/v1/feature_values_pb2.pyi +37 -0
- _qwak_proto/qwak/offline/serving/v1/feature_values_pb2_grpc.py +4 -0
- _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.py +55 -0
- _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.pyi +279 -0
- _qwak_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2_grpc.py +165 -0
- _qwak_proto/qwak/offline/serving/v1/options_pb2.py +27 -0
- _qwak_proto/qwak/offline/serving/v1/options_pb2.pyi +30 -0
- _qwak_proto/qwak/offline/serving/v1/options_pb2_grpc.py +4 -0
- _qwak_proto/qwak/offline/serving/v1/population_pb2.py +35 -0
- _qwak_proto/qwak/offline/serving/v1/population_pb2.pyi +99 -0
- _qwak_proto/qwak/offline/serving/v1/population_pb2_grpc.py +4 -0
- _qwak_proto/qwak/projects/jfrog_project_spec_pb2.py +27 -0
- _qwak_proto/qwak/projects/jfrog_project_spec_pb2.pyi +32 -0
- _qwak_proto/qwak/projects/jfrog_project_spec_pb2_grpc.py +4 -0
- _qwak_proto/qwak/projects/projects_pb2.py +51 -142
- _qwak_proto/qwak/projects/projects_pb2.pyi +149 -3
- _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.py +77 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2.pyi +417 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_manager_service_pb2_grpc.py +441 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2.py +69 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2.pyi +415 -0
- _qwak_proto/qwak/prompt/v1/prompt/prompt_pb2_grpc.py +4 -0
- _qwak_proto/qwak/secret_service/secret_service_pb2.py +18 -67
- _qwak_proto/qwak/secret_service/secret_service_pb2.pyi +1 -1
- _qwak_proto/qwak/self_service/account/v0/account_membership_pb2.py +30 -65
- _qwak_proto/qwak/self_service/account/v0/account_membership_pb2.pyi +99 -2
- _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2.py +51 -208
- _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2.pyi +28 -0
- _qwak_proto/qwak/self_service/account/v0/account_membership_service_pb2_grpc.py +34 -0
- _qwak_proto/qwak/self_service/account/v0/account_status_pb2.py +44 -0
- _qwak_proto/qwak/self_service/account/v0/account_status_pb2.pyi +172 -0
- _qwak_proto/qwak/self_service/account/v0/account_status_pb2_grpc.py +4 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_pb2.py +60 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_pb2.pyi +317 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_pb2_grpc.py +4 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2.py +45 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2.pyi +136 -0
- _qwak_proto/qwak/self_service/account/v0/managing_account_service_pb2_grpc.py +169 -0
- _qwak_proto/qwak/self_service/user/v1/api_key_pb2.py +6 -14
- _qwak_proto/qwak/self_service/user/v1/user_pb2.py +6 -14
- _qwak_proto/qwak/self_service/user/v1/user_service_pb2.py +30 -121
- _qwak_proto/qwak/service_discovery/service_discovery_location_pb2.py +33 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_pb2.pyi +73 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_pb2_grpc.py +4 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2.py +32 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi +41 -0
- _qwak_proto/qwak/service_discovery/service_discovery_location_service_pb2_grpc.py +231 -0
- _qwak_proto/qwak/traffic/v1/traffic_api_pb2.py +23 -88
- _qwak_proto/qwak/traffic/v1/traffic_api_pb2.pyi +13 -2
- _qwak_proto/qwak/traffic/v1/traffic_pb2.py +27 -114
- _qwak_proto/qwak/traffic/v1/traffic_pb2.pyi +5 -1
- _qwak_proto/qwak/user_application/common/v0/resources_pb2.py +31 -132
- _qwak_proto/qwak/user_application/common/v0/resources_pb2.pyi +54 -0
- _qwak_proto/qwak/user_application/v0/user_application_pb2.py +15 -39
- _qwak_proto/qwak/user_application/v0/user_application_pb2.pyi +16 -0
- _qwak_proto/qwak/vectors/v1/collection/collection_pb2.py +25 -104
- _qwak_proto/qwak/vectors/v1/collection/collection_pb2.pyi +17 -1
- _qwak_proto/qwak/vectors/v1/collection/collection_service_pb2.py +38 -167
- _qwak_proto/qwak/vectors/v1/collection/event/collection_event_pb2.py +7 -15
- _qwak_proto/qwak/vectors/v1/collection/event/collection_event_pb2.pyi +5 -1
- _qwak_proto/qwak/vectors/v1/filters_pb2.py +30 -134
- _qwak_proto/qwak/vectors/v1/vector_pb2.py +17 -45
- _qwak_proto/qwak/vectors/v1/vector_pb2.pyi +25 -2
- _qwak_proto/qwak/vectors/v1/vector_service_pb2.py +31 -108
- _qwak_proto/qwak/vectors/v1/vector_service_pb2.pyi +30 -7
- _qwak_proto/qwak/workspace/workspace_pb2.py +23 -108
- _qwak_proto/qwak/workspace/workspace_pb2.pyi +10 -2
- _qwak_proto/qwak/workspace/workspace_service_pb2.py +63 -248
- _qwak_proto/qwak/workspace/workspace_service_pb2.pyi +56 -0
- _qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py +66 -0
- qwak/__init__.py +2 -3
- qwak/automations/automation_executions.py +14 -10
- qwak/automations/automations.py +33 -23
- qwak/automations/build_and_deploy_action.py +147 -28
- qwak/automations/common.py +6 -0
- qwak/clients/administration/eco_system/client.py +2 -2
- qwak/clients/administration/eco_system/eco_system_utils.py +15 -0
- qwak/clients/administration/environment/client.py +16 -0
- qwak/clients/analytics/client.py +28 -3
- qwak/clients/batch_job_management/client.py +94 -3
- qwak/clients/batch_job_management/executions_config.py +18 -0
- qwak/clients/build_orchestrator/build_model_request_getter.py +3 -0
- qwak/clients/build_orchestrator/client.py +155 -12
- qwak/clients/data_versioning/client.py +19 -1
- qwak/clients/data_versioning/data_tag_filter.py +32 -0
- qwak/clients/deployment/client.py +14 -0
- qwak/clients/feature_store/execution_management_client.py +28 -0
- qwak/clients/feature_store/management_client.py +203 -146
- qwak/clients/feature_store/offline_serving_client.py +251 -0
- qwak/clients/feature_store/operator_client.py +21 -4
- qwak/clients/file_versioning/client.py +19 -1
- qwak/clients/file_versioning/file_tag_filter.py +32 -0
- qwak/clients/instance_template/client.py +11 -10
- qwak/clients/integration_management/integration_manager_client.py +34 -0
- qwak/clients/integration_management/integration_utils.py +27 -0
- qwak/clients/integration_management/openai/openai_system_secret.py +56 -0
- qwak/clients/kube_deployment_captain/client.py +3 -1
- qwak/clients/location_discovery/__init__.py +1 -0
- qwak/clients/location_discovery/client.py +73 -0
- qwak/clients/logging_client/client.py +13 -18
- qwak/clients/model_management/client.py +7 -2
- qwak/clients/project/client.py +7 -2
- qwak/clients/prompt_manager/__init__.py +0 -0
- qwak/clients/prompt_manager/model_descriptor_mapper.py +183 -0
- qwak/clients/prompt_manager/prompt_manager_client.py +167 -0
- qwak/clients/prompt_manager/prompt_proto_mapper.py +236 -0
- qwak/clients/secret_service/client.py +8 -3
- qwak/clients/system_secret/__init__.py +0 -0
- qwak/clients/system_secret/system_secret_client.py +30 -0
- qwak/clients/vector_store/management_client.py +2 -0
- qwak/clients/vector_store/serving_client.py +64 -18
- qwak/clients/workspace_manager/client.py +15 -0
- qwak/exceptions/__init__.py +7 -0
- qwak/exceptions/qwak_decode_exception.py +7 -0
- qwak/exceptions/qwak_exception.py +2 -1
- qwak/exceptions/qwak_external_exception.py +11 -0
- qwak/exceptions/qwak_general_build_exception.py +13 -0
- qwak/exceptions/qwak_grpc_address_exception.py +9 -0
- qwak/exceptions/qwak_load_configuration_exception.py +2 -0
- qwak/exceptions/qwak_remote_build_failed.py +5 -0
- qwak/exceptions/qwak_suggestion_exception.py +27 -0
- qwak/feature_store/_common/artifact_utils.py +59 -0
- qwak/feature_store/_common/feature_set_utils.py +142 -19
- qwak/feature_store/_common/functions.py +0 -43
- qwak/feature_store/_common/packaging.py +262 -0
- qwak/feature_store/_common/source_code_spec.py +108 -0
- qwak/feature_store/_common/source_code_spec_factory.py +104 -0
- qwak/feature_store/_common/value.py +10 -0
- qwak/feature_store/data_sources/__init__.py +53 -17
- qwak/feature_store/data_sources/attributes.py +23 -0
- qwak/feature_store/data_sources/base.py +125 -0
- qwak/feature_store/data_sources/batch/__init__.py +0 -0
- qwak/feature_store/data_sources/batch/_batch.py +9 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/_jdbc.py +2 -1
- qwak/feature_store/data_sources/batch/athena.py +260 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/big_query.py +5 -5
- qwak/feature_store/data_sources/batch/clickhouse.py +60 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/csv.py +9 -5
- qwak/feature_store/data_sources/{batch_sources → batch}/elastic_search.py +5 -5
- qwak/feature_store/data_sources/batch/filesystem/__init__.py +0 -0
- qwak/feature_store/data_sources/{batch_sources/filesystem_config.py → batch/filesystem/aws.py} +30 -38
- qwak/feature_store/data_sources/batch/filesystem/base_config.py +13 -0
- qwak/feature_store/data_sources/batch/filesystem/gcp.py +50 -0
- qwak/feature_store/data_sources/batch/filesystem/utils.py +51 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/mongodb.py +6 -5
- qwak/feature_store/data_sources/{batch_sources → batch}/mysql.py +5 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/parquet.py +10 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/postgres.py +5 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/redshift.py +6 -7
- qwak/feature_store/data_sources/{batch_sources → batch}/snowflake.py +39 -13
- qwak/feature_store/data_sources/batch/unity_catalog.py +107 -0
- qwak/feature_store/data_sources/{batch_sources → batch}/vertica.py +6 -5
- qwak/feature_store/data_sources/source_authentication.py +33 -0
- qwak/feature_store/data_sources/streaming/__init__.py +0 -0
- qwak/feature_store/data_sources/streaming/_streaming.py +9 -0
- qwak/feature_store/data_sources/streaming/kafka/__init__.py +25 -0
- qwak/feature_store/data_sources/streaming/kafka/authentication.py +120 -0
- qwak/feature_store/data_sources/streaming/kafka/deserialization.py +109 -0
- qwak/feature_store/data_sources/streaming/kafka/kafka.py +120 -0
- qwak/feature_store/data_sources/time_partition_columns.py +166 -0
- qwak/feature_store/entities/entity.py +17 -4
- qwak/feature_store/execution/backfill.py +8 -2
- qwak/feature_store/execution/streaming_backfill.py +48 -0
- qwak/feature_store/feature_sets/_utils/_featureset_utils.py +45 -0
- qwak/feature_store/feature_sets/backfill.py +13 -0
- qwak/feature_store/feature_sets/base_feature_set.py +148 -0
- qwak/feature_store/feature_sets/batch.py +142 -151
- qwak/feature_store/feature_sets/execution_spec.py +6 -0
- qwak/feature_store/feature_sets/metadata.py +51 -1
- qwak/feature_store/feature_sets/streaming.py +655 -0
- qwak/feature_store/feature_sets/streaming_backfill.py +223 -0
- qwak/feature_store/feature_sets/transformations/__init__.py +33 -0
- qwak/feature_store/feature_sets/transformations/aggregations/__init__.py +0 -0
- qwak/feature_store/feature_sets/transformations/aggregations/aggregations.py +425 -0
- qwak/feature_store/feature_sets/transformations/aggregations/windows.py +70 -0
- qwak/feature_store/feature_sets/transformations/functions/__init__.py +10 -0
- qwak/feature_store/feature_sets/transformations/functions/qwak_pandas.py +64 -0
- qwak/feature_store/feature_sets/transformations/functions/schema.py +57 -0
- qwak/feature_store/feature_sets/transformations/transformations.py +451 -0
- qwak/feature_store/feature_sets/transformations/validations/validations_util.py +78 -0
- qwak/feature_store/offline/__init__.py +2 -2
- qwak/feature_store/offline/_offline_serving_validations.py +31 -0
- qwak/feature_store/offline/client_v2.py +327 -0
- qwak/feature_store/offline/feature_set_features.py +25 -0
- qwak/feature_store/online/client.py +152 -46
- qwak/feature_store/online/endpoint_utils.py +63 -0
- qwak/feature_store/sinks/__init__.py +0 -0
- qwak/feature_store/sinks/base.py +18 -0
- qwak/feature_store/sinks/kafka.py +59 -0
- qwak/feature_store/sinks/streaming/__init__.py +0 -0
- qwak/feature_store/sinks/streaming/attachment.py +30 -0
- qwak/feature_store/sinks/streaming/factory.py +60 -0
- qwak/feature_store/validations/__init__.py +0 -0
- qwak/feature_store/validations/validation_decorators.py +70 -0
- qwak/feature_store/validations/validation_options.py +77 -0
- qwak/feature_store/validations/validation_response.py +119 -0
- qwak/feature_store/validations/validator.py +114 -0
- qwak/inner/build_config/__init__.py +0 -0
- qwak/inner/build_config/build_config_v1.py +311 -0
- qwak/inner/build_logic/__init__.py +0 -0
- qwak/inner/build_logic/build_loggers/__init__.py +0 -0
- qwak/inner/build_logic/build_loggers/trigger_build_logger.py +51 -0
- qwak/inner/build_logic/constants/__init__.py +0 -0
- qwak/inner/build_logic/constants/dependencies.py +5 -0
- qwak/inner/build_logic/constants/host_resource.py +4 -0
- qwak/inner/build_logic/constants/messages.py +3 -0
- qwak/inner/build_logic/constants/temp_dir.py +1 -0
- qwak/inner/build_logic/constants/upload_tag.py +7 -0
- qwak/inner/build_logic/dependency_manager_type.py +8 -0
- qwak/inner/build_logic/execute_build_pipeline.py +62 -0
- qwak/inner/build_logic/interface/__init__.py +0 -0
- qwak/inner/build_logic/interface/build_logger_interface.py +28 -0
- qwak/inner/build_logic/interface/build_phase.py +24 -0
- qwak/inner/build_logic/interface/context_interface.py +66 -0
- qwak/inner/build_logic/interface/phase_run_handler.py +71 -0
- qwak/inner/build_logic/interface/step_inteface.py +26 -0
- qwak/inner/build_logic/interface/time_source.py +23 -0
- qwak/inner/build_logic/phases/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_model_step.py +43 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/common.py +32 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/fetch_strategy_manager.py +62 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/folder_strategy.py +131 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +186 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py +48 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/zip_strategy.py +64 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/post_fetch_validation_step.py +140 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/pre_fetch_validation_step.py +266 -0
- qwak/inner/build_logic/phases/phase_010_fetch_model/set_version_step.py +33 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/__init__.py +0 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/cleanup_step.py +20 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/start_remote_build_step.py +43 -0
- qwak/inner/build_logic/phases/phase_020_remote_register_qwak_build/upload_step.py +258 -0
- qwak/inner/build_logic/phases/phases_pipeline.py +44 -0
- qwak/inner/build_logic/run_handlers/__init__.py +0 -0
- qwak/inner/build_logic/run_handlers/programmatic_phase_run_handler.py +99 -0
- qwak/inner/build_logic/tools/__init__.py +0 -0
- qwak/inner/build_logic/tools/dependencies_tools.py +68 -0
- qwak/inner/build_logic/tools/files.py +237 -0
- qwak/inner/build_logic/tools/ignore_files.py +20 -0
- qwak/inner/build_logic/tools/text.py +9 -0
- qwak/inner/build_logic/trigger_build_context.py +10 -0
- qwak/inner/const.py +2 -4
- qwak/inner/di_configuration/__init__.py +1 -63
- qwak/inner/di_configuration/account.py +32 -15
- qwak/inner/di_configuration/config.yml +2 -0
- qwak/inner/di_configuration/containers.py +10 -2
- qwak/inner/di_configuration/dependency_wiring.py +98 -0
- qwak/inner/di_configuration/session.py +5 -0
- qwak/inner/instance_template/__init__.py +0 -0
- qwak/inner/instance_template/verify_template_id.py +48 -0
- qwak/inner/model_loggers_utils.py +10 -7
- qwak/inner/provider.py +6 -0
- qwak/inner/tool/auth.py +42 -7
- qwak/inner/tool/grpc/grpc_auth.py +27 -8
- qwak/inner/tool/grpc/grpc_tools.py +124 -4
- qwak/inner/tool/grpc/grpc_try_wrapping.py +139 -4
- qwak/inner/tool/protobuf_factory.py +45 -0
- qwak/inner/tool/run_config/__init__.py +2 -0
- qwak/inner/tool/run_config/base.py +32 -7
- qwak/inner/tool/run_config/utils.py +66 -1
- qwak/llmops/__init__.py +0 -0
- qwak/llmops/generation/__init__.py +0 -0
- qwak/llmops/generation/_steaming.py +77 -0
- qwak/llmops/generation/base.py +5 -0
- qwak/llmops/generation/chat/__init__.py +0 -0
- qwak/llmops/generation/chat/openai/LICENSE.txt +201 -0
- qwak/llmops/generation/chat/openai/types/__init__.py +0 -0
- qwak/llmops/generation/chat/openai/types/chat/__init__.py +0 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion.py +105 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_assistant_message_param.py +65 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_chunk.py +188 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_content_part_text_param.py +28 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_function_call_option_param.py +25 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_function_message_param.py +33 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message.py +59 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_param.py +34 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call.py +46 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_message_tool_call_param.py +44 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_named_tool_choice_param.py +32 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_role.py +20 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_system_message_param.py +35 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_token_logprob.py +71 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_choice_option_param.py +28 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_message_param.py +31 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_tool_param.py +29 -0
- qwak/llmops/generation/chat/openai/types/chat/chat_completion_user_message_param.py +35 -0
- qwak/llmops/generation/chat/openai/types/chat/completion_create_params.py +279 -0
- qwak/llmops/generation/chat/openai/types/completion_choice.py +47 -0
- qwak/llmops/generation/chat/openai/types/completion_create_params.py +209 -0
- qwak/llmops/generation/chat/openai/types/completion_usage.py +30 -0
- qwak/llmops/generation/chat/openai/types/model.py +35 -0
- qwak/llmops/generation/chat/openai/types/shared/__init__.py +3 -0
- qwak/llmops/generation/chat/openai/types/shared/error_object.py +27 -0
- qwak/llmops/generation/chat/openai/types/shared/function_definition.py +49 -0
- qwak/llmops/generation/chat/openai/types/shared/function_parameters.py +20 -0
- qwak/llmops/generation/chat/openai/types/shared_params/__init__.py +2 -0
- qwak/llmops/generation/chat/openai/types/shared_params/function_definition.py +49 -0
- qwak/llmops/generation/chat/openai/types/shared_params/function_parameters.py +22 -0
- qwak/llmops/generation/streaming.py +26 -0
- qwak/llmops/model/__init__.py +0 -0
- qwak/llmops/model/descriptor.py +39 -0
- qwak/llmops/prompt/__init__.py +0 -0
- qwak/llmops/prompt/base.py +133 -0
- qwak/llmops/prompt/chat/__init__.py +0 -0
- qwak/llmops/prompt/chat/message.py +24 -0
- qwak/llmops/prompt/chat/template.py +113 -0
- qwak/llmops/prompt/chat/value.py +10 -0
- qwak/llmops/prompt/manager.py +134 -0
- qwak/llmops/prompt/template.py +24 -0
- qwak/llmops/prompt/value.py +14 -0
- qwak/llmops/provider/__init__.py +0 -0
- qwak/llmops/provider/chat.py +42 -0
- qwak/llmops/provider/openai/__init__.py +0 -0
- qwak/llmops/provider/openai/client.py +123 -0
- qwak/llmops/provider/openai/provider.py +89 -0
- qwak/model/_entity_extraction.py +40 -46
- qwak/model/adapters/input_adapters/multi_input_adapter.py +17 -1
- qwak/model/base.py +1 -1
- qwak/model/decorators/api.py +3 -1
- qwak/model/decorators/impl/api_implementation.py +1 -0
- qwak/model/fs_info_mapping_retriever.py +58 -0
- qwak/model/schema.py +1 -1
- qwak/model/schema_entities.py +1 -1
- qwak/model/tools/__init__.py +1 -1
- qwak/model/tools/adapters/input_adapters/dataframe_input.py +1 -1
- qwak/model/tools/adapters/output.py +1 -1
- qwak/model/tools/run_model_locally.py +15 -3
- qwak/model/utils/feature_utils.py +69 -0
- qwak/model_loggers/artifact_logger.py +46 -9
- qwak/model_loggers/data_logger.py +16 -2
- qwak/qwak_client/batch_jobs/execution.py +49 -0
- qwak/qwak_client/batch_jobs/task.py +43 -0
- qwak/qwak_client/build_api_helpers/__init__.py +0 -0
- qwak/qwak_client/build_api_helpers/build_api_steps.py +53 -0
- qwak/qwak_client/build_api_helpers/messages.py +6 -0
- qwak/qwak_client/build_api_helpers/trigger_build_api.py +65 -0
- qwak/qwak_client/client.py +276 -24
- qwak/qwak_client/data_versioning/__init__.py +0 -0
- qwak/qwak_client/data_versioning/data_tag.py +24 -0
- qwak/qwak_client/deployments/deployment.py +11 -9
- qwak/qwak_client/file_versioning/__init__.py +0 -0
- qwak/qwak_client/file_versioning/file_tag.py +24 -0
- qwak/qwak_client/projects/project.py +4 -2
- qwak/tools/logger/logger.py +1 -1
- qwak/utils/__init__.py +0 -0
- qwak/utils/datetime_utils.py +18 -0
- qwak/utils/dict_utils.py +12 -0
- qwak/vector_store/client.py +8 -0
- qwak/vector_store/collection.py +173 -73
- qwak/vector_store/inference_client.py +30 -2
- qwak/vector_store/rest_helpers.py +13 -21
- qwak/vector_store/utils/filter_utils.py +4 -17
- qwak/vector_store/utils/upsert_utils.py +217 -0
- {qwak_core-0.1.37.dist-info → qwak_core-0.5.19.dist-info}/METADATA +20 -15
- qwak_core-0.5.19.dist-info/RECORD +1100 -0
- {qwak_core-0.1.37.dist-info → qwak_core-0.5.19.dist-info}/WHEEL +1 -1
- qwak_services_mock/mocks/authentication_service.py +5 -4
- qwak_services_mock/mocks/batch_job_manager_service.py +53 -6
- qwak_services_mock/mocks/build_orchestrator_build_api.py +18 -1
- qwak_services_mock/mocks/build_orchestrator_build_settings_api.py +35 -0
- qwak_services_mock/mocks/build_orchestrator_service_api.py +4 -0
- qwak_services_mock/mocks/data_versioning_service.py +26 -2
- qwak_services_mock/mocks/deployment_management_service.py +46 -18
- qwak_services_mock/mocks/ecosystem_service_api.py +0 -1
- qwak_services_mock/mocks/execution_management_service.py +9 -1
- qwak_services_mock/mocks/feature_store_data_sources_manager_api.py +98 -2
- qwak_services_mock/mocks/feature_store_entities_manager_api.py +46 -3
- qwak_services_mock/mocks/feature_store_feature_set_manager_api.py +197 -21
- qwak_services_mock/mocks/features_online_serving_api.py +9 -0
- qwak_services_mock/mocks/features_operator_v3_service.py +20 -0
- qwak_services_mock/mocks/features_set_state_service_api.py +0 -1
- qwak_services_mock/mocks/file_versioning_service.py +29 -2
- qwak_services_mock/mocks/fs_offline_serving_service.py +53 -0
- qwak_services_mock/mocks/instance_template_management_service.py +35 -1
- qwak_services_mock/mocks/integration_management_service.py +72 -0
- qwak_services_mock/mocks/location_discovery_service_api.py +104 -0
- qwak_services_mock/mocks/model_management_service.py +11 -5
- qwak_services_mock/mocks/prompt_manager_service.py +244 -0
- qwak_services_mock/mocks/qwak_mocks.py +20 -2
- qwak_services_mock/mocks/system_secret_service.py +54 -0
- qwak_services_mock/mocks/vector_serving_api.py +44 -8
- qwak_services_mock/mocks/workspace_manager_service_mock.py +24 -8
- qwak_services_mock/services_mock.py +78 -12
- _qwak_proto/qwak/fitness_service/fitness_service_pb2.py +0 -110
- _qwak_proto/qwak/fitness_service/fitness_service_pb2.pyi +0 -121
- _qwak_proto/qwak/fitness_service/fitness_service_pb2_grpc.py +0 -169
- qwak/clients/build_management/__init__.py +0 -1
- qwak/clients/build_management/client.py +0 -114
- qwak/feature_store/_common/featureset_asterisk_handler.py +0 -115
- qwak/feature_store/data_sources/batch_sources/__init__.py +0 -6
- qwak/feature_store/data_sources/batch_sources/_batch.py +0 -86
- qwak/feature_store/feature_sets/transformations.py +0 -48
- qwak/feature_store/offline/_query_engine.py +0 -32
- qwak/feature_store/offline/athena/athena_query_engine.py +0 -153
- qwak/feature_store/offline/client.py +0 -699
- qwak/feature_store/validation_options.py +0 -69
- qwak_core-0.1.37.dist-info/RECORD +0 -682
- qwak_services_mock/mocks/build_management.py +0 -100
- {_qwak_proto → qwak/clients/integration_management}/__init__.py +0 -0
- /qwak/{feature_store/offline/athena → clients/integration_management/openai}/__init__.py +0 -0
qwak/feature_store/data_sources/{batch_sources/filesystem_config.py → batch/filesystem/aws.py}
RENAMED
|
@@ -1,34 +1,22 @@
|
|
|
1
|
-
from abc import ABC, abstractmethod
|
|
2
1
|
from dataclasses import dataclass
|
|
3
2
|
from typing import Optional
|
|
4
3
|
|
|
5
4
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
6
5
|
AnonymousS3Configuration as ProtoAnonymousS3Configuration,
|
|
7
|
-
|
|
8
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
6
|
+
AwsS3AssumeRole as ProtoAwsS3AssumeRole,
|
|
9
7
|
AwsS3FileSystemConfiguration as ProtoAwsS3FileSystemConfiguration,
|
|
10
|
-
|
|
11
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
12
|
-
FileSystemConfiguration as FileSystemConfigurationProto,
|
|
8
|
+
FileSystemConfiguration as ProtoFileSystemConfiguration,
|
|
13
9
|
)
|
|
14
10
|
from qwak.exceptions import QwakException
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class FileSystemConfiguration(ABC):
|
|
19
|
-
@abstractmethod
|
|
20
|
-
def _to_proto(self):
|
|
21
|
-
pass
|
|
22
|
-
|
|
23
|
-
@abstractmethod
|
|
24
|
-
def _from_proto(self, proto):
|
|
25
|
-
pass
|
|
11
|
+
from qwak.feature_store.data_sources.batch.filesystem.base_config import (
|
|
12
|
+
FileSystemConfiguration,
|
|
13
|
+
)
|
|
26
14
|
|
|
27
15
|
|
|
28
16
|
@dataclass
|
|
29
17
|
class AnonymousS3Configuration(FileSystemConfiguration):
|
|
30
18
|
def _to_proto(self):
|
|
31
|
-
return
|
|
19
|
+
return ProtoFileSystemConfiguration(
|
|
32
20
|
aws_s3_anonymous=ProtoAnonymousS3Configuration()
|
|
33
21
|
)
|
|
34
22
|
|
|
@@ -37,6 +25,29 @@ class AnonymousS3Configuration(FileSystemConfiguration):
|
|
|
37
25
|
return cls()
|
|
38
26
|
|
|
39
27
|
|
|
28
|
+
@dataclass
|
|
29
|
+
class AwsS3AssumeRoleFileSystemConfiguration(FileSystemConfiguration):
|
|
30
|
+
role_arn: str
|
|
31
|
+
|
|
32
|
+
def __post_init__(self):
|
|
33
|
+
self._validate()
|
|
34
|
+
|
|
35
|
+
def _validate(self):
|
|
36
|
+
if not self.role_arn:
|
|
37
|
+
raise QwakException("`role_arn` field is mandatory")
|
|
38
|
+
|
|
39
|
+
def _to_proto(self) -> ProtoAwsS3FileSystemConfiguration:
|
|
40
|
+
return ProtoFileSystemConfiguration(
|
|
41
|
+
aws_s3_assume_role_configuration=ProtoAwsS3AssumeRole(
|
|
42
|
+
role_arn=self.role_arn
|
|
43
|
+
)
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
@classmethod
|
|
47
|
+
def _from_proto(cls, proto: ProtoAwsS3AssumeRole):
|
|
48
|
+
return cls(proto.role_arn)
|
|
49
|
+
|
|
50
|
+
|
|
40
51
|
@dataclass
|
|
41
52
|
class AwsS3FileSystemConfiguration(FileSystemConfiguration):
|
|
42
53
|
access_key_secret_name: str
|
|
@@ -57,7 +68,7 @@ class AwsS3FileSystemConfiguration(FileSystemConfiguration):
|
|
|
57
68
|
raise QwakException(error_msg.format(field="bucket"))
|
|
58
69
|
|
|
59
70
|
def _to_proto(self):
|
|
60
|
-
return
|
|
71
|
+
return ProtoFileSystemConfiguration(
|
|
61
72
|
aws_s3_configuration=ProtoAwsS3FileSystemConfiguration(
|
|
62
73
|
access_key_secret_name=self.access_key_secret_name,
|
|
63
74
|
secret_key_secret_name=self.secret_key_secret_name,
|
|
@@ -74,22 +85,3 @@ class AwsS3FileSystemConfiguration(FileSystemConfiguration):
|
|
|
74
85
|
bucket=proto.bucket,
|
|
75
86
|
session_token_secret_name=proto.session_token_secret_name,
|
|
76
87
|
)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def get_fs_config_from_proto(filesystem_conf):
|
|
80
|
-
if not filesystem_conf:
|
|
81
|
-
return {}
|
|
82
|
-
|
|
83
|
-
fs_conf_type = filesystem_conf.WhichOneof("type")
|
|
84
|
-
|
|
85
|
-
if not fs_conf_type:
|
|
86
|
-
return {}
|
|
87
|
-
|
|
88
|
-
fs_conf = getattr(filesystem_conf, fs_conf_type)
|
|
89
|
-
if isinstance(fs_conf, ProtoAwsS3FileSystemConfiguration):
|
|
90
|
-
return AwsS3FileSystemConfiguration._from_proto(fs_conf)
|
|
91
|
-
|
|
92
|
-
elif isinstance(fs_conf, ProtoAnonymousS3Configuration):
|
|
93
|
-
return AnonymousS3Configuration._from_proto(fs_conf)
|
|
94
|
-
else:
|
|
95
|
-
raise QwakException(f"Unsupported FileSystemConfiguration: {fs_conf_type}")
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
|
+
FileSystemConfiguration as ProtoFileSystemConfiguration,
|
|
5
|
+
GcsServiceAccountImpersonation as ProtoGcsServiceAccountImpersonation,
|
|
6
|
+
GcsUnauthenticated as ProtoGcsUnauthenticated,
|
|
7
|
+
)
|
|
8
|
+
from qwak.exceptions import QwakException
|
|
9
|
+
from qwak.feature_store.data_sources.batch.filesystem.base_config import (
|
|
10
|
+
FileSystemConfiguration,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class GcpGcsServiceAccountImpersonation(FileSystemConfiguration):
|
|
16
|
+
service_account_user: str
|
|
17
|
+
|
|
18
|
+
def __post_init__(self):
|
|
19
|
+
self._validate()
|
|
20
|
+
|
|
21
|
+
def _validate(self):
|
|
22
|
+
if not self.service_account_user or not self.service_account_user.strip():
|
|
23
|
+
raise QwakException(
|
|
24
|
+
"Service account user is mandatory for GCS service account impersonation, blanks are invalid"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
def _to_proto(self):
|
|
28
|
+
return ProtoFileSystemConfiguration(
|
|
29
|
+
gcs_service_account_impersonation=ProtoGcsServiceAccountImpersonation(
|
|
30
|
+
service_account_user=self.service_account_user
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def _from_proto(cls, proto):
|
|
36
|
+
return GcpGcsServiceAccountImpersonation(
|
|
37
|
+
service_account_user=proto.service_account_user
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@dataclass
|
|
42
|
+
class GcpGcsUnauthenticated(FileSystemConfiguration):
|
|
43
|
+
def _to_proto(self):
|
|
44
|
+
return ProtoFileSystemConfiguration(
|
|
45
|
+
gcs_unauthenticated=ProtoGcsUnauthenticated()
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
@classmethod
|
|
49
|
+
def _from_proto(cls, proto):
|
|
50
|
+
return GcpGcsUnauthenticated()
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
|
|
3
|
+
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
|
+
AnonymousS3Configuration as ProtoAnonymousS3Configuration,
|
|
5
|
+
AwsS3AssumeRole as ProtoAwsS3AssumeRole,
|
|
6
|
+
AwsS3FileSystemConfiguration as ProtoAwsS3FileSystemConfiguration,
|
|
7
|
+
GcsServiceAccountImpersonation as ProtoGcsServiceAccountImpersonation,
|
|
8
|
+
GcsUnauthenticated as ProtoGcsUnauthenticated,
|
|
9
|
+
)
|
|
10
|
+
from qwak.exceptions import QwakException
|
|
11
|
+
from qwak.feature_store.data_sources.batch.filesystem.aws import (
|
|
12
|
+
AnonymousS3Configuration,
|
|
13
|
+
AwsS3AssumeRoleFileSystemConfiguration,
|
|
14
|
+
AwsS3FileSystemConfiguration,
|
|
15
|
+
)
|
|
16
|
+
from qwak.feature_store.data_sources.batch.filesystem.base_config import (
|
|
17
|
+
FileSystemConfiguration,
|
|
18
|
+
)
|
|
19
|
+
from qwak.feature_store.data_sources.batch.filesystem.gcp import (
|
|
20
|
+
GcpGcsServiceAccountImpersonation,
|
|
21
|
+
GcpGcsUnauthenticated,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def get_fs_config_from_proto(filesystem_conf) -> Optional[FileSystemConfiguration]:
|
|
26
|
+
if not filesystem_conf:
|
|
27
|
+
return None
|
|
28
|
+
|
|
29
|
+
fs_conf_type = filesystem_conf.WhichOneof("type")
|
|
30
|
+
|
|
31
|
+
if not fs_conf_type:
|
|
32
|
+
return None
|
|
33
|
+
|
|
34
|
+
fs_conf = getattr(filesystem_conf, fs_conf_type)
|
|
35
|
+
if isinstance(fs_conf, ProtoAwsS3FileSystemConfiguration):
|
|
36
|
+
return AwsS3FileSystemConfiguration._from_proto(fs_conf)
|
|
37
|
+
|
|
38
|
+
elif isinstance(fs_conf, ProtoAnonymousS3Configuration):
|
|
39
|
+
return AnonymousS3Configuration._from_proto(fs_conf)
|
|
40
|
+
|
|
41
|
+
elif isinstance(fs_conf, ProtoAwsS3AssumeRole):
|
|
42
|
+
return AwsS3AssumeRoleFileSystemConfiguration._from_proto(fs_conf)
|
|
43
|
+
|
|
44
|
+
elif isinstance(fs_conf, ProtoGcsServiceAccountImpersonation):
|
|
45
|
+
return GcpGcsServiceAccountImpersonation._from_proto(fs_conf)
|
|
46
|
+
|
|
47
|
+
elif isinstance(fs_conf, ProtoGcsUnauthenticated):
|
|
48
|
+
return GcpGcsUnauthenticated._from_proto(fs_conf)
|
|
49
|
+
|
|
50
|
+
else:
|
|
51
|
+
raise QwakException(f"Unsupported FileSystemConfiguration: {fs_conf_type}")
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
5
|
BatchSource as ProtoBatchSource,
|
|
5
|
-
)
|
|
6
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
7
6
|
MongoSource as ProtoMongoSource,
|
|
8
7
|
)
|
|
9
8
|
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
10
9
|
DataSourceSpec as ProtoDataSourceSpec,
|
|
11
10
|
)
|
|
12
|
-
from qwak.feature_store.data_sources.
|
|
11
|
+
from qwak.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
@dataclass
|
|
@@ -21,6 +20,7 @@ class MongoDbSource(BaseBatchSource):
|
|
|
21
20
|
collection: str
|
|
22
21
|
connection_params: str
|
|
23
22
|
protocol: str = "mongodb"
|
|
23
|
+
repository: Optional[str] = None
|
|
24
24
|
|
|
25
25
|
@classmethod
|
|
26
26
|
def _from_proto(cls, proto):
|
|
@@ -38,8 +38,9 @@ class MongoDbSource(BaseBatchSource):
|
|
|
38
38
|
protocol=mongo.protocol,
|
|
39
39
|
)
|
|
40
40
|
|
|
41
|
-
def _to_proto(self):
|
|
41
|
+
def _to_proto(self, artifact_url: Optional[str] = None):
|
|
42
42
|
return ProtoDataSourceSpec(
|
|
43
|
+
data_source_repository_name=self.repository,
|
|
43
44
|
batch_source=ProtoBatchSource(
|
|
44
45
|
name=self.name,
|
|
45
46
|
description=self.description,
|
|
@@ -53,5 +54,5 @@ class MongoDbSource(BaseBatchSource):
|
|
|
53
54
|
connection_params=self.connection_params,
|
|
54
55
|
protocol=self.protocol,
|
|
55
56
|
),
|
|
56
|
-
)
|
|
57
|
+
),
|
|
57
58
|
)
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
5
|
BatchSource as ProtoBatchSource,
|
|
5
|
-
)
|
|
6
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
7
6
|
JdbcSource as ProtoJdbcSource,
|
|
8
|
-
)
|
|
9
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
10
7
|
MysqlSource as ProtoMysqlSource,
|
|
11
8
|
)
|
|
12
9
|
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
13
10
|
DataSourceSpec as ProtoDataSourceSpec,
|
|
14
11
|
)
|
|
15
|
-
from qwak.feature_store.data_sources.
|
|
12
|
+
from qwak.feature_store.data_sources.batch._jdbc import JdbcSource
|
|
16
13
|
|
|
17
14
|
|
|
18
15
|
@dataclass
|
|
@@ -31,8 +28,9 @@ class MysqlSource(JdbcSource):
|
|
|
31
28
|
query=mysql.query,
|
|
32
29
|
)
|
|
33
30
|
|
|
34
|
-
def _to_proto(self):
|
|
31
|
+
def _to_proto(self, artifact_url: Optional[str] = None):
|
|
35
32
|
return ProtoDataSourceSpec(
|
|
33
|
+
data_source_repository_name=self.repository,
|
|
36
34
|
batch_source=ProtoBatchSource(
|
|
37
35
|
name=self.name,
|
|
38
36
|
description=self.description,
|
|
@@ -45,5 +43,5 @@ class MysqlSource(JdbcSource):
|
|
|
45
43
|
query=self.query,
|
|
46
44
|
mysqlSource=ProtoMysqlSource(),
|
|
47
45
|
),
|
|
48
|
-
)
|
|
46
|
+
),
|
|
49
47
|
)
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
from dataclasses import dataclass, field
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
5
|
BatchSource as ProtoBatchSource,
|
|
5
|
-
)
|
|
6
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
7
6
|
ParquetSource as ProtoParquetSource,
|
|
8
7
|
)
|
|
9
8
|
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
10
9
|
DataSourceSpec as ProtoDataSourceSpec,
|
|
11
10
|
)
|
|
12
|
-
from qwak.feature_store.data_sources
|
|
13
|
-
from qwak.feature_store.data_sources.
|
|
14
|
-
|
|
11
|
+
from qwak.feature_store.data_sources import AnonymousS3Configuration
|
|
12
|
+
from qwak.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
13
|
+
from qwak.feature_store.data_sources.batch.filesystem.base_config import (
|
|
15
14
|
FileSystemConfiguration,
|
|
15
|
+
)
|
|
16
|
+
from qwak.feature_store.data_sources.batch.filesystem.utils import (
|
|
16
17
|
get_fs_config_from_proto,
|
|
17
18
|
)
|
|
18
19
|
|
|
@@ -23,6 +24,7 @@ class ParquetSource(BaseBatchSource):
|
|
|
23
24
|
filesystem_configuration: FileSystemConfiguration = field(
|
|
24
25
|
default_factory=lambda: AnonymousS3Configuration()
|
|
25
26
|
)
|
|
27
|
+
repository: Optional[str] = None
|
|
26
28
|
|
|
27
29
|
@classmethod
|
|
28
30
|
def _from_proto(cls, proto):
|
|
@@ -37,12 +39,13 @@ class ParquetSource(BaseBatchSource):
|
|
|
37
39
|
filesystem_configuration=fs_conf,
|
|
38
40
|
)
|
|
39
41
|
|
|
40
|
-
def _to_proto(self):
|
|
42
|
+
def _to_proto(self, artifact_url: Optional[str] = None):
|
|
41
43
|
fs_conf = None
|
|
42
44
|
if self.filesystem_configuration:
|
|
43
45
|
fs_conf = self.filesystem_configuration._to_proto()
|
|
44
46
|
|
|
45
47
|
return ProtoDataSourceSpec(
|
|
48
|
+
data_source_repository_name=self.repository,
|
|
46
49
|
batch_source=ProtoBatchSource(
|
|
47
50
|
name=self.name,
|
|
48
51
|
description=self.description,
|
|
@@ -50,5 +53,5 @@ class ParquetSource(BaseBatchSource):
|
|
|
50
53
|
parquetSource=ProtoParquetSource(
|
|
51
54
|
path=self.path, filesystem_configuration=fs_conf
|
|
52
55
|
),
|
|
53
|
-
)
|
|
56
|
+
),
|
|
54
57
|
)
|
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional
|
|
2
3
|
|
|
3
4
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
5
|
BatchSource as ProtoBatchSource,
|
|
5
|
-
)
|
|
6
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
7
6
|
JdbcSource as ProtoJdbcSource,
|
|
8
|
-
)
|
|
9
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
10
7
|
PostgresqlSource as ProtoPostgresqlSource,
|
|
11
8
|
)
|
|
12
9
|
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
13
10
|
DataSourceSpec as ProtoDataSourceSpec,
|
|
14
11
|
)
|
|
15
|
-
from qwak.feature_store.data_sources.
|
|
12
|
+
from qwak.feature_store.data_sources.batch._jdbc import JdbcSource
|
|
16
13
|
|
|
17
14
|
|
|
18
15
|
@dataclass
|
|
19
16
|
class PostgresSource(JdbcSource):
|
|
20
|
-
def _to_proto(self):
|
|
17
|
+
def _to_proto(self, artifact_url: Optional[str] = None):
|
|
21
18
|
return ProtoDataSourceSpec(
|
|
19
|
+
data_source_repository_name=self.repository,
|
|
22
20
|
batch_source=ProtoBatchSource(
|
|
23
21
|
name=self.name,
|
|
24
22
|
description=self.description,
|
|
@@ -31,7 +29,7 @@ class PostgresSource(JdbcSource):
|
|
|
31
29
|
query=self.query,
|
|
32
30
|
postgresqlSource=ProtoPostgresqlSource(),
|
|
33
31
|
),
|
|
34
|
-
)
|
|
32
|
+
),
|
|
35
33
|
)
|
|
36
34
|
|
|
37
35
|
@classmethod
|
|
@@ -3,18 +3,14 @@ from typing import Optional
|
|
|
3
3
|
|
|
4
4
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
5
|
BatchSource as ProtoBatchSource,
|
|
6
|
-
)
|
|
7
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
8
6
|
JdbcSource as ProtoJdbcSource,
|
|
9
|
-
)
|
|
10
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
11
7
|
RedshiftSource as ProtoRedshiftSource,
|
|
12
8
|
)
|
|
13
9
|
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
14
10
|
DataSourceSpec as ProtoDataSourceSpec,
|
|
15
11
|
)
|
|
16
12
|
from qwak.exceptions import QwakException
|
|
17
|
-
from qwak.feature_store.data_sources.
|
|
13
|
+
from qwak.feature_store.data_sources.batch._jdbc import JdbcSource
|
|
18
14
|
|
|
19
15
|
|
|
20
16
|
@dataclass
|
|
@@ -27,6 +23,8 @@ class RedshiftSource(JdbcSource):
|
|
|
27
23
|
secret_access_key: Optional[str] = None
|
|
28
24
|
query_group: Optional[str] = "_qwak_featurestore"
|
|
29
25
|
|
|
26
|
+
repository: Optional[str] = None
|
|
27
|
+
|
|
30
28
|
def _validate(self):
|
|
31
29
|
authentication_methods = sum(
|
|
32
30
|
[
|
|
@@ -46,8 +44,9 @@ class RedshiftSource(JdbcSource):
|
|
|
46
44
|
"or user id secret name and password secret name"
|
|
47
45
|
)
|
|
48
46
|
|
|
49
|
-
def _to_proto(self):
|
|
47
|
+
def _to_proto(self, artifact_url: Optional[str] = None):
|
|
50
48
|
return ProtoDataSourceSpec(
|
|
49
|
+
data_source_repository_name=self.repository,
|
|
51
50
|
batch_source=ProtoBatchSource(
|
|
52
51
|
name=self.name,
|
|
53
52
|
description=self.description,
|
|
@@ -65,7 +64,7 @@ class RedshiftSource(JdbcSource):
|
|
|
65
64
|
secret_access_key=self.secret_access_key,
|
|
66
65
|
),
|
|
67
66
|
),
|
|
68
|
-
)
|
|
67
|
+
),
|
|
69
68
|
)
|
|
70
69
|
|
|
71
70
|
@classmethod
|
|
@@ -1,47 +1,71 @@
|
|
|
1
1
|
from dataclasses import dataclass
|
|
2
2
|
from typing import Optional
|
|
3
|
+
import warnings
|
|
3
4
|
|
|
4
5
|
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
6
|
BatchSource as ProtoBatchSource,
|
|
6
|
-
)
|
|
7
|
-
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
8
7
|
SnowflakeSource as ProtoSnowflakeSource,
|
|
9
8
|
)
|
|
10
9
|
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
11
10
|
DataSourceSpec as ProtoDataSourceSpec,
|
|
12
11
|
)
|
|
13
12
|
from qwak.exceptions import QwakException
|
|
14
|
-
from qwak.feature_store.data_sources.
|
|
13
|
+
from qwak.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
14
|
+
|
|
15
|
+
warnings.simplefilter("once", DeprecationWarning)
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
@dataclass
|
|
18
19
|
class SnowflakeSource(BaseBatchSource):
|
|
19
20
|
host: str
|
|
20
21
|
username_secret_name: str
|
|
21
|
-
password_secret_name: str
|
|
22
22
|
database: str
|
|
23
23
|
schema: str
|
|
24
24
|
warehouse: str
|
|
25
|
+
password_secret_name: Optional[str] = None
|
|
26
|
+
pem_private_key_secret_name: Optional[str] = None
|
|
25
27
|
table: Optional[str] = None
|
|
26
28
|
query: Optional[str] = None
|
|
29
|
+
repository: Optional[str] = None
|
|
27
30
|
|
|
28
31
|
def __post_init__(self):
|
|
29
32
|
self._validate()
|
|
30
33
|
|
|
31
34
|
def _validate(self):
|
|
32
|
-
if self.table and self.query:
|
|
33
|
-
raise QwakException("Only one of query and table may be set")
|
|
34
|
-
if not self.table and not self.query:
|
|
35
|
-
raise QwakException("One of table or query must be set")
|
|
36
|
-
|
|
37
35
|
if not self.username_secret_name:
|
|
38
36
|
raise QwakException("username_secret_name must be set!")
|
|
39
37
|
|
|
40
|
-
if not self.
|
|
41
|
-
raise QwakException("
|
|
38
|
+
if not self.database:
|
|
39
|
+
raise QwakException("database must be set!")
|
|
40
|
+
|
|
41
|
+
if not self.schema:
|
|
42
|
+
raise QwakException("schema must be set!")
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
if self.password_secret_name:
|
|
45
|
+
warnings.warn(
|
|
46
|
+
"Snowflake basic authentication is deprecated and should not be used. Use key-pair authentication instead.",
|
|
47
|
+
DeprecationWarning,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
no_unique_source_exception_message = "Only one of query or table may be set"
|
|
51
|
+
has_table = bool(self.table)
|
|
52
|
+
has_query = bool(self.query)
|
|
53
|
+
no_source_set = not (has_table or has_query)
|
|
54
|
+
both_source_set = has_table and has_query
|
|
55
|
+
if no_source_set or both_source_set:
|
|
56
|
+
raise QwakException(no_unique_source_exception_message)
|
|
57
|
+
|
|
58
|
+
no_unique_auth_exception_message = "Exactly one of 'password_secret_name' or 'pem_private_key_secret_name' must be set"
|
|
59
|
+
has_password_secret = bool(self.password_secret_name)
|
|
60
|
+
has_pem_private_key_secret = bool(self.pem_private_key_secret_name)
|
|
61
|
+
no_auth_set = not (has_password_secret or has_pem_private_key_secret)
|
|
62
|
+
both_auth_set = has_password_secret and has_pem_private_key_secret
|
|
63
|
+
if no_auth_set or both_auth_set:
|
|
64
|
+
raise QwakException(no_unique_auth_exception_message)
|
|
65
|
+
|
|
66
|
+
def _to_proto(self, artifact_url: Optional[str] = None):
|
|
44
67
|
return ProtoDataSourceSpec(
|
|
68
|
+
data_source_repository_name=self.repository,
|
|
45
69
|
batch_source=ProtoBatchSource(
|
|
46
70
|
name=self.name,
|
|
47
71
|
description=self.description,
|
|
@@ -50,13 +74,14 @@ class SnowflakeSource(BaseBatchSource):
|
|
|
50
74
|
host=self.host,
|
|
51
75
|
username_secret_name=self.username_secret_name,
|
|
52
76
|
password_secret_name=self.password_secret_name,
|
|
77
|
+
pem_private_key_secret_name=self.pem_private_key_secret_name,
|
|
53
78
|
database=self.database,
|
|
54
79
|
schema=self.schema,
|
|
55
80
|
warehouse=self.warehouse,
|
|
56
81
|
table=self.table,
|
|
57
82
|
query=self.query,
|
|
58
83
|
),
|
|
59
|
-
)
|
|
84
|
+
),
|
|
60
85
|
)
|
|
61
86
|
|
|
62
87
|
@classmethod
|
|
@@ -69,6 +94,7 @@ class SnowflakeSource(BaseBatchSource):
|
|
|
69
94
|
host=snowflake.host,
|
|
70
95
|
username_secret_name=snowflake.username_secret_name,
|
|
71
96
|
password_secret_name=snowflake.password_secret_name,
|
|
97
|
+
pem_private_key_secret_name=snowflake.pem_private_key_secret_name,
|
|
72
98
|
database=snowflake.database,
|
|
73
99
|
schema=snowflake.schema,
|
|
74
100
|
warehouse=snowflake.warehouse,
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
from _qwak_proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
|
+
BatchSource as ProtoBatchSource,
|
|
6
|
+
CatalogSource as ProtoCatalogSource,
|
|
7
|
+
UnityCatalogSource as ProtoUnityCatalogSource,
|
|
8
|
+
)
|
|
9
|
+
from _qwak_proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
10
|
+
DataSourceSpec as ProtoDataSourceSpec,
|
|
11
|
+
)
|
|
12
|
+
from qwak.exceptions import QwakException
|
|
13
|
+
from qwak.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
14
|
+
|
|
15
|
+
RESERVED_CATALOG_NAME = "qwak_catalog"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class UnityCatalogSource(BaseBatchSource):
|
|
20
|
+
"""Unity Catalog batch data source.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
uri (str): Connection uri to Unity Catalog i.e https://<workspace-instance-name>.<domain-name>/api/2.1/unity-catalog
|
|
24
|
+
|
|
25
|
+
schema (str): The Unity Catalog schema name where the data is located.
|
|
26
|
+
|
|
27
|
+
catalog (str): The Unity Catalog catalog name.
|
|
28
|
+
|
|
29
|
+
personal_access_token_secret_name (Optional[str]): The name of the secret
|
|
30
|
+
containing the personal access token for authentication. e.g "my-pat-secret"
|
|
31
|
+
|
|
32
|
+
table (Optional[str]): The table name within the specified catalog and schema.
|
|
33
|
+
Either 'table' or 'query' must be provided, but not both. e.g "my_table"
|
|
34
|
+
|
|
35
|
+
query (Optional[str]): A SQL query to execute against the Unity Catalog.
|
|
36
|
+
Either 'query' or 'table' must be provided, but not both. e.g "select * from {catalog}.{schema}.{table}"
|
|
37
|
+
|
|
38
|
+
repository (Optional[str]): The data source group.
|
|
39
|
+
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
uri: str
|
|
43
|
+
schema: str
|
|
44
|
+
catalog: str
|
|
45
|
+
personal_access_token_secret_name: Optional[str] = None
|
|
46
|
+
table: Optional[str] = None
|
|
47
|
+
query: Optional[str] = None
|
|
48
|
+
repository: Optional[str] = None
|
|
49
|
+
|
|
50
|
+
def __post_init__(self):
|
|
51
|
+
self._validate()
|
|
52
|
+
|
|
53
|
+
def _validate(self):
|
|
54
|
+
if not self.uri:
|
|
55
|
+
raise QwakException("`uri` cannot be empty.")
|
|
56
|
+
|
|
57
|
+
if not self.schema:
|
|
58
|
+
raise QwakException("`schema` cannot be empty.")
|
|
59
|
+
|
|
60
|
+
if not self.catalog:
|
|
61
|
+
raise QwakException("`catalog` cannot be empty.")
|
|
62
|
+
|
|
63
|
+
if not self.personal_access_token_secret_name:
|
|
64
|
+
raise QwakException("`personal_access_token_secret_name` cannot be empty.")
|
|
65
|
+
|
|
66
|
+
if self.catalog == RESERVED_CATALOG_NAME:
|
|
67
|
+
raise QwakException(
|
|
68
|
+
f"`catalog` can not be set to `{RESERVED_CATALOG_NAME}`.",
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
if bool(self.query) == bool(self.table):
|
|
72
|
+
raise QwakException("Either `query` or `table` must be provided.")
|
|
73
|
+
|
|
74
|
+
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
75
|
+
return ProtoDataSourceSpec(
|
|
76
|
+
data_source_repository_name=self.repository,
|
|
77
|
+
batch_source=ProtoBatchSource(
|
|
78
|
+
name=self.name,
|
|
79
|
+
description=self.description,
|
|
80
|
+
date_created_column=self.date_created_column,
|
|
81
|
+
catalogSource=ProtoCatalogSource(
|
|
82
|
+
url=self.uri,
|
|
83
|
+
query=self.query,
|
|
84
|
+
table=self.table,
|
|
85
|
+
unityCatalogSource=ProtoUnityCatalogSource(
|
|
86
|
+
catalog=self.catalog,
|
|
87
|
+
schema=self.schema,
|
|
88
|
+
personal_access_token_secret_name=self.personal_access_token_secret_name,
|
|
89
|
+
),
|
|
90
|
+
),
|
|
91
|
+
),
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
@classmethod
|
|
95
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> "UnityCatalogSource":
|
|
96
|
+
catalog_source = proto.catalogSource
|
|
97
|
+
return cls(
|
|
98
|
+
name=proto.name,
|
|
99
|
+
date_created_column=proto.date_created_column,
|
|
100
|
+
description=proto.description,
|
|
101
|
+
uri=catalog_source.url,
|
|
102
|
+
schema=catalog_source.unityCatalogSource.schema,
|
|
103
|
+
catalog=catalog_source.unityCatalogSource.catalog,
|
|
104
|
+
personal_access_token_secret_name=catalog_source.unityCatalogSource.personal_access_token_secret_name,
|
|
105
|
+
table=catalog_source.table,
|
|
106
|
+
query=catalog_source.query,
|
|
107
|
+
)
|