frogml 1.1.115__py3-none-any.whl → 1.2.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.
- frogml/__init__.py +1 -1
- frogml/_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py +3 -3
- frogml/_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi +6 -4
- frogml/_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.py +3 -3
- frogml/_proto/jfml/hosting_gateway/v1/hosting_gateway_service_pb2.pyi +8 -9
- frogml/_proto/jfml/model_version/v1/artifact_pb2.py +3 -3
- frogml/_proto/jfml/model_version/v1/artifact_pb2.pyi +8 -9
- frogml/_proto/jfml/model_version/v1/build_spec_pb2.py +3 -3
- frogml/_proto/jfml/model_version/v1/build_spec_pb2.pyi +24 -20
- frogml/_proto/jfml/model_version/v1/model_repository_spec_pb2.py +3 -3
- frogml/_proto/jfml/model_version/v1/model_repository_spec_pb2.pyi +6 -9
- frogml/_proto/jfml/model_version/v1/model_version_framework_pb2.py +3 -3
- frogml/_proto/jfml/model_version/v1/model_version_framework_pb2.pyi +13 -10
- frogml/_proto/jfml/model_version/v1/model_version_manager_service_pb2.py +3 -3
- frogml/_proto/jfml/model_version/v1/model_version_manager_service_pb2.pyi +43 -30
- frogml/_proto/jfml/model_version/v1/model_version_pb2.py +11 -11
- frogml/_proto/jfml/model_version/v1/model_version_pb2.pyi +48 -32
- frogml/_proto/qwak/administration/account/v1/account_pb2.py +25 -23
- frogml/_proto/qwak/administration/account/v1/account_pb2.pyi +55 -21
- frogml/_proto/qwak/administration/account/v1/account_service_pb2.py +3 -3
- frogml/_proto/qwak/administration/account/v1/account_service_pb2.pyi +63 -36
- frogml/_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.py +5 -5
- frogml/_proto/qwak/administration/account/v1/jfrog_tenant_details_pb2.pyi +35 -22
- frogml/_proto/qwak/administration/account/v1/personalization_pb2.py +3 -3
- frogml/_proto/qwak/administration/account/v1/personalization_pb2.pyi +7 -9
- frogml/_proto/qwak/administration/account/v1/preferences_pb2.py +3 -3
- frogml/_proto/qwak/administration/account/v1/preferences_pb2.pyi +6 -8
- frogml/_proto/qwak/administration/account/v1/terms_pb2.py +3 -3
- frogml/_proto/qwak/administration/account/v1/terms_pb2.pyi +16 -11
- frogml/_proto/qwak/administration/authenticated_user/v1/authenticated_user_service_pb2.py +3 -3
- frogml/_proto/qwak/administration/authenticated_user/v1/authenticated_user_service_pb2.pyi +20 -14
- frogml/_proto/qwak/administration/authenticated_user/v1/credentials_pb2.py +3 -3
- frogml/_proto/qwak/administration/authenticated_user/v1/credentials_pb2.pyi +10 -11
- frogml/_proto/qwak/administration/authenticated_user/v1/details_pb2.py +3 -3
- frogml/_proto/qwak/administration/authenticated_user/v1/details_pb2.pyi +18 -15
- frogml/_proto/qwak/administration/cluster/v2/cluster_pb2.py +3 -3
- frogml/_proto/qwak/administration/cluster/v2/cluster_pb2.pyi +62 -39
- frogml/_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/container_registry_config_pb2.pyi +12 -13
- frogml/_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/creds/auth_pb2.pyi +5 -8
- frogml/_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/creds/secret_pb2.pyi +8 -10
- frogml/_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/data_catalog_config_pb2.pyi +11 -11
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/databricks/auth_pb2.pyi +16 -17
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/elasticsearch_config_pb2.pyi +8 -11
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/kafka_config_pb2.pyi +12 -12
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/prometheus_config_pb2.pyi +8 -10
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/redis_config_pb2.pyi +8 -11
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/external/victoriametrics_config_pb2.pyi +6 -9
- frogml/_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/feature_store_config_pb2.pyi +13 -14
- frogml/_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/hosting/aws/auth_pb2.pyi +29 -25
- frogml/_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/hosting/azure/auth_pb2.pyi +23 -21
- frogml/_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/hosting_config_pb2.pyi +27 -25
- frogml/_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/logs_storage_config_pb2.pyi +6 -9
- frogml/_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/model_analytics_storage_config_pb2.pyi +6 -9
- frogml/_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/network_config_pb2.pyi +22 -21
- frogml/_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/object_storage_config_pb2.pyi +12 -12
- frogml/_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/observability_config_pb2.pyi +13 -14
- frogml/_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/runtime_config_pb2.pyi +5 -8
- frogml/_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.py +3 -3
- frogml/_proto/qwak/administration/runtime_configuration/v0/sql_engine_config_pb2.pyi +11 -11
- frogml/_proto/qwak/administration/v0/authentication/authentication_service_pb2.py +3 -3
- frogml/_proto/qwak/administration/v0/authentication/authentication_service_pb2.pyi +14 -13
- frogml/_proto/qwak/administration/v0/environments/configuration_pb2.py +3 -3
- frogml/_proto/qwak/administration/v0/environments/configuration_pb2.pyi +33 -20
- frogml/_proto/qwak/administration/v0/environments/environment_pb2.py +5 -5
- frogml/_proto/qwak/administration/v0/environments/environment_pb2.pyi +17 -8
- frogml/_proto/qwak/administration/v0/environments/environment_service_pb2.py +5 -5
- frogml/_proto/qwak/administration/v0/environments/environment_service_pb2.pyi +46 -26
- frogml/_proto/qwak/administration/v0/environments/personalization_pb2.py +3 -3
- frogml/_proto/qwak/administration/v0/environments/personalization_pb2.pyi +7 -9
- frogml/_proto/qwak/administration/v0/users/user_pb2.py +7 -7
- frogml/_proto/qwak/administration/v0/users/user_pb2.pyi +18 -11
- frogml/_proto/qwak/admiral/secret/v0/secret_pb2.py +21 -19
- frogml/_proto/qwak/admiral/secret/v0/secret_pb2.pyi +65 -24
- frogml/_proto/qwak/admiral/secret/v0/secret_service_pb2.py +3 -3
- frogml/_proto/qwak/admiral/secret/v0/secret_service_pb2.pyi +16 -12
- frogml/_proto/qwak/admiral/secret/v0/system_secret_service_pb2.py +3 -3
- frogml/_proto/qwak/admiral/secret/v0/system_secret_service_pb2.pyi +19 -14
- frogml/_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.py +3 -3
- frogml/_proto/qwak/admiral/user_application_instance/v0/user_application_instance_pb2.pyi +83 -48
- frogml/_proto/qwak/admiral/user_application_instance/v0/user_application_instance_service_pb2.py +3 -3
- frogml/_proto/qwak/admiral/user_application_instance/v0/user_application_instance_service_pb2.pyi +25 -16
- frogml/_proto/qwak/analytics/analytics_pb2.py +3 -3
- frogml/_proto/qwak/analytics/analytics_pb2.pyi +33 -16
- frogml/_proto/qwak/analytics/analytics_service_pb2.py +3 -3
- frogml/_proto/qwak/analytics/analytics_service_pb2.pyi +46 -26
- frogml/_proto/qwak/artifactory_settings/artifactory_settings_pb2.py +3 -3
- frogml/_proto/qwak/artifactory_settings/artifactory_settings_pb2.pyi +7 -9
- frogml/_proto/qwak/audience/v1/audience_api_pb2.py +3 -3
- frogml/_proto/qwak/audience/v1/audience_api_pb2.pyi +25 -17
- frogml/_proto/qwak/audience/v1/audience_pb2.py +5 -5
- frogml/_proto/qwak/audience/v1/audience_pb2.pyi +38 -23
- frogml/_proto/qwak/auto_scaling/v1/auto_scaling_pb2.py +3 -3
- frogml/_proto/qwak/auto_scaling/v1/auto_scaling_pb2.pyi +22 -13
- frogml/_proto/qwak/auto_scaling/v1/auto_scaling_service_pb2.py +3 -3
- frogml/_proto/qwak/auto_scaling/v1/auto_scaling_service_pb2.pyi +8 -9
- frogml/_proto/qwak/automation/v1/action_pb2.py +17 -17
- frogml/_proto/qwak/automation/v1/action_pb2.pyi +76 -47
- frogml/_proto/qwak/automation/v1/auto_scaling_pb2.py +3 -3
- frogml/_proto/qwak/automation/v1/auto_scaling_pb2.pyi +22 -13
- frogml/_proto/qwak/automation/v1/automation_execution_pb2.py +3 -3
- frogml/_proto/qwak/automation/v1/automation_execution_pb2.pyi +23 -13
- frogml/_proto/qwak/automation/v1/automation_management_service_pb2.py +5 -5
- frogml/_proto/qwak/automation/v1/automation_management_service_pb2.pyi +56 -32
- frogml/_proto/qwak/automation/v1/automation_pb2.py +3 -3
- frogml/_proto/qwak/automation/v1/automation_pb2.pyi +28 -25
- frogml/_proto/qwak/automation/v1/common_pb2.py +3 -3
- frogml/_proto/qwak/automation/v1/common_pb2.pyi +8 -5
- frogml/_proto/qwak/automation/v1/notification_pb2.py +7 -7
- frogml/_proto/qwak/automation/v1/notification_pb2.pyi +14 -8
- frogml/_proto/qwak/automation/v1/trigger_pb2.py +3 -3
- frogml/_proto/qwak/automation/v1/trigger_pb2.pyi +17 -16
- frogml/_proto/qwak/batch_job/v1/batch_job_events_pb2.py +13 -13
- frogml/_proto/qwak/batch_job/v1/batch_job_events_pb2.pyi +22 -14
- frogml/_proto/qwak/batch_job/v1/batch_job_resources_pb2.py +3 -3
- frogml/_proto/qwak/batch_job/v1/batch_job_resources_pb2.pyi +4 -2
- frogml/_proto/qwak/batch_job/v1/batch_job_service_pb2.py +27 -27
- frogml/_proto/qwak/batch_job/v1/batch_job_service_pb2.pyi +192 -101
- frogml/_proto/qwak/build/v1/build_api_pb2.py +17 -17
- frogml/_proto/qwak/build/v1/build_api_pb2.pyi +87 -46
- frogml/_proto/qwak/build/v1/build_pb2.py +9 -9
- frogml/_proto/qwak/build/v1/build_pb2.pyi +187 -118
- frogml/_proto/qwak/build_settings/build_settings_api_pb2.py +3 -3
- frogml/_proto/qwak/build_settings/build_settings_api_pb2.pyi +15 -13
- frogml/_proto/qwak/build_settings/build_settings_pb2.py +3 -3
- frogml/_proto/qwak/build_settings/build_settings_pb2.pyi +24 -19
- frogml/_proto/qwak/builds/build_pb2.py +7 -7
- frogml/_proto/qwak/builds/build_pb2.pyi +83 -54
- frogml/_proto/qwak/builds/build_url_pb2.py +5 -5
- frogml/_proto/qwak/builds/build_url_pb2.pyi +39 -21
- frogml/_proto/qwak/builds/build_values_pb2.py +35 -29
- frogml/_proto/qwak/builds/build_values_pb2.pyi +85 -36
- frogml/_proto/qwak/builds/builds_orchestrator_service_pb2.py +19 -19
- frogml/_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +100 -52
- frogml/_proto/qwak/builds/builds_pb2.py +7 -7
- frogml/_proto/qwak/builds/builds_pb2.pyi +177 -105
- frogml/_proto/qwak/builds/internal_builds_orchestrator_service_pb2.py +3 -3
- frogml/_proto/qwak/builds/internal_builds_orchestrator_service_pb2.pyi +12 -10
- frogml/_proto/qwak/data_versioning/data_versioning_pb2.py +3 -3
- frogml/_proto/qwak/data_versioning/data_versioning_pb2.pyi +8 -10
- frogml/_proto/qwak/data_versioning/data_versioning_service_pb2.py +3 -3
- frogml/_proto/qwak/data_versioning/data_versioning_service_pb2.pyi +12 -11
- frogml/_proto/qwak/deployment/alert_pb2.py +5 -5
- frogml/_proto/qwak/deployment/alert_pb2.pyi +31 -20
- frogml/_proto/qwak/deployment/alert_service_pb2.py +7 -7
- frogml/_proto/qwak/deployment/alert_service_pb2.pyi +34 -21
- frogml/_proto/qwak/deployment/deployment_messages_pb2.py +3 -3
- frogml/_proto/qwak/deployment/deployment_messages_pb2.pyi +9 -11
- frogml/_proto/qwak/deployment/deployment_pb2.py +33 -33
- frogml/_proto/qwak/deployment/deployment_pb2.pyi +225 -139
- frogml/_proto/qwak/deployment/deployment_service_pb2.py +81 -81
- frogml/_proto/qwak/deployment/deployment_service_pb2.pyi +139 -78
- frogml/_proto/qwak/ecosystem/jfrog/v0/jfrog_tenant_info_service_pb2.py +3 -3
- frogml/_proto/qwak/ecosystem/jfrog/v0/jfrog_tenant_info_service_pb2.pyi +11 -9
- frogml/_proto/qwak/ecosystem/jfrog/v0/jfrog_tenant_pb2.py +3 -3
- frogml/_proto/qwak/ecosystem/jfrog/v0/jfrog_tenant_pb2.pyi +6 -8
- frogml/_proto/qwak/ecosystem/jfrog/v0/token_pb2.py +11 -11
- frogml/_proto/qwak/ecosystem/jfrog/v0/token_pb2.pyi +70 -37
- frogml/_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.py +3 -3
- frogml/_proto/qwak/ecosystem/jfrog/v0/token_service_pb2.pyi +29 -19
- frogml/_proto/qwak/ecosystem/v0/auth_pb2.py +3 -3
- frogml/_proto/qwak/ecosystem/v0/auth_pb2.pyi +6 -8
- frogml/_proto/qwak/ecosystem/v0/azure_credentials_pb2.py +3 -3
- frogml/_proto/qwak/ecosystem/v0/azure_credentials_pb2.pyi +21 -19
- frogml/_proto/qwak/ecosystem/v0/credentials_pb2.py +3 -3
- frogml/_proto/qwak/ecosystem/v0/credentials_pb2.pyi +16 -15
- frogml/_proto/qwak/ecosystem/v0/ecosystem_pb2.py +11 -11
- frogml/_proto/qwak/ecosystem/v0/ecosystem_pb2.pyi +63 -40
- frogml/_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.py +5 -5
- frogml/_proto/qwak/ecosystem/v0/ecosystem_runtime_service_pb2.pyi +74 -41
- frogml/_proto/qwak/execution/v1/backfill_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/backfill_pb2.pyi +34 -24
- frogml/_proto/qwak/execution/v1/batch_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/batch_pb2.pyi +16 -13
- frogml/_proto/qwak/execution/v1/deletion_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/deletion_pb2.pyi +9 -9
- frogml/_proto/qwak/execution/v1/execution_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/execution_pb2.pyi +28 -12
- frogml/_proto/qwak/execution/v1/execution_service_pb2.py +5 -5
- frogml/_proto/qwak/execution/v1/execution_service_pb2.pyi +69 -43
- frogml/_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/internal/deployment/platform_details_pb2.pyi +4 -7
- frogml/_proto/qwak/execution/v1/jobs/job_pb2.py +5 -5
- frogml/_proto/qwak/execution/v1/jobs/job_pb2.pyi +45 -22
- frogml/_proto/qwak/execution/v1/jobs/job_service_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/jobs/job_service_pb2.pyi +62 -37
- frogml/_proto/qwak/execution/v1/jobs/reports/report_pb2.py +5 -5
- frogml/_proto/qwak/execution/v1/jobs/reports/report_pb2.pyi +49 -29
- frogml/_proto/qwak/execution/v1/state/execution_state_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/state/execution_state_pb2.pyi +6 -9
- frogml/_proto/qwak/execution/v1/state/execution_state_service_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/state/execution_state_service_pb2.pyi +27 -19
- frogml/_proto/qwak/execution/v1/state/featureset_state_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/state/featureset_state_pb2.pyi +4 -7
- frogml/_proto/qwak/execution/v1/state/spark_execution_state_pb2.py +5 -5
- frogml/_proto/qwak/execution/v1/state/spark_execution_state_pb2.pyi +13 -7
- frogml/_proto/qwak/execution/v1/streaming_aggregation_pb2.py +21 -14
- frogml/_proto/qwak/execution/v1/streaming_aggregation_pb2.pyi +83 -11
- frogml/_proto/qwak/execution/v1/streaming_pb2.py +3 -3
- frogml/_proto/qwak/execution/v1/streaming_pb2.pyi +10 -10
- frogml/_proto/qwak/feature_store/entities/entity_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/entities/entity_pb2.pyi +29 -16
- frogml/_proto/qwak/feature_store/entities/entity_service_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/entities/entity_service_pb2.pyi +37 -22
- frogml/_proto/qwak/feature_store/features/aggregation_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/aggregation_pb2.pyi +39 -21
- frogml/_proto/qwak/feature_store/features/deployment_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/deployment_pb2.pyi +51 -27
- frogml/_proto/qwak/feature_store/features/deployment_service_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/deployment_service_pb2.pyi +5 -7
- frogml/_proto/qwak/feature_store/features/execution_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/execution_pb2.pyi +18 -13
- frogml/_proto/qwak/feature_store/features/feature_set_attribute_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/feature_set_attribute_pb2.pyi +6 -8
- frogml/_proto/qwak/feature_store/features/feature_set_pb2.py +21 -21
- frogml/_proto/qwak/feature_store/features/feature_set_pb2.pyi +85 -48
- frogml/_proto/qwak/feature_store/features/feature_set_service_pb2.py +9 -9
- frogml/_proto/qwak/feature_store/features/feature_set_service_pb2.pyi +107 -53
- frogml/_proto/qwak/feature_store/features/feature_set_state_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/feature_set_state_pb2.pyi +46 -23
- frogml/_proto/qwak/feature_store/features/feature_set_state_service_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/feature_set_state_service_pb2.pyi +27 -17
- frogml/_proto/qwak/feature_store/features/feature_set_types_pb2.py +73 -71
- frogml/_proto/qwak/feature_store/features/feature_set_types_pb2.pyi +181 -99
- frogml/_proto/qwak/feature_store/features/monitoring_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/monitoring_pb2.pyi +11 -11
- frogml/_proto/qwak/feature_store/features/real_time_feature_extractor_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/features/real_time_feature_extractor_pb2.pyi +63 -37
- frogml/_proto/qwak/feature_store/jobs/job_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/jobs/job_pb2.pyi +26 -14
- frogml/_proto/qwak/feature_store/jobs/job_service_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/jobs/job_service_pb2.pyi +36 -25
- frogml/_proto/qwak/feature_store/jobs/v1/job_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/jobs/v1/job_pb2.pyi +23 -12
- frogml/_proto/qwak/feature_store/jobs/v1/job_service_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/jobs/v1/job_service_pb2.pyi +51 -30
- frogml/_proto/qwak/feature_store/platform/platform_details_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/platform/platform_details_pb2.pyi +11 -11
- frogml/_proto/qwak/feature_store/reports/report_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/reports/report_pb2.pyi +28 -18
- frogml/_proto/qwak/feature_store/repository/common/platform_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/repository/common/platform_pb2.pyi +13 -12
- frogml/_proto/qwak/feature_store/serving/management_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/serving/management_pb2.pyi +10 -10
- frogml/_proto/qwak/feature_store/serving/metadata_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/serving/metadata_pb2.pyi +21 -15
- frogml/_proto/qwak/feature_store/serving/serving_pb2.py +13 -13
- frogml/_proto/qwak/feature_store/serving/serving_pb2.pyi +67 -37
- frogml/_proto/qwak/feature_store/serving/v1/value_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/serving/v1/value_pb2.pyi +8 -10
- frogml/_proto/qwak/feature_store/sinks/sink_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/sinks/sink_pb2.pyi +20 -16
- frogml/_proto/qwak/feature_store/sources/batch_pb2.py +11 -11
- frogml/_proto/qwak/feature_store/sources/batch_pb2.pyi +110 -70
- frogml/_proto/qwak/feature_store/sources/data_source_attribute_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/sources/data_source_attribute_pb2.pyi +6 -8
- frogml/_proto/qwak/feature_store/sources/data_source_pb2.py +7 -7
- frogml/_proto/qwak/feature_store/sources/data_source_pb2.pyi +37 -30
- frogml/_proto/qwak/feature_store/sources/data_source_service_pb2.py +5 -5
- frogml/_proto/qwak/feature_store/sources/data_source_service_pb2.pyi +45 -25
- frogml/_proto/qwak/feature_store/sources/streaming_pb2.py +11 -11
- frogml/_proto/qwak/feature_store/sources/streaming_pb2.pyi +41 -21
- frogml/_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/v1/common/jfrog_artifact/jfrog_artifact_pb2.pyi +4 -7
- frogml/_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/v1/common/source_code/source_code_pb2.pyi +17 -17
- frogml/_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.py +5 -5
- frogml/_proto/qwak/feature_store/v1/internal/data_source/data_source_service_pb2.pyi +15 -13
- frogml/_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.py +3 -3
- frogml/_proto/qwak/feature_store/v1/internal/featureset/featureset_token_service_pb2.pyi +6 -8
- frogml/_proto/qwak/features_operator/v1/features_operator_pb2.py +3 -3
- frogml/_proto/qwak/features_operator/v1/features_operator_pb2.pyi +15 -11
- frogml/_proto/qwak/features_operator/v1/features_operator_service_pb2.py +3 -3
- frogml/_proto/qwak/features_operator/v1/features_operator_service_pb2.pyi +18 -16
- frogml/_proto/qwak/features_operator/v2/features_operator_pb2.py +3 -3
- frogml/_proto/qwak/features_operator/v2/features_operator_pb2.pyi +16 -11
- frogml/_proto/qwak/features_operator/v2/features_operator_service_pb2.py +3 -3
- frogml/_proto/qwak/features_operator/v2/features_operator_service_pb2.pyi +20 -19
- frogml/_proto/qwak/features_operator/v3/features_operator_async_service_pb2.py +3 -3
- frogml/_proto/qwak/features_operator/v3/features_operator_async_service_pb2.pyi +41 -34
- frogml/_proto/qwak/features_operator/v3/features_operator_pb2.py +3 -3
- frogml/_proto/qwak/features_operator/v3/features_operator_pb2.pyi +19 -13
- frogml/_proto/qwak/file_versioning/file_versioning_pb2.py +5 -5
- frogml/_proto/qwak/file_versioning/file_versioning_pb2.pyi +8 -5
- frogml/_proto/qwak/file_versioning/file_versioning_service_pb2.py +3 -3
- frogml/_proto/qwak/file_versioning/file_versioning_service_pb2.pyi +12 -11
- frogml/_proto/qwak/fitness_service/constructs_pb2.py +3 -3
- frogml/_proto/qwak/fitness_service/constructs_pb2.pyi +27 -16
- frogml/_proto/qwak/fitness_service/fitness_pb2.py +3 -3
- frogml/_proto/qwak/fitness_service/fitness_pb2.pyi +24 -18
- frogml/_proto/qwak/fitness_service/fitness_service_pb2.py +3 -3
- frogml/_proto/qwak/fitness_service/fitness_service_pb2.pyi +18 -13
- frogml/_proto/qwak/fitness_service/status_pb2.py +3 -3
- frogml/_proto/qwak/fitness_service/status_pb2.pyi +26 -16
- frogml/_proto/qwak/inference/feedback/feedback_pb2.py +3 -3
- frogml/_proto/qwak/inference/feedback/feedback_pb2.pyi +28 -15
- frogml/_proto/qwak/instance_template/instance_template_pb2.py +3 -3
- frogml/_proto/qwak/instance_template/instance_template_pb2.pyi +10 -7
- frogml/_proto/qwak/instance_template/instance_template_service_pb2.py +3 -3
- frogml/_proto/qwak/instance_template/instance_template_service_pb2.pyi +12 -12
- frogml/_proto/qwak/integration/hugging_face_integration_pb2.py +3 -3
- frogml/_proto/qwak/integration/hugging_face_integration_pb2.pyi +19 -17
- frogml/_proto/qwak/integration/integration_pb2.py +3 -3
- frogml/_proto/qwak/integration/integration_pb2.pyi +50 -32
- frogml/_proto/qwak/integration/integration_service_pb2.py +3 -3
- frogml/_proto/qwak/integration/integration_service_pb2.pyi +39 -23
- frogml/_proto/qwak/integration/open_a_i_integration_pb2.py +3 -3
- frogml/_proto/qwak/integration/open_a_i_integration_pb2.pyi +20 -17
- frogml/_proto/qwak/integration/opsgenie_integration_pb2.py +5 -5
- frogml/_proto/qwak/integration/opsgenie_integration_pb2.pyi +29 -16
- frogml/_proto/qwak/integration/pagerduty_integration_pb2.py +5 -5
- frogml/_proto/qwak/integration/pagerduty_integration_pb2.pyi +39 -26
- frogml/_proto/qwak/integration/slack_app_integration_pb2.py +5 -5
- frogml/_proto/qwak/integration/slack_app_integration_pb2.pyi +30 -20
- frogml/_proto/qwak/jfrog/gateway/v0/repository_pb2.py +3 -3
- frogml/_proto/qwak/jfrog/gateway/v0/repository_pb2.pyi +19 -16
- frogml/_proto/qwak/jfrog/gateway/v0/repository_service_pb2.py +3 -3
- frogml/_proto/qwak/jfrog/gateway/v0/repository_service_pb2.pyi +11 -11
- frogml/_proto/qwak/kube_deployment_captain/alert_pb2.py +5 -5
- frogml/_proto/qwak/kube_deployment_captain/alert_pb2.pyi +25 -15
- frogml/_proto/qwak/kube_deployment_captain/alerting_pb2.py +3 -3
- frogml/_proto/qwak/kube_deployment_captain/alerting_pb2.pyi +14 -12
- frogml/_proto/qwak/kube_deployment_captain/batch_job_pb2.py +67 -67
- frogml/_proto/qwak/kube_deployment_captain/batch_job_pb2.pyi +104 -61
- frogml/_proto/qwak/kube_deployment_captain/deployment_pb2.py +3 -3
- frogml/_proto/qwak/kube_deployment_captain/deployment_pb2.pyi +63 -40
- frogml/_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.py +7 -7
- frogml/_proto/qwak/kube_deployment_captain/feature_set_deployment_pb2.pyi +63 -39
- frogml/_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.py +17 -17
- frogml/_proto/qwak/kube_deployment_captain/kube_deployment_captain_service_pb2.pyi +146 -72
- frogml/_proto/qwak/kube_deployment_captain/traffic_mapping_pb2.py +3 -3
- frogml/_proto/qwak/kube_deployment_captain/traffic_mapping_pb2.pyi +8 -10
- frogml/_proto/qwak/logging/log_filter_pb2.py +3 -3
- frogml/_proto/qwak/logging/log_filter_pb2.pyi +18 -13
- frogml/_proto/qwak/logging/log_line_pb2.py +5 -5
- frogml/_proto/qwak/logging/log_line_pb2.pyi +7 -8
- frogml/_proto/qwak/logging/log_reader_service_pb2.py +3 -3
- frogml/_proto/qwak/logging/log_reader_service_pb2.pyi +19 -18
- frogml/_proto/qwak/logging/log_source_pb2.py +3 -3
- frogml/_proto/qwak/logging/log_source_pb2.pyi +39 -29
- frogml/_proto/qwak/model_descriptor/open_ai_descriptor_pb2.py +3 -3
- frogml/_proto/qwak/model_descriptor/open_ai_descriptor_pb2.pyi +48 -44
- frogml/_proto/qwak/model_group/model_group_pb2.py +3 -3
- frogml/_proto/qwak/model_group/model_group_pb2.pyi +27 -18
- frogml/_proto/qwak/model_group/model_group_repository_details_pb2.py +3 -3
- frogml/_proto/qwak/model_group/model_group_repository_details_pb2.pyi +28 -18
- frogml/_proto/qwak/models/models_pb2.py +19 -19
- frogml/_proto/qwak/models/models_pb2.pyi +148 -89
- frogml/_proto/qwak/models/models_query_pb2.py +3 -3
- frogml/_proto/qwak/models/models_query_pb2.pyi +18 -13
- frogml/_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.py +3 -3
- frogml/_proto/qwak/monitoring/v0/alerting_channel_management_service_pb2.pyi +31 -18
- frogml/_proto/qwak/monitoring/v0/alerting_channel_pb2.py +3 -3
- frogml/_proto/qwak/monitoring/v0/alerting_channel_pb2.pyi +62 -28
- frogml/_proto/qwak/monitoring/v0/alerting_channel_sync_service_pb2.py +3 -3
- frogml/_proto/qwak/monitoring/v0/alerting_channel_sync_service_pb2.pyi +18 -14
- frogml/_proto/qwak/offline/serving/v1/feature_values_pb2.py +3 -3
- frogml/_proto/qwak/offline/serving/v1/feature_values_pb2.pyi +5 -7
- frogml/_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.py +3 -3
- frogml/_proto/qwak/offline/serving/v1/offline_serving_async_service_pb2.pyi +43 -23
- frogml/_proto/qwak/offline/serving/v1/options_pb2.py +3 -3
- frogml/_proto/qwak/offline/serving/v1/options_pb2.pyi +4 -7
- frogml/_proto/qwak/offline/serving/v1/population_pb2.py +3 -3
- frogml/_proto/qwak/offline/serving/v1/population_pb2.pyi +18 -15
- frogml/_proto/qwak/projects/jfrog_project_spec_pb2.py +3 -3
- frogml/_proto/qwak/projects/jfrog_project_spec_pb2.pyi +6 -9
- frogml/_proto/qwak/projects/projects_pb2.py +22 -20
- frogml/_proto/qwak/projects/projects_pb2.pyi +74 -36
- frogml/_proto/qwak/secret_service/secret_service_pb2.py +3 -3
- frogml/_proto/qwak/secret_service/secret_service_pb2.pyi +13 -11
- frogml/_proto/qwak/self_service/account/v0/account_membership_pb2.py +7 -7
- frogml/_proto/qwak/self_service/account/v0/account_membership_pb2.pyi +44 -22
- frogml/_proto/qwak/self_service/account/v0/account_membership_service_pb2.py +3 -3
- frogml/_proto/qwak/self_service/account/v0/account_membership_service_pb2.pyi +48 -24
- frogml/_proto/qwak/self_service/account/v0/account_status_pb2.py +5 -5
- frogml/_proto/qwak/self_service/account/v0/account_status_pb2.pyi +30 -23
- frogml/_proto/qwak/self_service/account/v0/managing_account_pb2.py +7 -7
- frogml/_proto/qwak/self_service/account/v0/managing_account_pb2.pyi +50 -26
- frogml/_proto/qwak/self_service/account/v0/managing_account_service_pb2.py +3 -3
- frogml/_proto/qwak/self_service/account/v0/managing_account_service_pb2.pyi +25 -16
- frogml/_proto/qwak/self_service/user/v1/api_key_pb2.py +3 -3
- frogml/_proto/qwak/self_service/user/v1/api_key_pb2.pyi +4 -7
- frogml/_proto/qwak/self_service/user/v1/user_pb2.py +3 -3
- frogml/_proto/qwak/self_service/user/v1/user_pb2.pyi +16 -16
- frogml/_proto/qwak/self_service/user/v1/user_service_pb2.py +5 -5
- frogml/_proto/qwak/self_service/user/v1/user_service_pb2.pyi +27 -14
- frogml/_proto/qwak/service_discovery/service_discovery_location_pb2.py +3 -3
- frogml/_proto/qwak/service_discovery/service_discovery_location_pb2.pyi +11 -11
- frogml/_proto/qwak/service_discovery/service_discovery_location_service_pb2.py +3 -3
- frogml/_proto/qwak/service_discovery/service_discovery_location_service_pb2.pyi +6 -8
- frogml/_proto/qwak/traffic/v1/traffic_api_pb2.py +3 -3
- frogml/_proto/qwak/traffic/v1/traffic_api_pb2.pyi +19 -14
- frogml/_proto/qwak/traffic/v1/traffic_pb2.py +3 -3
- frogml/_proto/qwak/traffic/v1/traffic_pb2.pyi +35 -22
- frogml/_proto/qwak/user_application/common/v0/resources_pb2.py +3 -3
- frogml/_proto/qwak/user_application/common/v0/resources_pb2.pyi +29 -19
- frogml/_proto/qwak/user_application/v0/user_application_pb2.py +7 -7
- frogml/_proto/qwak/user_application/v0/user_application_pb2.pyi +8 -5
- frogml/core/clients/build_orchestrator/build_model_request_getter.py +6 -2
- frogml/core/clients/build_orchestrator/client.py +9 -5
- frogml/core/exceptions/__init__.py +1 -0
- frogml/core/exceptions/frogml_grpc_address_exception.py +9 -0
- frogml/core/exceptions/frogml_token_exception.py +7 -0
- frogml/core/feature_store/data_sources/attributes.py +5 -8
- frogml/core/feature_store/data_sources/source_authentication.py +5 -6
- frogml/core/feature_store/data_sources/time_partition_columns.py +28 -41
- frogml/core/feature_store/execution/backfill.py +17 -28
- frogml/core/feature_store/feature_sets/transformations/__init__.py +0 -2
- frogml/core/feature_store/feature_sets/transformations/transformations.py +0 -69
- frogml/core/inner/build_config/build_config_v1.py +4 -5
- frogml/core/inner/const.py +2 -0
- frogml/core/inner/di_configuration/__init__.py +1 -65
- frogml/core/inner/di_configuration/account.py +4 -5
- frogml/core/inner/di_configuration/containers.py +7 -0
- frogml/core/inner/di_configuration/dependency_wiring.py +95 -0
- frogml/core/inner/tool/auth/TOKEN_ROTATION.md +51 -0
- frogml/core/inner/tool/auth/__init__.py +3 -0
- frogml/core/inner/tool/auth/auth_client.py +192 -0
- frogml/core/inner/tool/auth/token_maintainer.py +119 -0
- frogml/core/inner/tool/grpc/grpc_auth.py +22 -23
- frogml/core/inner/tool/grpc/grpc_tools.py +126 -6
- frogml/core/model_loggers/artifact_logger.py +5 -4
- frogml/feature_store/_common/packaging.py +1 -1
- frogml/feature_store/data_sources/base.py +8 -8
- frogml/feature_store/data_sources/batch/_batch.py +0 -3
- frogml/feature_store/data_sources/batch/_jdbc.py +6 -7
- frogml/feature_store/data_sources/batch/athena.py +6 -7
- frogml/feature_store/data_sources/batch/big_query.py +8 -5
- frogml/feature_store/data_sources/batch/clickhouse.py +8 -8
- frogml/feature_store/data_sources/batch/csv.py +2 -4
- frogml/feature_store/data_sources/batch/elastic_search.py +2 -4
- frogml/feature_store/data_sources/batch/filesystem/aws.py +21 -22
- frogml/feature_store/data_sources/batch/filesystem/base_config.py +3 -3
- frogml/feature_store/data_sources/batch/filesystem/gcp.py +3 -7
- frogml/feature_store/data_sources/batch/mongodb.py +2 -4
- frogml/feature_store/data_sources/batch/mysql.py +2 -3
- frogml/feature_store/data_sources/batch/parquet.py +6 -6
- frogml/feature_store/data_sources/batch/postgres.py +2 -3
- frogml/feature_store/data_sources/batch/redshift.py +8 -6
- frogml/feature_store/data_sources/batch/snowflake.py +17 -11
- frogml/feature_store/data_sources/batch/unity_catalog.py +14 -10
- frogml/feature_store/data_sources/batch/vertica.py +10 -6
- frogml/feature_store/data_sources/streaming/_streaming.py +0 -2
- frogml/feature_store/data_sources/streaming/kafka/authentication.py +13 -19
- frogml/feature_store/data_sources/streaming/kafka/deserialization.py +22 -23
- frogml/feature_store/data_sources/streaming/kafka/kafka.py +13 -14
- frogml/feature_store/online/client.py +20 -4
- frogml/sdk/frogml_client/builds/build.py +8 -7
- frogml/sdk/model_version/huggingface/__init__.py +5 -3
- frogml/sdk/model_version/utils/files_tools.py +2 -3
- frogml/storage/authentication/models/_auth_config.py +22 -1
- frogml/storage/authentication/utils/_authentication_utils.py +31 -34
- frogml/storage/constants.py +19 -0
- frogml/storage/frog_ml.py +5 -22
- frogml/storage/models/frogml_dataset_version.py +3 -3
- frogml/storage/models/frogml_model_version.py +6 -3
- frogml/storage/utils/_input_checks_utility.py +3 -1
- {frogml-1.1.115.dist-info → frogml-1.2.19.dist-info}/METADATA +39 -9
- {frogml-1.1.115.dist-info → frogml-1.2.19.dist-info}/RECORD +482 -476
- frogml_services_mock/mocks/authentication_service.py +3 -3
- frogml_services_mock/mocks/build_orchestrator_service_api.py +5 -2
- frogml_services_mock/services_mock.py +44 -33
- frogml/core/inner/tool/auth.py +0 -100
- {frogml-1.1.115.dist-info → frogml-1.2.19.dist-info}/WHEEL +0 -0
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
from abc import ABC
|
|
2
|
-
from dataclasses import dataclass
|
|
3
2
|
from typing import Optional
|
|
3
|
+
from typing_extensions import Self
|
|
4
|
+
from pydantic import model_validator
|
|
4
5
|
|
|
5
6
|
from frogml.core.exceptions import FrogmlException
|
|
6
7
|
from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
@dataclass
|
|
10
10
|
class JdbcSource(BaseBatchSource, ABC):
|
|
11
11
|
username_secret_name: Optional[str] = None
|
|
12
12
|
password_secret_name: Optional[str] = None
|
|
13
13
|
url: Optional[str] = None
|
|
14
14
|
db_table: Optional[str] = None
|
|
15
15
|
query: Optional[str] = None
|
|
16
|
-
repository: Optional[str] = None
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def _validate(self):
|
|
17
|
+
@model_validator(mode="after")
|
|
18
|
+
def __validate_jdbc(self) -> Self:
|
|
22
19
|
if not (bool(self.db_table) ^ bool(self.query)):
|
|
23
20
|
raise FrogmlException("Only one of query and db_table must be set")
|
|
21
|
+
|
|
22
|
+
return self
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
from pydantic import model_validator
|
|
3
4
|
|
|
4
5
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
6
|
AthenaSourceV1 as ProtoAthenaSourceV1,
|
|
@@ -45,18 +46,15 @@ from frogml.core.feature_store.data_sources.time_partition_columns import (
|
|
|
45
46
|
)
|
|
46
47
|
|
|
47
48
|
|
|
48
|
-
@dataclass
|
|
49
49
|
class AthenaSource(JdbcSource):
|
|
50
50
|
aws_region: str = str()
|
|
51
51
|
s3_output_location: str = str()
|
|
52
52
|
aws_authentication: Optional[AwsAuthentication] = None
|
|
53
53
|
time_partition_columns: Optional[TimePartitionColumns] = None
|
|
54
54
|
workgroup: Optional[str] = None
|
|
55
|
-
repository: Optional[str] = None
|
|
56
|
-
|
|
57
|
-
def _validate(self):
|
|
58
|
-
super()._validate()
|
|
59
55
|
|
|
56
|
+
@model_validator(mode="after")
|
|
57
|
+
def __validate_athena(self) -> Self:
|
|
60
58
|
if self.aws_authentication is None:
|
|
61
59
|
raise AttributeError("`aws_authentication` must be set")
|
|
62
60
|
|
|
@@ -67,6 +65,7 @@ class AthenaSource(JdbcSource):
|
|
|
67
65
|
raise AttributeError(
|
|
68
66
|
"At least one of: `s3_output_location`, `workgroup` must be set"
|
|
69
67
|
)
|
|
68
|
+
return self
|
|
70
69
|
|
|
71
70
|
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
72
71
|
proto_date_partition_columns = None
|
|
@@ -122,7 +121,7 @@ class AthenaSource(JdbcSource):
|
|
|
122
121
|
)
|
|
123
122
|
|
|
124
123
|
@classmethod
|
|
125
|
-
def _from_proto(cls, proto: ProtoBatchSource):
|
|
124
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> Self:
|
|
126
125
|
proto_jdbc_source: ProtoJdbcSource = proto.jdbcSource
|
|
127
126
|
proto_athena_source: ProtoAthenaSourceV1 = proto_jdbc_source.athenaSource
|
|
128
127
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import model_validator
|
|
3
5
|
|
|
4
6
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
7
|
BatchSource as ProtoBatchSource,
|
|
@@ -14,7 +16,6 @@ from frogml.core.exceptions import FrogmlException
|
|
|
14
16
|
from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
@dataclass
|
|
18
19
|
class BigQuerySource(BaseBatchSource):
|
|
19
20
|
credentials_secret_name: str
|
|
20
21
|
project: Optional[str] = None
|
|
@@ -25,9 +26,9 @@ class BigQuerySource(BaseBatchSource):
|
|
|
25
26
|
views_enabled: Optional[bool] = False
|
|
26
27
|
materialization_dataset: Optional[str] = None
|
|
27
28
|
materialization_project: Optional[str] = None
|
|
28
|
-
repository: Optional[str] = None
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
@model_validator(mode="after")
|
|
31
|
+
def __validate_bigquery(self) -> Self:
|
|
31
32
|
if not (self.sql or (self.table and self.dataset)):
|
|
32
33
|
raise FrogmlException("Either SQL or (table and dataset) must be provided.")
|
|
33
34
|
|
|
@@ -42,8 +43,10 @@ class BigQuerySource(BaseBatchSource):
|
|
|
42
43
|
)
|
|
43
44
|
self.views_enabled = True
|
|
44
45
|
|
|
46
|
+
return self
|
|
47
|
+
|
|
45
48
|
@classmethod
|
|
46
|
-
def _from_proto(cls, proto):
|
|
49
|
+
def _from_proto(cls, proto) -> Self:
|
|
47
50
|
bigquery = proto.bigquerySource
|
|
48
51
|
return cls(
|
|
49
52
|
name=proto.name,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import model_validator
|
|
3
5
|
|
|
4
6
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
7
|
BatchSource as ProtoBatchSource,
|
|
@@ -14,22 +16,20 @@ from frogml.core.exceptions import FrogmlException
|
|
|
14
16
|
from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
@dataclass
|
|
18
19
|
class ClickhouseSource(BaseBatchSource):
|
|
19
20
|
username_secret_name: Optional[str] = None
|
|
20
21
|
password_secret_name: Optional[str] = None
|
|
21
22
|
url: Optional[str] = None
|
|
22
23
|
db_table: Optional[str] = None
|
|
23
24
|
query: Optional[str] = None
|
|
24
|
-
repository: Optional[str] = None
|
|
25
|
-
|
|
26
|
-
def __post_init__(self):
|
|
27
|
-
self._validate()
|
|
28
25
|
|
|
29
|
-
|
|
26
|
+
@model_validator(mode="after")
|
|
27
|
+
def __validate_clickhouse(self) -> Self:
|
|
30
28
|
if not (bool(self.db_table) ^ bool(self.query)):
|
|
31
29
|
raise FrogmlException("Only one of query and db_table must be set")
|
|
32
30
|
|
|
31
|
+
return self
|
|
32
|
+
|
|
33
33
|
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
34
34
|
return ProtoDataSourceSpec(
|
|
35
35
|
data_source_repository_name=self.repository,
|
|
@@ -48,7 +48,7 @@ class ClickhouseSource(BaseBatchSource):
|
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
@classmethod
|
|
51
|
-
def _from_proto(cls, proto: ProtoBatchSource):
|
|
51
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> Self:
|
|
52
52
|
clickhouse: ProtoClickhouseSource = proto.clickhouseSource
|
|
53
53
|
return cls(
|
|
54
54
|
name=proto.name,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
3
|
|
|
4
4
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
5
|
BatchSource as ProtoBatchSource,
|
|
@@ -19,16 +19,14 @@ from frogml.feature_store.data_sources.batch.filesystem.utils import (
|
|
|
19
19
|
)
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
@dataclass
|
|
23
22
|
class CsvSource(BaseBatchSource):
|
|
24
23
|
path: str
|
|
25
24
|
quote_character: str = '"'
|
|
26
25
|
escape_character: str = '"'
|
|
27
26
|
filesystem_configuration: Optional[FileSystemConfiguration] = None
|
|
28
|
-
repository: Optional[str] = None
|
|
29
27
|
|
|
30
28
|
@classmethod
|
|
31
|
-
def _from_proto(cls, proto):
|
|
29
|
+
def _from_proto(cls, proto) -> Self:
|
|
32
30
|
csv = proto.csvSource
|
|
33
31
|
|
|
34
32
|
fs_conf = get_fs_config_from_proto(csv.filesystem_configuration)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
3
|
|
|
4
4
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
5
|
BatchSource as ProtoBatchSource,
|
|
@@ -13,7 +13,6 @@ from frogml._proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
|
13
13
|
from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
@dataclass
|
|
17
16
|
class ElasticSearchSource(BaseBatchSource):
|
|
18
17
|
nodes: str
|
|
19
18
|
resource: str
|
|
@@ -23,10 +22,9 @@ class ElasticSearchSource(BaseBatchSource):
|
|
|
23
22
|
password_secret_name: Optional[str] = None
|
|
24
23
|
exclude_fields: Optional[str] = None
|
|
25
24
|
parse_dates: Optional[bool] = True
|
|
26
|
-
repository: Optional[str] = None
|
|
27
25
|
|
|
28
26
|
@classmethod
|
|
29
|
-
def _from_proto(cls, proto):
|
|
27
|
+
def _from_proto(cls, proto) -> Self:
|
|
30
28
|
elastic = proto.elasticsearchSource
|
|
31
29
|
return cls(
|
|
32
30
|
name=proto.name,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import model_validator
|
|
3
5
|
|
|
4
6
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
7
|
AnonymousS3Configuration as ProtoAnonymousS3Configuration,
|
|
@@ -19,30 +21,28 @@ from frogml.feature_store.data_sources.batch.filesystem.base_config import (
|
|
|
19
21
|
)
|
|
20
22
|
|
|
21
23
|
|
|
22
|
-
@dataclass
|
|
23
24
|
class AnonymousS3Configuration(FileSystemConfiguration):
|
|
24
|
-
def _to_proto(self):
|
|
25
|
+
def _to_proto(self) -> ProtoFileSystemConfiguration:
|
|
25
26
|
return ProtoFileSystemConfiguration(
|
|
26
27
|
aws_s3_anonymous=ProtoAnonymousS3Configuration()
|
|
27
28
|
)
|
|
28
29
|
|
|
29
30
|
@classmethod
|
|
30
|
-
def _from_proto(cls, proto):
|
|
31
|
+
def _from_proto(cls, proto: ProtoAnonymousS3Configuration) -> Self:
|
|
31
32
|
return cls()
|
|
32
33
|
|
|
33
34
|
|
|
34
|
-
@dataclass
|
|
35
35
|
class AwsS3AssumeRoleFileSystemConfiguration(FileSystemConfiguration):
|
|
36
36
|
role_arn: str
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def _validate(self):
|
|
38
|
+
@model_validator(mode="after")
|
|
39
|
+
def __validate_role_arn(self) -> Self:
|
|
42
40
|
if not self.role_arn:
|
|
43
41
|
raise FrogmlException("`role_arn` field is mandatory")
|
|
44
42
|
|
|
45
|
-
|
|
43
|
+
return self
|
|
44
|
+
|
|
45
|
+
def _to_proto(self) -> ProtoFileSystemConfiguration:
|
|
46
46
|
return ProtoFileSystemConfiguration(
|
|
47
47
|
aws_s3_assume_role_configuration=ProtoAwsS3AssumeRole(
|
|
48
48
|
role_arn=self.role_arn
|
|
@@ -50,21 +50,18 @@ class AwsS3AssumeRoleFileSystemConfiguration(FileSystemConfiguration):
|
|
|
50
50
|
)
|
|
51
51
|
|
|
52
52
|
@classmethod
|
|
53
|
-
def _from_proto(cls, proto: ProtoAwsS3AssumeRole):
|
|
54
|
-
return cls(proto.role_arn)
|
|
53
|
+
def _from_proto(cls, proto: ProtoAwsS3AssumeRole) -> Self:
|
|
54
|
+
return cls(role_arn=proto.role_arn)
|
|
55
55
|
|
|
56
56
|
|
|
57
|
-
@dataclass
|
|
58
57
|
class AwsS3FileSystemConfiguration(FileSystemConfiguration):
|
|
59
|
-
access_key_secret_name: str
|
|
60
|
-
secret_key_secret_name: str
|
|
61
|
-
bucket: str
|
|
58
|
+
access_key_secret_name: Optional[str] = None
|
|
59
|
+
secret_key_secret_name: Optional[str] = None
|
|
60
|
+
bucket: Optional[str] = None
|
|
62
61
|
session_token_secret_name: Optional[str] = ""
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def _validate(self):
|
|
63
|
+
@model_validator(mode="after")
|
|
64
|
+
def __validate_fs_configuration(self) -> Self:
|
|
68
65
|
error_msg = "{field} field is mandatory"
|
|
69
66
|
if not self.access_key_secret_name:
|
|
70
67
|
raise FrogmlException(error_msg.format(field="access_key"))
|
|
@@ -73,7 +70,9 @@ class AwsS3FileSystemConfiguration(FileSystemConfiguration):
|
|
|
73
70
|
if not self.bucket:
|
|
74
71
|
raise FrogmlException(error_msg.format(field="bucket"))
|
|
75
72
|
|
|
76
|
-
|
|
73
|
+
return self
|
|
74
|
+
|
|
75
|
+
def _to_proto(self) -> ProtoFileSystemConfiguration:
|
|
77
76
|
return ProtoFileSystemConfiguration(
|
|
78
77
|
aws_s3_configuration=ProtoAwsS3FileSystemConfiguration(
|
|
79
78
|
access_key_secret_name=self.access_key_secret_name,
|
|
@@ -84,7 +83,7 @@ class AwsS3FileSystemConfiguration(FileSystemConfiguration):
|
|
|
84
83
|
)
|
|
85
84
|
|
|
86
85
|
@classmethod
|
|
87
|
-
def _from_proto(cls, proto):
|
|
86
|
+
def _from_proto(cls, proto: ProtoAwsS3FileSystemConfiguration) -> Self:
|
|
88
87
|
return AwsS3FileSystemConfiguration(
|
|
89
88
|
access_key_secret_name=proto.access_key_secret_name,
|
|
90
89
|
secret_key_secret_name=proto.secret_key_secret_name,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from dataclasses import dataclass
|
|
3
2
|
|
|
3
|
+
from pydantic import BaseModel
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
class FileSystemConfiguration(ABC):
|
|
5
|
+
|
|
6
|
+
class FileSystemConfiguration(BaseModel, ABC):
|
|
7
7
|
@abstractmethod
|
|
8
8
|
def _to_proto(self):
|
|
9
9
|
pass
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
1
|
+
from pydantic import model_validator
|
|
3
2
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
4
3
|
FileSystemConfiguration as ProtoFileSystemConfiguration,
|
|
5
4
|
)
|
|
@@ -15,18 +14,16 @@ from frogml.feature_store.data_sources.batch.filesystem.base_config import (
|
|
|
15
14
|
)
|
|
16
15
|
|
|
17
16
|
|
|
18
|
-
@dataclass
|
|
19
17
|
class GcpGcsServiceAccountImpersonation(FileSystemConfiguration):
|
|
20
18
|
service_account_user: str
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
self._validate()
|
|
24
|
-
|
|
20
|
+
@model_validator(mode="after")
|
|
25
21
|
def _validate(self):
|
|
26
22
|
if not self.service_account_user or not self.service_account_user.strip():
|
|
27
23
|
raise FrogmlException(
|
|
28
24
|
"Service account user is mandatory for GCS service account impersonation, blanks are invalid"
|
|
29
25
|
)
|
|
26
|
+
return self
|
|
30
27
|
|
|
31
28
|
def _to_proto(self):
|
|
32
29
|
return ProtoFileSystemConfiguration(
|
|
@@ -42,7 +39,6 @@ class GcpGcsServiceAccountImpersonation(FileSystemConfiguration):
|
|
|
42
39
|
)
|
|
43
40
|
|
|
44
41
|
|
|
45
|
-
@dataclass
|
|
46
42
|
class GcpGcsUnauthenticated(FileSystemConfiguration):
|
|
47
43
|
def _to_proto(self):
|
|
48
44
|
return ProtoFileSystemConfiguration(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
3
|
|
|
4
4
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
5
|
BatchSource as ProtoBatchSource,
|
|
@@ -13,7 +13,6 @@ from frogml._proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
|
13
13
|
from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
@dataclass
|
|
17
16
|
class MongoDbSource(BaseBatchSource):
|
|
18
17
|
hosts: str
|
|
19
18
|
username_secret_name: str
|
|
@@ -22,10 +21,9 @@ class MongoDbSource(BaseBatchSource):
|
|
|
22
21
|
collection: str
|
|
23
22
|
connection_params: str
|
|
24
23
|
protocol: str = "mongodb"
|
|
25
|
-
repository: Optional[str] = None
|
|
26
24
|
|
|
27
25
|
@classmethod
|
|
28
|
-
def _from_proto(cls, proto):
|
|
26
|
+
def _from_proto(cls, proto) -> Self:
|
|
29
27
|
mongo = proto.mongoSource
|
|
30
28
|
return cls(
|
|
31
29
|
name=proto.name,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
3
|
|
|
4
4
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
5
|
BatchSource as ProtoBatchSource,
|
|
@@ -16,10 +16,9 @@ from frogml._proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
|
16
16
|
from frogml.feature_store.data_sources.batch._jdbc import JdbcSource
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
@dataclass
|
|
20
19
|
class MysqlSource(JdbcSource):
|
|
21
20
|
@classmethod
|
|
22
|
-
def _from_proto(cls, proto):
|
|
21
|
+
def _from_proto(cls, proto) -> Self:
|
|
23
22
|
mysql = proto.jdbcSource
|
|
24
23
|
return cls(
|
|
25
24
|
name=proto.name,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from dataclasses import dataclass, field
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import Field
|
|
3
5
|
|
|
4
6
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
7
|
BatchSource as ProtoBatchSource,
|
|
@@ -20,16 +22,14 @@ from frogml.feature_store.data_sources.batch.filesystem.utils import (
|
|
|
20
22
|
)
|
|
21
23
|
|
|
22
24
|
|
|
23
|
-
@dataclass
|
|
24
25
|
class ParquetSource(BaseBatchSource):
|
|
25
26
|
path: str
|
|
26
|
-
filesystem_configuration: FileSystemConfiguration =
|
|
27
|
-
default_factory=
|
|
27
|
+
filesystem_configuration: Optional[FileSystemConfiguration] = Field(
|
|
28
|
+
default_factory=AnonymousS3Configuration
|
|
28
29
|
)
|
|
29
|
-
repository: Optional[str] = None
|
|
30
30
|
|
|
31
31
|
@classmethod
|
|
32
|
-
def _from_proto(cls, proto):
|
|
32
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> Self:
|
|
33
33
|
parquet: ProtoParquetSource = proto.parquetSource
|
|
34
34
|
fs_conf = get_fs_config_from_proto(parquet.filesystem_configuration)
|
|
35
35
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
3
|
|
|
4
4
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
5
|
BatchSource as ProtoBatchSource,
|
|
@@ -16,7 +16,6 @@ from frogml._proto.qwak.feature_store.sources.data_source_pb2 import (
|
|
|
16
16
|
from frogml.feature_store.data_sources.batch._jdbc import JdbcSource
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
@dataclass
|
|
20
19
|
class PostgresSource(JdbcSource):
|
|
21
20
|
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
22
21
|
return ProtoDataSourceSpec(
|
|
@@ -37,7 +36,7 @@ class PostgresSource(JdbcSource):
|
|
|
37
36
|
)
|
|
38
37
|
|
|
39
38
|
@classmethod
|
|
40
|
-
def _from_proto(cls, proto):
|
|
39
|
+
def _from_proto(cls, proto) -> Self:
|
|
41
40
|
postgresql = proto.jdbcSource
|
|
42
41
|
return cls(
|
|
43
42
|
name=proto.name,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import model_validator
|
|
3
5
|
|
|
4
6
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
7
|
BatchSource as ProtoBatchSource,
|
|
@@ -17,7 +19,6 @@ from frogml.core.exceptions import FrogmlException
|
|
|
17
19
|
from frogml.feature_store.data_sources.batch._jdbc import JdbcSource
|
|
18
20
|
|
|
19
21
|
|
|
20
|
-
@dataclass
|
|
21
22
|
class RedshiftSource(JdbcSource):
|
|
22
23
|
iam_role_arn: Optional[str] = None
|
|
23
24
|
db_user: Optional[str] = None
|
|
@@ -27,9 +28,8 @@ class RedshiftSource(JdbcSource):
|
|
|
27
28
|
secret_access_key: Optional[str] = None
|
|
28
29
|
query_group: Optional[str] = "_qwak_featurestore"
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def _validate(self):
|
|
31
|
+
@model_validator(mode="after")
|
|
32
|
+
def __validate_redshift(self) -> Self:
|
|
33
33
|
authentication_methods = sum(
|
|
34
34
|
[
|
|
35
35
|
bool(self.access_key and self.secret_access_key),
|
|
@@ -48,6 +48,8 @@ class RedshiftSource(JdbcSource):
|
|
|
48
48
|
"or user id secret name and password secret name"
|
|
49
49
|
)
|
|
50
50
|
|
|
51
|
+
return self
|
|
52
|
+
|
|
51
53
|
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
52
54
|
return ProtoDataSourceSpec(
|
|
53
55
|
data_source_repository_name=self.repository,
|
|
@@ -72,7 +74,7 @@ class RedshiftSource(JdbcSource):
|
|
|
72
74
|
)
|
|
73
75
|
|
|
74
76
|
@classmethod
|
|
75
|
-
def _from_proto(cls, proto: ProtoBatchSource):
|
|
77
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> Self:
|
|
76
78
|
redshift = proto.jdbcSource
|
|
77
79
|
return cls(
|
|
78
80
|
name=proto.name,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import warnings
|
|
2
|
-
from dataclasses import dataclass
|
|
3
2
|
from typing import Optional
|
|
3
|
+
from typing_extensions import Self
|
|
4
|
+
|
|
5
|
+
from pydantic import Field, model_validator
|
|
4
6
|
|
|
5
7
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
6
8
|
BatchSource as ProtoBatchSource,
|
|
@@ -17,30 +19,32 @@ from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
|
17
19
|
warnings.simplefilter("once", DeprecationWarning)
|
|
18
20
|
|
|
19
21
|
|
|
20
|
-
@dataclass
|
|
21
22
|
class SnowflakeSource(BaseBatchSource):
|
|
22
23
|
host: str
|
|
23
24
|
username_secret_name: str
|
|
24
|
-
database: str
|
|
25
|
-
|
|
25
|
+
database: Optional[str] = None
|
|
26
|
+
schema_name: Optional[str] = Field(
|
|
27
|
+
default=None, alias="schema", serialization_alias="schema"
|
|
28
|
+
)
|
|
26
29
|
warehouse: str
|
|
27
30
|
password_secret_name: Optional[str] = None
|
|
28
31
|
pem_private_key_secret_name: Optional[str] = None
|
|
29
32
|
table: Optional[str] = None
|
|
30
33
|
query: Optional[str] = None
|
|
31
|
-
repository: Optional[str] = None
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
@property
|
|
36
|
+
def schema(self) -> Optional[str]:
|
|
37
|
+
return self.schema_name
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
@model_validator(mode="after")
|
|
40
|
+
def __validate_snowflake(self) -> Self:
|
|
37
41
|
if not self.username_secret_name:
|
|
38
42
|
raise FrogmlException("username_secret_name must be set!")
|
|
39
43
|
|
|
40
44
|
if not self.database:
|
|
41
45
|
raise FrogmlException("database must be set!")
|
|
42
46
|
|
|
43
|
-
if not self.
|
|
47
|
+
if not self.schema_name:
|
|
44
48
|
raise FrogmlException("schema must be set!")
|
|
45
49
|
|
|
46
50
|
if self.password_secret_name:
|
|
@@ -65,6 +69,8 @@ class SnowflakeSource(BaseBatchSource):
|
|
|
65
69
|
if no_auth_set or both_auth_set:
|
|
66
70
|
raise FrogmlException(no_unique_auth_exception_message)
|
|
67
71
|
|
|
72
|
+
return self
|
|
73
|
+
|
|
68
74
|
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
69
75
|
return ProtoDataSourceSpec(
|
|
70
76
|
data_source_repository_name=self.repository,
|
|
@@ -78,7 +84,7 @@ class SnowflakeSource(BaseBatchSource):
|
|
|
78
84
|
password_secret_name=self.password_secret_name,
|
|
79
85
|
pem_private_key_secret_name=self.pem_private_key_secret_name,
|
|
80
86
|
database=self.database,
|
|
81
|
-
schema=self.
|
|
87
|
+
schema=self.schema_name,
|
|
82
88
|
warehouse=self.warehouse,
|
|
83
89
|
table=self.table,
|
|
84
90
|
query=self.query,
|
|
@@ -87,7 +93,7 @@ class SnowflakeSource(BaseBatchSource):
|
|
|
87
93
|
)
|
|
88
94
|
|
|
89
95
|
@classmethod
|
|
90
|
-
def _from_proto(cls, proto):
|
|
96
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> Self:
|
|
91
97
|
snowflake = proto.snowflakeSource
|
|
92
98
|
return cls(
|
|
93
99
|
name=proto.name,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
1
|
from typing import Optional
|
|
2
|
+
from typing_extensions import Self
|
|
3
|
+
|
|
4
|
+
from pydantic import Field, model_validator
|
|
3
5
|
|
|
4
6
|
from frogml._proto.qwak.feature_store.sources.batch_pb2 import (
|
|
5
7
|
BatchSource as ProtoBatchSource,
|
|
@@ -15,7 +17,6 @@ from frogml.feature_store.data_sources.batch._batch import BaseBatchSource
|
|
|
15
17
|
RESERVED_CATALOG_NAME = "qwak_catalog"
|
|
16
18
|
|
|
17
19
|
|
|
18
|
-
@dataclass
|
|
19
20
|
class UnityCatalogSource(BaseBatchSource):
|
|
20
21
|
"""Unity Catalog batch data source.
|
|
21
22
|
|
|
@@ -40,21 +41,22 @@ class UnityCatalogSource(BaseBatchSource):
|
|
|
40
41
|
"""
|
|
41
42
|
|
|
42
43
|
uri: str
|
|
43
|
-
|
|
44
|
+
schema_name: str = Field(alias="schema", serialization_alias="schema")
|
|
44
45
|
catalog: str
|
|
45
46
|
personal_access_token_secret_name: Optional[str] = None
|
|
46
47
|
table: Optional[str] = None
|
|
47
48
|
query: Optional[str] = None
|
|
48
|
-
repository: Optional[str] = None
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
@property
|
|
51
|
+
def schema(self) -> str:
|
|
52
|
+
return self.schema_name
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
@model_validator(mode="after")
|
|
55
|
+
def __validate_unity_catalog(self) -> Self:
|
|
54
56
|
if not self.uri:
|
|
55
57
|
raise FrogmlException("`uri` cannot be empty.")
|
|
56
58
|
|
|
57
|
-
if not self.
|
|
59
|
+
if not self.schema_name:
|
|
58
60
|
raise FrogmlException("`schema` cannot be empty.")
|
|
59
61
|
|
|
60
62
|
if not self.catalog:
|
|
@@ -73,6 +75,8 @@ class UnityCatalogSource(BaseBatchSource):
|
|
|
73
75
|
if bool(self.query) == bool(self.table):
|
|
74
76
|
raise FrogmlException("Either `query` or `table` must be provided.")
|
|
75
77
|
|
|
78
|
+
return self
|
|
79
|
+
|
|
76
80
|
def _to_proto(self, artifact_url: Optional[str] = None) -> ProtoDataSourceSpec:
|
|
77
81
|
return ProtoDataSourceSpec(
|
|
78
82
|
data_source_repository_name=self.repository,
|
|
@@ -86,7 +90,7 @@ class UnityCatalogSource(BaseBatchSource):
|
|
|
86
90
|
table=self.table,
|
|
87
91
|
unityCatalogSource=ProtoUnityCatalogSource(
|
|
88
92
|
catalog=self.catalog,
|
|
89
|
-
schema=self.
|
|
93
|
+
schema=self.schema_name,
|
|
90
94
|
personal_access_token_secret_name=self.personal_access_token_secret_name,
|
|
91
95
|
),
|
|
92
96
|
),
|
|
@@ -94,7 +98,7 @@ class UnityCatalogSource(BaseBatchSource):
|
|
|
94
98
|
)
|
|
95
99
|
|
|
96
100
|
@classmethod
|
|
97
|
-
def _from_proto(cls, proto: ProtoBatchSource) ->
|
|
101
|
+
def _from_proto(cls, proto: ProtoBatchSource) -> Self:
|
|
98
102
|
catalog_source = proto.catalogSource
|
|
99
103
|
return cls(
|
|
100
104
|
name=proto.name,
|