render 1.0.1__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.
- render/__init__.py +98 -0
- render/client/__init__.py +119 -0
- render/client/client.py +110 -0
- render/client/errors.py +39 -0
- render/client/sse.py +90 -0
- render/client/sse_sync.py +20 -0
- render/client/tests/__init__.py +0 -0
- render/client/tests/test_client.py +379 -0
- render/client/tests/test_method_parity.py +118 -0
- render/client/tests/test_render.py +52 -0
- render/client/tests/test_sse.py +67 -0
- render/client/tests/test_util.py +303 -0
- render/client/tests/test_util_sync.py +73 -0
- render/client/tests/test_workflows_sync.py +313 -0
- render/client/types.py +52 -0
- render/client/util.py +285 -0
- render/client/util_sync.py +83 -0
- render/client/workflows.py +363 -0
- render/client/workflows_sync.py +298 -0
- render/experimental/__init__.py +37 -0
- render/experimental/experimental.py +93 -0
- render/experimental/experimental_sync.py +78 -0
- render/experimental/key_value/__init__.py +33 -0
- render/experimental/key_value/api.py +243 -0
- render/experimental/key_value/compare.py +83 -0
- render/experimental/key_value/provider.py +285 -0
- render/experimental/key_value/tests/__init__.py +0 -0
- render/experimental/key_value/tests/test_api.py +371 -0
- render/experimental/key_value/tests/test_compare.py +136 -0
- render/experimental/key_value/tests/test_provider.py +1016 -0
- render/experimental/key_value/types.py +130 -0
- render/experimental/key_value/utils.py +11 -0
- render/experimental/object/__init__.py +38 -0
- render/experimental/object/api.py +250 -0
- render/experimental/object/api_sync.py +250 -0
- render/experimental/object/client.py +545 -0
- render/experimental/object/client_sync.py +547 -0
- render/experimental/object/e2e_helpers.py +78 -0
- render/experimental/object/tests/__init__.py +0 -0
- render/experimental/object/tests/test_client.py +228 -0
- render/experimental/object/tests/test_e2e.py +125 -0
- render/experimental/object/types.py +87 -0
- render/experimental/sandbox/__init__.py +31 -0
- render/experimental/sandbox/_tar.py +278 -0
- render/experimental/sandbox/api.py +518 -0
- render/experimental/sandbox/api_sync.py +514 -0
- render/experimental/sandbox/client.py +168 -0
- render/experimental/sandbox/client_sync.py +170 -0
- render/experimental/sandbox/errors.py +37 -0
- render/experimental/sandbox/files.py +378 -0
- render/experimental/sandbox/tests/__init__.py +0 -0
- render/experimental/sandbox/tests/test_client.py +802 -0
- render/experimental/sandbox/tests/test_download.py +728 -0
- render/experimental/sandbox/tests/test_e2e.py +252 -0
- render/experimental/sandbox/tests/test_tar.py +153 -0
- render/experimental/sandbox/tests/test_types.py +57 -0
- render/experimental/sandbox/types.py +46 -0
- render/public_api/__init__.py +8 -0
- render/public_api/api/__init__.py +1 -0
- render/public_api/api/artifact_sources/__init__.py +1 -0
- render/public_api/api/artifact_sources/add_or_update_artifact_source_secret_file.py +252 -0
- render/public_api/api/artifact_sources/create_artifact_source.py +243 -0
- render/public_api/api/artifact_sources/delete_artifact_source.py +188 -0
- render/public_api/api/artifact_sources/delete_artifact_source_env_var.py +223 -0
- render/public_api/api/artifact_sources/delete_artifact_source_secret_file.py +223 -0
- render/public_api/api/artifact_sources/get_artifact_source.py +185 -0
- render/public_api/api/artifact_sources/get_env_vars_for_artifact_source.py +241 -0
- render/public_api/api/artifact_sources/link_artifact_source_to_env_group.py +215 -0
- render/public_api/api/artifact_sources/list_artifact_sources.py +338 -0
- render/public_api/api/artifact_sources/list_artifacts_in_artifact_source.py +241 -0
- render/public_api/api/artifact_sources/list_secret_files_for_artifact_source.py +241 -0
- render/public_api/api/artifact_sources/retrieve_artifact_source_env_var.py +225 -0
- render/public_api/api/artifact_sources/retrieve_artifact_source_secret_file.py +225 -0
- render/public_api/api/artifact_sources/unlink_artifact_source_from_env_group.py +209 -0
- render/public_api/api/artifact_sources/update_artifact_source.py +244 -0
- render/public_api/api/artifact_sources/update_artifact_source_env_var.py +257 -0
- render/public_api/api/artifact_sources/update_env_vars_for_artifact_source.py +245 -0
- render/public_api/api/artifact_sources/update_secret_files_for_artifact_source.py +255 -0
- render/public_api/api/audit_logs/__init__.py +1 -0
- render/public_api/api/audit_logs/list_organization_audit_logs.py +303 -0
- render/public_api/api/audit_logs/list_owner_audit_logs.py +303 -0
- render/public_api/api/blueprints/__init__.py +1 -0
- render/public_api/api/blueprints/disconnect_blueprint.py +210 -0
- render/public_api/api/blueprints/list_blueprint_syncs.py +241 -0
- render/public_api/api/blueprints/list_blueprints.py +251 -0
- render/public_api/api/blueprints/retrieve_blueprint.py +200 -0
- render/public_api/api/blueprints/update_blueprint.py +222 -0
- render/public_api/api/blueprints/validate_blueprint.py +217 -0
- render/public_api/api/custom_domains/__init__.py +1 -0
- render/public_api/api/custom_domains/create_custom_domain.py +242 -0
- render/public_api/api/custom_domains/delete_custom_domain.py +216 -0
- render/public_api/api/custom_domains/list_custom_domains.py +346 -0
- render/public_api/api/custom_domains/refresh_custom_domain.py +216 -0
- render/public_api/api/custom_domains/retrieve_custom_domain.py +218 -0
- render/public_api/api/dedicated_i_ps/__init__.py +1 -0
- render/public_api/api/dedicated_i_ps/create_dedicated_ip.py +234 -0
- render/public_api/api/dedicated_i_ps/delete_dedicated_ip.py +198 -0
- render/public_api/api/dedicated_i_ps/list_dedicated_ips.py +223 -0
- render/public_api/api/dedicated_i_ps/retrieve_dedicated_ip.py +200 -0
- render/public_api/api/dedicated_i_ps/update_dedicated_ip.py +244 -0
- render/public_api/api/deploys/__init__.py +1 -0
- render/public_api/api/deploys/cancel_deploy.py +216 -0
- render/public_api/api/deploys/create_deploy.py +231 -0
- render/public_api/api/deploys/list_deploys.py +377 -0
- render/public_api/api/deploys/retrieve_deploy.py +213 -0
- render/public_api/api/deploys/rollback_deploy.py +241 -0
- render/public_api/api/disks/__init__.py +1 -0
- render/public_api/api/disks/add_disk.py +222 -0
- render/public_api/api/disks/delete_disk.py +210 -0
- render/public_api/api/disks/list_disks.py +381 -0
- render/public_api/api/disks/list_snapshots.py +214 -0
- render/public_api/api/disks/restore_snapshot.py +255 -0
- render/public_api/api/disks/retrieve_disk.py +200 -0
- render/public_api/api/disks/update_disk.py +243 -0
- render/public_api/api/environment_groups/__init__.py +1 -0
- render/public_api/api/environment_groups/create_env_group.py +199 -0
- render/public_api/api/environment_groups/delete_env_group.py +192 -0
- render/public_api/api/environment_groups/delete_env_group_env_var.py +201 -0
- render/public_api/api/environment_groups/delete_env_group_secret_file.py +201 -0
- render/public_api/api/environment_groups/link_service_to_env_group.py +211 -0
- render/public_api/api/environment_groups/list_env_groups.py +352 -0
- render/public_api/api/environment_groups/retrieve_env_group.py +190 -0
- render/public_api/api/environment_groups/retrieve_env_group_env_var.py +203 -0
- render/public_api/api/environment_groups/retrieve_env_group_secret_file.py +203 -0
- render/public_api/api/environment_groups/unlink_service_from_env_group.py +209 -0
- render/public_api/api/environment_groups/update_env_group.py +212 -0
- render/public_api/api/environment_groups/update_env_group_env_var.py +230 -0
- render/public_api/api/environment_groups/update_env_group_secret_file.py +225 -0
- render/public_api/api/events/__init__.py +1 -0
- render/public_api/api/events/retrieve_event.py +205 -0
- render/public_api/api/key_value/__init__.py +1 -0
- render/public_api/api/key_value/create_key_value.py +199 -0
- render/public_api/api/key_value/delete_key_value.py +188 -0
- render/public_api/api/key_value/list_key_value.py +380 -0
- render/public_api/api/key_value/resume_key_value.py +203 -0
- render/public_api/api/key_value/retrieve_key_value.py +190 -0
- render/public_api/api/key_value/retrieve_key_value_connection_info.py +194 -0
- render/public_api/api/key_value/suspend_key_value.py +203 -0
- render/public_api/api/key_value/update_key_value.py +221 -0
- render/public_api/api/logs/__init__.py +1 -0
- render/public_api/api/logs/delete_owner_log_stream.py +188 -0
- render/public_api/api/logs/delete_resource_log_stream.py +192 -0
- render/public_api/api/logs/get_owner_log_stream.py +205 -0
- render/public_api/api/logs/get_resource_log_stream.py +209 -0
- render/public_api/api/logs/list_logs.py +535 -0
- render/public_api/api/logs/list_logs_values.py +527 -0
- render/public_api/api/logs/list_resource_log_streams.py +317 -0
- render/public_api/api/logs/subscribe_logs.py +527 -0
- render/public_api/api/logs/update_owner_log_stream.py +231 -0
- render/public_api/api/logs/update_resource_log_stream.py +231 -0
- render/public_api/api/maintenance/__init__.py +1 -0
- render/public_api/api/maintenance/list_maintenance.py +249 -0
- render/public_api/api/maintenance/retrieve_maintenance.py +190 -0
- render/public_api/api/maintenance/trigger_maintenance.py +212 -0
- render/public_api/api/maintenance/update_maintenance.py +222 -0
- render/public_api/api/metrics/__init__.py +1 -0
- render/public_api/api/metrics/delete_owner_metrics_stream.py +172 -0
- render/public_api/api/metrics/get_active_connections.py +237 -0
- render/public_api/api/metrics/get_bandwidth.py +237 -0
- render/public_api/api/metrics/get_bandwidth_sources.py +250 -0
- render/public_api/api/metrics/get_cpu.py +287 -0
- render/public_api/api/metrics/get_cpu_limit.py +267 -0
- render/public_api/api/metrics/get_cpu_target.py +267 -0
- render/public_api/api/metrics/get_disk_capacity.py +252 -0
- render/public_api/api/metrics/get_disk_usage.py +252 -0
- render/public_api/api/metrics/get_http_latency.py +297 -0
- render/public_api/api/metrics/get_http_requests.py +302 -0
- render/public_api/api/metrics/get_instance_count.py +252 -0
- render/public_api/api/metrics/get_memory.py +267 -0
- render/public_api/api/metrics/get_memory_limit.py +267 -0
- render/public_api/api/metrics/get_memory_target.py +267 -0
- render/public_api/api/metrics/get_owner_metrics_stream.py +174 -0
- render/public_api/api/metrics/get_replication_lag.py +237 -0
- render/public_api/api/metrics/get_task_runs_completed.py +281 -0
- render/public_api/api/metrics/get_task_runs_queued.py +237 -0
- render/public_api/api/metrics/list_application_filter_values.py +254 -0
- render/public_api/api/metrics/list_http_filter_values.py +282 -0
- render/public_api/api/metrics/list_path_filter_values.py +289 -0
- render/public_api/api/metrics/upsert_owner_metrics_stream.py +192 -0
- render/public_api/api/notification_settings/__init__.py +1 -0
- render/public_api/api/notification_settings/list_notification_overrides.py +255 -0
- render/public_api/api/notification_settings/patch_owner_notification_settings.py +207 -0
- render/public_api/api/notification_settings/patch_service_notification_overrides.py +207 -0
- render/public_api/api/notification_settings/retrieve_owner_notification_settings.py +193 -0
- render/public_api/api/notification_settings/retrieve_service_notification_overrides.py +193 -0
- render/public_api/api/object_storage/__init__.py +1 -0
- render/public_api/api/object_storage/delete_object.py +215 -0
- render/public_api/api/object_storage/get_object.py +221 -0
- render/public_api/api/object_storage/list_objects.py +240 -0
- render/public_api/api/object_storage/put_object.py +248 -0
- render/public_api/api/one_off_jobs/__init__.py +1 -0
- render/public_api/api/one_off_jobs/cancel_job.py +203 -0
- render/public_api/api/one_off_jobs/list_job.py +367 -0
- render/public_api/api/one_off_jobs/post_job.py +216 -0
- render/public_api/api/one_off_jobs/retrieve_job.py +203 -0
- render/public_api/api/postgres/__init__.py +1 -0
- render/public_api/api/postgres/create_postgres.py +199 -0
- render/public_api/api/postgres/create_postgres_export.py +207 -0
- render/public_api/api/postgres/create_postgres_user.py +229 -0
- render/public_api/api/postgres/delete_postgres.py +192 -0
- render/public_api/api/postgres/delete_postgres_user.py +201 -0
- render/public_api/api/postgres/failover_postgres.py +207 -0
- render/public_api/api/postgres/list_available_postgres_parameter_overrides.py +190 -0
- render/public_api/api/postgres/list_postgres.py +418 -0
- render/public_api/api/postgres/list_postgres_export.py +199 -0
- render/public_api/api/postgres/list_postgres_parameter_overrides.py +190 -0
- render/public_api/api/postgres/list_postgres_processes.py +190 -0
- render/public_api/api/postgres/list_postgres_sizes.py +190 -0
- render/public_api/api/postgres/list_postgres_table_scans.py +190 -0
- render/public_api/api/postgres/list_postgres_top_queries.py +194 -0
- render/public_api/api/postgres/list_postgres_users.py +195 -0
- render/public_api/api/postgres/promote_postgres.py +203 -0
- render/public_api/api/postgres/recover_postgres.py +231 -0
- render/public_api/api/postgres/restart_postgres.py +203 -0
- render/public_api/api/postgres/resume_postgres.py +203 -0
- render/public_api/api/postgres/retrieve_postgres.py +190 -0
- render/public_api/api/postgres/retrieve_postgres_connection_info.py +194 -0
- render/public_api/api/postgres/retrieve_postgres_recovery_info.py +194 -0
- render/public_api/api/postgres/setup_postgres_replication.py +231 -0
- render/public_api/api/postgres/suspend_postgres.py +203 -0
- render/public_api/api/postgres/update_postgres.py +217 -0
- render/public_api/api/postgres/update_postgres_parameter_overrides.py +217 -0
- render/public_api/api/projects_environments/__init__.py +1 -0
- render/public_api/api/projects_environments/add_resources_to_environment.py +212 -0
- render/public_api/api/projects_environments/create_environment.py +199 -0
- render/public_api/api/projects_environments/create_project.py +199 -0
- render/public_api/api/projects_environments/delete_environment.py +216 -0
- render/public_api/api/projects_environments/delete_project.py +216 -0
- render/public_api/api/projects_environments/list_environments.py +369 -0
- render/public_api/api/projects_environments/list_projects.py +329 -0
- render/public_api/api/projects_environments/remove_resources_from_environment.py +211 -0
- render/public_api/api/projects_environments/retrieve_environment.py +190 -0
- render/public_api/api/projects_environments/retrieve_project.py +190 -0
- render/public_api/api/projects_environments/update_environment.py +212 -0
- render/public_api/api/projects_environments/update_project.py +224 -0
- render/public_api/api/redis_deprecated/__init__.py +1 -0
- render/public_api/api/redis_deprecated/create_redis.py +199 -0
- render/public_api/api/redis_deprecated/delete_redis.py +188 -0
- render/public_api/api/redis_deprecated/list_redis.py +384 -0
- render/public_api/api/redis_deprecated/resume_redis.py +203 -0
- render/public_api/api/redis_deprecated/retrieve_redis.py +190 -0
- render/public_api/api/redis_deprecated/retrieve_redis_connection_info.py +194 -0
- render/public_api/api/redis_deprecated/suspend_redis.py +203 -0
- render/public_api/api/redis_deprecated/update_redis.py +217 -0
- render/public_api/api/registry_credentials/__init__.py +1 -0
- render/public_api/api/registry_credentials/create_registry_credential.py +209 -0
- render/public_api/api/registry_credentials/delete_registry_credential.py +198 -0
- render/public_api/api/registry_credentials/list_registry_credentials.py +370 -0
- render/public_api/api/registry_credentials/retrieve_registry_credential.py +200 -0
- render/public_api/api/registry_credentials/update_registry_credential.py +241 -0
- render/public_api/api/sandboxes/__init__.py +1 -0
- render/public_api/api/sandboxes/connect_sandbox_files.py +281 -0
- render/public_api/api/sandboxes/connect_sandbox_run.py +271 -0
- render/public_api/api/sandboxes/create_sandbox.py +199 -0
- render/public_api/api/sandboxes/list_sandbox_files.py +244 -0
- render/public_api/api/sandboxes/list_sandbox_groups.py +216 -0
- render/public_api/api/sandboxes/list_sandboxes.py +269 -0
- render/public_api/api/sandboxes/retrieve_sandbox.py +211 -0
- render/public_api/api/sandboxes/retrieve_sandbox_execution.py +224 -0
- render/public_api/api/sandboxes/stream_sandbox_logs.py +274 -0
- render/public_api/api/sandboxes/terminate_sandbox.py +217 -0
- render/public_api/api/sandboxes/update_sandbox_exec.py +258 -0
- render/public_api/api/services/__init__.py +1 -0
- render/public_api/api/services/add_or_update_secret_file.py +252 -0
- render/public_api/api/services/autoscale_service.py +230 -0
- render/public_api/api/services/create_ephemeral_shell.py +217 -0
- render/public_api/api/services/create_service.py +204 -0
- render/public_api/api/services/delete_autoscaling_config.py +198 -0
- render/public_api/api/services/delete_env_var.py +223 -0
- render/public_api/api/services/delete_secret_file.py +223 -0
- render/public_api/api/services/delete_service.py +198 -0
- render/public_api/api/services/get_env_vars_for_service.py +241 -0
- render/public_api/api/services/list_events.py +288 -0
- render/public_api/api/services/list_instances.py +190 -0
- render/public_api/api/services/list_secret_files_for_service.py +241 -0
- render/public_api/api/services/list_services.py +439 -0
- render/public_api/api/services/preview_service.py +227 -0
- render/public_api/api/services/purge_cache.py +203 -0
- render/public_api/api/services/restart_service.py +211 -0
- render/public_api/api/services/resume_service.py +203 -0
- render/public_api/api/services/retrieve_env_var.py +225 -0
- render/public_api/api/services/retrieve_secret_file.py +225 -0
- render/public_api/api/services/retrieve_service.py +190 -0
- render/public_api/api/services/retrieve_service_outbound_ips.py +207 -0
- render/public_api/api/services/scale_service.py +237 -0
- render/public_api/api/services/suspend_service.py +203 -0
- render/public_api/api/services/update_env_var.py +257 -0
- render/public_api/api/services/update_env_vars_for_service.py +241 -0
- render/public_api/api/services/update_secret_files_for_service.py +255 -0
- render/public_api/api/services/update_service.py +227 -0
- render/public_api/api/services_cron_jobs/__init__.py +1 -0
- render/public_api/api/services_cron_jobs/cancel_cron_job_run.py +183 -0
- render/public_api/api/services_cron_jobs/run_cron_job.py +185 -0
- render/public_api/api/services_headers/__init__.py +1 -0
- render/public_api/api/services_headers/add_headers.py +222 -0
- render/public_api/api/services_headers/delete_header.py +211 -0
- render/public_api/api/services_headers/list_headers.py +302 -0
- render/public_api/api/services_headers/update_headers.py +243 -0
- render/public_api/api/services_routes/__init__.py +1 -0
- render/public_api/api/services_routes/add_route.py +227 -0
- render/public_api/api/services_routes/delete_route.py +211 -0
- render/public_api/api/services_routes/list_routes.py +306 -0
- render/public_api/api/services_routes/patch_route.py +259 -0
- render/public_api/api/services_routes/put_routes.py +259 -0
- render/public_api/api/users/__init__.py +1 -0
- render/public_api/api/users/get_user.py +161 -0
- render/public_api/api/webhooks/__init__.py +1 -0
- render/public_api/api/webhooks/create_webhook.py +199 -0
- render/public_api/api/webhooks/delete_webhook.py +183 -0
- render/public_api/api/webhooks/list_webhook_events.py +268 -0
- render/public_api/api/webhooks/list_webhooks.py +237 -0
- render/public_api/api/webhooks/retrieve_webhook.py +185 -0
- render/public_api/api/webhooks/update_webhook.py +212 -0
- render/public_api/api/workflow_tasks_beta/__init__.py +1 -0
- render/public_api/api/workflow_tasks_beta/cancel_task_run.py +188 -0
- render/public_api/api/workflow_tasks_beta/create_task.py +204 -0
- render/public_api/api/workflow_tasks_beta/get_task.py +190 -0
- render/public_api/api/workflow_tasks_beta/get_task_run.py +190 -0
- render/public_api/api/workflow_tasks_beta/list_task_runs.py +317 -0
- render/public_api/api/workflow_tasks_beta/list_tasks.py +298 -0
- render/public_api/api/workflow_tasks_beta/stream_task_runs_events.py +230 -0
- render/public_api/api/workflows_beta/__init__.py +1 -0
- render/public_api/api/workflows_beta/create_workflow.py +199 -0
- render/public_api/api/workflows_beta/create_workflow_version.py +197 -0
- render/public_api/api/workflows_beta/delete_workflow.py +188 -0
- render/public_api/api/workflows_beta/get_workflow.py +190 -0
- render/public_api/api/workflows_beta/get_workflow_version.py +190 -0
- render/public_api/api/workflows_beta/list_workflow_versions.py +275 -0
- render/public_api/api/workflows_beta/list_workflows.py +298 -0
- render/public_api/api/workflows_beta/update_workflow.py +212 -0
- render/public_api/api/workspaces/__init__.py +1 -0
- render/public_api/api/workspaces/list_owners.py +255 -0
- render/public_api/api/workspaces/remove_workspace_member.py +206 -0
- render/public_api/api/workspaces/retrieve_owner.py +207 -0
- render/public_api/api/workspaces/retrieve_owner_members.py +200 -0
- render/public_api/api/workspaces/update_workspace_member.py +235 -0
- render/public_api/client.py +268 -0
- render/public_api/errors.py +16 -0
- render/public_api/models/__init__.py +861 -0
- render/public_api/models/add_headers_response_201.py +72 -0
- render/public_api/models/add_or_update_artifact_source_secret_file_body.py +59 -0
- render/public_api/models/add_or_update_secret_file_body.py +59 -0
- render/public_api/models/artifact.py +145 -0
- render/public_api/models/artifact_fetch_failed.py +67 -0
- render/public_api/models/artifact_source.py +162 -0
- render/public_api/models/artifact_source_changed.py +70 -0
- render/public_api/models/artifact_source_git.py +167 -0
- render/public_api/models/artifact_source_git_region.py +12 -0
- render/public_api/models/artifact_source_git_runtime.py +14 -0
- render/public_api/models/artifact_source_image.py +78 -0
- render/public_api/models/artifact_source_patch_git.py +175 -0
- render/public_api/models/artifact_source_patch_git_region.py +12 -0
- render/public_api/models/artifact_source_patch_git_runtime.py +14 -0
- render/public_api/models/artifact_source_patch_image.py +71 -0
- render/public_api/models/artifact_source_patch_input.py +101 -0
- render/public_api/models/artifact_source_post_input.py +213 -0
- render/public_api/models/artifact_source_service_link.py +67 -0
- render/public_api/models/artifact_source_with_cursor.py +73 -0
- render/public_api/models/audit_log.py +113 -0
- render/public_api/models/audit_log_actor.py +80 -0
- render/public_api/models/audit_log_actor_type.py +10 -0
- render/public_api/models/audit_log_event.py +87 -0
- render/public_api/models/audit_log_metadata.py +49 -0
- render/public_api/models/audit_log_status.py +9 -0
- render/public_api/models/audit_log_with_cursor.py +73 -0
- render/public_api/models/auto_deploy.py +9 -0
- render/public_api/models/auto_deploy_disabled.py +79 -0
- render/public_api/models/auto_deploy_enabled.py +68 -0
- render/public_api/models/auto_deploy_trigger.py +10 -0
- render/public_api/models/autoscaling_config.py +89 -0
- render/public_api/models/autoscaling_config_changed.py +83 -0
- render/public_api/models/autoscaling_criteria.py +73 -0
- render/public_api/models/autoscaling_criteria_percentage.py +68 -0
- render/public_api/models/autoscaling_ended.py +67 -0
- render/public_api/models/autoscaling_started.py +105 -0
- render/public_api/models/background_worker_details.py +256 -0
- render/public_api/models/background_worker_details_patch.py +184 -0
- render/public_api/models/background_worker_details_post.py +266 -0
- render/public_api/models/blueprint.py +128 -0
- render/public_api/models/blueprint_detail.py +150 -0
- render/public_api/models/blueprint_patch.py +77 -0
- render/public_api/models/blueprint_with_cursor.py +74 -0
- render/public_api/models/branch_deleted.py +67 -0
- render/public_api/models/build.py +148 -0
- render/public_api/models/build_config.py +96 -0
- render/public_api/models/build_deploy_end_reason.py +122 -0
- render/public_api/models/build_deploy_end_reason_id.py +59 -0
- render/public_api/models/build_deploy_trigger.py +150 -0
- render/public_api/models/build_ended.py +91 -0
- render/public_api/models/build_filter.py +67 -0
- render/public_api/models/build_plan.py +9 -0
- render/public_api/models/build_runtime.py +14 -0
- render/public_api/models/build_started.py +73 -0
- render/public_api/models/build_status.py +13 -0
- render/public_api/models/cache.py +61 -0
- render/public_api/models/cache_profile.py +10 -0
- render/public_api/models/cidr_block_and_description.py +67 -0
- render/public_api/models/commit_ignored.py +67 -0
- render/public_api/models/commit_ref.py +59 -0
- render/public_api/models/connect_sandbox_files_operation.py +9 -0
- render/public_api/models/connect_sandbox_run_operation.py +9 -0
- render/public_api/models/create_custom_domain_body.py +59 -0
- render/public_api/models/create_deploy_body.py +130 -0
- render/public_api/models/create_deploy_body_clear_cache.py +9 -0
- render/public_api/models/create_ephemeral_shell_body.py +69 -0
- render/public_api/models/create_ephemeral_shell_response_201.py +59 -0
- render/public_api/models/create_registry_credential_body.py +93 -0
- render/public_api/models/create_version.py +70 -0
- render/public_api/models/credential_create_input.py +59 -0
- render/public_api/models/cron_job_details.py +163 -0
- render/public_api/models/cron_job_details_patch.py +138 -0
- render/public_api/models/cron_job_details_post.py +172 -0
- render/public_api/models/cron_job_run.py +123 -0
- render/public_api/models/cron_job_run_ended.py +110 -0
- render/public_api/models/cron_job_run_started.py +59 -0
- render/public_api/models/cron_job_run_status.py +11 -0
- render/public_api/models/custom_domain.py +135 -0
- render/public_api/models/custom_domain_domain_type.py +9 -0
- render/public_api/models/custom_domain_server.py +68 -0
- render/public_api/models/custom_domain_verification_status.py +9 -0
- render/public_api/models/custom_domain_with_cursor.py +73 -0
- render/public_api/models/database_role.py +9 -0
- render/public_api/models/database_status.py +18 -0
- render/public_api/models/dedicated_ip.py +146 -0
- render/public_api/models/dedicated_ip_status.py +14 -0
- render/public_api/models/dedicated_ippatch.py +81 -0
- render/public_api/models/dedicated_ippost.py +100 -0
- render/public_api/models/deploy.py +211 -0
- render/public_api/models/deploy_commit.py +86 -0
- render/public_api/models/deploy_ended.py +102 -0
- render/public_api/models/deploy_image.py +78 -0
- render/public_api/models/deploy_mode.py +9 -0
- render/public_api/models/deploy_started.py +85 -0
- render/public_api/models/deploy_status.py +18 -0
- render/public_api/models/deploy_trigger.py +17 -0
- render/public_api/models/deploy_with_cursor.py +81 -0
- render/public_api/models/disk.py +83 -0
- render/public_api/models/disk_created.py +67 -0
- render/public_api/models/disk_deleted.py +59 -0
- render/public_api/models/disk_details.py +112 -0
- render/public_api/models/disk_patch.py +77 -0
- render/public_api/models/disk_post.py +83 -0
- render/public_api/models/disk_snapshot.py +88 -0
- render/public_api/models/disk_updated.py +75 -0
- render/public_api/models/disk_with_cursor.py +73 -0
- render/public_api/models/docker_details.py +108 -0
- render/public_api/models/docker_details_patch.py +86 -0
- render/public_api/models/docker_details_post.py +86 -0
- render/public_api/models/edge_cache_disabled.py +65 -0
- render/public_api/models/edge_cache_enabled.py +65 -0
- render/public_api/models/edge_cache_purged.py +65 -0
- render/public_api/models/edge_cache_trigger.py +91 -0
- render/public_api/models/env_group.py +162 -0
- render/public_api/models/env_group_link.py +77 -0
- render/public_api/models/env_group_meta.py +126 -0
- render/public_api/models/env_group_patch_input.py +59 -0
- render/public_api/models/env_group_post_input.py +161 -0
- render/public_api/models/env_var.py +67 -0
- render/public_api/models/env_var_generate_value.py +59 -0
- render/public_api/models/env_var_key_generate_value.py +68 -0
- render/public_api/models/env_var_key_value.py +67 -0
- render/public_api/models/env_var_value.py +59 -0
- render/public_api/models/env_var_with_cursor.py +73 -0
- render/public_api/models/environment.py +152 -0
- render/public_api/models/environment_patch_input.py +112 -0
- render/public_api/models/environment_post_input.py +122 -0
- render/public_api/models/environment_resources_post_input.py +59 -0
- render/public_api/models/environment_with_cursor.py +74 -0
- render/public_api/models/error.py +79 -0
- render/public_api/models/error_code.py +10 -0
- render/public_api/models/event.py +1122 -0
- render/public_api/models/event_status.py +10 -0
- render/public_api/models/event_type.py +74 -0
- render/public_api/models/execution.py +144 -0
- render/public_api/models/execution_operation.py +11 -0
- render/public_api/models/execution_type.py +9 -0
- render/public_api/models/failure_reason.py +138 -0
- render/public_api/models/filter_application_values_collection_item.py +78 -0
- render/public_api/models/filter_application_values_collection_item_filter.py +8 -0
- render/public_api/models/filter_http_values_collection_item.py +78 -0
- render/public_api/models/filter_http_values_collection_item_filter.py +9 -0
- render/public_api/models/get_bandwidth_sources_response_200.py +75 -0
- render/public_api/models/get_bandwidth_sources_response_200_data_item.py +101 -0
- render/public_api/models/get_bandwidth_sources_response_200_data_item_labels.py +78 -0
- render/public_api/models/get_bandwidth_sources_response_200_data_item_labels_traffic_source.py +12 -0
- render/public_api/models/get_bandwidth_sources_response_200_data_item_values_item.py +68 -0
- render/public_api/models/get_cpu_aggregation_method.py +10 -0
- render/public_api/models/get_http_requests_aggregate_by.py +9 -0
- render/public_api/models/get_object_output.py +71 -0
- render/public_api/models/get_task_runs_completed_aggregate_by.py +8 -0
- render/public_api/models/get_task_runs_completed_state.py +9 -0
- render/public_api/models/header.py +83 -0
- render/public_api/models/header_input.py +76 -0
- render/public_api/models/header_with_cursor.py +73 -0
- render/public_api/models/image.py +80 -0
- render/public_api/models/image_pull_failed.py +67 -0
- render/public_api/models/initial_deploy_hook_ended.py +59 -0
- render/public_api/models/initial_deploy_hook_started.py +59 -0
- render/public_api/models/instance_count_changed.py +67 -0
- render/public_api/models/instance_type_changed.py +67 -0
- render/public_api/models/internal_routing.py +8 -0
- render/public_api/models/job.py +144 -0
- render/public_api/models/job_run_ended.py +92 -0
- render/public_api/models/job_status.py +12 -0
- render/public_api/models/job_with_cursor.py +73 -0
- render/public_api/models/key_value.py +182 -0
- render/public_api/models/key_value_available.py +44 -0
- render/public_api/models/key_value_config_restart.py +67 -0
- render/public_api/models/key_value_connection_info.py +76 -0
- render/public_api/models/key_value_detail.py +192 -0
- render/public_api/models/key_value_options.py +79 -0
- render/public_api/models/key_value_patch_input.py +138 -0
- render/public_api/models/key_value_plan.py +13 -0
- render/public_api/models/key_value_post_input.py +166 -0
- render/public_api/models/key_value_unhealthy.py +44 -0
- render/public_api/models/key_value_with_cursor.py +73 -0
- render/public_api/models/label.py +68 -0
- render/public_api/models/list_custom_domains_domain_type.py +9 -0
- render/public_api/models/list_custom_domains_verification_status.py +9 -0
- render/public_api/models/list_logs_response_200.py +102 -0
- render/public_api/models/list_logs_values_label.py +13 -0
- render/public_api/models/list_objects_response.py +92 -0
- render/public_api/models/list_postgres_suspended_item.py +9 -0
- render/public_api/models/list_postgres_users_response_200_item.py +86 -0
- render/public_api/models/list_routes_type_item.py +9 -0
- render/public_api/models/list_services_suspended_item.py +9 -0
- render/public_api/models/log.py +100 -0
- render/public_api/models/log_direction.py +9 -0
- render/public_api/models/log_label.py +70 -0
- render/public_api/models/log_label_name.py +22 -0
- render/public_api/models/log_stream_owner_update.py +80 -0
- render/public_api/models/log_stream_preview_setting.py +9 -0
- render/public_api/models/log_stream_resource_update.py +80 -0
- render/public_api/models/log_stream_setting.py +9 -0
- render/public_api/models/maintenance_ended.py +44 -0
- render/public_api/models/maintenance_mode.py +68 -0
- render/public_api/models/maintenance_mode_enabled.py +59 -0
- render/public_api/models/maintenance_mode_uri_updated.py +67 -0
- render/public_api/models/maintenance_run.py +105 -0
- render/public_api/models/maintenance_run_patch.py +69 -0
- render/public_api/models/maintenance_run_with_resource.py +114 -0
- render/public_api/models/maintenance_started.py +65 -0
- render/public_api/models/maintenance_state.py +13 -0
- render/public_api/models/maintenance_trigger.py +91 -0
- render/public_api/models/maxmemory_policy.py +15 -0
- render/public_api/models/metrics_stream.py +77 -0
- render/public_api/models/metrics_stream_input.py +86 -0
- render/public_api/models/native_environment_details.py +78 -0
- render/public_api/models/native_environment_details_patch.py +68 -0
- render/public_api/models/native_environment_details_post.py +68 -0
- render/public_api/models/notification_override.py +78 -0
- render/public_api/models/notification_override_with_cursor.py +73 -0
- render/public_api/models/notification_service_override.py +78 -0
- render/public_api/models/notification_service_override_patch.py +84 -0
- render/public_api/models/notification_setting.py +93 -0
- render/public_api/models/notification_setting_patch.py +85 -0
- render/public_api/models/notify_override.py +11 -0
- render/public_api/models/notify_preview_override.py +10 -0
- render/public_api/models/notify_setting.py +10 -0
- render/public_api/models/notify_setting_v2.py +10 -0
- render/public_api/models/object_metadata.py +77 -0
- render/public_api/models/object_with_cursor.py +73 -0
- render/public_api/models/oom_killed.py +59 -0
- render/public_api/models/otel_provider_type.py +16 -0
- render/public_api/models/outbound_ips.py +81 -0
- render/public_api/models/outbound_ips_type.py +9 -0
- render/public_api/models/owner.py +121 -0
- render/public_api/models/owner_log_stream_setting.py +86 -0
- render/public_api/models/owner_type.py +9 -0
- render/public_api/models/owner_with_cursor.py +81 -0
- render/public_api/models/paid_plan.py +13 -0
- render/public_api/models/patch_route_response_200.py +72 -0
- render/public_api/models/persistence_mode.py +10 -0
- render/public_api/models/pipeline_minutes_exhausted.py +73 -0
- render/public_api/models/plan.py +22 -0
- render/public_api/models/post_job_body.py +70 -0
- render/public_api/models/postgres.py +300 -0
- render/public_api/models/postgres_available.py +44 -0
- render/public_api/models/postgres_available_parameter_override.py +106 -0
- render/public_api/models/postgres_available_parameter_overrides_result.py +75 -0
- render/public_api/models/postgres_backup_completed.py +44 -0
- render/public_api/models/postgres_backup_failed.py +44 -0
- render/public_api/models/postgres_backup_started.py +44 -0
- render/public_api/models/postgres_cluster_leader_changed.py +59 -0
- render/public_api/models/postgres_connection_info.py +103 -0
- render/public_api/models/postgres_connection_pool_changed.py +91 -0
- render/public_api/models/postgres_connection_pool_enabled_changed.py +83 -0
- render/public_api/models/postgres_created.py +72 -0
- render/public_api/models/postgres_detail.py +336 -0
- render/public_api/models/postgres_detail_suspended.py +9 -0
- render/public_api/models/postgres_disk_size_changed.py +91 -0
- render/public_api/models/postgres_export.py +80 -0
- render/public_api/models/postgres_ha_status_changed.py +67 -0
- render/public_api/models/postgres_parameter_overrides.py +44 -0
- render/public_api/models/postgres_parameter_overrides_wrapper.py +65 -0
- render/public_api/models/postgres_patch_input.py +199 -0
- render/public_api/models/postgres_pitr_checkpoint_completed.py +44 -0
- render/public_api/models/postgres_pitr_checkpoint_failed.py +44 -0
- render/public_api/models/postgres_pitr_checkpoint_started.py +44 -0
- render/public_api/models/postgres_plans.py +35 -0
- render/public_api/models/postgres_post_input.py +254 -0
- render/public_api/models/postgres_process.py +185 -0
- render/public_api/models/postgres_processes_result.py +73 -0
- render/public_api/models/postgres_put_parameter_overrides_result.py +82 -0
- render/public_api/models/postgres_query_statistic.py +222 -0
- render/public_api/models/postgres_read_replica_stale.py +44 -0
- render/public_api/models/postgres_read_replicas_changed.py +67 -0
- render/public_api/models/postgres_replication_setup_input.py +96 -0
- render/public_api/models/postgres_restarted.py +72 -0
- render/public_api/models/postgres_size.py +96 -0
- render/public_api/models/postgres_sizes_result.py +73 -0
- render/public_api/models/postgres_suspended.py +9 -0
- render/public_api/models/postgres_table_scan.py +87 -0
- render/public_api/models/postgres_table_scans_result.py +73 -0
- render/public_api/models/postgres_top_queries_result.py +73 -0
- render/public_api/models/postgres_unavailable.py +44 -0
- render/public_api/models/postgres_upgrade_failed.py +67 -0
- render/public_api/models/postgres_upgrade_started.py +91 -0
- render/public_api/models/postgres_upgrade_succeeded.py +67 -0
- render/public_api/models/postgres_version.py +15 -0
- render/public_api/models/postgres_with_cursor.py +73 -0
- render/public_api/models/pre_deploy_ended.py +99 -0
- render/public_api/models/pre_deploy_started.py +67 -0
- render/public_api/models/preview_input.py +94 -0
- render/public_api/models/previews.py +67 -0
- render/public_api/models/previews_generation.py +10 -0
- render/public_api/models/private_service_details.py +282 -0
- render/public_api/models/private_service_details_patch.py +184 -0
- render/public_api/models/private_service_details_post.py +266 -0
- render/public_api/models/project.py +108 -0
- render/public_api/models/project_patch_input.py +60 -0
- render/public_api/models/project_post_environment_input.py +114 -0
- render/public_api/models/project_post_input.py +89 -0
- render/public_api/models/project_with_cursor.py +73 -0
- render/public_api/models/protected_status.py +9 -0
- render/public_api/models/pull_request_previews_enabled.py +9 -0
- render/public_api/models/put_object_input.py +59 -0
- render/public_api/models/put_object_output.py +79 -0
- render/public_api/models/read_replica.py +91 -0
- render/public_api/models/read_replica_input.py +83 -0
- render/public_api/models/recovery_info.py +80 -0
- render/public_api/models/recovery_info_recovery_status.py +10 -0
- render/public_api/models/recovery_input.py +114 -0
- render/public_api/models/redis.py +182 -0
- render/public_api/models/redis_connection_info.py +76 -0
- render/public_api/models/redis_detail.py +192 -0
- render/public_api/models/redis_options.py +79 -0
- render/public_api/models/redis_patch_input.py +138 -0
- render/public_api/models/redis_plan.py +13 -0
- render/public_api/models/redis_post_input.py +166 -0
- render/public_api/models/redis_with_cursor.py +73 -0
- render/public_api/models/region.py +12 -0
- render/public_api/models/registry_credential.py +95 -0
- render/public_api/models/registry_credential_registry.py +12 -0
- render/public_api/models/registry_credential_summary.py +67 -0
- render/public_api/models/render_subdomain_policy.py +9 -0
- render/public_api/models/resource.py +67 -0
- render/public_api/models/resource_log_stream_setting.py +87 -0
- render/public_api/models/resource_ref.py +77 -0
- render/public_api/models/resource_ref_type.py +17 -0
- render/public_api/models/rollback_deploy_body.py +59 -0
- render/public_api/models/route.py +93 -0
- render/public_api/models/route_patch.py +60 -0
- render/public_api/models/route_post.py +88 -0
- render/public_api/models/route_put.py +77 -0
- render/public_api/models/route_type.py +9 -0
- render/public_api/models/route_with_cursor.py +73 -0
- render/public_api/models/run_task.py +96 -0
- render/public_api/models/runtime.py +12 -0
- render/public_api/models/sandbox.py +149 -0
- render/public_api/models/sandbox_connect_request.py +62 -0
- render/public_api/models/sandbox_connect_response.py +98 -0
- render/public_api/models/sandbox_directory_listing.py +82 -0
- render/public_api/models/sandbox_exec_update_request.py +60 -0
- render/public_api/models/sandbox_exec_update_response.py +130 -0
- render/public_api/models/sandbox_file_entry.py +98 -0
- render/public_api/models/sandbox_file_entry_type.py +10 -0
- render/public_api/models/sandbox_group.py +141 -0
- render/public_api/models/sandbox_group_with_cursor.py +74 -0
- render/public_api/models/sandbox_network_policy.py +61 -0
- render/public_api/models/sandbox_network_policy_default.py +9 -0
- render/public_api/models/sandbox_plan.py +10 -0
- render/public_api/models/sandbox_post.py +138 -0
- render/public_api/models/sandbox_post_env.py +44 -0
- render/public_api/models/sandbox_status.py +13 -0
- render/public_api/models/sandbox_with_cursor.py +74 -0
- render/public_api/models/scale_service_body.py +59 -0
- render/public_api/models/schemas_build_filter.py +70 -0
- render/public_api/models/schemas_image.py +96 -0
- render/public_api/models/schemas_user.py +68 -0
- render/public_api/models/secret_file.py +67 -0
- render/public_api/models/secret_file_input.py +67 -0
- render/public_api/models/secret_file_with_cursor.py +73 -0
- render/public_api/models/server_available.py +44 -0
- render/public_api/models/server_failed.py +81 -0
- render/public_api/models/server_hardware_failure.py +44 -0
- render/public_api/models/server_port.py +69 -0
- render/public_api/models/server_port_protocol.py +9 -0
- render/public_api/models/server_restarted.py +66 -0
- render/public_api/models/service_disk.py +78 -0
- render/public_api/models/service_env.py +15 -0
- render/public_api/models/service_event.py +770 -0
- render/public_api/models/service_event_type.py +48 -0
- render/public_api/models/service_event_with_cursor.py +66 -0
- render/public_api/models/service_instance.py +69 -0
- render/public_api/models/service_patch.py +273 -0
- render/public_api/models/service_post.py +357 -0
- render/public_api/models/service_resumed.py +44 -0
- render/public_api/models/service_runtime.py +15 -0
- render/public_api/models/service_suspended.py +44 -0
- render/public_api/models/service_type.py +12 -0
- render/public_api/models/service_type_short.py +12 -0
- render/public_api/models/setup_postgres_replication_response_201.py +44 -0
- render/public_api/models/snapshot_restore_post.py +72 -0
- render/public_api/models/static_site_details.py +183 -0
- render/public_api/models/static_site_details_patch.py +147 -0
- render/public_api/models/static_site_details_post.py +189 -0
- render/public_api/models/status.py +12 -0
- render/public_api/models/stream_sandbox_logs_accept.py +8 -0
- render/public_api/models/stream_task_runs_events_accept.py +8 -0
- render/public_api/models/suspender_added.py +83 -0
- render/public_api/models/suspender_removed.py +83 -0
- render/public_api/models/suspender_type.py +14 -0
- render/public_api/models/sync.py +118 -0
- render/public_api/models/sync_state.py +12 -0
- render/public_api/models/sync_with_cursor.py +74 -0
- render/public_api/models/task.py +97 -0
- render/public_api/models/task_attempt.py +121 -0
- render/public_api/models/task_attempt_details.py +141 -0
- render/public_api/models/task_data_type_1.py +44 -0
- render/public_api/models/task_run.py +168 -0
- render/public_api/models/task_run_details.py +216 -0
- render/public_api/models/task_run_status.py +14 -0
- render/public_api/models/task_run_with_cursor.py +73 -0
- render/public_api/models/task_with_cursor.py +73 -0
- render/public_api/models/team_member.py +102 -0
- render/public_api/models/team_member_role.py +12 -0
- render/public_api/models/team_member_status.py +9 -0
- render/public_api/models/time_series.py +100 -0
- render/public_api/models/time_series_value.py +70 -0
- render/public_api/models/update_env_group_secret_file_body.py +59 -0
- render/public_api/models/update_registry_credential_body.py +85 -0
- render/public_api/models/update_workspace_member_body.py +61 -0
- render/public_api/models/user.py +67 -0
- render/public_api/models/validate_blueprint_request.py +84 -0
- render/public_api/models/validate_blueprint_response.py +105 -0
- render/public_api/models/validation_error.py +88 -0
- render/public_api/models/validation_plan_summary.py +107 -0
- render/public_api/models/web_service_details.py +385 -0
- render/public_api/models/web_service_details_patch.py +270 -0
- render/public_api/models/web_service_details_post.py +354 -0
- render/public_api/models/webhook.py +110 -0
- render/public_api/models/webhook_event.py +115 -0
- render/public_api/models/webhook_event_with_cursor.py +73 -0
- render/public_api/models/webhook_patch_input.py +98 -0
- render/public_api/models/webhook_post_input.py +102 -0
- render/public_api/models/webhook_with_cursor.py +73 -0
- render/public_api/models/workflow.py +163 -0
- render/public_api/models/workflow_create.py +169 -0
- render/public_api/models/workflow_update.py +109 -0
- render/public_api/models/workflow_version.py +95 -0
- render/public_api/models/workflow_version_status.py +13 -0
- render/public_api/models/workflow_version_with_cursor.py +73 -0
- render/public_api/models/workflow_with_cursor.py +73 -0
- render/public_api/models/zero_downtime_redeploy_ended.py +44 -0
- render/public_api/models/zero_downtime_redeploy_started.py +59 -0
- render/public_api/py.typed +1 -0
- render/public_api/types.py +54 -0
- render/py.typed +0 -0
- render/render.py +81 -0
- render/render_async.py +80 -0
- render/version.py +27 -0
- render/workflows/__init__.py +25 -0
- render/workflows/_callback_models.py +194 -0
- render/workflows/_uds_http.py +128 -0
- render/workflows/app.py +263 -0
- render/workflows/cli.py +62 -0
- render/workflows/client.py +354 -0
- render/workflows/context.py +75 -0
- render/workflows/executor.py +86 -0
- render/workflows/runner.py +174 -0
- render/workflows/task.py +348 -0
- render/workflows/tests/__init__.py +0 -0
- render/workflows/tests/test_app.py +343 -0
- render/workflows/tests/test_cli.py +134 -0
- render/workflows/tests/test_client.py +59 -0
- render/workflows/tests/test_context.py +118 -0
- render/workflows/tests/test_end_to_end.py +307 -0
- render/workflows/tests/test_executor.py +221 -0
- render/workflows/tests/test_lazy_imports.py +100 -0
- render/workflows/tests/test_registration.py +293 -0
- render/workflows/tests/test_translate_errors.py +126 -0
- render/workflows/tests/test_uds_http.py +199 -0
- render/workflows/tests/test_version.py +15 -0
- render-1.0.1.dist-info/METADATA +382 -0
- render-1.0.1.dist-info/RECORD +799 -0
- render-1.0.1.dist-info/WHEEL +4 -0
- render-1.0.1.dist-info/entry_points.txt +2 -0
- render-1.0.1.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""Experimental Service
|
|
2
|
+
|
|
3
|
+
This module provides the ExperimentalService class that exposes experimental features
|
|
4
|
+
from the Render SDK.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
8
|
+
|
|
9
|
+
from render.experimental.key_value.api import KeyValueApi
|
|
10
|
+
from render.experimental.key_value.provider import KeyValueProvider
|
|
11
|
+
from render.experimental.object.client import ObjectClient
|
|
12
|
+
from render.experimental.sandbox.client import SandboxClient
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from render.client.client import Client
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class StorageService:
|
|
19
|
+
"""Storage Service
|
|
20
|
+
|
|
21
|
+
Provides access to experimental storage features.
|
|
22
|
+
|
|
23
|
+
Example:
|
|
24
|
+
```python
|
|
25
|
+
# Access object storage
|
|
26
|
+
await client.experimental.storage.objects.put(
|
|
27
|
+
owner_id="tea-xxxxx",
|
|
28
|
+
region="oregon",
|
|
29
|
+
key="file.png",
|
|
30
|
+
data=b"content"
|
|
31
|
+
)
|
|
32
|
+
```
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def __init__(self, client: "Client"):
|
|
36
|
+
"""Initialize the storage service.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
client: The Render client instance
|
|
40
|
+
"""
|
|
41
|
+
self.objects = ObjectClient(
|
|
42
|
+
client.internal,
|
|
43
|
+
default_owner_id=client.owner_id,
|
|
44
|
+
default_region=client.region,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class ExperimentalService:
|
|
49
|
+
"""Experimental Service
|
|
50
|
+
|
|
51
|
+
Provides access to experimental Render SDK features.
|
|
52
|
+
|
|
53
|
+
Features in this namespace may change or be removed without a migration plan.
|
|
54
|
+
When a feature stabilizes, it will be promoted to the main SDK namespace.
|
|
55
|
+
|
|
56
|
+
Example:
|
|
57
|
+
```python
|
|
58
|
+
from render import RenderAsync
|
|
59
|
+
|
|
60
|
+
render = RenderAsync()
|
|
61
|
+
|
|
62
|
+
# Access experimental object storage
|
|
63
|
+
await render.experimental.storage.objects.put(
|
|
64
|
+
owner_id="tea-xxxxx",
|
|
65
|
+
region="oregon",
|
|
66
|
+
key="file.png",
|
|
67
|
+
data=b"content"
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Access experimental Key Value support
|
|
71
|
+
from render.experimental.key_value import NameOwnerIdOptions
|
|
72
|
+
redis = await render.experimental.key_value.new_client(
|
|
73
|
+
NameOwnerIdOptions(name="my-cache")
|
|
74
|
+
)
|
|
75
|
+
```
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
def __init__(self, client: "Client"):
|
|
79
|
+
"""Initialize the experimental service.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
client: The Render client instance
|
|
83
|
+
"""
|
|
84
|
+
self.storage = StorageService(client)
|
|
85
|
+
self.key_value = KeyValueProvider(
|
|
86
|
+
KeyValueApi(client.internal),
|
|
87
|
+
default_owner_id=client.owner_id,
|
|
88
|
+
)
|
|
89
|
+
self.sandboxes = SandboxClient(
|
|
90
|
+
client.internal,
|
|
91
|
+
default_owner_id=client.owner_id,
|
|
92
|
+
default_region=client.region,
|
|
93
|
+
)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Synchronous Experimental Service.
|
|
2
|
+
|
|
3
|
+
This module provides the sync versions of ExperimentalService and StorageService.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from render.experimental.object.client_sync import SyncObjectClient
|
|
9
|
+
from render.experimental.sandbox.client_sync import SyncSandboxClient
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from render.client.client import Client
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class SyncStorageService:
|
|
16
|
+
"""Synchronous Storage Service.
|
|
17
|
+
|
|
18
|
+
Provides access to experimental storage features using synchronous HTTP calls.
|
|
19
|
+
|
|
20
|
+
Example:
|
|
21
|
+
```python
|
|
22
|
+
client.experimental.storage.objects.put(
|
|
23
|
+
owner_id="tea-xxxxx",
|
|
24
|
+
region="oregon",
|
|
25
|
+
key="file.png",
|
|
26
|
+
data=b"content"
|
|
27
|
+
)
|
|
28
|
+
```
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, client: "Client"):
|
|
32
|
+
"""Initialize the storage service.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
client: The Render client instance
|
|
36
|
+
"""
|
|
37
|
+
self.objects = SyncObjectClient(
|
|
38
|
+
client.internal,
|
|
39
|
+
default_owner_id=client.owner_id,
|
|
40
|
+
default_region=client.region,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class SyncExperimentalService:
|
|
45
|
+
"""Synchronous Experimental Service.
|
|
46
|
+
|
|
47
|
+
Provides access to experimental Render SDK features using synchronous HTTP calls.
|
|
48
|
+
|
|
49
|
+
Features in this namespace may change or be removed without a migration plan.
|
|
50
|
+
When a feature stabilizes, it will be promoted to the main SDK namespace.
|
|
51
|
+
|
|
52
|
+
Example:
|
|
53
|
+
```python
|
|
54
|
+
from render import Render
|
|
55
|
+
|
|
56
|
+
render = Render()
|
|
57
|
+
|
|
58
|
+
render.experimental.storage.objects.put(
|
|
59
|
+
owner_id="tea-xxxxx",
|
|
60
|
+
region="oregon",
|
|
61
|
+
key="file.png",
|
|
62
|
+
data=b"content"
|
|
63
|
+
)
|
|
64
|
+
```
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
def __init__(self, client: "Client"):
|
|
68
|
+
"""Initialize the experimental service.
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
client: The Render client instance
|
|
72
|
+
"""
|
|
73
|
+
self.storage = SyncStorageService(client)
|
|
74
|
+
self.sandboxes = SyncSandboxClient(
|
|
75
|
+
client.internal,
|
|
76
|
+
default_owner_id=client.owner_id,
|
|
77
|
+
default_region=client.region,
|
|
78
|
+
)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Key Value experimental feature."""
|
|
2
|
+
|
|
3
|
+
from render.experimental.key_value.api import KeyValueApi
|
|
4
|
+
from render.experimental.key_value.provider import KeyValueProvider
|
|
5
|
+
from render.experimental.key_value.types import (
|
|
6
|
+
ConnectionInfo,
|
|
7
|
+
InstanceConfiguration,
|
|
8
|
+
IPAllowListEntry,
|
|
9
|
+
MaxmemoryPolicy,
|
|
10
|
+
NameOwnerIdOptions,
|
|
11
|
+
Options,
|
|
12
|
+
OwnerId,
|
|
13
|
+
Plan,
|
|
14
|
+
ServiceIdOptions,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
__all__ = [
|
|
18
|
+
# Classes
|
|
19
|
+
"KeyValueApi",
|
|
20
|
+
"KeyValueProvider",
|
|
21
|
+
# Options types
|
|
22
|
+
"InstanceConfiguration",
|
|
23
|
+
"NameOwnerIdOptions",
|
|
24
|
+
"Options",
|
|
25
|
+
"ServiceIdOptions",
|
|
26
|
+
# Value types
|
|
27
|
+
"ConnectionInfo",
|
|
28
|
+
"IPAllowListEntry",
|
|
29
|
+
# Type aliases
|
|
30
|
+
"MaxmemoryPolicy",
|
|
31
|
+
"OwnerId",
|
|
32
|
+
"Plan",
|
|
33
|
+
]
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"""Layer 2 API client tailored to Key Value use-cases."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from http import HTTPStatus
|
|
5
|
+
|
|
6
|
+
from render.client.errors import ClientError, ServerError
|
|
7
|
+
from render.public_api.api.key_value import (
|
|
8
|
+
create_key_value,
|
|
9
|
+
list_key_value,
|
|
10
|
+
retrieve_key_value,
|
|
11
|
+
retrieve_key_value_connection_info,
|
|
12
|
+
update_key_value,
|
|
13
|
+
)
|
|
14
|
+
from render.public_api.client import AuthenticatedClient, Client
|
|
15
|
+
from render.public_api.models.key_value import KeyValue
|
|
16
|
+
from render.public_api.models.key_value_connection_info import (
|
|
17
|
+
KeyValueConnectionInfo,
|
|
18
|
+
)
|
|
19
|
+
from render.public_api.models.key_value_detail import KeyValueDetail
|
|
20
|
+
from render.public_api.models.key_value_patch_input import KeyValuePATCHInput
|
|
21
|
+
from render.public_api.models.key_value_post_input import KeyValuePOSTInput
|
|
22
|
+
from render.public_api.models.maxmemory_policy import MaxmemoryPolicy
|
|
23
|
+
from render.public_api.types import Unset
|
|
24
|
+
|
|
25
|
+
from .types import KeyValueInstance
|
|
26
|
+
from .utils import _format_error_message
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def _is_render() -> bool:
|
|
30
|
+
return os.environ.get("RENDER") == "true"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _unauthorized_error() -> ClientError:
|
|
34
|
+
return ClientError(
|
|
35
|
+
_format_error_message(
|
|
36
|
+
"The provided Render API Token is not authorized.",
|
|
37
|
+
"Please double-check the token is correct.",
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _unexpected_error(operation: str, status_code: int) -> ClientError | ServerError:
|
|
43
|
+
message = f"Unexpected error while {operation}"
|
|
44
|
+
if status_code >= HTTPStatus.INTERNAL_SERVER_ERROR:
|
|
45
|
+
return ServerError(message)
|
|
46
|
+
return ClientError(message)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def _to_instance(detail: KeyValue | KeyValueDetail) -> KeyValueInstance:
|
|
50
|
+
maxmemory_policy = detail.options.maxmemory_policy
|
|
51
|
+
return KeyValueInstance(
|
|
52
|
+
id=detail.id,
|
|
53
|
+
status=detail.status,
|
|
54
|
+
plan=detail.plan,
|
|
55
|
+
maxmemory_policy=(
|
|
56
|
+
None
|
|
57
|
+
if isinstance(maxmemory_policy, Unset)
|
|
58
|
+
else MaxmemoryPolicy(maxmemory_policy)
|
|
59
|
+
),
|
|
60
|
+
ip_allow_list=list(detail.ip_allow_list),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class KeyValueApi:
|
|
65
|
+
"""Layer 2 Key Value API client.
|
|
66
|
+
|
|
67
|
+
Wraps the generated OpenAPI operations with typed return values and
|
|
68
|
+
explicit error messages for common failure cases (401, 404).
|
|
69
|
+
For most use cases, prefer :class:`KeyValueClient`.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
def __init__(self, client: "AuthenticatedClient | Client"):
|
|
73
|
+
self.client = client
|
|
74
|
+
|
|
75
|
+
async def find_by_id(self, key_value_id: str) -> KeyValueInstance:
|
|
76
|
+
"""Look up a Key Value instance by its service ID.
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
key_value_id: The Render service ID of the Key Value instance.
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
KeyValueInstance: Instance state.
|
|
83
|
+
|
|
84
|
+
Raises:
|
|
85
|
+
ClientError: If the ID is not found or the API token is unauthorized.
|
|
86
|
+
ServerError: For 5xx server errors.
|
|
87
|
+
"""
|
|
88
|
+
response = await retrieve_key_value.asyncio_detailed(
|
|
89
|
+
redis_id=key_value_id,
|
|
90
|
+
client=self.client,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
if response.status_code == HTTPStatus.UNAUTHORIZED:
|
|
94
|
+
raise _unauthorized_error()
|
|
95
|
+
|
|
96
|
+
if response.status_code == HTTPStatus.NOT_FOUND:
|
|
97
|
+
raise ClientError(
|
|
98
|
+
_format_error_message(
|
|
99
|
+
f"Unable to locate a Key Value with ID {key_value_id}",
|
|
100
|
+
"Please double-check the ID is correct",
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
if not isinstance(response.parsed, KeyValueDetail):
|
|
105
|
+
raise _unexpected_error(
|
|
106
|
+
f"fetching info about Key Value {key_value_id}",
|
|
107
|
+
response.status_code,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
return _to_instance(response.parsed)
|
|
111
|
+
|
|
112
|
+
async def find_by_name(self, name: str, owner_id: str) -> KeyValueInstance | None:
|
|
113
|
+
"""Look up a Key Value instance by name and owner ID.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
name: Name of the Key Value instance.
|
|
117
|
+
owner_id: Owner (workspace or team) ID.
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
KeyValueInstance if an instance with that name exists, otherwise None.
|
|
121
|
+
|
|
122
|
+
Raises:
|
|
123
|
+
ClientError: If the API token is unauthorized.
|
|
124
|
+
ServerError: For 5xx server errors.
|
|
125
|
+
"""
|
|
126
|
+
response = await list_key_value.asyncio_detailed(
|
|
127
|
+
client=self.client,
|
|
128
|
+
name=[name],
|
|
129
|
+
owner_id=[owner_id],
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
if response.status_code == HTTPStatus.UNAUTHORIZED:
|
|
133
|
+
raise _unauthorized_error()
|
|
134
|
+
|
|
135
|
+
if not isinstance(response.parsed, list):
|
|
136
|
+
raise _unexpected_error(
|
|
137
|
+
f"fetching information about Key Value named '{name}'",
|
|
138
|
+
response.status_code,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
if len(response.parsed) == 0:
|
|
142
|
+
return None
|
|
143
|
+
|
|
144
|
+
# `name` is unique per-workspace and the search looks for exact matches, not
|
|
145
|
+
# partial, so there will only ever be zero or one result in the response
|
|
146
|
+
return _to_instance(response.parsed[0].key_value)
|
|
147
|
+
|
|
148
|
+
async def get_connection_info(self, key_value_id: str) -> str:
|
|
149
|
+
"""Get the Redis connection URL for a Key Value instance.
|
|
150
|
+
|
|
151
|
+
Returns the internal connection string when running on Render, and
|
|
152
|
+
the external connection string otherwise (detected via the ``RENDER``
|
|
153
|
+
environment variable).
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
key_value_id: The Render service ID of the Key Value instance.
|
|
157
|
+
|
|
158
|
+
Returns:
|
|
159
|
+
str: A ``redis://`` or ``rediss://`` connection URL.
|
|
160
|
+
|
|
161
|
+
Raises:
|
|
162
|
+
ClientError: If the API token is unauthorized.
|
|
163
|
+
ServerError: For 5xx server errors.
|
|
164
|
+
"""
|
|
165
|
+
response = await retrieve_key_value_connection_info.asyncio_detailed(
|
|
166
|
+
redis_id=key_value_id,
|
|
167
|
+
client=self.client,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
if response.status_code == HTTPStatus.UNAUTHORIZED:
|
|
171
|
+
raise _unauthorized_error()
|
|
172
|
+
|
|
173
|
+
if not isinstance(response.parsed, KeyValueConnectionInfo):
|
|
174
|
+
raise _unexpected_error(
|
|
175
|
+
f"fetching connection information for Key Value {key_value_id}",
|
|
176
|
+
response.status_code,
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
if _is_render():
|
|
180
|
+
return response.parsed.internal_connection_string
|
|
181
|
+
return response.parsed.external_connection_string
|
|
182
|
+
|
|
183
|
+
async def create_instance(self, details: KeyValuePOSTInput) -> KeyValueInstance:
|
|
184
|
+
"""Create a new Key Value instance.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
details: Creation parameters (name, owner ID, plan, etc.).
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
KeyValueInstance: The newly created instance.
|
|
191
|
+
|
|
192
|
+
Raises:
|
|
193
|
+
ClientError: If the API token is unauthorized or the request is invalid.
|
|
194
|
+
ServerError: For 5xx server errors.
|
|
195
|
+
"""
|
|
196
|
+
response = await create_key_value.asyncio_detailed(
|
|
197
|
+
client=self.client,
|
|
198
|
+
body=details,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
if response.status_code == HTTPStatus.UNAUTHORIZED:
|
|
202
|
+
raise _unauthorized_error()
|
|
203
|
+
|
|
204
|
+
if not isinstance(response.parsed, KeyValueDetail):
|
|
205
|
+
raise _unexpected_error(
|
|
206
|
+
f"creating new Key Value named '{details.name}'",
|
|
207
|
+
response.status_code,
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
return _to_instance(response.parsed)
|
|
211
|
+
|
|
212
|
+
async def update_instance(
|
|
213
|
+
self, key_value_id: str, update: KeyValuePATCHInput
|
|
214
|
+
) -> KeyValueInstance:
|
|
215
|
+
"""Update a Key Value instance's configuration.
|
|
216
|
+
|
|
217
|
+
Args:
|
|
218
|
+
key_value_id: The Render service ID of the Key Value instance.
|
|
219
|
+
update: Configuration changes to apply.
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
KeyValueInstance: The updated instance.
|
|
223
|
+
|
|
224
|
+
Raises:
|
|
225
|
+
ClientError: If the API token is unauthorized or the request is invalid.
|
|
226
|
+
ServerError: For 5xx server errors.
|
|
227
|
+
"""
|
|
228
|
+
response = await update_key_value.asyncio_detailed(
|
|
229
|
+
redis_id=key_value_id,
|
|
230
|
+
client=self.client,
|
|
231
|
+
body=update,
|
|
232
|
+
)
|
|
233
|
+
|
|
234
|
+
if response.status_code == HTTPStatus.UNAUTHORIZED:
|
|
235
|
+
raise _unauthorized_error()
|
|
236
|
+
|
|
237
|
+
if not isinstance(response.parsed, KeyValueDetail):
|
|
238
|
+
raise _unexpected_error(
|
|
239
|
+
f"updating Key Value {key_value_id}",
|
|
240
|
+
response.status_code,
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
return _to_instance(response.parsed)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Configuration comparison for Key Value instances."""
|
|
2
|
+
|
|
3
|
+
from render.public_api.models.cidr_block_and_description import (
|
|
4
|
+
CidrBlockAndDescription,
|
|
5
|
+
)
|
|
6
|
+
from render.public_api.models.key_value_patch_input import KeyValuePATCHInput
|
|
7
|
+
from render.public_api.models.key_value_plan import KeyValuePlan
|
|
8
|
+
from render.public_api.models.maxmemory_policy import MaxmemoryPolicy
|
|
9
|
+
from render.public_api.types import UNSET
|
|
10
|
+
|
|
11
|
+
from .types import InstanceConfiguration, KeyValueInstance
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def compare_instance_configuration(
|
|
15
|
+
desired: InstanceConfiguration,
|
|
16
|
+
current: KeyValueInstance,
|
|
17
|
+
) -> KeyValuePATCHInput | None:
|
|
18
|
+
"""Compare desired configuration against current state.
|
|
19
|
+
|
|
20
|
+
Returns a patch payload containing only the fields that differ, or None if
|
|
21
|
+
the current configuration already matches the desired configuration.
|
|
22
|
+
|
|
23
|
+
Note: Only values that are explicitly set in desired are compared. If a desired
|
|
24
|
+
value is None, then no change will be made to that value regardless of the current
|
|
25
|
+
state.
|
|
26
|
+
"""
|
|
27
|
+
new_plan: KeyValuePlan | None = None
|
|
28
|
+
if desired.plan is not None and desired.plan != current.plan:
|
|
29
|
+
new_plan = KeyValuePlan(desired.plan)
|
|
30
|
+
|
|
31
|
+
new_maxmemory_policy: MaxmemoryPolicy | None = None
|
|
32
|
+
if (
|
|
33
|
+
desired.maxmemory_policy is not None
|
|
34
|
+
and desired.maxmemory_policy != current.maxmemory_policy
|
|
35
|
+
):
|
|
36
|
+
new_maxmemory_policy = desired.maxmemory_policy
|
|
37
|
+
|
|
38
|
+
# None means "caller didn't specify"; an empty list means "clear the allowlist"
|
|
39
|
+
new_ip_allow_list: list[CidrBlockAndDescription] | None = None
|
|
40
|
+
if desired.ip_allow_list is not None:
|
|
41
|
+
new_ip_allow_list = _compare_ip_allow_lists(
|
|
42
|
+
desired.ip_allow_list, current.ip_allow_list
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# Use explicit None checks so that an empty ip_allow_list (falsy) still
|
|
46
|
+
# triggers an update when it differs from the current non-empty list.
|
|
47
|
+
if (
|
|
48
|
+
new_plan is not None
|
|
49
|
+
or new_maxmemory_policy is not None
|
|
50
|
+
or new_ip_allow_list is not None
|
|
51
|
+
):
|
|
52
|
+
return KeyValuePATCHInput(
|
|
53
|
+
plan=new_plan if new_plan is not None else UNSET,
|
|
54
|
+
maxmemory_policy=(
|
|
55
|
+
new_maxmemory_policy if new_maxmemory_policy is not None else UNSET
|
|
56
|
+
),
|
|
57
|
+
ip_allow_list=new_ip_allow_list if new_ip_allow_list is not None else UNSET,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _compare_ip_allow_lists(
|
|
64
|
+
desired: list[CidrBlockAndDescription],
|
|
65
|
+
current: list[CidrBlockAndDescription],
|
|
66
|
+
) -> list[CidrBlockAndDescription] | None:
|
|
67
|
+
"""Compare two IP allow lists by CIDR block (descriptions are ignored).
|
|
68
|
+
|
|
69
|
+
Returns None if the lists are equivalent, or the desired list if they differ.
|
|
70
|
+
"""
|
|
71
|
+
if len(desired) != len(current):
|
|
72
|
+
return desired
|
|
73
|
+
|
|
74
|
+
desired_sorted = sorted(desired, key=lambda e: e.cidr_block)
|
|
75
|
+
current_sorted = sorted(current, key=lambda e: e.cidr_block)
|
|
76
|
+
|
|
77
|
+
if any(
|
|
78
|
+
a.cidr_block != b.cidr_block
|
|
79
|
+
for a, b in zip(desired_sorted, current_sorted, strict=False)
|
|
80
|
+
):
|
|
81
|
+
return desired
|
|
82
|
+
|
|
83
|
+
return None
|