render 1.1.0__tar.gz → 1.2.0__tar.gz
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-1.1.0 → render-1.2.0}/CHANGELOG.md +12 -0
- {render-1.1.0 → render-1.2.0}/PKG-INFO +25 -1
- {render-1.1.0 → render-1.2.0}/README.md +24 -0
- render-1.2.0/example/task/.claude/settings.local.json +7 -0
- {render-1.1.0 → render-1.2.0}/pyproject.toml +1 -1
- {render-1.1.0 → render-1.2.0}/render/__init__.py +3 -1
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_client.py +56 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_workflows_sync.py +52 -0
- {render-1.1.0 → render-1.2.0}/render/client/workflows.py +24 -3
- {render-1.1.0 → render-1.2.0}/render/client/workflows_sync.py +22 -3
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/api.py +9 -2
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/api_sync.py +9 -2
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/client.py +14 -6
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/client_sync.py +14 -6
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/test_e2e.py +90 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/test_snapshots.py +115 -3
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/test_types.py +1 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/types.py +1 -0
- render-1.2.0/render/public_api/api/blueprints/create_blueprint.py +244 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/list_build_sources.py +15 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/create_sandbox.py +20 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/create_sandbox_snapshot.py +8 -4
- {render-1.1.0 → render-1.2.0}/render/public_api/models/__init__.py +8 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/blueprint.py +6 -2
- {render-1.1.0 → render-1.2.0}/render/public_api/models/blueprint_detail.py +6 -2
- {render-1.1.0 → render-1.2.0}/render/public_api/models/blueprint_patch.py +5 -1
- render-1.2.0/render/public_api/models/blueprint_source.py +79 -0
- render-1.2.0/render/public_api/models/create_blueprint_request.py +118 -0
- render-1.2.0/render/public_api/models/create_blueprint_response.py +76 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_deploy_body.py +6 -4
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy.py +0 -9
- {render-1.1.0 → render-1.2.0}/render/public_api/models/error_code.py +1 -0
- render-1.2.0/render/public_api/models/existing_resource_mode.py +9 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/run_task.py +15 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_network_policy.py +20 -1
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_network_policy_default.py +1 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_post.py +13 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_snapshot.py +20 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_snapshot_post.py +13 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/__init__.py +2 -1
- {render-1.1.0 → render-1.2.0}/render/workflows/_callback_models.py +10 -1
- {render-1.1.0 → render-1.2.0}/render/workflows/context.py +48 -1
- {render-1.1.0 → render-1.2.0}/render/workflows/executor.py +12 -4
- {render-1.1.0 → render-1.2.0}/render/workflows/runner.py +1 -1
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_context.py +29 -1
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_end_to_end.py +99 -1
- {render-1.1.0 → render-1.2.0}/typing_tests/run_inference.py +14 -1
- {render-1.1.0 → render-1.2.0}/uv.lock +314 -271
- {render-1.1.0 → render-1.2.0}/.gitignore +0 -0
- {render-1.1.0 → render-1.2.0}/.python-version +0 -0
- {render-1.1.0 → render-1.2.0}/LICENSE +0 -0
- {render-1.1.0 → render-1.2.0}/example/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/client/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/client/async_main.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/client/main.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/sandbox/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/sandbox/main.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/task/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/example/task/main.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/errors.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/sse.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/sse_sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_method_parity.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_render.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_sse.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_util.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/tests/test_util_sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/types.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/util.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/client/util_sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/experimental.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/experimental_sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/api.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/compare.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/provider.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/tests/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/tests/test_api.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/tests/test_compare.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/tests/test_provider.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/tests/test_types.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/types.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/key_value/utils.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/api.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/api_sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/client_sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/e2e_helpers.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/tests/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/tests/test_client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/tests/test_e2e.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/object/types.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/_tar.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/errors.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/files.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/test_client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/test_download.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/experimental/sandbox/tests/test_tar.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/audit_logs/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/audit_logs/list_organization_audit_logs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/audit_logs/list_owner_audit_logs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/disconnect_blueprint.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/list_blueprint_syncs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/list_blueprints.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/retrieve_blueprint.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/update_blueprint.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/blueprints/validate_blueprint.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/add_or_update_build_source_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/create_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/delete_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/delete_build_source_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/delete_build_source_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/get_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/get_env_vars_for_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/link_env_group_to_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/list_builds_in_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/list_secret_files_for_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/retrieve_build_source_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/retrieve_build_source_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/trigger_build_source_build.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/unlink_env_group_from_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/update_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/update_build_source_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/update_env_vars_for_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/build_sources/update_secret_files_for_build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/custom_domains/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/custom_domains/create_custom_domain.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/custom_domains/delete_custom_domain.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/custom_domains/list_custom_domains.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/custom_domains/refresh_custom_domain.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/custom_domains/retrieve_custom_domain.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/dedicated_i_ps/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/dedicated_i_ps/create_dedicated_ip.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/dedicated_i_ps/delete_dedicated_ip.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/dedicated_i_ps/list_dedicated_ips.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/dedicated_i_ps/retrieve_dedicated_ip.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/dedicated_i_ps/update_dedicated_ip.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/deploys/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/deploys/cancel_deploy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/deploys/create_deploy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/deploys/list_deploys.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/deploys/retrieve_deploy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/deploys/rollback_deploy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/add_disk.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/delete_disk.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/list_disks.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/list_snapshots.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/restore_snapshot.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/retrieve_disk.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/disks/update_disk.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/create_env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/delete_env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/delete_env_group_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/delete_env_group_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/link_service_to_env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/list_env_groups.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/retrieve_env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/retrieve_env_group_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/retrieve_env_group_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/unlink_service_from_env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/update_env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/update_env_group_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/environment_groups/update_env_group_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/events/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/events/retrieve_event.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/create_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/delete_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/list_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/resume_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/retrieve_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/retrieve_key_value_connection_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/suspend_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/key_value/update_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/delete_owner_log_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/delete_resource_log_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/get_owner_log_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/get_resource_log_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/list_logs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/list_logs_values.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/list_resource_log_streams.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/subscribe_logs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/update_owner_log_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/logs/update_resource_log_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/maintenance/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/maintenance/list_maintenance.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/maintenance/retrieve_maintenance.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/maintenance/trigger_maintenance.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/maintenance/update_maintenance.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/delete_owner_metrics_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_active_connections.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_bandwidth.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_bandwidth_sources.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_cpu.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_cpu_limit.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_cpu_target.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_disk_capacity.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_disk_usage.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_http_latency.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_http_requests.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_instance_count.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_memory.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_memory_limit.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_memory_target.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_owner_metrics_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_replication_lag.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_task_runs_completed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/get_task_runs_queued.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/list_application_filter_values.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/list_http_filter_values.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/list_path_filter_values.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/metrics/upsert_owner_metrics_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/notification_settings/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/notification_settings/list_notification_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/notification_settings/patch_owner_notification_settings.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/notification_settings/patch_service_notification_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/notification_settings/retrieve_owner_notification_settings.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/notification_settings/retrieve_service_notification_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/object_storage/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/object_storage/delete_object.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/object_storage/get_object.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/object_storage/list_objects.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/object_storage/put_object.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/one_off_jobs/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/one_off_jobs/cancel_job.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/one_off_jobs/list_job.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/one_off_jobs/post_job.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/one_off_jobs/retrieve_job.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/create_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/create_postgres_export.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/create_postgres_user.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/delete_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/delete_postgres_user.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/failover_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_available_postgres_parameter_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_export.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_parameter_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_processes.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_sizes.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_table_scans.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_top_queries.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/list_postgres_users.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/promote_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/recover_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/restart_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/resume_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/retrieve_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/retrieve_postgres_connection_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/retrieve_postgres_recovery_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/setup_postgres_replication.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/suspend_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/update_postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/postgres/update_postgres_parameter_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/add_resources_to_environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/create_environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/create_project.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/delete_environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/delete_project.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/list_environments.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/list_projects.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/remove_resources_from_environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/retrieve_environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/retrieve_project.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/update_environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/projects_environments/update_project.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/create_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/delete_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/list_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/resume_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/retrieve_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/retrieve_redis_connection_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/suspend_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/redis_deprecated/update_redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/registry_credentials/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/registry_credentials/create_registry_credential.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/registry_credentials/delete_registry_credential.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/registry_credentials/list_registry_credentials.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/registry_credentials/retrieve_registry_credential.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/registry_credentials/update_registry_credential.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/connect_sandbox_files.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/connect_sandbox_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/delete_sandbox_snapshot.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/list_sandbox_executions.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/list_sandbox_files.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/list_sandbox_groups.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/list_sandbox_snapshots.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/list_sandboxes.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/retrieve_sandbox.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/retrieve_sandbox_execution.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/retrieve_sandbox_snapshot.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/stream_sandbox_logs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/terminate_sandbox.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/sandboxes/update_sandbox_exec.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/add_or_update_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/autoscale_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/create_ephemeral_shell.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/create_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/delete_autoscaling_config.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/delete_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/delete_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/delete_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/get_env_vars_for_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/list_events.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/list_instances.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/list_secret_files_for_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/list_services.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/preview_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/purge_cache.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/restart_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/resume_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/retrieve_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/retrieve_secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/retrieve_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/retrieve_service_outbound_ips.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/scale_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/suspend_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/update_env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/update_env_vars_for_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/update_secret_files_for_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services/update_service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_cron_jobs/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_cron_jobs/cancel_cron_job_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_cron_jobs/run_cron_job.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_headers/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_headers/add_headers.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_headers/delete_header.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_headers/list_headers.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_headers/update_headers.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_routes/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_routes/add_route.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_routes/delete_route.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_routes/list_routes.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_routes/patch_route.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/services_routes/put_routes.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/users/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/users/get_user.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/create_webhook.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/delete_webhook.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/list_webhook_events.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/list_webhooks.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/retrieve_webhook.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/webhooks/update_webhook.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/cancel_task_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/create_task.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/get_task.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/get_task_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/list_task_runs.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/list_tasks.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflow_tasks/stream_task_runs_events.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/create_workflow.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/create_workflow_version.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/delete_workflow.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/get_workflow.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/get_workflow_version.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/list_workflow_versions.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/list_workflows.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workflows/update_workflow.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workspaces/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workspaces/list_owners.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workspaces/remove_workspace_member.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workspaces/retrieve_owner.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workspaces/retrieve_owner_members.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/api/workspaces/update_workspace_member.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/errors.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/add_headers_response_201.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/add_or_update_build_source_secret_file_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/add_or_update_secret_file_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/artifact_fetch_failed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/artifact_source_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log_actor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log_actor_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log_event.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log_metadata.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/audit_log_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/auto_deploy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/auto_deploy_disabled.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/auto_deploy_enabled.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/auto_deploy_trigger.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/autoscaling_config.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/autoscaling_config_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/autoscaling_criteria.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/autoscaling_criteria_percentage.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/autoscaling_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/autoscaling_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/background_worker_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/background_worker_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/background_worker_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/blueprint_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/branch_deleted.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_config.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_config_update.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_deploy_end_reason.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_deploy_end_reason_id.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_deploy_trigger.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_filter.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_plan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_run_runtime.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_run_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_git.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_git_region.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_git_runtime.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_image.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_patch_git.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_patch_git_region.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_patch_git_runtime.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_patch_image.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_service_link.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_source_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/build_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cache.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cache_profile.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cidr_block_and_description.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/commit_ignored.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/commit_ref.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/connect_sandbox_files_operation.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/connect_sandbox_run_operation.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_custom_domain_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_deploy_body_clear_cache.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_ephemeral_shell_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_ephemeral_shell_response_201.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_registry_credential_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/create_version.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/credential_create_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_run_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_run_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/cron_job_run_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/custom_domain.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/custom_domain_domain_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/custom_domain_server.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/custom_domain_verification_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/custom_domain_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/database_role.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/database_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/dedicated_ip.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/dedicated_ip_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/dedicated_ippatch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/dedicated_ippost.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_commit.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_image.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_mode.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_trigger.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/deploy_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_created.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_deleted.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_snapshot.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_updated.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/disk_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/docker_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/docker_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/docker_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/edge_cache_disabled.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/edge_cache_enabled.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/edge_cache_purged.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/edge_cache_trigger.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_group_link.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_group_meta.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_group_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_group_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_var.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_var_generate_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_var_key_generate_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_var_key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_var_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/env_var_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/environment.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/environment_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/environment_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/environment_resources_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/environment_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/error.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/event.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/event_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/event_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/execution.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/execution_operation.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/execution_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/execution_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/failure_reason.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/filter_application_values_collection_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/filter_application_values_collection_item_filter.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/filter_http_values_collection_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/filter_http_values_collection_item_filter.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_bandwidth_sources_response_200.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_bandwidth_sources_response_200_data_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_bandwidth_sources_response_200_data_item_labels.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_bandwidth_sources_response_200_data_item_labels_traffic_source.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_bandwidth_sources_response_200_data_item_values_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_cpu_aggregation_method.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_http_requests_aggregate_by.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_object_output.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_task_runs_completed_aggregate_by.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/get_task_runs_completed_state.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/header.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/header_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/header_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/image.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/image_pull_failed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/initial_deploy_hook_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/initial_deploy_hook_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/instance_count_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/instance_type_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/internal_routing.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/job.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/job_run_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/job_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/job_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_available.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_config_restart.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_connection_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_detail.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_options.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_plan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_unhealthy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/key_value_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/label.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_custom_domains_domain_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_custom_domains_verification_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_logs_response_200.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_logs_values_label.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_objects_response.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_postgres_suspended_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_postgres_users_response_200_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_routes_type_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/list_services_suspended_item.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_direction.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_label.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_label_name.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_stream_owner_update.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_stream_preview_setting.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_stream_resource_update.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/log_stream_setting.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_mode.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_mode_enabled.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_mode_uri_updated.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_run_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_run_with_resource.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_state.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maintenance_trigger.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/maxmemory_policy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/metrics_stream.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/metrics_stream_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/native_environment_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/native_environment_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/native_environment_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notification_override.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notification_override_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notification_service_override.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notification_service_override_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notification_setting.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notification_setting_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notify_override.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notify_preview_override.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notify_setting.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/notify_setting_v2.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/object_metadata.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/object_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/oom_killed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/otel_provider_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/outbound_ips.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/outbound_ips_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/owner.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/owner_log_stream_setting.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/owner_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/owner_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/paid_plan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/patch_route_response_200.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/persistence_mode.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/pipeline_minutes_exhausted.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/plan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/post_job_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_available.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_available_parameter_override.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_available_parameter_overrides_result.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_backup_completed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_backup_failed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_backup_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_cluster_leader_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_connection_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_connection_pool_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_connection_pool_enabled_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_created.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_detail.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_detail_suspended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_disk_size_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_export.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_ha_status_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_parameter_overrides.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_parameter_overrides_wrapper.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_pitr_checkpoint_completed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_pitr_checkpoint_failed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_pitr_checkpoint_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_plans.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_process.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_processes_result.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_put_parameter_overrides_result.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_query_statistic.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_read_replica_stale.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_read_replicas_changed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_replication_setup_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_restarted.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_size.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_sizes_result.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_suspended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_table_scan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_table_scans_result.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_top_queries_result.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_unavailable.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_upgrade_failed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_upgrade_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_upgrade_succeeded.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_version.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/postgres_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/pre_deploy_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/pre_deploy_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/preview_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/previews.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/previews_generation.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/private_service_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/private_service_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/private_service_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/project.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/project_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/project_post_environment_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/project_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/project_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/protected_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/pull_request_previews_enabled.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/put_object_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/put_object_output.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/read_replica.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/read_replica_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/recovery_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/recovery_info_recovery_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/recovery_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_connection_info.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_detail.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_options.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_plan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/redis_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/region.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/registry_credential.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/registry_credential_registry.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/registry_credential_summary.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/render_subdomain_policy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/resource.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/resource_log_stream_setting.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/resource_ref.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/resource_ref_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/rollback_deploy_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/route.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/route_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/route_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/route_put.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/route_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/route_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/runtime.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_connect_request.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_connect_response.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_directory_listing.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_exec_update_request.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_exec_update_response.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_file_entry.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_file_entry_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_group.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_group_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_plan.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_post_env.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_snapshot_kind.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_snapshot_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_snapshot_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sandbox_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/scale_service_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/schemas_build_filter.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/schemas_image.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/schemas_user.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/secret_file.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/secret_file_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/secret_file_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/server_available.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/server_failed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/server_hardware_failure.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/server_port.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/server_port_protocol.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/server_restarted.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_and_deploy.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_disk.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_disk_usage_high.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_disk_usage_recovered.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_env.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_event.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_event_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_event_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_instance.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_resumed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_runtime.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_service_suspended_state.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_suspended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_type_short.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/service_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/setup_postgres_replication_response_201.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/snapshot_restore_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/static_site_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/static_site_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/static_site_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/stream_sandbox_logs_accept.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/stream_task_runs_events_accept.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/suspender_added.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/suspender_removed.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/suspender_type.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sync.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sync_state.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/sync_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_attempt.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_attempt_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_data_type_1.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_run.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_run_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_run_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_run_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/task_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/team_member.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/team_member_role.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/team_member_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/time_series.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/time_series_value.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/update_env_group_secret_file_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/update_registry_credential_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/update_workspace_member_body.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/user.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/validate_blueprint_request.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/validate_blueprint_response.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/validation_error.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/validation_plan_summary.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/web_service_details.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/web_service_details_patch.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/web_service_details_post.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/webhook.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/webhook_event.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/webhook_event_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/webhook_patch_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/webhook_post_input.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/webhook_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow_create.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow_update.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow_version.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow_version_status.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow_version_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/workflow_with_cursor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/zero_downtime_redeploy_ended.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/models/zero_downtime_redeploy_started.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/py.typed +0 -0
- {render-1.1.0 → render-1.2.0}/render/public_api/types.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/py.typed +0 -0
- {render-1.1.0 → render-1.2.0}/render/render.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/render_async.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/version.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/_uds_http.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/app.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/cli.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/task.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/__init__.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_app.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_cli.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_client.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_executor.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_lazy_imports.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_registration.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_translate_errors.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_uds_http.py +0 -0
- {render-1.1.0 → render-1.2.0}/render/workflows/tests/test_version.py +0 -0
- {render-1.1.0 → render-1.2.0}/scripts/unasync.py +0 -0
- {render-1.1.0 → render-1.2.0}/tox.ini +0 -0
- {render-1.1.0 → render-1.2.0}/typing_tests/README.md +0 -0
- {render-1.1.0 → render-1.2.0}/typing_tests/client_decorators.py +0 -0
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.2.0] - 2026-09-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- (Workflows) `start_task()` and `run_task()` accept a keyword-only `idempotency_key`, which makes starting a run safe to retry: repeating a call with the same key within 24 hours returns the run the first call started
|
|
8
|
+
- (Workflows) `ctx.metadata` exposes `task_run_id`, `root_task_run_id` and `parent_task_run_id` for the running task. The IDs come from the task's initial input, so reading them does not make a network request; each is `None` when unavailable
|
|
9
|
+
- (Sandboxes) Snapshot names: `snapshots.create()` accepts `name`, `sandboxes.create()` accepts `snapshot_name` to start from the snapshot that name resolves to, and `Snapshot` exposes `name`. Passing both `snapshot_id` and `snapshot_name` raises `ValueError`
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Regenerated the REST client from the latest OpenAPI schema: blueprint creation, `include_previews` when listing build sources, and allowed domains on sandbox network policies. `Deploy` no longer has a `build_id` field
|
|
14
|
+
|
|
3
15
|
## [1.1.0] - 2026-09-10
|
|
4
16
|
|
|
5
17
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: render
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Python SDK for Render Workflows
|
|
5
5
|
Author-email: Render <support@render.com>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -102,6 +102,17 @@ from tasks_b import app as app_b
|
|
|
102
102
|
combined = Workflows.from_workflows(app_a, app_b)
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
### Task run IDs
|
|
106
|
+
|
|
107
|
+
The task context exposes a read-only `ctx.metadata` object with
|
|
108
|
+
`task_run_id`, `root_task_run_id`, and `parent_task_run_id` fields. The SDK reads
|
|
109
|
+
them from the initial input response and keeps them for that execution, so
|
|
110
|
+
accessing metadata does not make a network request.
|
|
111
|
+
|
|
112
|
+
For a root run, `ctx.metadata.root_task_run_id` equals
|
|
113
|
+
`ctx.metadata.task_run_id` and `ctx.metadata.parent_task_run_id` is `None`.
|
|
114
|
+
IDs are `None` when unavailable.
|
|
115
|
+
|
|
105
116
|
### Running the Local Task Server
|
|
106
117
|
|
|
107
118
|
For local development, use the Render CLI:
|
|
@@ -159,6 +170,19 @@ for event in render.workflows.task_run_events([task_run.id]):
|
|
|
159
170
|
runs = render.workflows.list_task_runs(ListTaskRunsParams(limit=10))
|
|
160
171
|
```
|
|
161
172
|
|
|
173
|
+
#### Idempotency Keys
|
|
174
|
+
|
|
175
|
+
Pass an `idempotency_key` to make starting a run safe to retry. Repeating a call
|
|
176
|
+
with the same key within 24 hours returns the run the first call started instead
|
|
177
|
+
of starting another one, so a client that retries after a timeout does not run
|
|
178
|
+
the task twice. Keys are scoped to a single workflow version.
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
task_run = render.workflows.start_task(
|
|
182
|
+
"my-workflow/charge", [order_id], idempotency_key=f"charge-{order_id}"
|
|
183
|
+
)
|
|
184
|
+
```
|
|
185
|
+
|
|
162
186
|
#### Async Usage
|
|
163
187
|
|
|
164
188
|
For async contexts (e.g. FastAPI), use `RenderAsync`:
|
|
@@ -77,6 +77,17 @@ from tasks_b import app as app_b
|
|
|
77
77
|
combined = Workflows.from_workflows(app_a, app_b)
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
+
### Task run IDs
|
|
81
|
+
|
|
82
|
+
The task context exposes a read-only `ctx.metadata` object with
|
|
83
|
+
`task_run_id`, `root_task_run_id`, and `parent_task_run_id` fields. The SDK reads
|
|
84
|
+
them from the initial input response and keeps them for that execution, so
|
|
85
|
+
accessing metadata does not make a network request.
|
|
86
|
+
|
|
87
|
+
For a root run, `ctx.metadata.root_task_run_id` equals
|
|
88
|
+
`ctx.metadata.task_run_id` and `ctx.metadata.parent_task_run_id` is `None`.
|
|
89
|
+
IDs are `None` when unavailable.
|
|
90
|
+
|
|
80
91
|
### Running the Local Task Server
|
|
81
92
|
|
|
82
93
|
For local development, use the Render CLI:
|
|
@@ -134,6 +145,19 @@ for event in render.workflows.task_run_events([task_run.id]):
|
|
|
134
145
|
runs = render.workflows.list_task_runs(ListTaskRunsParams(limit=10))
|
|
135
146
|
```
|
|
136
147
|
|
|
148
|
+
#### Idempotency Keys
|
|
149
|
+
|
|
150
|
+
Pass an `idempotency_key` to make starting a run safe to retry. Repeating a call
|
|
151
|
+
with the same key within 24 hours returns the run the first call started instead
|
|
152
|
+
of starting another one, so a client that retries after a timeout does not run
|
|
153
|
+
the task twice. Keys are scoped to a single workflow version.
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
task_run = render.workflows.start_task(
|
|
157
|
+
"my-workflow/charge", [order_id], idempotency_key=f"charge-{order_id}"
|
|
158
|
+
)
|
|
159
|
+
```
|
|
160
|
+
|
|
137
161
|
#### Async Usage
|
|
138
162
|
|
|
139
163
|
For async contexts (e.g. FastAPI), use `RenderAsync`:
|
|
@@ -33,7 +33,7 @@ Async REST API access:
|
|
|
33
33
|
result = await task_run
|
|
34
34
|
"""
|
|
35
35
|
|
|
36
|
-
__version__ = "1.
|
|
36
|
+
__version__ = "1.2.0"
|
|
37
37
|
|
|
38
38
|
# Render/RenderAsync are lazy-loaded so the workflow worker path stays fast.
|
|
39
39
|
from typing import TYPE_CHECKING
|
|
@@ -42,6 +42,7 @@ from render.workflows import (
|
|
|
42
42
|
Options,
|
|
43
43
|
Retry,
|
|
44
44
|
TaskContext,
|
|
45
|
+
TaskRunMetadata,
|
|
45
46
|
Workflows,
|
|
46
47
|
start,
|
|
47
48
|
task,
|
|
@@ -58,6 +59,7 @@ __all__ = [
|
|
|
58
59
|
"RenderAsync", # Async REST API client
|
|
59
60
|
"Workflows", # Task definition
|
|
60
61
|
"TaskContext", # First parameter of every task
|
|
62
|
+
"TaskRunMetadata",
|
|
61
63
|
# Configuration
|
|
62
64
|
"Options",
|
|
63
65
|
"Retry",
|
|
@@ -118,6 +118,62 @@ async def test_start_task_success(
|
|
|
118
118
|
mock_create_task_asyncio.assert_called_once()
|
|
119
119
|
|
|
120
120
|
|
|
121
|
+
@pytest.mark.asyncio
|
|
122
|
+
async def test_start_task_omits_idempotency_key_when_not_given(
|
|
123
|
+
mock_create_task_asyncio, workflows_service, mock_task_run
|
|
124
|
+
):
|
|
125
|
+
mock_create_task_asyncio.return_value = Response(
|
|
126
|
+
status_code=202, content=b"", headers={}, parsed=mock_task_run
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
await workflows_service.start_task("test-task", {"input": "data"})
|
|
130
|
+
|
|
131
|
+
body = mock_create_task_asyncio.call_args.kwargs["body"]
|
|
132
|
+
assert "idempotencyKey" not in body.to_dict()
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
@pytest.mark.asyncio
|
|
136
|
+
async def test_start_task_sends_idempotency_key(
|
|
137
|
+
mock_create_task_asyncio, workflows_service, mock_task_run
|
|
138
|
+
):
|
|
139
|
+
mock_create_task_asyncio.return_value = Response(
|
|
140
|
+
status_code=202, content=b"", headers={}, parsed=mock_task_run
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
await workflows_service.start_task(
|
|
144
|
+
"test-task", {"input": "data"}, idempotency_key="order-42"
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
body = mock_create_task_asyncio.call_args.kwargs["body"]
|
|
148
|
+
assert body.to_dict()["idempotencyKey"] == "order-42"
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@pytest.mark.asyncio
|
|
152
|
+
async def test_run_task_sends_idempotency_key(
|
|
153
|
+
mocker,
|
|
154
|
+
mock_create_task_asyncio,
|
|
155
|
+
workflows_service,
|
|
156
|
+
mock_task_run,
|
|
157
|
+
mock_task_run_details,
|
|
158
|
+
):
|
|
159
|
+
mock_create_task_asyncio.return_value = Response(
|
|
160
|
+
status_code=202, content=b"", headers={}, parsed=mock_task_run
|
|
161
|
+
)
|
|
162
|
+
mocker.patch.object(
|
|
163
|
+
AwaitableTaskRun,
|
|
164
|
+
"_wait_for_completion",
|
|
165
|
+
new_callable=mocker.AsyncMock,
|
|
166
|
+
return_value=mock_task_run_details,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
await workflows_service.run_task(
|
|
170
|
+
"test-task", {"input": "data"}, idempotency_key="order-42"
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
body = mock_create_task_asyncio.call_args.kwargs["body"]
|
|
174
|
+
assert body.idempotency_key == "order-42"
|
|
175
|
+
|
|
176
|
+
|
|
121
177
|
@pytest.mark.asyncio
|
|
122
178
|
async def test_start_task_failure(mock_create_task_asyncio, workflows_service):
|
|
123
179
|
"""Test task start failure."""
|
|
@@ -117,6 +117,58 @@ def test_start_task_success(
|
|
|
117
117
|
mock_create_task_sync.assert_called_once()
|
|
118
118
|
|
|
119
119
|
|
|
120
|
+
def test_start_task_omits_idempotency_key_when_not_given(
|
|
121
|
+
mock_create_task_sync, sync_workflows_service, mock_task_run
|
|
122
|
+
):
|
|
123
|
+
mock_create_task_sync.return_value = Response(
|
|
124
|
+
status_code=202, content=b"", headers={}, parsed=mock_task_run
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
sync_workflows_service.start_task("test-task", {"input": "data"})
|
|
128
|
+
|
|
129
|
+
body = mock_create_task_sync.call_args.kwargs["body"]
|
|
130
|
+
assert "idempotencyKey" not in body.to_dict()
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def test_start_task_sends_idempotency_key(
|
|
134
|
+
mock_create_task_sync, sync_workflows_service, mock_task_run
|
|
135
|
+
):
|
|
136
|
+
mock_create_task_sync.return_value = Response(
|
|
137
|
+
status_code=202, content=b"", headers={}, parsed=mock_task_run
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
sync_workflows_service.start_task(
|
|
141
|
+
"test-task", {"input": "data"}, idempotency_key="order-42"
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
body = mock_create_task_sync.call_args.kwargs["body"]
|
|
145
|
+
assert body.to_dict()["idempotencyKey"] == "order-42"
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def test_run_task_sends_idempotency_key(
|
|
149
|
+
mocker,
|
|
150
|
+
mock_create_task_sync,
|
|
151
|
+
sync_workflows_service,
|
|
152
|
+
mock_task_run,
|
|
153
|
+
mock_task_run_details,
|
|
154
|
+
):
|
|
155
|
+
mock_create_task_sync.return_value = Response(
|
|
156
|
+
status_code=202, content=b"", headers={}, parsed=mock_task_run
|
|
157
|
+
)
|
|
158
|
+
mocker.patch.object(
|
|
159
|
+
sync_workflows_service,
|
|
160
|
+
"_task_run_completed_with_sse",
|
|
161
|
+
return_value=mock_task_run_details,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
sync_workflows_service.run_task(
|
|
165
|
+
"test-task", {"input": "data"}, idempotency_key="order-42"
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
body = mock_create_task_sync.call_args.kwargs["body"]
|
|
169
|
+
assert body.idempotency_key == "order-42"
|
|
170
|
+
|
|
171
|
+
|
|
120
172
|
def test_start_task_failure(mock_create_task_sync, sync_workflows_service):
|
|
121
173
|
"""Test task start failure."""
|
|
122
174
|
|
|
@@ -184,6 +184,8 @@ class WorkflowsService:
|
|
|
184
184
|
self,
|
|
185
185
|
task_slug: TaskSlug,
|
|
186
186
|
input_data: TaskData,
|
|
187
|
+
*,
|
|
188
|
+
idempotency_key: str | None = None,
|
|
187
189
|
) -> AwaitableTaskRun:
|
|
188
190
|
"""Start a task and return an awaitable task run without waiting for completion.
|
|
189
191
|
|
|
@@ -203,6 +205,9 @@ class WorkflowsService:
|
|
|
203
205
|
input_data: The input data for the task. Can be either:
|
|
204
206
|
- A list for positional arguments: [arg1, arg2, arg3]
|
|
205
207
|
- A dict for named parameters: {"param1": value1, "param2": value2}
|
|
208
|
+
idempotency_key: Optional client-generated key that makes this call safe
|
|
209
|
+
to retry. Repeating a call with the same key within 24 hours returns
|
|
210
|
+
the task run the first call started instead of starting another one.
|
|
206
211
|
|
|
207
212
|
Returns:
|
|
208
213
|
AwaitableTaskRun: A task run that can be awaited for the result
|
|
@@ -212,7 +217,11 @@ class WorkflowsService:
|
|
|
212
217
|
ServerError: For 5xx server errors and network failures
|
|
213
218
|
TimeoutError: If the request times out
|
|
214
219
|
"""
|
|
215
|
-
response = (
|
|
220
|
+
response = (
|
|
221
|
+
await self._create_task_api_call(
|
|
222
|
+
task_slug, input_data, idempotency_key=idempotency_key
|
|
223
|
+
)
|
|
224
|
+
).parsed
|
|
216
225
|
|
|
217
226
|
return AwaitableTaskRun(response, self)
|
|
218
227
|
|
|
@@ -220,6 +229,8 @@ class WorkflowsService:
|
|
|
220
229
|
self,
|
|
221
230
|
task_slug: TaskSlug,
|
|
222
231
|
input_data: TaskData,
|
|
232
|
+
*,
|
|
233
|
+
idempotency_key: str | None = None,
|
|
223
234
|
) -> TaskRunDetails:
|
|
224
235
|
"""Start a task and wait for it to complete, returning the result.
|
|
225
236
|
|
|
@@ -231,6 +242,9 @@ class WorkflowsService:
|
|
|
231
242
|
input_data: The input data for the task. Can be either:
|
|
232
243
|
- A list for positional arguments: [arg1, arg2, arg3]
|
|
233
244
|
- A dict for named parameters: {"param1": value1, "param2": value2}
|
|
245
|
+
idempotency_key: Optional client-generated key that makes this call safe
|
|
246
|
+
to retry. Repeating a call with the same key within 24 hours returns
|
|
247
|
+
the task run the first call started instead of starting another one.
|
|
234
248
|
|
|
235
249
|
Returns:
|
|
236
250
|
TaskRunDetails: The completed task run details
|
|
@@ -241,12 +255,18 @@ class WorkflowsService:
|
|
|
241
255
|
TimeoutError: If the request times out
|
|
242
256
|
TaskRunError: If the task run fails with an error
|
|
243
257
|
"""
|
|
244
|
-
task_run = await self.start_task(
|
|
258
|
+
task_run = await self.start_task(
|
|
259
|
+
task_slug, input_data, idempotency_key=idempotency_key
|
|
260
|
+
)
|
|
245
261
|
return await task_run
|
|
246
262
|
|
|
247
263
|
@handle_http_errors("create task")
|
|
248
264
|
async def _create_task_api_call(
|
|
249
|
-
self,
|
|
265
|
+
self,
|
|
266
|
+
task_slug: TaskSlug,
|
|
267
|
+
input_data: TaskData,
|
|
268
|
+
*,
|
|
269
|
+
idempotency_key: str | None = None,
|
|
250
270
|
) -> Response[Error | TaskRun]:
|
|
251
271
|
"""Internal method to make the create task API call."""
|
|
252
272
|
# Convert dict to TaskDataType1 for named parameters
|
|
@@ -260,6 +280,7 @@ class WorkflowsService:
|
|
|
260
280
|
run_task = RunTask(
|
|
261
281
|
task=task_slug,
|
|
262
282
|
input_=task_data_input,
|
|
283
|
+
idempotency_key=idempotency_key if idempotency_key is not None else UNSET,
|
|
263
284
|
)
|
|
264
285
|
|
|
265
286
|
# Make the API call
|
|
@@ -105,6 +105,8 @@ class SyncWorkflowsService:
|
|
|
105
105
|
self,
|
|
106
106
|
task_slug: TaskSlug,
|
|
107
107
|
input_data: TaskData,
|
|
108
|
+
*,
|
|
109
|
+
idempotency_key: str | None = None,
|
|
108
110
|
) -> TaskRun:
|
|
109
111
|
"""Start a task and return the task run without waiting for completion.
|
|
110
112
|
|
|
@@ -118,6 +120,9 @@ class SyncWorkflowsService:
|
|
|
118
120
|
input_data: The input data for the task. Can be either:
|
|
119
121
|
- A list for positional arguments: [arg1, arg2, arg3]
|
|
120
122
|
- A dict for named parameters: {"param1": value1, "param2": value2}
|
|
123
|
+
idempotency_key: Optional client-generated key that makes this call safe
|
|
124
|
+
to retry. Repeating a call with the same key within 24 hours returns
|
|
125
|
+
the task run the first call started instead of starting another one.
|
|
121
126
|
|
|
122
127
|
Returns:
|
|
123
128
|
TaskRun: The created task run
|
|
@@ -127,12 +132,16 @@ class SyncWorkflowsService:
|
|
|
127
132
|
ServerError: For 5xx server errors and network failures
|
|
128
133
|
TimeoutError: If the request times out
|
|
129
134
|
"""
|
|
130
|
-
return self._create_task_api_call(
|
|
135
|
+
return self._create_task_api_call(
|
|
136
|
+
task_slug, input_data, idempotency_key=idempotency_key
|
|
137
|
+
).parsed
|
|
131
138
|
|
|
132
139
|
def run_task(
|
|
133
140
|
self,
|
|
134
141
|
task_slug: TaskSlug,
|
|
135
142
|
input_data: TaskData,
|
|
143
|
+
*,
|
|
144
|
+
idempotency_key: str | None = None,
|
|
136
145
|
) -> TaskRunDetails:
|
|
137
146
|
"""Start a task and wait for it to complete, returning the result.
|
|
138
147
|
|
|
@@ -143,6 +152,9 @@ class SyncWorkflowsService:
|
|
|
143
152
|
input_data: The input data for the task. Can be either:
|
|
144
153
|
- A list for positional arguments: [arg1, arg2, arg3]
|
|
145
154
|
- A dict for named parameters: {"param1": value1, "param2": value2}
|
|
155
|
+
idempotency_key: Optional client-generated key that makes this call safe
|
|
156
|
+
to retry. Repeating a call with the same key within 24 hours returns
|
|
157
|
+
the task run the first call started instead of starting another one.
|
|
146
158
|
|
|
147
159
|
Returns:
|
|
148
160
|
TaskRunDetails: The completed task run details
|
|
@@ -153,7 +165,9 @@ class SyncWorkflowsService:
|
|
|
153
165
|
TimeoutError: If the request times out
|
|
154
166
|
TaskRunError: If the task run fails with an error
|
|
155
167
|
"""
|
|
156
|
-
task_run = self.start_task(
|
|
168
|
+
task_run = self.start_task(
|
|
169
|
+
task_slug, input_data, idempotency_key=idempotency_key
|
|
170
|
+
)
|
|
157
171
|
|
|
158
172
|
# If already in a terminal state, just get the details
|
|
159
173
|
status = task_run.status.value
|
|
@@ -183,7 +197,11 @@ class SyncWorkflowsService:
|
|
|
183
197
|
|
|
184
198
|
@handle_http_errors("create task")
|
|
185
199
|
def _create_task_api_call(
|
|
186
|
-
self,
|
|
200
|
+
self,
|
|
201
|
+
task_slug: TaskSlug,
|
|
202
|
+
input_data: TaskData,
|
|
203
|
+
*,
|
|
204
|
+
idempotency_key: str | None = None,
|
|
187
205
|
) -> Response[Error | TaskRun]:
|
|
188
206
|
"""Internal method to make the create task API call."""
|
|
189
207
|
# Convert dict to TaskDataType1 for named parameters
|
|
@@ -197,6 +215,7 @@ class SyncWorkflowsService:
|
|
|
197
215
|
run_task = RunTask(
|
|
198
216
|
task=task_slug,
|
|
199
217
|
input_=task_data_input,
|
|
218
|
+
idempotency_key=idempotency_key if idempotency_key is not None else UNSET,
|
|
200
219
|
)
|
|
201
220
|
|
|
202
221
|
# Make the API call
|
|
@@ -167,6 +167,7 @@ def _to_snapshot(model: GeneratedSandboxSnapshot) -> Snapshot:
|
|
|
167
167
|
status=model.status.value,
|
|
168
168
|
plan=model.plan.value,
|
|
169
169
|
requested_at=model.requested_at,
|
|
170
|
+
name=_set_or_none(model.name),
|
|
170
171
|
captured_at=_set_or_none(model.captured_at),
|
|
171
172
|
expires_at=model.expires_at,
|
|
172
173
|
size_bytes=_set_or_none(model.size_bytes),
|
|
@@ -242,6 +243,7 @@ class SandboxApi:
|
|
|
242
243
|
region: str | None,
|
|
243
244
|
env: dict[str, str] | None,
|
|
244
245
|
snapshot_id: str | None,
|
|
246
|
+
snapshot_name: str | None,
|
|
245
247
|
) -> Sandbox:
|
|
246
248
|
body = SandboxPOST(owner_id=owner_id)
|
|
247
249
|
if plan is not None:
|
|
@@ -258,16 +260,19 @@ class SandboxApi:
|
|
|
258
260
|
body.env = SandboxPOSTEnv.from_dict(env)
|
|
259
261
|
if snapshot_id is not None:
|
|
260
262
|
body.snapshot_id = snapshot_id
|
|
263
|
+
if snapshot_name is not None:
|
|
264
|
+
body.snapshot_name = snapshot_name
|
|
261
265
|
|
|
262
266
|
with request_errors("create sandbox"):
|
|
263
267
|
response = await create_sandbox.asyncio_detailed(
|
|
264
268
|
client=self.client, body=body
|
|
265
269
|
)
|
|
266
|
-
if snapshot_id is None
|
|
270
|
+
snapshot_ref = snapshot_id if snapshot_id is not None else snapshot_name
|
|
271
|
+
if snapshot_ref is None:
|
|
267
272
|
handle_api_error(response, "create sandbox")
|
|
268
273
|
else:
|
|
269
274
|
_handle_snapshot_api_error(
|
|
270
|
-
response,
|
|
275
|
+
response, snapshot_ref, "create sandbox", path_names_snapshot=False
|
|
271
276
|
)
|
|
272
277
|
if not isinstance(response.parsed, GeneratedSandbox):
|
|
273
278
|
raise RenderError("Failed to create sandbox: unexpected response type")
|
|
@@ -348,11 +353,13 @@ class SandboxApi:
|
|
|
348
353
|
self,
|
|
349
354
|
sandbox_id: str,
|
|
350
355
|
kind: str,
|
|
356
|
+
name: str | None,
|
|
351
357
|
expires_at: datetime | None,
|
|
352
358
|
owner_id: str | Unset,
|
|
353
359
|
) -> Snapshot:
|
|
354
360
|
body = SandboxSnapshotPOST(
|
|
355
361
|
kind=SandboxSnapshotKind(kind),
|
|
362
|
+
name=name if name is not None else UNSET,
|
|
356
363
|
expires_at=expires_at if expires_at is not None else UNSET,
|
|
357
364
|
)
|
|
358
365
|
with request_errors("create snapshot"):
|
|
@@ -169,6 +169,7 @@ def _to_snapshot(model: GeneratedSandboxSnapshot) -> Snapshot:
|
|
|
169
169
|
status=model.status.value,
|
|
170
170
|
plan=model.plan.value,
|
|
171
171
|
requested_at=model.requested_at,
|
|
172
|
+
name=_set_or_none(model.name),
|
|
172
173
|
captured_at=_set_or_none(model.captured_at),
|
|
173
174
|
expires_at=model.expires_at,
|
|
174
175
|
size_bytes=_set_or_none(model.size_bytes),
|
|
@@ -244,6 +245,7 @@ class SyncSandboxApi:
|
|
|
244
245
|
region: str | None,
|
|
245
246
|
env: dict[str, str] | None,
|
|
246
247
|
snapshot_id: str | None,
|
|
248
|
+
snapshot_name: str | None,
|
|
247
249
|
) -> Sandbox:
|
|
248
250
|
body = SandboxPOST(owner_id=owner_id)
|
|
249
251
|
if plan is not None:
|
|
@@ -260,14 +262,17 @@ class SyncSandboxApi:
|
|
|
260
262
|
body.env = SandboxPOSTEnv.from_dict(env)
|
|
261
263
|
if snapshot_id is not None:
|
|
262
264
|
body.snapshot_id = snapshot_id
|
|
265
|
+
if snapshot_name is not None:
|
|
266
|
+
body.snapshot_name = snapshot_name
|
|
263
267
|
|
|
264
268
|
with request_errors("create sandbox"):
|
|
265
269
|
response = create_sandbox.sync_detailed(client=self.client, body=body)
|
|
266
|
-
if snapshot_id is None
|
|
270
|
+
snapshot_ref = snapshot_id if snapshot_id is not None else snapshot_name
|
|
271
|
+
if snapshot_ref is None:
|
|
267
272
|
handle_api_error(response, "create sandbox")
|
|
268
273
|
else:
|
|
269
274
|
_handle_snapshot_api_error(
|
|
270
|
-
response,
|
|
275
|
+
response, snapshot_ref, "create sandbox", path_names_snapshot=False
|
|
271
276
|
)
|
|
272
277
|
if not isinstance(response.parsed, GeneratedSandbox):
|
|
273
278
|
raise RenderError("Failed to create sandbox: unexpected response type")
|
|
@@ -348,11 +353,13 @@ class SyncSandboxApi:
|
|
|
348
353
|
self,
|
|
349
354
|
sandbox_id: str,
|
|
350
355
|
kind: str,
|
|
356
|
+
name: str | None,
|
|
351
357
|
expires_at: datetime | None,
|
|
352
358
|
owner_id: str | Unset,
|
|
353
359
|
) -> Snapshot:
|
|
354
360
|
body = SandboxSnapshotPOST(
|
|
355
361
|
kind=SandboxSnapshotKind(kind),
|
|
362
|
+
name=name if name is not None else UNSET,
|
|
356
363
|
expires_at=expires_at if expires_at is not None else UNSET,
|
|
357
364
|
)
|
|
358
365
|
with request_errors("create snapshot"):
|
|
@@ -60,6 +60,7 @@ class SandboxClient:
|
|
|
60
60
|
region: str | None = None,
|
|
61
61
|
env: dict[str, str] | None = None,
|
|
62
62
|
snapshot_id: str | None = None,
|
|
63
|
+
snapshot_name: str | None = None,
|
|
63
64
|
) -> Sandbox:
|
|
64
65
|
"""Create a sandbox and return its initial state.
|
|
65
66
|
|
|
@@ -67,13 +68,16 @@ class SandboxClient:
|
|
|
67
68
|
workspace defaults enforced by the API (plan starter, 7200s timeout,
|
|
68
69
|
workspace default region and network policy).
|
|
69
70
|
|
|
70
|
-
snapshot_id starts the sandbox from that snapshot
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
snapshot_id starts the sandbox from that snapshot; snapshot_name starts
|
|
72
|
+
it from the available snapshot that name currently resolves to in the
|
|
73
|
+
sandbox group. The two parameters are mutually exclusive. For a runtime
|
|
74
|
+
snapshot, plan must match the snapshot's plan. Raises
|
|
75
|
+
SnapshotNotFoundError if the snapshot ID or name does not resolve,
|
|
74
76
|
SnapshotNotReadyError if it is not available, and
|
|
75
77
|
SnapshotPlanMismatchError on a runtime plan mismatch.
|
|
76
78
|
"""
|
|
79
|
+
if snapshot_id is not None and snapshot_name is not None:
|
|
80
|
+
raise ValueError("snapshot_id and snapshot_name are mutually exclusive")
|
|
77
81
|
resolved_owner_id = self._resolve_owner_id(owner_id)
|
|
78
82
|
resolved_region = region or self._default_region
|
|
79
83
|
return await self.api.create(
|
|
@@ -84,6 +88,7 @@ class SandboxClient:
|
|
|
84
88
|
region=resolved_region,
|
|
85
89
|
env=env,
|
|
86
90
|
snapshot_id=snapshot_id,
|
|
91
|
+
snapshot_name=snapshot_name,
|
|
87
92
|
)
|
|
88
93
|
|
|
89
94
|
async def from_id(self, sandbox_id: str, *, owner_id: str | None = None) -> Sandbox:
|
|
@@ -211,14 +216,16 @@ class SnapshotClient:
|
|
|
211
216
|
sandbox_id: str,
|
|
212
217
|
*,
|
|
213
218
|
kind: str = "filesystem",
|
|
219
|
+
name: str | None = None,
|
|
214
220
|
expires_at: datetime | None = None,
|
|
215
221
|
owner_id: str | None = None,
|
|
216
222
|
) -> Snapshot:
|
|
217
223
|
"""Capture a snapshot of a running sandbox.
|
|
218
224
|
|
|
219
225
|
kind is filesystem (the writable filesystem) or runtime (also memory and
|
|
220
|
-
CPU state).
|
|
221
|
-
|
|
226
|
+
CPU state). name is case sensitive and can be reused within a sandbox
|
|
227
|
+
group. expires_at must be in the future; omit it for Render's default
|
|
228
|
+
snapshot lifetime. The snapshot is returned in
|
|
222
229
|
status creating; poll from_id until it is available or failed. Raises
|
|
223
230
|
SandboxNotFoundError if the sandbox does not exist, and a ClientError
|
|
224
231
|
with code sandbox_not_running if it is not running.
|
|
@@ -226,6 +233,7 @@ class SnapshotClient:
|
|
|
226
233
|
return await self._sandboxes.api.create_snapshot(
|
|
227
234
|
sandbox_id,
|
|
228
235
|
kind,
|
|
236
|
+
name,
|
|
229
237
|
expires_at,
|
|
230
238
|
self._sandboxes._optional_owner_id(owner_id),
|
|
231
239
|
)
|
|
@@ -62,6 +62,7 @@ class SyncSandboxClient:
|
|
|
62
62
|
region: str | None = None,
|
|
63
63
|
env: dict[str, str] | None = None,
|
|
64
64
|
snapshot_id: str | None = None,
|
|
65
|
+
snapshot_name: str | None = None,
|
|
65
66
|
) -> Sandbox:
|
|
66
67
|
"""Create a sandbox and return its initial state.
|
|
67
68
|
|
|
@@ -69,13 +70,16 @@ class SyncSandboxClient:
|
|
|
69
70
|
workspace defaults enforced by the API (plan starter, 7200s timeout,
|
|
70
71
|
workspace default region and network policy).
|
|
71
72
|
|
|
72
|
-
snapshot_id starts the sandbox from that snapshot
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
snapshot_id starts the sandbox from that snapshot; snapshot_name starts
|
|
74
|
+
it from the available snapshot that name currently resolves to in the
|
|
75
|
+
sandbox group. The two parameters are mutually exclusive. For a runtime
|
|
76
|
+
snapshot, plan must match the snapshot's plan. Raises
|
|
77
|
+
SnapshotNotFoundError if the snapshot ID or name does not resolve,
|
|
76
78
|
SnapshotNotReadyError if it is not available, and
|
|
77
79
|
SnapshotPlanMismatchError on a runtime plan mismatch.
|
|
78
80
|
"""
|
|
81
|
+
if snapshot_id is not None and snapshot_name is not None:
|
|
82
|
+
raise ValueError("snapshot_id and snapshot_name are mutually exclusive")
|
|
79
83
|
resolved_owner_id = self._resolve_owner_id(owner_id)
|
|
80
84
|
resolved_region = region or self._default_region
|
|
81
85
|
return self.api.create(
|
|
@@ -86,6 +90,7 @@ class SyncSandboxClient:
|
|
|
86
90
|
region=resolved_region,
|
|
87
91
|
env=env,
|
|
88
92
|
snapshot_id=snapshot_id,
|
|
93
|
+
snapshot_name=snapshot_name,
|
|
89
94
|
)
|
|
90
95
|
|
|
91
96
|
def from_id(self, sandbox_id: str, *, owner_id: str | None = None) -> Sandbox:
|
|
@@ -213,14 +218,16 @@ class SyncSnapshotClient:
|
|
|
213
218
|
sandbox_id: str,
|
|
214
219
|
*,
|
|
215
220
|
kind: str = "filesystem",
|
|
221
|
+
name: str | None = None,
|
|
216
222
|
expires_at: datetime | None = None,
|
|
217
223
|
owner_id: str | None = None,
|
|
218
224
|
) -> Snapshot:
|
|
219
225
|
"""Capture a snapshot of a running sandbox.
|
|
220
226
|
|
|
221
227
|
kind is filesystem (the writable filesystem) or runtime (also memory and
|
|
222
|
-
CPU state).
|
|
223
|
-
|
|
228
|
+
CPU state). name is case sensitive and can be reused within a sandbox
|
|
229
|
+
group. expires_at must be in the future; omit it for Render's default
|
|
230
|
+
snapshot lifetime. The snapshot is returned in
|
|
224
231
|
status creating; poll from_id until it is available or failed. Raises
|
|
225
232
|
SandboxNotFoundError if the sandbox does not exist, and a ClientError
|
|
226
233
|
with code sandbox_not_running if it is not running.
|
|
@@ -228,6 +235,7 @@ class SyncSnapshotClient:
|
|
|
228
235
|
return self._sandboxes.api.create_snapshot(
|
|
229
236
|
sandbox_id,
|
|
230
237
|
kind,
|
|
238
|
+
name,
|
|
231
239
|
expires_at,
|
|
232
240
|
self._sandboxes._optional_owner_id(owner_id),
|
|
233
241
|
)
|