yandexcloud 0.287.0__py3-none-any.whl → 0.289.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- yandex/cloud/access/access_pb2.pyi +288 -0
- yandex/cloud/ai/foundation_models/v1/embedding/embedding_service_pb2.pyi +63 -0
- yandex/cloud/ai/foundation_models/v1/image_generation/image_generation_pb2.pyi +53 -0
- yandex/cloud/ai/foundation_models/v1/image_generation/image_generation_service_pb2.pyi +67 -0
- yandex/cloud/ai/foundation_models/v1/text_classification/text_classification_pb2.pyi +55 -0
- yandex/cloud/ai/foundation_models/v1/text_classification/text_classification_service_pb2.pyi +122 -0
- yandex/cloud/ai/foundation_models/v1/text_common_pb2.pyi +195 -0
- yandex/cloud/ai/foundation_models/v1/text_generation/text_generation_service_pb2.pyi +122 -0
- yandex/cloud/ai/llm/v1alpha/llm_pb2.pyi +121 -0
- yandex/cloud/ai/llm/v1alpha/llm_service_pb2.pyi +280 -0
- yandex/cloud/ai/ocr/v1/ocr_pb2.pyi +364 -0
- yandex/cloud/ai/ocr/v1/ocr_service_pb2.pyi +92 -0
- yandex/cloud/ai/stt/v2/stt_service_pb2.pyi +299 -0
- yandex/cloud/ai/stt/v3/stt_pb2.pyi +1437 -0
- yandex/cloud/ai/stt/v3/stt_service_pb2.pyi +26 -0
- yandex/cloud/ai/translate/v2/translation_pb2.pyi +55 -0
- yandex/cloud/ai/translate/v2/translation_service_pb2.pyi +272 -0
- yandex/cloud/ai/tts/v3/tts_pb2.pyi +474 -0
- yandex/cloud/ai/tts/v3/tts_service_pb2.pyi +8 -0
- yandex/cloud/ai/vision/v1/classification_pb2.pyi +55 -0
- yandex/cloud/ai/vision/v1/face_detection_pb2.pyi +51 -0
- yandex/cloud/ai/vision/v1/image_copy_search_pb2.pyi +63 -0
- yandex/cloud/ai/vision/v1/primitives_pb2.pyi +51 -0
- yandex/cloud/ai/vision/v1/text_detection_pb2.pyi +196 -0
- yandex/cloud/ai/vision/v1/vision_service_pb2.pyi +284 -0
- yandex/cloud/ai/vision/v2/image_classifier_pb2.pyi +159 -0
- yandex/cloud/ai/vision/v2/image_classifier_service_pb2.pyi +8 -0
- yandex/cloud/ai/vision/v2/image_pb2.pyi +57 -0
- yandex/cloud/api/operation_pb2.pyi +47 -0
- yandex/cloud/apploadbalancer/v1/backend_group_pb2.pyi +944 -0
- yandex/cloud/apploadbalancer/v1/backend_group_service_pb2.pyi +558 -0
- yandex/cloud/apploadbalancer/v1/http_router_pb2.pyi +92 -0
- yandex/cloud/apploadbalancer/v1/http_router_service_pb2.pyi +389 -0
- yandex/cloud/apploadbalancer/v1/load_balancer_pb2.pyi +837 -0
- yandex/cloud/apploadbalancer/v1/load_balancer_service_pb2.pyi +1073 -0
- yandex/cloud/apploadbalancer/v1/logging_pb2.pyi +117 -0
- yandex/cloud/apploadbalancer/v1/payload_pb2.pyi +31 -0
- yandex/cloud/apploadbalancer/v1/target_group_pb2.pyi +117 -0
- yandex/cloud/apploadbalancer/v1/target_group_service_pb2.pyi +450 -0
- yandex/cloud/apploadbalancer/v1/tls_pb2.pyi +34 -0
- yandex/cloud/apploadbalancer/v1/virtual_host_pb2.pyi +798 -0
- yandex/cloud/apploadbalancer/v1/virtual_host_service_pb2.pyi +501 -0
- yandex/cloud/audittrails/v1/trail_pb2.pyi +449 -0
- yandex/cloud/audittrails/v1/trail_service_pb2.pyi +363 -0
- yandex/cloud/backup/v1/backup_pb2.pyi +468 -0
- yandex/cloud/backup/v1/backup_service_pb2.pyi +454 -0
- yandex/cloud/backup/v1/policy_pb2.pyi +742 -0
- yandex/cloud/backup/v1/policy_service_pb2.py +8 -8
- yandex/cloud/backup/v1/policy_service_pb2.pyi +342 -0
- yandex/cloud/backup/v1/provider_service_pb2.pyi +90 -0
- yandex/cloud/backup/v1/resource_pb2.pyi +273 -0
- yandex/cloud/backup/v1/resource_service_pb2.pyi +357 -0
- yandex/cloud/billing/v1/billable_object_pb2.pyi +65 -0
- yandex/cloud/billing/v1/billing_account_pb2.pyi +62 -0
- yandex/cloud/billing/v1/billing_account_service_pb2.pyi +190 -0
- yandex/cloud/billing/v1/budget_pb2.pyi +409 -0
- yandex/cloud/billing/v1/budget_service_pb2.pyi +151 -0
- yandex/cloud/billing/v1/customer_pb2.pyi +79 -0
- yandex/cloud/billing/v1/customer_service_pb2.pyi +187 -0
- yandex/cloud/billing/v1/service_pb2.pyi +37 -0
- yandex/cloud/billing/v1/service_service_pb2.pyi +96 -0
- yandex/cloud/billing/v1/sku_pb2.pyi +173 -0
- yandex/cloud/billing/v1/sku_service_pb2.pyi +128 -0
- yandex/cloud/cdn/v1/cache_service_pb2.pyi +95 -0
- yandex/cloud/cdn/v1/origin_group_pb2.pyi +54 -0
- yandex/cloud/cdn/v1/origin_group_service_pb2.pyi +252 -0
- yandex/cloud/cdn/v1/origin_pb2.pyi +186 -0
- yandex/cloud/cdn/v1/origin_service_pb2.pyi +262 -0
- yandex/cloud/cdn/v1/provider_service_pb2.pyi +86 -0
- yandex/cloud/cdn/v1/raw_logs_pb2.pyi +80 -0
- yandex/cloud/cdn/v1/raw_logs_service_pb2.pyi +207 -0
- yandex/cloud/cdn/v1/resource_pb2.pyi +1067 -0
- yandex/cloud/cdn/v1/resource_service_pb2.pyi +401 -0
- yandex/cloud/cdn/v1/rule_pb2.pyi +45 -0
- yandex/cloud/cdn/v1/rule_service_pb2.pyi +211 -0
- yandex/cloud/certificatemanager/v1/certificate_content_service_pb2.pyi +87 -0
- yandex/cloud/certificatemanager/v1/certificate_pb2.pyi +381 -0
- yandex/cloud/certificatemanager/v1/certificate_service_pb2.pyi +515 -0
- yandex/cloud/compute/v1/disk_pb2.pyi +202 -0
- yandex/cloud/compute/v1/disk_placement_group_pb2.pyi +143 -0
- yandex/cloud/compute/v1/disk_placement_group_service_pb2.pyi +425 -0
- yandex/cloud/compute/v1/disk_service_pb2.pyi +561 -0
- yandex/cloud/compute/v1/disk_type_pb2.pyi +39 -0
- yandex/cloud/compute/v1/disk_type_service_pb2.pyi +86 -0
- yandex/cloud/compute/v1/filesystem_pb2.pyi +137 -0
- yandex/cloud/compute/v1/filesystem_service_pb2.pyi +394 -0
- yandex/cloud/compute/v1/gpu_cluster_pb2.pyi +139 -0
- yandex/cloud/compute/v1/gpu_cluster_service_pb2.pyi +439 -0
- yandex/cloud/compute/v1/host_group_pb2.pyi +224 -0
- yandex/cloud/compute/v1/host_group_service_pb2.pyi +556 -0
- yandex/cloud/compute/v1/host_type_pb2.pyi +48 -0
- yandex/cloud/compute/v1/host_type_service_pb2.pyi +87 -0
- yandex/cloud/compute/v1/image_pb2.pyi +188 -0
- yandex/cloud/compute/v1/image_service_pb2.pyi +430 -0
- yandex/cloud/compute/v1/instance_pb2.pyi +798 -0
- yandex/cloud/compute/v1/instance_service_pb2.pyi +1806 -0
- yandex/cloud/compute/v1/instancegroup/instance_group_pb2.pyi +2064 -0
- yandex/cloud/compute/v1/instancegroup/instance_group_service_pb2.pyi +1004 -0
- yandex/cloud/compute/v1/maintenance_pb2.pyi +38 -0
- yandex/cloud/compute/v1/placement_group_pb2.pyi +115 -0
- yandex/cloud/compute/v1/placement_group_service_pb2.pyi +423 -0
- yandex/cloud/compute/v1/snapshot_pb2.pyi +139 -0
- yandex/cloud/compute/v1/snapshot_schedule_pb2.pyi +221 -0
- yandex/cloud/compute/v1/snapshot_schedule_service_pb2.pyi +678 -0
- yandex/cloud/compute/v1/snapshot_service_pb2.pyi +350 -0
- yandex/cloud/compute/v1/zone_pb2.pyi +63 -0
- yandex/cloud/compute/v1/zone_service_pb2.pyi +84 -0
- yandex/cloud/containerregistry/v1/blob_pb2.pyi +45 -0
- yandex/cloud/containerregistry/v1/image_pb2.pyi +75 -0
- yandex/cloud/containerregistry/v1/image_service_pb2.pyi +160 -0
- yandex/cloud/containerregistry/v1/ip_permission_pb2.pyi +95 -0
- yandex/cloud/containerregistry/v1/lifecycle_policy_pb2.pyi +131 -0
- yandex/cloud/containerregistry/v1/lifecycle_policy_service_pb2.pyi +479 -0
- yandex/cloud/containerregistry/v1/registry_pb2.pyi +103 -0
- yandex/cloud/containerregistry/v1/registry_service_pb2.pyi +386 -0
- yandex/cloud/containerregistry/v1/repository_pb2.pyi +35 -0
- yandex/cloud/containerregistry/v1/repository_service_pb2.pyi +202 -0
- yandex/cloud/containerregistry/v1/scan_policy_pb2.pyi +140 -0
- yandex/cloud/containerregistry/v1/scan_policy_service_pb2.pyi +177 -0
- yandex/cloud/containerregistry/v1/scanner_pb2.pyi +254 -0
- yandex/cloud/containerregistry/v1/scanner_service_pb2.pyi +234 -0
- yandex/cloud/dataproc/manager/v1/job_pb2.pyi +608 -0
- yandex/cloud/dataproc/manager/v1/job_service_pb2.pyi +201 -0
- yandex/cloud/dataproc/manager/v1/manager_service_pb2.pyi +449 -0
- yandex/cloud/dataproc/v1/cluster_pb2.pyi +351 -0
- yandex/cloud/dataproc/v1/cluster_service_pb2.pyi +764 -0
- yandex/cloud/dataproc/v1/common_pb2.pyi +75 -0
- yandex/cloud/dataproc/v1/job_pb2.pyi +526 -0
- yandex/cloud/dataproc/v1/job_service_pb2.pyi +250 -0
- yandex/cloud/dataproc/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/dataproc/v1/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/dataproc/v1/subcluster_pb2.pyi +248 -0
- yandex/cloud/dataproc/v1/subcluster_service_pb2.pyi +301 -0
- yandex/cloud/datasphere/v1/app_token_service_pb2.pyi +27 -0
- yandex/cloud/datasphere/v1/folder_budget_service_pb2.pyi +101 -0
- yandex/cloud/datasphere/v1/node_execution_error_details_pb2.pyi +41 -0
- yandex/cloud/datasphere/v1/node_service_pb2.pyi +104 -0
- yandex/cloud/datasphere/v1/project_data_service_pb2.pyi +122 -0
- yandex/cloud/datasphere/v1/project_pb2.pyi +149 -0
- yandex/cloud/datasphere/v1/project_service_pb2.pyi +606 -0
- yandex/cloud/datasphere/v2/community_pb2.pyi +75 -0
- yandex/cloud/datasphere/v2/community_service_pb2.pyi +384 -0
- yandex/cloud/datasphere/v2/dataset_pb2.pyi +159 -0
- yandex/cloud/datasphere/v2/dataset_service_pb2.pyi +47 -0
- yandex/cloud/datasphere/v2/docker_image_service_pb2.pyi +29 -0
- yandex/cloud/datasphere/v2/jobs/jobs_pb2.pyi +484 -0
- yandex/cloud/datasphere/v2/jobs/project_job_service_pb2.pyi +694 -0
- yandex/cloud/datasphere/v2/project_pb2.pyi +265 -0
- yandex/cloud/datasphere/v2/project_service_pb2.pyi +815 -0
- yandex/cloud/datasphere/v2/resource_types_pb2.pyi +46 -0
- yandex/cloud/datasphere/v2/restrictions_pb2.pyi +127 -0
- yandex/cloud/datasphere/v2/s3_service_pb2.pyi +47 -0
- yandex/cloud/datasphere/v2/secret_pb2.pyi +102 -0
- yandex/cloud/datasphere/v2/user_pb2.pyi +43 -0
- yandex/cloud/datatransfer/v1/endpoint/clickhouse_pb2.pyi +295 -0
- yandex/cloud/datatransfer/v1/endpoint/common_pb2.pyi +324 -0
- yandex/cloud/datatransfer/v1/endpoint/kafka_pb2.pyi +294 -0
- yandex/cloud/datatransfer/v1/endpoint/metrika_pb2.pyi +84 -0
- yandex/cloud/datatransfer/v1/endpoint/mongo_pb2.pyi +191 -0
- yandex/cloud/datatransfer/v1/endpoint/mysql_pb2.pyi +261 -0
- yandex/cloud/datatransfer/v1/endpoint/parsers_pb2.pyi +91 -0
- yandex/cloud/datatransfer/v1/endpoint/postgres_pb2.pyi +326 -0
- yandex/cloud/datatransfer/v1/endpoint/serializers_pb2.pyi +105 -0
- yandex/cloud/datatransfer/v1/endpoint/ydb_pb2.pyi +154 -0
- yandex/cloud/datatransfer/v1/endpoint/yds_pb2.pyi +155 -0
- yandex/cloud/datatransfer/v1/endpoint_pb2.pyi +144 -0
- yandex/cloud/datatransfer/v1/endpoint_service_pb2.pyi +262 -0
- yandex/cloud/datatransfer/v1/transfer_pb2.pyi +689 -0
- yandex/cloud/datatransfer/v1/transfer_service_pb2.pyi +338 -0
- yandex/cloud/dns/v1/dns_zone_pb2.pyi +163 -0
- yandex/cloud/dns/v1/dns_zone_service_pb2.pyi +655 -0
- yandex/cloud/endpoint/api_endpoint_pb2.pyi +29 -0
- yandex/cloud/endpoint/api_endpoint_service_pb2.pyi +66 -0
- yandex/cloud/iam/v1/api_key_pb2.pyi +61 -0
- yandex/cloud/iam/v1/api_key_service_pb2.pyi +293 -0
- yandex/cloud/iam/v1/awscompatibility/access_key_pb2.pyi +61 -0
- yandex/cloud/iam/v1/awscompatibility/access_key_service_pb2.pyi +283 -0
- yandex/cloud/iam/v1/iam_token_service_pb2.pyi +80 -0
- yandex/cloud/iam/v1/key_pb2.pyi +90 -0
- yandex/cloud/iam/v1/key_service_pb2.pyi +320 -0
- yandex/cloud/iam/v1/resource_pb2.pyi +33 -0
- yandex/cloud/iam/v1/role_pb2.pyi +33 -0
- yandex/cloud/iam/v1/role_service_pb2.pyi +92 -0
- yandex/cloud/iam/v1/service_account_pb2.pyi +75 -0
- yandex/cloud/iam/v1/service_account_service_pb2.pyi +335 -0
- yandex/cloud/iam/v1/service_control_pb2.pyi +98 -0
- yandex/cloud/iam/v1/service_control_service_pb2.pyi +310 -0
- yandex/cloud/iam/v1/user_account_pb2.pyi +133 -0
- yandex/cloud/iam/v1/user_account_service_pb2.pyi +27 -0
- yandex/cloud/iam/v1/yandex_passport_user_account_service_pb2.pyi +27 -0
- yandex/cloud/iot/broker/v1/broker_data_service_pb2.pyi +45 -0
- yandex/cloud/iot/broker/v1/broker_pb2.pyi +209 -0
- yandex/cloud/iot/broker/v1/broker_service_pb2.pyi +627 -0
- yandex/cloud/iot/devices/v1/device_data_service_pb2.pyi +45 -0
- yandex/cloud/iot/devices/v1/device_pb2.pyi +233 -0
- yandex/cloud/iot/devices/v1/device_service_pb2.pyi +670 -0
- yandex/cloud/iot/devices/v1/registry_data_service_pb2.pyi +45 -0
- yandex/cloud/iot/devices/v1/registry_pb2.pyi +291 -0
- yandex/cloud/iot/devices/v1/registry_service_pb2.pyi +849 -0
- yandex/cloud/k8s/v1/cluster_pb2.pyi +610 -0
- yandex/cloud/k8s/v1/cluster_service_pb2.pyi +904 -0
- yandex/cloud/k8s/v1/maintenance_pb2.pyi +132 -0
- yandex/cloud/k8s/v1/node_group_pb2.pyi +365 -0
- yandex/cloud/k8s/v1/node_group_service_pb2.pyi +566 -0
- yandex/cloud/k8s/v1/node_pb2.pyi +784 -0
- yandex/cloud/k8s/v1/version_pb2.pyi +68 -0
- yandex/cloud/k8s/v1/version_service_pb2.pyi +64 -0
- yandex/cloud/kms/v1/asymmetricencryption/asymmetric_encryption_crypto_service_pb2.pyi +92 -0
- yandex/cloud/kms/v1/asymmetricencryption/asymmetric_encryption_key_pb2.pyi +149 -0
- yandex/cloud/kms/v1/asymmetricencryption/asymmetric_encryption_key_service_pb2.pyi +335 -0
- yandex/cloud/kms/v1/asymmetricsignature/asymmetric_signature_crypto_service_pb2.pyi +140 -0
- yandex/cloud/kms/v1/asymmetricsignature/asymmetric_signature_key_pb2.pyi +189 -0
- yandex/cloud/kms/v1/asymmetricsignature/asymmetric_signature_key_service_pb2.pyi +335 -0
- yandex/cloud/kms/v1/symmetric_crypto_service_pb2.pyi +270 -0
- yandex/cloud/kms/v1/symmetric_key_pb2.pyi +260 -0
- yandex/cloud/kms/v1/symmetric_key_service_pb2.pyi +591 -0
- yandex/cloud/loadbalancer/v1/health_check_pb2.pyi +102 -0
- yandex/cloud/loadbalancer/v1/network_load_balancer_pb2.pyi +364 -0
- yandex/cloud/loadbalancer/v1/network_load_balancer_service_pb2.pyi +747 -0
- yandex/cloud/loadbalancer/v1/target_group_pb2.pyi +109 -0
- yandex/cloud/loadbalancer/v1/target_group_service_pb2.pyi +434 -0
- yandex/cloud/loadtesting/agent/v1/agent_pb2.pyi +26 -0
- yandex/cloud/loadtesting/agent/v1/agent_registration_service_pb2.py +10 -10
- yandex/cloud/loadtesting/agent/v1/agent_registration_service_pb2.pyi +83 -0
- yandex/cloud/loadtesting/agent/v1/agent_service_pb2.pyi +79 -0
- yandex/cloud/loadtesting/agent/v1/job_service_pb2.pyi +309 -0
- yandex/cloud/loadtesting/agent/v1/monitoring_service_pb2.pyi +102 -0
- yandex/cloud/loadtesting/agent/v1/test_pb2.pyi +181 -0
- yandex/cloud/loadtesting/agent/v1/test_service_pb2.pyi +105 -0
- yandex/cloud/loadtesting/agent/v1/trail_service_pb2.pyi +178 -0
- yandex/cloud/loadtesting/api/v1/agent/agent_pb2.pyi +91 -0
- yandex/cloud/loadtesting/api/v1/agent/create_compute_instance_pb2.pyi +120 -0
- yandex/cloud/loadtesting/api/v1/agent/status_pb2.pyi +97 -0
- yandex/cloud/loadtesting/api/v1/agent_service_pb2.pyi +301 -0
- yandex/cloud/loadtesting/api/v1/common/quantiles_pb2.pyi +61 -0
- yandex/cloud/loadtesting/api/v1/common/tag_pb2.pyi +33 -0
- yandex/cloud/loadtesting/api/v1/config/config_pb2.pyi +53 -0
- yandex/cloud/loadtesting/api/v1/config_service_pb2.pyi +165 -0
- yandex/cloud/loadtesting/api/v1/report/status_pb2.pyi +45 -0
- yandex/cloud/loadtesting/api/v1/report/table/report_pb2.pyi +79 -0
- yandex/cloud/loadtesting/api/v1/report_service_pb2.pyi +78 -0
- yandex/cloud/loadtesting/api/v1/test/agent_selector_pb2.pyi +42 -0
- yandex/cloud/loadtesting/api/v1/test/artifact_settings_pb2.pyi +61 -0
- yandex/cloud/loadtesting/api/v1/test/details_pb2.pyi +54 -0
- yandex/cloud/loadtesting/api/v1/test/file_pointer_pb2.pyi +34 -0
- yandex/cloud/loadtesting/api/v1/test/imbalance_point_pb2.pyi +37 -0
- yandex/cloud/loadtesting/api/v1/test/object_storage_pb2.pyi +33 -0
- yandex/cloud/loadtesting/api/v1/test/single_agent_configuration_pb2.pyi +74 -0
- yandex/cloud/loadtesting/api/v1/test/status_pb2.pyi +96 -0
- yandex/cloud/loadtesting/api/v1/test/summary_pb2.pyi +96 -0
- yandex/cloud/loadtesting/api/v1/test/test_pb2.pyi +65 -0
- yandex/cloud/loadtesting/api/v1/test_service_pb2.pyi +233 -0
- yandex/cloud/lockbox/v1/payload_pb2.pyi +61 -0
- yandex/cloud/lockbox/v1/payload_service_pb2.pyi +31 -0
- yandex/cloud/lockbox/v1/secret_pb2.pyi +209 -0
- yandex/cloud/lockbox/v1/secret_service_pb2.pyi +634 -0
- yandex/cloud/logging/v1/export_pb2.pyi +121 -0
- yandex/cloud/logging/v1/export_service_pb2.pyi +474 -0
- yandex/cloud/logging/v1/log_entry_pb2.pyi +289 -0
- yandex/cloud/logging/v1/log_group_pb2.pyi +143 -0
- yandex/cloud/logging/v1/log_group_service_pb2.pyi +479 -0
- yandex/cloud/logging/v1/log_ingestion_service_pb2.pyi +98 -0
- yandex/cloud/logging/v1/log_reading_service_pb2.pyi +171 -0
- yandex/cloud/logging/v1/log_resource_pb2.pyi +65 -0
- yandex/cloud/logging/v1/sink_pb2.pyi +124 -0
- yandex/cloud/logging/v1/sink_service_pb2.pyi +390 -0
- yandex/cloud/marketplace/licensemanager/v1/instance_pb2.pyi +135 -0
- yandex/cloud/marketplace/licensemanager/v1/instance_service_pb2.pyi +102 -0
- yandex/cloud/marketplace/licensemanager/v1/lock_pb2.pyi +99 -0
- yandex/cloud/marketplace/licensemanager/v1/lock_service_pb2.pyi +230 -0
- yandex/cloud/marketplace/licensemanager/v1/template_pb2.pyi +107 -0
- yandex/cloud/marketplace/metering/v1/image_product_usage_service_pb2.pyi +64 -0
- yandex/cloud/marketplace/metering/v1/usage_record_pb2.pyi +111 -0
- yandex/cloud/marketplace/v1/metering/image_product_usage_service_pb2.pyi +64 -0
- yandex/cloud/marketplace/v1/metering/usage_record_pb2.pyi +111 -0
- yandex/cloud/mdb/clickhouse/v1/backup_pb2.pyi +97 -0
- yandex/cloud/mdb/clickhouse/v1/backup_service_pb2.py +9 -3
- yandex/cloud/mdb/clickhouse/v1/backup_service_pb2.pyi +125 -0
- yandex/cloud/mdb/clickhouse/v1/cluster_pb2.pyi +747 -0
- yandex/cloud/mdb/clickhouse/v1/cluster_service_pb2.py +130 -130
- yandex/cloud/mdb/clickhouse/v1/cluster_service_pb2.pyi +2274 -0
- yandex/cloud/mdb/clickhouse/v1/config/clickhouse_pb2.pyi +1473 -0
- yandex/cloud/mdb/clickhouse/v1/database_pb2.pyi +51 -0
- yandex/cloud/mdb/clickhouse/v1/database_service_pb2.pyi +184 -0
- yandex/cloud/mdb/clickhouse/v1/format_schema_pb2.pyi +67 -0
- yandex/cloud/mdb/clickhouse/v1/format_schema_service_pb2.pyi +246 -0
- yandex/cloud/mdb/clickhouse/v1/maintenance_pb2.pyi +129 -0
- yandex/cloud/mdb/clickhouse/v1/ml_model_pb2.pyi +63 -0
- yandex/cloud/mdb/clickhouse/v1/ml_model_service_pb2.pyi +241 -0
- yandex/cloud/mdb/clickhouse/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/clickhouse/v1/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/mdb/clickhouse/v1/user_pb2.pyi +1717 -0
- yandex/cloud/mdb/clickhouse/v1/user_service_pb2.pyi +353 -0
- yandex/cloud/mdb/clickhouse/v1/version_pb2.pyi +43 -0
- yandex/cloud/mdb/clickhouse/v1/versions_service_pb2.pyi +67 -0
- yandex/cloud/mdb/elasticsearch/v1/auth_pb2.pyi +139 -0
- yandex/cloud/mdb/elasticsearch/v1/auth_service_pb2.pyi +247 -0
- yandex/cloud/mdb/elasticsearch/v1/backup_pb2.pyi +69 -0
- yandex/cloud/mdb/elasticsearch/v1/backup_service_pb2.pyi +87 -0
- yandex/cloud/mdb/elasticsearch/v1/cluster_pb2.pyi +544 -0
- yandex/cloud/mdb/elasticsearch/v1/cluster_service_pb2.pyi +1422 -0
- yandex/cloud/mdb/elasticsearch/v1/config/elasticsearch_pb2.pyi +105 -0
- yandex/cloud/mdb/elasticsearch/v1/extension_pb2.pyi +67 -0
- yandex/cloud/mdb/elasticsearch/v1/extension_service_pb2.pyi +223 -0
- yandex/cloud/mdb/elasticsearch/v1/maintenance_pb2.pyi +115 -0
- yandex/cloud/mdb/elasticsearch/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/elasticsearch/v1/resource_preset_service_pb2.pyi +85 -0
- yandex/cloud/mdb/elasticsearch/v1/user_pb2.pyi +53 -0
- yandex/cloud/mdb/elasticsearch/v1/user_service_pb2.pyi +247 -0
- yandex/cloud/mdb/greenplum/v1/backup_pb2.pyi +110 -0
- yandex/cloud/mdb/greenplum/v1/backup_service_pb2.pyi +122 -0
- yandex/cloud/mdb/greenplum/v1/cluster_pb2.pyi +519 -0
- yandex/cloud/mdb/greenplum/v1/cluster_service_pb2.pyi +1274 -0
- yandex/cloud/mdb/greenplum/v1/config_pb2.pyi +961 -0
- yandex/cloud/mdb/greenplum/v1/hba_rule_pb2.pyi +101 -0
- yandex/cloud/mdb/greenplum/v1/hba_rule_service_pb2.pyi +184 -0
- yandex/cloud/mdb/greenplum/v1/host_pb2.pyi +127 -0
- yandex/cloud/mdb/greenplum/v1/maintenance_pb2.pyi +145 -0
- yandex/cloud/mdb/greenplum/v1/pxf_pb2.py +37 -37
- yandex/cloud/mdb/greenplum/v1/pxf_pb2.pyi +539 -0
- yandex/cloud/mdb/greenplum/v1/pxf_service_pb2.py +22 -22
- yandex/cloud/mdb/greenplum/v1/pxf_service_pb2.pyi +164 -0
- yandex/cloud/mdb/greenplum/v1/resource_preset_pb2.pyi +89 -0
- yandex/cloud/mdb/greenplum/v1/resource_preset_service_pb2.pyi +91 -0
- yandex/cloud/mdb/kafka/v1/cluster_pb2.pyi +844 -0
- yandex/cloud/mdb/kafka/v1/cluster_service_pb2.pyi +915 -0
- yandex/cloud/mdb/kafka/v1/common_pb2.pyi +71 -0
- yandex/cloud/mdb/kafka/v1/connector_pb2.pyi +690 -0
- yandex/cloud/mdb/kafka/v1/connector_service_pb2.pyi +342 -0
- yandex/cloud/mdb/kafka/v1/maintenance_pb2.pyi +115 -0
- yandex/cloud/mdb/kafka/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/kafka/v1/resource_preset_service_pb2.pyi +85 -0
- yandex/cloud/mdb/kafka/v1/topic_pb2.pyi +375 -0
- yandex/cloud/mdb/kafka/v1/topic_service_pb2.pyi +252 -0
- yandex/cloud/mdb/kafka/v1/user_pb2.pyi +137 -0
- yandex/cloud/mdb/kafka/v1/user_service_pb2.pyi +360 -0
- yandex/cloud/mdb/mongodb/v1/backup_pb2.pyi +97 -0
- yandex/cloud/mdb/mongodb/v1/backup_service_pb2.pyi +121 -0
- yandex/cloud/mdb/mongodb/v1/cluster_pb2.pyi +1890 -0
- yandex/cloud/mdb/mongodb/v1/cluster_service_pb2.pyi +3146 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb3_6_pb2.pyi +536 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb4_0_pb2.pyi +522 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb4_2_pb2.pyi +693 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb4_4_enterprise_pb2.pyi +781 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb4_4_pb2.pyi +693 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb5_0_enterprise_pb2.pyi +794 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb5_0_pb2.pyi +699 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb6_0_enterprise_pb2.pyi +794 -0
- yandex/cloud/mdb/mongodb/v1/config/mongodb6_0_pb2.pyi +699 -0
- yandex/cloud/mdb/mongodb/v1/database_pb2.pyi +51 -0
- yandex/cloud/mdb/mongodb/v1/database_service_pb2.pyi +184 -0
- yandex/cloud/mdb/mongodb/v1/maintenance_pb2.pyi +129 -0
- yandex/cloud/mdb/mongodb/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/mongodb/v1/resource_preset_service_pb2.pyi +84 -0
- yandex/cloud/mdb/mongodb/v1/user_pb2.pyi +91 -0
- yandex/cloud/mdb/mongodb/v1/user_service_pb2.pyi +347 -0
- yandex/cloud/mdb/mysql/v1/backup_pb2.pyi +111 -0
- yandex/cloud/mdb/mysql/v1/backup_service_pb2.pyi +129 -0
- yandex/cloud/mdb/mysql/v1/cluster_pb2.pyi +601 -0
- yandex/cloud/mdb/mysql/v1/cluster_service_pb2.pyi +1537 -0
- yandex/cloud/mdb/mysql/v1/config/mysql5_7_pb2.pyi +1023 -0
- yandex/cloud/mdb/mysql/v1/config/mysql8_0_pb2.pyi +969 -0
- yandex/cloud/mdb/mysql/v1/database_pb2.pyi +52 -0
- yandex/cloud/mdb/mysql/v1/database_service_pb2.pyi +192 -0
- yandex/cloud/mdb/mysql/v1/maintenance_pb2.pyi +129 -0
- yandex/cloud/mdb/mysql/v1/resource_preset_pb2.pyi +49 -0
- yandex/cloud/mdb/mysql/v1/resource_preset_service_pb2.pyi +86 -0
- yandex/cloud/mdb/mysql/v1/user_pb2.pyi +357 -0
- yandex/cloud/mdb/mysql/v1/user_service_pb2.pyi +378 -0
- yandex/cloud/mdb/mysql/v1alpha/backup_pb2.pyi +53 -0
- yandex/cloud/mdb/mysql/v1alpha/backup_service_pb2.pyi +89 -0
- yandex/cloud/mdb/mysql/v1alpha/cluster_pb2.pyi +470 -0
- yandex/cloud/mdb/mysql/v1alpha/cluster_service_pb2.pyi +1025 -0
- yandex/cloud/mdb/mysql/v1alpha/config/mysql5_7_pb2.pyi +87 -0
- yandex/cloud/mdb/mysql/v1alpha/database_pb2.pyi +49 -0
- yandex/cloud/mdb/mysql/v1alpha/database_service_pb2.pyi +184 -0
- yandex/cloud/mdb/mysql/v1alpha/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/mysql/v1alpha/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/mdb/mysql/v1alpha/user_pb2.pyi +185 -0
- yandex/cloud/mdb/mysql/v1alpha/user_service_pb2.pyi +312 -0
- yandex/cloud/mdb/opensearch/v1/auth_pb2.pyi +69 -0
- yandex/cloud/mdb/opensearch/v1/backup_pb2.pyi +69 -0
- yandex/cloud/mdb/opensearch/v1/backup_service_pb2.pyi +91 -0
- yandex/cloud/mdb/opensearch/v1/cluster_pb2.pyi +726 -0
- yandex/cloud/mdb/opensearch/v1/cluster_service_pb2.pyi +1827 -0
- yandex/cloud/mdb/opensearch/v1/config/opensearch_pb2.pyi +63 -0
- yandex/cloud/mdb/opensearch/v1/maintenance_pb2.pyi +155 -0
- yandex/cloud/mdb/opensearch/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/opensearch/v1/resource_preset_service_pb2.pyi +87 -0
- yandex/cloud/mdb/postgresql/v1/backup_pb2.pyi +139 -0
- yandex/cloud/mdb/postgresql/v1/backup_service_pb2.pyi +125 -0
- yandex/cloud/mdb/postgresql/v1/cluster_pb2.pyi +935 -0
- yandex/cloud/mdb/postgresql/v1/cluster_service_pb2.pyi +1708 -0
- yandex/cloud/mdb/postgresql/v1/config/host10_1c_pb2.pyi +507 -0
- yandex/cloud/mdb/postgresql/v1/config/host10_pb2.pyi +507 -0
- yandex/cloud/mdb/postgresql/v1/config/host11_1c_pb2.pyi +501 -0
- yandex/cloud/mdb/postgresql/v1/config/host11_pb2.pyi +501 -0
- yandex/cloud/mdb/postgresql/v1/config/host12_1c_pb2.pyi +501 -0
- yandex/cloud/mdb/postgresql/v1/config/host12_pb2.pyi +501 -0
- yandex/cloud/mdb/postgresql/v1/config/host13_1c_pb2.pyi +501 -0
- yandex/cloud/mdb/postgresql/v1/config/host13_pb2.pyi +501 -0
- yandex/cloud/mdb/postgresql/v1/config/host14_1c_pb2.pyi +497 -0
- yandex/cloud/mdb/postgresql/v1/config/host14_pb2.pyi +497 -0
- yandex/cloud/mdb/postgresql/v1/config/host15_1c_pb2.pyi +497 -0
- yandex/cloud/mdb/postgresql/v1/config/host15_pb2.pyi +497 -0
- yandex/cloud/mdb/postgresql/v1/config/host16_1c_pb2.pyi +516 -0
- yandex/cloud/mdb/postgresql/v1/config/host16_pb2.pyi +516 -0
- yandex/cloud/mdb/postgresql/v1/config/host9_6_pb2.pyi +458 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql10_1c_pb2.pyi +931 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql10_pb2.pyi +923 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql11_1c_pb2.pyi +975 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql11_pb2.pyi +967 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql12_1c_pb2.pyi +999 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql12_pb2.pyi +991 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql13_1c_pb2.pyi +1053 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql13_pb2.pyi +1051 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql14_1c_pb2.pyi +1081 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql14_pb2.pyi +1079 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql15_1c_pb2.pyi +1091 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql15_pb2.pyi +1083 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql16_1c_pb2.pyi +1093 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql16_pb2.pyi +1085 -0
- yandex/cloud/mdb/postgresql/v1/config/postgresql9_6_pb2.pyi +651 -0
- yandex/cloud/mdb/postgresql/v1/database_pb2.pyi +150 -0
- yandex/cloud/mdb/postgresql/v1/database_service_pb2.pyi +260 -0
- yandex/cloud/mdb/postgresql/v1/maintenance_pb2.pyi +129 -0
- yandex/cloud/mdb/postgresql/v1/perf_diag_pb2.pyi +462 -0
- yandex/cloud/mdb/postgresql/v1/perf_diag_service_pb2.pyi +139 -0
- yandex/cloud/mdb/postgresql/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/postgresql/v1/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/mdb/postgresql/v1/user_pb2.pyi +534 -0
- yandex/cloud/mdb/postgresql/v1/user_service_pb2.pyi +396 -0
- yandex/cloud/mdb/redis/v1/backup_pb2.pyi +65 -0
- yandex/cloud/mdb/redis/v1/backup_service_pb2.pyi +89 -0
- yandex/cloud/mdb/redis/v1/cluster_pb2.pyi +610 -0
- yandex/cloud/mdb/redis/v1/cluster_service_pb2.pyi +1686 -0
- yandex/cloud/mdb/redis/v1/config/redis5_0_pb2.pyi +204 -0
- yandex/cloud/mdb/redis/v1/config/redis6_0_pb2.pyi +204 -0
- yandex/cloud/mdb/redis/v1/config/redis6_2_pb2.pyi +210 -0
- yandex/cloud/mdb/redis/v1/config/redis7_0_pb2.pyi +210 -0
- yandex/cloud/mdb/redis/v1/config/redis_pb2.pyi +210 -0
- yandex/cloud/mdb/redis/v1/maintenance_pb2.pyi +129 -0
- yandex/cloud/mdb/redis/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/redis/v1/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/mdb/sqlserver/v1/backup_pb2.pyi +62 -0
- yandex/cloud/mdb/sqlserver/v1/backup_service_pb2.pyi +90 -0
- yandex/cloud/mdb/sqlserver/v1/cluster_pb2.pyi +571 -0
- yandex/cloud/mdb/sqlserver/v1/cluster_service_pb2.pyi +1226 -0
- yandex/cloud/mdb/sqlserver/v1/config/sqlserver2016sp2_pb2.pyi +231 -0
- yandex/cloud/mdb/sqlserver/v1/config/sqlserver2017_pb2.pyi +231 -0
- yandex/cloud/mdb/sqlserver/v1/config/sqlserver2019_pb2.pyi +231 -0
- yandex/cloud/mdb/sqlserver/v1/database_pb2.pyi +52 -0
- yandex/cloud/mdb/sqlserver/v1/database_service_pb2.pyi +384 -0
- yandex/cloud/mdb/sqlserver/v1/resource_preset_pb2.pyi +45 -0
- yandex/cloud/mdb/sqlserver/v1/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/mdb/sqlserver/v1/user_pb2.pyi +185 -0
- yandex/cloud/mdb/sqlserver/v1/user_service_pb2.pyi +368 -0
- yandex/cloud/monitoring/v3/chart_widget_pb2.pyi +641 -0
- yandex/cloud/monitoring/v3/dashboard_pb2.pyi +122 -0
- yandex/cloud/monitoring/v3/dashboard_service_pb2.pyi +377 -0
- yandex/cloud/monitoring/v3/downsampling_pb2.pyi +118 -0
- yandex/cloud/monitoring/v3/parametrization_pb2.pyi +256 -0
- yandex/cloud/monitoring/v3/text_widget_pb2.pyi +29 -0
- yandex/cloud/monitoring/v3/title_widget_pb2.pyi +69 -0
- yandex/cloud/monitoring/v3/unit_format_pb2.pyi +480 -0
- yandex/cloud/monitoring/v3/widget_pb2.pyi +82 -0
- yandex/cloud/oauth/claims_pb2.pyi +136 -0
- yandex/cloud/operation/operation_pb2.pyi +89 -0
- yandex/cloud/operation/operation_service_pb2.pyi +43 -0
- yandex/cloud/organizationmanager/v1/group_mapping_pb2.pyi +57 -0
- yandex/cloud/organizationmanager/v1/group_mapping_service_pb2.pyi +305 -0
- yandex/cloud/organizationmanager/v1/group_pb2.pyi +51 -0
- yandex/cloud/organizationmanager/v1/group_service_pb2.pyi +464 -0
- yandex/cloud/organizationmanager/v1/organization_pb2.pyi +73 -0
- yandex/cloud/organizationmanager/v1/organization_service_pb2.pyi +231 -0
- yandex/cloud/organizationmanager/v1/os_login_service_pb2.pyi +421 -0
- yandex/cloud/organizationmanager/v1/saml/certificate_pb2.pyi +53 -0
- yandex/cloud/organizationmanager/v1/saml/certificate_service_pb2.pyi +298 -0
- yandex/cloud/organizationmanager/v1/saml/federation_pb2.pyi +179 -0
- yandex/cloud/organizationmanager/v1/saml/federation_service_pb2.pyi +625 -0
- yandex/cloud/organizationmanager/v1/ssh_certificate_service_pb2.pyi +62 -0
- yandex/cloud/organizationmanager/v1/user_account_pb2.pyi +133 -0
- yandex/cloud/organizationmanager/v1/user_service_pb2.pyi +150 -0
- yandex/cloud/organizationmanager/v1/user_ssh_key_pb2.pyi +53 -0
- yandex/cloud/organizationmanager/v1/user_ssh_key_service_pb2.pyi +194 -0
- yandex/cloud/quota/quota_pb2.pyi +88 -0
- yandex/cloud/reference/reference_pb2.pyi +77 -0
- yandex/cloud/resourcemanager/v1/cloud_pb2.pyi +73 -0
- yandex/cloud/resourcemanager/v1/cloud_service_pb2.pyi +360 -0
- yandex/cloud/resourcemanager/v1/folder_pb2.pyi +109 -0
- yandex/cloud/resourcemanager/v1/folder_service_pb2.pyi +364 -0
- yandex/cloud/serverless/apigateway/v1/apigateway_pb2.py +24 -21
- yandex/cloud/serverless/apigateway/v1/apigateway_pb2.pyi +332 -0
- yandex/cloud/serverless/apigateway/v1/apigateway_service_pb2.py +53 -48
- yandex/cloud/serverless/apigateway/v1/apigateway_service_pb2.pyi +618 -0
- yandex/cloud/serverless/apigateway/websocket/v1/connection_pb2.pyi +71 -0
- yandex/cloud/serverless/apigateway/websocket/v1/connection_service_pb2.pyi +113 -0
- yandex/cloud/serverless/containers/v1/container_pb2.pyi +538 -0
- yandex/cloud/serverless/containers/v1/container_service_pb2.pyi +668 -0
- yandex/cloud/serverless/functions/v1/function_pb2.pyi +607 -0
- yandex/cloud/serverless/functions/v1/function_service_pb2.pyi +1073 -0
- yandex/cloud/serverless/functions/v1/network_service_pb2.pyi +312 -0
- yandex/cloud/serverless/mdbproxy/v1/proxy_pb2.pyi +163 -0
- yandex/cloud/serverless/mdbproxy/v1/proxy_service_pb2.pyi +359 -0
- yandex/cloud/serverless/triggers/v1/predicate_pb2.pyi +80 -0
- yandex/cloud/serverless/triggers/v1/trigger_pb2.pyi +1109 -0
- yandex/cloud/serverless/triggers/v1/trigger_service_pb2.pyi +439 -0
- yandex/cloud/speechsense/v1/audio_pb2.pyi +204 -0
- yandex/cloud/speechsense/v1/talk_service_pb2.pyi +161 -0
- yandex/cloud/speechsense/v1/text_pb2.pyi +70 -0
- yandex/cloud/storage/v1/bucket_pb2.pyi +1465 -0
- yandex/cloud/storage/v1/bucket_service_pb2.pyi +540 -0
- yandex/cloud/validation_pb2.pyi +53 -0
- yandex/cloud/video/v1/channel_pb2.pyi +79 -0
- yandex/cloud/video/v1/channel_service_pb2.pyi +259 -0
- yandex/cloud/video/v1/episode_pb2.pyi +140 -0
- yandex/cloud/video/v1/episode_service_pb2.pyi +451 -0
- yandex/cloud/video/v1/stream_line_pb2.pyi +305 -0
- yandex/cloud/video/v1/stream_line_service_pb2.pyi +563 -0
- yandex/cloud/video/v1/stream_pb2.pyi +197 -0
- yandex/cloud/video/v1/stream_service_pb2.pyi +396 -0
- yandex/cloud/video/v1/thumbnail_pb2.pyi +39 -0
- yandex/cloud/video/v1/thumbnail_service_pb2.pyi +184 -0
- yandex/cloud/video/v1/video_pb2.pyi +211 -0
- yandex/cloud/video/v1/video_service_pb2.pyi +464 -0
- yandex/cloud/vpc/v1/address_pb2.pyi +226 -0
- yandex/cloud/vpc/v1/address_service_pb2.pyi +491 -0
- yandex/cloud/vpc/v1/gateway_pb2.pyi +92 -0
- yandex/cloud/vpc/v1/gateway_service_pb2.pyi +403 -0
- yandex/cloud/vpc/v1/network_pb2.pyi +79 -0
- yandex/cloud/vpc/v1/network_service_pb2.pyi +547 -0
- yandex/cloud/vpc/v1/route_table_pb2.pyi +136 -0
- yandex/cloud/vpc/v1/route_table_service_pb2.pyi +381 -0
- yandex/cloud/vpc/v1/security_group_pb2.pyi +266 -0
- yandex/cloud/vpc/v1/security_group_service_pb2.pyi +591 -0
- yandex/cloud/vpc/v1/subnet_pb2.pyi +155 -0
- yandex/cloud/vpc/v1/subnet_service_pb2.pyi +593 -0
- yandex/cloud/ydb/v1/backup_pb2.pyi +353 -0
- yandex/cloud/ydb/v1/backup_service_pb2.pyi +166 -0
- yandex/cloud/ydb/v1/database_pb2.pyi +577 -0
- yandex/cloud/ydb/v1/database_service_pb2.pyi +550 -0
- yandex/cloud/ydb/v1/location_pb2.pyi +29 -0
- yandex/cloud/ydb/v1/location_service_pb2.pyi +83 -0
- yandex/cloud/ydb/v1/resource_preset_pb2.pyi +32 -0
- yandex/cloud/ydb/v1/resource_preset_service_pb2.pyi +83 -0
- yandex/cloud/ydb/v1/storage_type_pb2.pyi +32 -0
- yandex/cloud/ydb/v1/storage_type_service_pb2.pyi +83 -0
- yandexcloud/_auth_fabric.py +46 -41
- yandexcloud/_auth_plugin.py +36 -18
- yandexcloud/_backoff.py +8 -7
- yandexcloud/_channels.py +27 -13
- yandexcloud/_helpers.py +15 -29
- yandexcloud/_operation_waiter.py +32 -18
- yandexcloud/_retry_interceptor.py +39 -22
- yandexcloud/_sdk.py +81 -32
- yandexcloud/_wrappers/__init__.py +9 -2
- yandexcloud/_wrappers/dataproc/__init__.py +11 -10
- yandexcloud/auth.py +10 -2
- yandexcloud/operations.py +22 -7
- {yandexcloud-0.287.0.dist-info → yandexcloud-0.289.0.dist-info}/AUTHORS +2 -3
- {yandexcloud-0.287.0.dist-info → yandexcloud-0.289.0.dist-info}/METADATA +4 -4
- {yandexcloud-0.287.0.dist-info → yandexcloud-0.289.0.dist-info}/RECORD +565 -26
- {yandexcloud-0.287.0.dist-info → yandexcloud-0.289.0.dist-info}/LICENSE +0 -0
- {yandexcloud-0.287.0.dist-info → yandexcloud-0.289.0.dist-info}/WHEEL +0 -0
- {yandexcloud-0.287.0.dist-info → yandexcloud-0.289.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import builtins
|
|
7
|
+
import google.protobuf.descriptor
|
|
8
|
+
import google.protobuf.message
|
|
9
|
+
import typing
|
|
10
|
+
|
|
11
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
12
|
+
|
|
13
|
+
@typing.final
|
|
14
|
+
class ResourcePreset(google.protobuf.message.Message):
|
|
15
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
16
|
+
|
|
17
|
+
ID_FIELD_NUMBER: builtins.int
|
|
18
|
+
CORES_FIELD_NUMBER: builtins.int
|
|
19
|
+
MEMORY_FIELD_NUMBER: builtins.int
|
|
20
|
+
id: builtins.str
|
|
21
|
+
cores: builtins.int
|
|
22
|
+
memory: builtins.int
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
id: builtins.str = ...,
|
|
27
|
+
cores: builtins.int = ...,
|
|
28
|
+
memory: builtins.int = ...,
|
|
29
|
+
) -> None: ...
|
|
30
|
+
def ClearField(self, field_name: typing.Literal["cores", b"cores", "id", b"id", "memory", b"memory"]) -> None: ...
|
|
31
|
+
|
|
32
|
+
global___ResourcePreset = ResourcePreset
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import builtins
|
|
7
|
+
import collections.abc
|
|
8
|
+
import google.protobuf.descriptor
|
|
9
|
+
import google.protobuf.internal.containers
|
|
10
|
+
import google.protobuf.message
|
|
11
|
+
import typing
|
|
12
|
+
import yandex.cloud.ydb.v1.resource_preset_pb2
|
|
13
|
+
|
|
14
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
15
|
+
|
|
16
|
+
@typing.final
|
|
17
|
+
class GetResourcePresetRequest(google.protobuf.message.Message):
|
|
18
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
19
|
+
|
|
20
|
+
RESOURCE_PRESET_ID_FIELD_NUMBER: builtins.int
|
|
21
|
+
resource_preset_id: builtins.str
|
|
22
|
+
"""Required. ID of the resource preset to return."""
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
resource_preset_id: builtins.str = ...,
|
|
27
|
+
) -> None: ...
|
|
28
|
+
def ClearField(self, field_name: typing.Literal["resource_preset_id", b"resource_preset_id"]) -> None: ...
|
|
29
|
+
|
|
30
|
+
global___GetResourcePresetRequest = GetResourcePresetRequest
|
|
31
|
+
|
|
32
|
+
@typing.final
|
|
33
|
+
class ListResourcePresetsRequest(google.protobuf.message.Message):
|
|
34
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
35
|
+
|
|
36
|
+
PAGE_SIZE_FIELD_NUMBER: builtins.int
|
|
37
|
+
PAGE_TOKEN_FIELD_NUMBER: builtins.int
|
|
38
|
+
page_size: builtins.int
|
|
39
|
+
"""The maximum number of results per page that should be returned. If the number of available
|
|
40
|
+
results is larger than `page_size`, the service returns a `next_page_token` that can be used
|
|
41
|
+
to get the next page of results in subsequent ListResourcePresets requests.
|
|
42
|
+
Acceptable values are 0 to 1000, inclusive. Default value: 100.
|
|
43
|
+
"""
|
|
44
|
+
page_token: builtins.str
|
|
45
|
+
"""Page token. Set `page_token` to the `next_page_token` returned by a previous ListResourcePresets
|
|
46
|
+
request to get the next page of results.
|
|
47
|
+
"""
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
*,
|
|
51
|
+
page_size: builtins.int = ...,
|
|
52
|
+
page_token: builtins.str = ...,
|
|
53
|
+
) -> None: ...
|
|
54
|
+
def ClearField(self, field_name: typing.Literal["page_size", b"page_size", "page_token", b"page_token"]) -> None: ...
|
|
55
|
+
|
|
56
|
+
global___ListResourcePresetsRequest = ListResourcePresetsRequest
|
|
57
|
+
|
|
58
|
+
@typing.final
|
|
59
|
+
class ListResourcePresetsResponse(google.protobuf.message.Message):
|
|
60
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
61
|
+
|
|
62
|
+
RESOURCE_PRESETS_FIELD_NUMBER: builtins.int
|
|
63
|
+
NEXT_PAGE_TOKEN_FIELD_NUMBER: builtins.int
|
|
64
|
+
next_page_token: builtins.str
|
|
65
|
+
"""This token allows you to get the next page of results for ListResourcePresets requests,
|
|
66
|
+
if the number of results is larger than `page_size` specified in the request.
|
|
67
|
+
To get the next page, specify the value of `next_page_token` as a value for
|
|
68
|
+
the `page_token` parameter in the next ListResourcePresets request. Subsequent ListResourcePresets
|
|
69
|
+
requests will have their own `next_page_token` to continue paging through the results.
|
|
70
|
+
"""
|
|
71
|
+
@property
|
|
72
|
+
def resource_presets(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[yandex.cloud.ydb.v1.resource_preset_pb2.ResourcePreset]:
|
|
73
|
+
"""Requested list of resource presets."""
|
|
74
|
+
|
|
75
|
+
def __init__(
|
|
76
|
+
self,
|
|
77
|
+
*,
|
|
78
|
+
resource_presets: collections.abc.Iterable[yandex.cloud.ydb.v1.resource_preset_pb2.ResourcePreset] | None = ...,
|
|
79
|
+
next_page_token: builtins.str = ...,
|
|
80
|
+
) -> None: ...
|
|
81
|
+
def ClearField(self, field_name: typing.Literal["next_page_token", b"next_page_token", "resource_presets", b"resource_presets"]) -> None: ...
|
|
82
|
+
|
|
83
|
+
global___ListResourcePresetsResponse = ListResourcePresetsResponse
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import builtins
|
|
7
|
+
import google.protobuf.descriptor
|
|
8
|
+
import google.protobuf.message
|
|
9
|
+
import typing
|
|
10
|
+
|
|
11
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
12
|
+
|
|
13
|
+
@typing.final
|
|
14
|
+
class StorageType(google.protobuf.message.Message):
|
|
15
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
16
|
+
|
|
17
|
+
ID_FIELD_NUMBER: builtins.int
|
|
18
|
+
DEVICE_TYPE_FIELD_NUMBER: builtins.int
|
|
19
|
+
REDUNDANCY_TYPE_FIELD_NUMBER: builtins.int
|
|
20
|
+
id: builtins.str
|
|
21
|
+
device_type: builtins.str
|
|
22
|
+
redundancy_type: builtins.str
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
id: builtins.str = ...,
|
|
27
|
+
device_type: builtins.str = ...,
|
|
28
|
+
redundancy_type: builtins.str = ...,
|
|
29
|
+
) -> None: ...
|
|
30
|
+
def ClearField(self, field_name: typing.Literal["device_type", b"device_type", "id", b"id", "redundancy_type", b"redundancy_type"]) -> None: ...
|
|
31
|
+
|
|
32
|
+
global___StorageType = StorageType
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import builtins
|
|
7
|
+
import collections.abc
|
|
8
|
+
import google.protobuf.descriptor
|
|
9
|
+
import google.protobuf.internal.containers
|
|
10
|
+
import google.protobuf.message
|
|
11
|
+
import typing
|
|
12
|
+
import yandex.cloud.ydb.v1.storage_type_pb2
|
|
13
|
+
|
|
14
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
15
|
+
|
|
16
|
+
@typing.final
|
|
17
|
+
class GetStorageTypeRequest(google.protobuf.message.Message):
|
|
18
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
19
|
+
|
|
20
|
+
STORAGE_TYPE_ID_FIELD_NUMBER: builtins.int
|
|
21
|
+
storage_type_id: builtins.str
|
|
22
|
+
"""Required. ID of the storage type to return."""
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
*,
|
|
26
|
+
storage_type_id: builtins.str = ...,
|
|
27
|
+
) -> None: ...
|
|
28
|
+
def ClearField(self, field_name: typing.Literal["storage_type_id", b"storage_type_id"]) -> None: ...
|
|
29
|
+
|
|
30
|
+
global___GetStorageTypeRequest = GetStorageTypeRequest
|
|
31
|
+
|
|
32
|
+
@typing.final
|
|
33
|
+
class ListStorageTypesRequest(google.protobuf.message.Message):
|
|
34
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
35
|
+
|
|
36
|
+
PAGE_SIZE_FIELD_NUMBER: builtins.int
|
|
37
|
+
PAGE_TOKEN_FIELD_NUMBER: builtins.int
|
|
38
|
+
page_size: builtins.int
|
|
39
|
+
"""The maximum number of results per page that should be returned. If the number of available
|
|
40
|
+
results is larger than `page_size`, the service returns a `next_page_token` that can be used
|
|
41
|
+
to get the next page of results in subsequent ListStorageTypes requests.
|
|
42
|
+
Acceptable values are 0 to 1000, inclusive. Default value: 100.
|
|
43
|
+
"""
|
|
44
|
+
page_token: builtins.str
|
|
45
|
+
"""Page token. Set `page_token` to the `next_page_token` returned by a previous ListStorageTypes
|
|
46
|
+
request to get the next page of results.
|
|
47
|
+
"""
|
|
48
|
+
def __init__(
|
|
49
|
+
self,
|
|
50
|
+
*,
|
|
51
|
+
page_size: builtins.int = ...,
|
|
52
|
+
page_token: builtins.str = ...,
|
|
53
|
+
) -> None: ...
|
|
54
|
+
def ClearField(self, field_name: typing.Literal["page_size", b"page_size", "page_token", b"page_token"]) -> None: ...
|
|
55
|
+
|
|
56
|
+
global___ListStorageTypesRequest = ListStorageTypesRequest
|
|
57
|
+
|
|
58
|
+
@typing.final
|
|
59
|
+
class ListStorageTypesResponse(google.protobuf.message.Message):
|
|
60
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
61
|
+
|
|
62
|
+
STORAGE_TYPES_FIELD_NUMBER: builtins.int
|
|
63
|
+
NEXT_PAGE_TOKEN_FIELD_NUMBER: builtins.int
|
|
64
|
+
next_page_token: builtins.str
|
|
65
|
+
"""This token allows you to get the next page of results for ListStorageTypes requests,
|
|
66
|
+
if the number of results is larger than `page_size` specified in the request.
|
|
67
|
+
To get the next page, specify the value of `next_page_token` as a value for
|
|
68
|
+
the `page_token` parameter in the next ListStorageTypes request. Subsequent ListStorageTypes
|
|
69
|
+
requests will have their own `next_page_token` to continue paging through the results.
|
|
70
|
+
"""
|
|
71
|
+
@property
|
|
72
|
+
def storage_types(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[yandex.cloud.ydb.v1.storage_type_pb2.StorageType]:
|
|
73
|
+
"""Requested list of storage types."""
|
|
74
|
+
|
|
75
|
+
def __init__(
|
|
76
|
+
self,
|
|
77
|
+
*,
|
|
78
|
+
storage_types: collections.abc.Iterable[yandex.cloud.ydb.v1.storage_type_pb2.StorageType] | None = ...,
|
|
79
|
+
next_page_token: builtins.str = ...,
|
|
80
|
+
) -> None: ...
|
|
81
|
+
def ClearField(self, field_name: typing.Literal["next_page_token", b"next_page_token", "storage_types", b"storage_types"]) -> None: ...
|
|
82
|
+
|
|
83
|
+
global___ListStorageTypesResponse = ListStorageTypesResponse
|
yandexcloud/_auth_fabric.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import time
|
|
3
3
|
from datetime import datetime
|
|
4
|
+
from typing import Dict, Optional, Union
|
|
4
5
|
|
|
5
6
|
# noinspection PyUnresolvedReferences
|
|
6
7
|
# jwt package depends on cryptography
|
|
@@ -26,9 +27,9 @@ def set_up_yc_api_endpoint(endpoint: str) -> str:
|
|
|
26
27
|
return YC_API_ENDPOINT
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
def __validate_service_account_key(sa_key):
|
|
30
|
+
def __validate_service_account_key(sa_key: Optional[dict]) -> bool:
|
|
30
31
|
if not isinstance(sa_key, dict):
|
|
31
|
-
raise RuntimeError("Invalid Service Account Key: expecting dictionary, actually got {
|
|
32
|
+
raise RuntimeError(f"Invalid Service Account Key: expecting dictionary, actually got {type(sa_key)}")
|
|
32
33
|
|
|
33
34
|
obj_id = sa_key.get("id")
|
|
34
35
|
sa_id = sa_key.get("service_account_id")
|
|
@@ -47,46 +48,21 @@ def __validate_service_account_key(sa_key):
|
|
|
47
48
|
if not isinstance(private_key, six.string_types) or private_key_prefix not in private_key:
|
|
48
49
|
error_message = (
|
|
49
50
|
"Invalid Service Account Key: private key is in incorrect format."
|
|
50
|
-
|
|
51
|
-
|
|
51
|
+
f"Should start with {private_key_prefix}.\n"
|
|
52
|
+
"To obtain one you can use YC CLI: yc iam key create --output sa.json --service-account-id <id>"
|
|
52
53
|
)
|
|
53
54
|
raise RuntimeError(error_message)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def get_auth_token_requester(token=None, service_account_key=None, iam_token=None, metadata_addr=None, endpoint=None):
|
|
57
|
-
if endpoint is None:
|
|
58
|
-
endpoint = YC_API_ENDPOINT
|
|
59
|
-
auth_methods = [("token", token), ("service_account_key", service_account_key), ("iam_token", iam_token)]
|
|
60
|
-
auth_methods = [(auth_type, value) for auth_type, value in auth_methods if value is not None]
|
|
61
|
-
|
|
62
|
-
if len(auth_methods) == 0:
|
|
63
|
-
return MetadataAuth(metadata_addr=metadata_addr or os.environ.get("YC_METADATA_ADDR", _MDS_ADDR))
|
|
64
|
-
|
|
65
|
-
if len(auth_methods) > 1:
|
|
66
|
-
raise RuntimeError(
|
|
67
|
-
"Conflicting API credentials properties are set: {}.".format([auth[0] for auth in auth_methods])
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
auth_name, _ = auth_methods[0]
|
|
71
|
-
if auth_name == "token":
|
|
72
|
-
return TokenAuth(token=token)
|
|
73
|
-
if auth_name == "service_account_key":
|
|
74
|
-
__validate_service_account_key(service_account_key)
|
|
75
|
-
return ServiceAccountAuth(service_account_key, endpoint)
|
|
76
|
-
if auth_name == "iam_token":
|
|
77
|
-
return IamTokenAuth(iam_token)
|
|
78
|
-
|
|
79
|
-
raise RuntimeError("Unknown auth method: {}".format(auth_name))
|
|
55
|
+
return True
|
|
80
56
|
|
|
81
57
|
|
|
82
58
|
class MetadataAuth:
|
|
83
|
-
def __init__(self, metadata_addr):
|
|
59
|
+
def __init__(self, metadata_addr: str):
|
|
84
60
|
self.__metadata_addr = metadata_addr
|
|
85
61
|
|
|
86
|
-
def url(self):
|
|
62
|
+
def url(self) -> str:
|
|
87
63
|
return _MDS_URL.format(self.__metadata_addr)
|
|
88
64
|
|
|
89
|
-
def get_token(self):
|
|
65
|
+
def get_token(self) -> str:
|
|
90
66
|
r = requests.get(self.url(), headers=_MDS_HEADERS, timeout=_MDS_TIMEOUT)
|
|
91
67
|
r.raise_for_status()
|
|
92
68
|
response = r.json()
|
|
@@ -94,28 +70,28 @@ class MetadataAuth:
|
|
|
94
70
|
|
|
95
71
|
|
|
96
72
|
class TokenAuth:
|
|
97
|
-
def __init__(self, token):
|
|
73
|
+
def __init__(self, token: str):
|
|
98
74
|
self.__oauth_token = token
|
|
99
75
|
|
|
100
|
-
def get_token_request(self):
|
|
76
|
+
def get_token_request(self) -> "CreateIamTokenRequest":
|
|
101
77
|
return CreateIamTokenRequest(yandex_passport_oauth_token=self.__oauth_token)
|
|
102
78
|
|
|
103
79
|
|
|
104
80
|
class ServiceAccountAuth:
|
|
105
81
|
__SECONDS_IN_HOUR = 60.0 * 60.0
|
|
106
82
|
|
|
107
|
-
def __init__(self, sa_key, endpoint=None):
|
|
83
|
+
def __init__(self, sa_key: Dict[str, str], endpoint: Optional[str] = None):
|
|
108
84
|
self.__sa_key = sa_key
|
|
109
85
|
self._endpoint = endpoint if endpoint is not None else YC_API_ENDPOINT
|
|
110
86
|
|
|
111
|
-
def get_token_request(self):
|
|
87
|
+
def get_token_request(self) -> "CreateIamTokenRequest":
|
|
112
88
|
return CreateIamTokenRequest(jwt=self.__prepare_request(self._endpoint))
|
|
113
89
|
|
|
114
|
-
def __prepare_request(self, endpoint):
|
|
90
|
+
def __prepare_request(self, endpoint: str) -> str:
|
|
115
91
|
now = time.time()
|
|
116
92
|
now_utc = datetime.utcfromtimestamp(now)
|
|
117
93
|
exp_utc = datetime.utcfromtimestamp(now + self.__SECONDS_IN_HOUR)
|
|
118
|
-
url = "https://iam.{}/iam/v1/tokens"
|
|
94
|
+
url = f"https://iam.{endpoint}/iam/v1/tokens"
|
|
119
95
|
payload = {
|
|
120
96
|
"iss": self.__sa_key["service_account_id"],
|
|
121
97
|
"aud": url,
|
|
@@ -133,8 +109,37 @@ class ServiceAccountAuth:
|
|
|
133
109
|
|
|
134
110
|
|
|
135
111
|
class IamTokenAuth:
|
|
136
|
-
def __init__(self, iam_token):
|
|
112
|
+
def __init__(self, iam_token: str):
|
|
137
113
|
self.__iam_token = iam_token
|
|
138
114
|
|
|
139
|
-
def get_token(self):
|
|
115
|
+
def get_token(self) -> str:
|
|
140
116
|
return self.__iam_token
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def get_auth_token_requester(
|
|
120
|
+
token: Optional[str] = None,
|
|
121
|
+
service_account_key: Optional[dict] = None,
|
|
122
|
+
iam_token: Optional[str] = None,
|
|
123
|
+
metadata_addr: Optional[str] = None,
|
|
124
|
+
endpoint: Optional[str] = None,
|
|
125
|
+
) -> Union["MetadataAuth", "TokenAuth", "IamTokenAuth", "ServiceAccountAuth"]:
|
|
126
|
+
if endpoint is None:
|
|
127
|
+
endpoint = YC_API_ENDPOINT
|
|
128
|
+
auth_methods = [("token", token), ("service_account_key", service_account_key), ("iam_token", iam_token)]
|
|
129
|
+
auth_methods = [(auth_type, value) for auth_type, value in auth_methods if value is not None]
|
|
130
|
+
|
|
131
|
+
if len(auth_methods) == 0:
|
|
132
|
+
metadata_addr = metadata_addr if metadata_addr is not None else os.environ.get("YC_METADATA_ADDR", _MDS_ADDR)
|
|
133
|
+
return MetadataAuth(metadata_addr)
|
|
134
|
+
|
|
135
|
+
if len(auth_methods) > 1:
|
|
136
|
+
raise RuntimeError(f"Conflicting API credentials properties are set: {[auth[0] for auth in auth_methods]}.")
|
|
137
|
+
|
|
138
|
+
if token is not None:
|
|
139
|
+
return TokenAuth(token=token)
|
|
140
|
+
if iam_token is not None:
|
|
141
|
+
return IamTokenAuth(iam_token)
|
|
142
|
+
if service_account_key is not None and __validate_service_account_key(service_account_key):
|
|
143
|
+
return ServiceAccountAuth(service_account_key, endpoint)
|
|
144
|
+
|
|
145
|
+
raise RuntimeError("Unknown auth method")
|
yandexcloud/_auth_plugin.py
CHANGED
|
@@ -1,41 +1,57 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
+
from typing import TYPE_CHECKING, Callable, Optional, Tuple, Union
|
|
2
3
|
|
|
3
4
|
import grpc
|
|
4
5
|
from six.moves.urllib.parse import urlparse
|
|
5
6
|
|
|
6
7
|
from yandex.cloud.iam.v1.iam_token_service_pb2_grpc import IamTokenServiceStub
|
|
7
8
|
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from yandex.cloud.iam.v1.iam_token_service_pb2 import CreateIamTokenResponse
|
|
11
|
+
from yandexcloud._auth_fabric import (
|
|
12
|
+
IamTokenAuth,
|
|
13
|
+
MetadataAuth,
|
|
14
|
+
ServiceAccountAuth,
|
|
15
|
+
TokenAuth,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
8
19
|
TIMEOUT_SECONDS = 20
|
|
9
20
|
|
|
10
21
|
|
|
11
22
|
class Credentials(grpc.AuthMetadataPlugin):
|
|
12
|
-
def __init__(
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
token_requester: Union["MetadataAuth", "TokenAuth", "IamTokenAuth", "ServiceAccountAuth"],
|
|
26
|
+
lazy_channel: Callable[[], "grpc.Channel"],
|
|
27
|
+
):
|
|
13
28
|
# pylint: disable=super-init-not-called
|
|
14
29
|
self.__token_requester = token_requester
|
|
15
30
|
self._lazy_channel = lazy_channel
|
|
16
|
-
self._channel = None
|
|
17
|
-
self._cached_iam_token =
|
|
18
|
-
self._iam_token_timestamp = None
|
|
31
|
+
self._channel: Optional[grpc.Channel] = None
|
|
32
|
+
self._cached_iam_token: str = ""
|
|
33
|
+
self._iam_token_timestamp: Optional[datetime] = None
|
|
19
34
|
|
|
20
|
-
def __call__(self, context, callback):
|
|
35
|
+
def __call__(self, context: "grpc.AuthMetadataContext", callback: "grpc.AuthMetadataPluginCallback") -> None:
|
|
21
36
|
try:
|
|
22
37
|
return self._call(context, callback)
|
|
23
38
|
except Exception as exception: # pylint: disable=broad-except
|
|
24
|
-
callback(
|
|
39
|
+
callback(tuple(), exception)
|
|
40
|
+
return None
|
|
25
41
|
|
|
26
|
-
def _call(self, context, callback):
|
|
42
|
+
def _call(self, context: "grpc.AuthMetadataContext", callback: "grpc.AuthMetadataPluginCallback") -> None:
|
|
27
43
|
u = urlparse(context.service_url)
|
|
28
44
|
if u.path in (
|
|
29
45
|
"/yandex.cloud.iam.v1.IamTokenService",
|
|
30
46
|
"/yandex.cloud.endpoint.ApiEndpointService",
|
|
31
47
|
):
|
|
32
|
-
callback(
|
|
48
|
+
callback(tuple(), None)
|
|
33
49
|
return
|
|
34
50
|
|
|
35
|
-
if
|
|
51
|
+
if self._channel is None:
|
|
36
52
|
self._channel = self._lazy_channel()
|
|
37
53
|
|
|
38
|
-
if
|
|
54
|
+
if not self._fresh():
|
|
39
55
|
get_token = getattr(self.__token_requester, "get_token", None)
|
|
40
56
|
if callable(get_token):
|
|
41
57
|
self._cached_iam_token = get_token()
|
|
@@ -51,28 +67,30 @@ class Credentials(grpc.AuthMetadataPlugin):
|
|
|
51
67
|
|
|
52
68
|
callback(self._metadata(), None)
|
|
53
69
|
|
|
54
|
-
def create_done_callback(self, callback):
|
|
55
|
-
def done_callback(future):
|
|
70
|
+
def create_done_callback(self, callback: "grpc.AuthMetadataPluginCallback") -> Callable[["grpc.Future"], None]:
|
|
71
|
+
def done_callback(future: "grpc.Future") -> None:
|
|
56
72
|
try:
|
|
57
73
|
resp = future.result()
|
|
58
74
|
except Exception as exception: # pylint: disable=broad-except
|
|
59
|
-
callback(
|
|
75
|
+
callback(tuple(), exception)
|
|
60
76
|
else:
|
|
61
77
|
self._save_token(resp)
|
|
62
78
|
callback(self._metadata(), None)
|
|
63
79
|
|
|
64
80
|
return done_callback
|
|
65
81
|
|
|
66
|
-
def _metadata(self):
|
|
67
|
-
metadata = (("authorization", "Bearer
|
|
82
|
+
def _metadata(self) -> Tuple[Tuple[str, str]]:
|
|
83
|
+
metadata = (("authorization", f"Bearer {self._cached_iam_token}"),)
|
|
68
84
|
return metadata
|
|
69
85
|
|
|
70
|
-
def _save_token(self, resp):
|
|
86
|
+
def _save_token(self, resp: "CreateIamTokenResponse") -> None:
|
|
71
87
|
self._cached_iam_token = resp.iam_token
|
|
72
88
|
self._iam_token_timestamp = datetime.now()
|
|
73
89
|
|
|
74
|
-
def _fresh(self):
|
|
75
|
-
if self._cached_iam_token
|
|
90
|
+
def _fresh(self) -> bool:
|
|
91
|
+
if self._cached_iam_token == "":
|
|
92
|
+
return False
|
|
93
|
+
if self._iam_token_timestamp is None:
|
|
76
94
|
return False
|
|
77
95
|
diff = datetime.now() - self._iam_token_timestamp
|
|
78
96
|
return diff.total_seconds() < TIMEOUT_SECONDS
|
yandexcloud/_backoff.py
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import random
|
|
2
|
+
from typing import Callable
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
def backoff_linear_with_jitter(wait_time, jitter):
|
|
5
|
-
def func(attempt): # pylint: disable=unused-argument
|
|
5
|
+
def backoff_linear_with_jitter(wait_time: float, jitter: float) -> Callable[[int], float]:
|
|
6
|
+
def func(attempt: int) -> float: # pylint: disable=unused-argument
|
|
6
7
|
multiplier = jitter * (random.random() * 2 - 1)
|
|
7
8
|
return wait_time * (1 + multiplier)
|
|
8
9
|
|
|
9
10
|
return func
|
|
10
11
|
|
|
11
12
|
|
|
12
|
-
def backoff_exponential_with_jitter(base, cap):
|
|
13
|
-
def func(attempt):
|
|
13
|
+
def backoff_exponential_with_jitter(base: float, cap: float) -> Callable[[int], float]:
|
|
14
|
+
def func(attempt: int) -> float: # pylint: disable=unused-argument
|
|
14
15
|
try:
|
|
15
16
|
res = (2**attempt) * base * random.random()
|
|
16
17
|
except OverflowError:
|
|
@@ -24,8 +25,8 @@ def backoff_exponential_with_jitter(base, cap):
|
|
|
24
25
|
return func
|
|
25
26
|
|
|
26
27
|
|
|
27
|
-
def backoff_exponential_jittered_min_interval(base=0.05, cap=60):
|
|
28
|
-
def func(attempt):
|
|
28
|
+
def backoff_exponential_jittered_min_interval(base: float = 0.05, cap: float = 60) -> Callable[[int], float]:
|
|
29
|
+
def func(attempt: int) -> float: # pylint: disable=unused-argument
|
|
29
30
|
try:
|
|
30
31
|
base_interval = (2**attempt) * base
|
|
31
32
|
res = base_interval / 2 + base_interval * random.random()
|
|
@@ -40,5 +41,5 @@ def backoff_exponential_jittered_min_interval(base=0.05, cap=60):
|
|
|
40
41
|
return func
|
|
41
42
|
|
|
42
43
|
|
|
43
|
-
def default_backoff():
|
|
44
|
+
def default_backoff() -> Callable[[int], float]:
|
|
44
45
|
return backoff_exponential_with_jitter(0.05, 60)
|
yandexcloud/_channels.py
CHANGED
|
@@ -14,28 +14,40 @@ try:
|
|
|
14
14
|
except PackageNotFoundError:
|
|
15
15
|
VERSION = "0.0.0"
|
|
16
16
|
|
|
17
|
-
SDK_USER_AGENT = "yandex-cloud-python-sdk/{
|
|
17
|
+
SDK_USER_AGENT = f"yandex-cloud-python-sdk/{VERSION}"
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class Channels:
|
|
22
|
-
def __init__(
|
|
22
|
+
def __init__(
|
|
23
|
+
self,
|
|
24
|
+
client_user_agent: Optional[str] = None,
|
|
25
|
+
endpoints: Optional[Dict[str, str]] = None,
|
|
26
|
+
token: Optional[str] = None,
|
|
27
|
+
iam_token: Optional[str] = None,
|
|
28
|
+
endpoint: Optional[str] = None,
|
|
29
|
+
service_account_key: Optional[Dict[str, str]] = None,
|
|
30
|
+
root_certificates: Optional[bytes] = None,
|
|
31
|
+
private_key: Optional[bytes] = None,
|
|
32
|
+
certificate_chain: Optional[bytes] = None,
|
|
33
|
+
**_: str,
|
|
34
|
+
) -> None:
|
|
23
35
|
self._channel_creds = grpc.ssl_channel_credentials(
|
|
24
|
-
root_certificates=
|
|
25
|
-
private_key=
|
|
26
|
-
certificate_chain=
|
|
36
|
+
root_certificates=root_certificates,
|
|
37
|
+
private_key=private_key,
|
|
38
|
+
certificate_chain=certificate_chain,
|
|
27
39
|
)
|
|
28
|
-
self._endpoint =
|
|
40
|
+
self._endpoint = endpoint if endpoint is not None else YC_API_ENDPOINT
|
|
29
41
|
self._token_requester = get_auth_token_requester(
|
|
30
|
-
token=
|
|
31
|
-
service_account_key=
|
|
32
|
-
iam_token=
|
|
42
|
+
token=token,
|
|
43
|
+
service_account_key=service_account_key,
|
|
44
|
+
iam_token=iam_token,
|
|
33
45
|
endpoint=self._endpoint,
|
|
34
46
|
)
|
|
35
47
|
|
|
36
48
|
self._client_user_agent = client_user_agent
|
|
37
49
|
self._config_endpoints = endpoints if endpoints is not None else {}
|
|
38
|
-
self._endpoints = None
|
|
50
|
+
self._endpoints: Optional[Dict[str, str]] = None
|
|
39
51
|
self.channel_options = tuple(
|
|
40
52
|
("grpc.primary_user_agent", user_agent)
|
|
41
53
|
for user_agent in [self._client_user_agent, SDK_USER_AGENT]
|
|
@@ -49,7 +61,7 @@ class Channels:
|
|
|
49
61
|
logger.info("Insecure option is ON, no IAM endpoint used for verification")
|
|
50
62
|
return grpc.insecure_channel(endpoint, options=self.channel_options)
|
|
51
63
|
logger.info("Insecure option is OFF,IAM endpoint %s used for verification")
|
|
52
|
-
creds = self._get_creds(self.endpoints["iam"])
|
|
64
|
+
creds: grpc.ChannelCredentials = self._get_creds(self.endpoints["iam"])
|
|
53
65
|
return grpc.secure_channel(endpoint, creds, options=self.channel_options)
|
|
54
66
|
if service not in self._config_endpoints and insecure:
|
|
55
67
|
logger.warning(
|
|
@@ -74,7 +86,7 @@ class Channels:
|
|
|
74
86
|
return grpc.secure_channel(self.endpoints[service], creds, options=self.channel_options)
|
|
75
87
|
|
|
76
88
|
@property
|
|
77
|
-
def endpoints(self) ->
|
|
89
|
+
def endpoints(self) -> Dict[str, str]:
|
|
78
90
|
if self._endpoints is None:
|
|
79
91
|
self._endpoints = self._get_endpoints()
|
|
80
92
|
for id_, address in self._config_endpoints.items():
|
|
@@ -94,7 +106,9 @@ class Channels:
|
|
|
94
106
|
return {endpoint.id: endpoint.address for endpoint in resp.endpoints}
|
|
95
107
|
|
|
96
108
|
def _get_creds(self, iam_endpoint: str) -> grpc.ChannelCredentials:
|
|
97
|
-
plugin = _auth_plugin.Credentials(
|
|
109
|
+
plugin = _auth_plugin.Credentials(
|
|
110
|
+
self._token_requester, lambda: grpc.secure_channel(iam_endpoint, creds, options=self.channel_options)
|
|
111
|
+
)
|
|
98
112
|
call_creds = grpc.metadata_call_credentials(plugin)
|
|
99
113
|
creds = grpc.composite_channel_credentials(self._channel_creds, call_creds)
|
|
100
114
|
return creds
|