diff --git a/Cargo.lock b/Cargo.lock index e278050c..e4dc6ac5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -524,7 +524,7 @@ dependencies = [ [[package]] name = "config" -version = "0.3.64" +version = "0.3.65" dependencies = [ "base64", "chrono", @@ -631,7 +631,7 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crypto" -version = "0.3.64" +version = "0.3.65" dependencies = [ "aes-gcm", "base64", @@ -3331,7 +3331,7 @@ dependencies = [ [[package]] name = "testutils" -version = "0.3.64" +version = "0.3.65" dependencies = [ "pem", "rsa", @@ -3586,7 +3586,7 @@ checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801" [[package]] name = "tower" -version = "0.3.64" +version = "0.3.65" dependencies = [ "config", "pyo3", @@ -3614,7 +3614,7 @@ dependencies = [ [[package]] name = "tower-api" -version = "0.3.64" +version = "0.3.65" dependencies = [ "reqwest", "serde", @@ -3626,7 +3626,7 @@ dependencies = [ [[package]] name = "tower-cmd" -version = "0.3.64" +version = "0.3.65" dependencies = [ "axum", "bytes", @@ -3697,7 +3697,7 @@ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-package" -version = "0.3.64" +version = "0.3.65" dependencies = [ "async-compression", "flate2", @@ -3721,7 +3721,7 @@ dependencies = [ [[package]] name = "tower-runtime" -version = "0.3.64" +version = "0.3.65" dependencies = [ "async-trait", "chrono", @@ -3745,7 +3745,7 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tower-telemetry" -version = "0.3.64" +version = "0.3.65" dependencies = [ "tracing", "tracing-appender", @@ -3754,7 +3754,7 @@ dependencies = [ [[package]] name = "tower-uv" -version = "0.3.64" +version = "0.3.65" dependencies = [ "async-compression", "async_zip", @@ -3774,7 +3774,7 @@ dependencies = [ [[package]] name = "tower-version" -version = "0.3.64" +version = "0.3.65" dependencies = [ "anyhow", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 13c474a6..4b483bff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ resolver = "2" [workspace.package] edition = "2021" -version = "0.3.64" +version = "0.3.65" description = "Tower is the best way to host Python data apps in production" rust-version = "1.81" authors = ["Brad Heller ", "Ben Lovell "] diff --git a/crates/tower-api/README.md b/crates/tower-api/README.md index 34128aec..75e51713 100644 --- a/crates/tower-api/README.md +++ b/crates/tower-api/README.md @@ -8,7 +8,7 @@ For more information, please visit [https://tower.dev](https://tower.dev) This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client. -- API version: v0.10.24 +- API version: v0.11.7 - Package version: 1.0.0 - Generator version: 7.19.0 - Build package: `org.openapitools.codegen.languages.RustClientCodegen` @@ -43,6 +43,8 @@ Class | Method | HTTP request | Description *DefaultApi* | [**create_sandbox_secrets**](docs/DefaultApi.md#create_sandbox_secrets) | **POST** /sandbox/secrets | Create Tower-provided sandbox secrets *DefaultApi* | [**create_schedule**](docs/DefaultApi.md#create_schedule) | **POST** /schedules | Create schedule *DefaultApi* | [**create_secret**](docs/DefaultApi.md#create_secret) | **POST** /secrets | Create secret +*DefaultApi* | [**create_service_account**](docs/DefaultApi.md#create_service_account) | **POST** /service-accounts | Create service account +*DefaultApi* | [**create_service_account_api_key**](docs/DefaultApi.md#create_service_account_api_key) | **POST** /service-accounts/{idOrName}/api-keys | Create API key for service account *DefaultApi* | [**create_session**](docs/DefaultApi.md#create_session) | **POST** /session | Create session *DefaultApi* | [**create_team**](docs/DefaultApi.md#create_team) | **POST** /teams | Create team *DefaultApi* | [**create_webhook**](docs/DefaultApi.md#create_webhook) | **POST** /webhooks | Create webhook @@ -51,9 +53,12 @@ Class | Method | HTTP request | Description *DefaultApi* | [**delete_api_key**](docs/DefaultApi.md#delete_api_key) | **DELETE** /api-keys | Delete API key *DefaultApi* | [**delete_app**](docs/DefaultApi.md#delete_app) | **DELETE** /apps/{name} | Delete app *DefaultApi* | [**delete_catalog**](docs/DefaultApi.md#delete_catalog) | **DELETE** /catalogs/{name} | Delete catalog +*DefaultApi* | [**delete_environment**](docs/DefaultApi.md#delete_environment) | **DELETE** /environments/{name} | Delete environment *DefaultApi* | [**delete_guest**](docs/DefaultApi.md#delete_guest) | **DELETE** /guests/{guest_id} | Delete guest *DefaultApi* | [**delete_schedule**](docs/DefaultApi.md#delete_schedule) | **DELETE** /schedules | Delete schedule *DefaultApi* | [**delete_secret**](docs/DefaultApi.md#delete_secret) | **DELETE** /secrets/{name} | Delete secret +*DefaultApi* | [**delete_service_account**](docs/DefaultApi.md#delete_service_account) | **DELETE** /service-accounts/{idOrName} | Delete service account +*DefaultApi* | [**delete_service_account_api_key**](docs/DefaultApi.md#delete_service_account_api_key) | **DELETE** /service-accounts/{idOrName}/api-keys | Delete API key for service account *DefaultApi* | [**delete_session**](docs/DefaultApi.md#delete_session) | **DELETE** /session | Delete session *DefaultApi* | [**delete_team**](docs/DefaultApi.md#delete_team) | **DELETE** /teams | Delete team *DefaultApi* | [**delete_team_invitation**](docs/DefaultApi.md#delete_team_invitation) | **DELETE** /teams/{name}/invites | Delete team invitation @@ -64,6 +69,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**describe_app_version**](docs/DefaultApi.md#describe_app_version) | **GET** /apps/{name}/versions/{num} | Describe app version *DefaultApi* | [**describe_authentication_context**](docs/DefaultApi.md#describe_authentication_context) | **GET** /user/auth-context | Describe authentication context *DefaultApi* | [**describe_catalog**](docs/DefaultApi.md#describe_catalog) | **GET** /catalogs/{name} | Describe catalog +*DefaultApi* | [**describe_default_catalog**](docs/DefaultApi.md#describe_default_catalog) | **GET** /storage/catalogs/default | Describe default catalog *DefaultApi* | [**describe_device_login_session**](docs/DefaultApi.md#describe_device_login_session) | **GET** /login/device/{device_code} | Describe device login session *DefaultApi* | [**describe_email_preferences**](docs/DefaultApi.md#describe_email_preferences) | **GET** /user/email-preferences | Describe email preferences *DefaultApi* | [**describe_organization_usage**](docs/DefaultApi.md#describe_organization_usage) | **GET** /usage | Describe organization usage @@ -72,13 +78,15 @@ Class | Method | HTTP request | Description *DefaultApi* | [**describe_run_graph**](docs/DefaultApi.md#describe_run_graph) | **GET** /apps/{name}/runs/{seq}/graph | Describe run graph *DefaultApi* | [**describe_run_logs**](docs/DefaultApi.md#describe_run_logs) | **GET** /apps/{name}/runs/{seq}/logs | Describe run logs *DefaultApi* | [**describe_secrets_key**](docs/DefaultApi.md#describe_secrets_key) | **GET** /secrets/key | Describe encryption key +*DefaultApi* | [**describe_service_account**](docs/DefaultApi.md#describe_service_account) | **GET** /service-accounts/{idOrName} | Describe service account *DefaultApi* | [**describe_session**](docs/DefaultApi.md#describe_session) | **GET** /session | Describe session *DefaultApi* | [**describe_team**](docs/DefaultApi.md#describe_team) | **GET** /teams/{name} | Describe team *DefaultApi* | [**describe_webhook**](docs/DefaultApi.md#describe_webhook) | **GET** /webhooks/{name} | Describe webhook +*DefaultApi* | [**describe_whoami**](docs/DefaultApi.md#describe_whoami) | **GET** /whoami | Describe whoami *DefaultApi* | [**export_catalogs**](docs/DefaultApi.md#export_catalogs) | **POST** /catalogs/export | Export catalogs *DefaultApi* | [**export_secrets**](docs/DefaultApi.md#export_secrets) | **POST** /secrets/export | Export secrets *DefaultApi* | [**generate_app_statistics**](docs/DefaultApi.md#generate_app_statistics) | **GET** /stats/apps | Generate app statistics -*DefaultApi* | [**generate_organization_usage_time_series**](docs/DefaultApi.md#generate_organization_usage_time_series) | **GET** /usage/time-series | Get organization usage as time series +*DefaultApi* | [**generate_organization_usage_time_series**](docs/DefaultApi.md#generate_organization_usage_time_series) | **GET** /usage/time-series | Generate organization usage *DefaultApi* | [**generate_run_statistics**](docs/DefaultApi.md#generate_run_statistics) | **GET** /stats/runs | Generate run statistics *DefaultApi* | [**generate_runner_credentials**](docs/DefaultApi.md#generate_runner_credentials) | **POST** /runners/credentials | Generate runner credentials *DefaultApi* | [**invite_team_member**](docs/DefaultApi.md#invite_team_member) | **POST** /teams/{name}/invites | Invite team member @@ -97,6 +105,8 @@ Class | Method | HTTP request | Description *DefaultApi* | [**list_schedules**](docs/DefaultApi.md#list_schedules) | **GET** /schedules | List schedules *DefaultApi* | [**list_secret_environments**](docs/DefaultApi.md#list_secret_environments) | **GET** /secrets/environments | List secret environments *DefaultApi* | [**list_secrets**](docs/DefaultApi.md#list_secrets) | **GET** /secrets | List secrets +*DefaultApi* | [**list_service_account_api_keys**](docs/DefaultApi.md#list_service_account_api_keys) | **GET** /service-accounts/{idOrName}/api-keys | List API keys for service account +*DefaultApi* | [**list_service_accounts**](docs/DefaultApi.md#list_service_accounts) | **GET** /service-accounts | List service accounts *DefaultApi* | [**list_team_invitations**](docs/DefaultApi.md#list_team_invitations) | **GET** /teams/{name}/invites | List team invitations *DefaultApi* | [**list_team_members**](docs/DefaultApi.md#list_team_members) | **GET** /teams/{name}/members | List team members *DefaultApi* | [**list_teams**](docs/DefaultApi.md#list_teams) | **GET** /teams | List teams @@ -121,10 +131,12 @@ Class | Method | HTTP request | Description *DefaultApi* | [**update_plan**](docs/DefaultApi.md#update_plan) | **PUT** /plan | Update plan *DefaultApi* | [**update_schedule**](docs/DefaultApi.md#update_schedule) | **PUT** /schedules/{idOrName} | Update schedule *DefaultApi* | [**update_secret**](docs/DefaultApi.md#update_secret) | **PUT** /secrets/{name} | Update secret +*DefaultApi* | [**update_service_account**](docs/DefaultApi.md#update_service_account) | **PATCH** /service-accounts/{idOrName} | Update service account *DefaultApi* | [**update_team**](docs/DefaultApi.md#update_team) | **PUT** /teams/{name} | Update team *DefaultApi* | [**update_team_member**](docs/DefaultApi.md#update_team_member) | **PUT** /teams/{name}/members | Update team member *DefaultApi* | [**update_user**](docs/DefaultApi.md#update_user) | **PUT** /user | Update user profile *DefaultApi* | [**update_webhook**](docs/DefaultApi.md#update_webhook) | **PUT** /webhooks/{name} | Update webhook +*DefaultApi* | [**vend_catalog_credentials**](docs/DefaultApi.md#vend_catalog_credentials) | **POST** /catalogs/{name}/credentials | Vend catalog credentials *FeatureFlagsApi* | [**get_feature_flag_value**](docs/FeatureFlagsApi.md#get_feature_flag_value) | **GET** /feature-flags/{key} | Get feature flag value @@ -135,6 +147,7 @@ Class | Method | HTTP request | Description - [AcknowledgeAllAlertsResponse](docs/AcknowledgeAllAlertsResponse.md) - [Alert](docs/Alert.md) - [ApiKey](docs/ApiKey.md) + - [ApiKeyOwner](docs/ApiKeyOwner.md) - [App](docs/App.md) - [AppStatistics](docs/AppStatistics.md) - [AppSummary](docs/AppSummary.md) @@ -144,6 +157,7 @@ Class | Method | HTTP request | Description - [BatchScheduleResponse](docs/BatchScheduleResponse.md) - [CancelRunResponse](docs/CancelRunResponse.md) - [Catalog](docs/Catalog.md) + - [CatalogCredentials](docs/CatalogCredentials.md) - [CatalogProperty](docs/CatalogProperty.md) - [ClaimDeviceLoginTicketParams](docs/ClaimDeviceLoginTicketParams.md) - [ClaimDeviceLoginTicketResponse](docs/ClaimDeviceLoginTicketResponse.md) @@ -167,6 +181,10 @@ Class | Method | HTTP request | Description - [CreateScheduleResponse](docs/CreateScheduleResponse.md) - [CreateSecretParams](docs/CreateSecretParams.md) - [CreateSecretResponse](docs/CreateSecretResponse.md) + - [CreateServiceAccountApiKeyParams](docs/CreateServiceAccountApiKeyParams.md) + - [CreateServiceAccountApiKeyResponse](docs/CreateServiceAccountApiKeyResponse.md) + - [CreateServiceAccountParams](docs/CreateServiceAccountParams.md) + - [CreateServiceAccountResponse](docs/CreateServiceAccountResponse.md) - [CreateSessionParams](docs/CreateSessionParams.md) - [CreateSessionResponse](docs/CreateSessionResponse.md) - [CreateTeamParams](docs/CreateTeamParams.md) @@ -177,10 +195,12 @@ Class | Method | HTTP request | Description - [DeleteApiKeyResponse](docs/DeleteApiKeyResponse.md) - [DeleteAppResponse](docs/DeleteAppResponse.md) - [DeleteCatalogResponse](docs/DeleteCatalogResponse.md) + - [DeleteEnvironmentResponse](docs/DeleteEnvironmentResponse.md) - [DeleteGuestOutputBody](docs/DeleteGuestOutputBody.md) - [DeleteScheduleParams](docs/DeleteScheduleParams.md) - [DeleteScheduleResponse](docs/DeleteScheduleResponse.md) - [DeleteSecretResponse](docs/DeleteSecretResponse.md) + - [DeleteServiceAccountApiKeyParams](docs/DeleteServiceAccountApiKeyParams.md) - [DeleteSessionParams](docs/DeleteSessionParams.md) - [DeleteSessionResponse](docs/DeleteSessionResponse.md) - [DeleteTeamInvitationParams](docs/DeleteTeamInvitationParams.md) @@ -203,9 +223,11 @@ Class | Method | HTTP request | Description - [DescribeRunLogsResponse](docs/DescribeRunLogsResponse.md) - [DescribeRunResponse](docs/DescribeRunResponse.md) - [DescribeSecretsKeyResponse](docs/DescribeSecretsKeyResponse.md) + - [DescribeServiceAccountResponse](docs/DescribeServiceAccountResponse.md) - [DescribeSessionResponse](docs/DescribeSessionResponse.md) - [DescribeTeamResponse](docs/DescribeTeamResponse.md) - [DescribeWebhookResponse](docs/DescribeWebhookResponse.md) + - [DescribeWhoamiResponse](docs/DescribeWhoamiResponse.md) - [EmailSubscriptions](docs/EmailSubscriptions.md) - [EncryptedCatalogProperty](docs/EncryptedCatalogProperty.md) - [Environment](docs/Environment.md) @@ -248,6 +270,8 @@ Class | Method | HTTP request | Description - [ListSchedulesResponse](docs/ListSchedulesResponse.md) - [ListSecretEnvironmentsResponse](docs/ListSecretEnvironmentsResponse.md) - [ListSecretsResponse](docs/ListSecretsResponse.md) + - [ListServiceAccountApiKeysResponse](docs/ListServiceAccountApiKeysResponse.md) + - [ListServiceAccountsResponse](docs/ListServiceAccountsResponse.md) - [ListTeamInvitationsResponse](docs/ListTeamInvitationsResponse.md) - [ListTeamMembersResponse](docs/ListTeamMembersResponse.md) - [ListTeamsResponse](docs/ListTeamsResponse.md) @@ -270,6 +294,7 @@ Class | Method | HTTP request | Description - [RunAppParams](docs/RunAppParams.md) - [RunAppResponse](docs/RunAppResponse.md) - [RunAttempt](docs/RunAttempt.md) + - [RunCreator](docs/RunCreator.md) - [RunFailureAlert](docs/RunFailureAlert.md) - [RunGraphNode](docs/RunGraphNode.md) - [RunGraphRunId](docs/RunGraphRunId.md) @@ -285,12 +310,15 @@ Class | Method | HTTP request | Description - [Runner](docs/Runner.md) - [RunnerCredentials](docs/RunnerCredentials.md) - [Schedule](docs/Schedule.md) + - [ScheduleOwner](docs/ScheduleOwner.md) - [ScheduleRunInitiatorDetails](docs/ScheduleRunInitiatorDetails.md) - [SearchRunsResponse](docs/SearchRunsResponse.md) - [Secret](docs/Secret.md) - [ServerSentEventsInner](docs/ServerSentEventsInner.md) - [ServerSentEventsInner1](docs/ServerSentEventsInner1.md) - [ServerSentEventsInner2](docs/ServerSentEventsInner2.md) + - [ServiceAccount](docs/ServiceAccount.md) + - [ServiceAccountCreator](docs/ServiceAccountCreator.md) - [Session](docs/Session.md) - [ShoulderTap](docs/ShoulderTap.md) - [SseWarning](docs/SseWarning.md) @@ -321,6 +349,8 @@ Class | Method | HTTP request | Description - [UpdateScheduleResponse](docs/UpdateScheduleResponse.md) - [UpdateSecretParams](docs/UpdateSecretParams.md) - [UpdateSecretResponse](docs/UpdateSecretResponse.md) + - [UpdateServiceAccountParams](docs/UpdateServiceAccountParams.md) + - [UpdateServiceAccountResponse](docs/UpdateServiceAccountResponse.md) - [UpdateTeamMemberParams](docs/UpdateTeamMemberParams.md) - [UpdateTeamMemberResponse](docs/UpdateTeamMemberResponse.md) - [UpdateTeamParams](docs/UpdateTeamParams.md) @@ -332,6 +362,8 @@ Class | Method | HTTP request | Description - [UsageLimit](docs/UsageLimit.md) - [UsageMetricTimeSeriesPoint](docs/UsageMetricTimeSeriesPoint.md) - [User](docs/User.md) + - [VendCatalogCredentialsBody](docs/VendCatalogCredentialsBody.md) + - [VendCatalogCredentialsResponse](docs/VendCatalogCredentialsResponse.md) - [Webhook](docs/Webhook.md) diff --git a/crates/tower-api/src/apis/configuration.rs b/crates/tower-api/src/apis/configuration.rs index 8c0cc1d9..9a23f4ff 100644 --- a/crates/tower-api/src/apis/configuration.rs +++ b/crates/tower-api/src/apis/configuration.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/apis/default_api.rs b/crates/tower-api/src/apis/default_api.rs index 3b081631..e05ade3c 100644 --- a/crates/tower-api/src/apis/default_api.rs +++ b/crates/tower-api/src/apis/default_api.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ @@ -103,6 +103,20 @@ pub struct CreateSecretParams { pub create_secret_params: models::CreateSecretParams, } +/// struct for passing parameters to the method [`create_service_account`] +#[derive(Clone, Debug)] +pub struct CreateServiceAccountParams { + pub create_service_account_params: models::CreateServiceAccountParams, +} + +/// struct for passing parameters to the method [`create_service_account_api_key`] +#[derive(Clone, Debug)] +pub struct CreateServiceAccountApiKeyParams { + /// The ID or name of the service account this key authenticates as. + pub id_or_name: String, + pub create_service_account_api_key_params: models::CreateServiceAccountApiKeyParams, +} + /// struct for passing parameters to the method [`create_session`] #[derive(Clone, Debug)] pub struct CreateSessionParams { @@ -156,6 +170,13 @@ pub struct DeleteCatalogParams { pub environment: Option, } +/// struct for passing parameters to the method [`delete_environment`] +#[derive(Clone, Debug)] +pub struct DeleteEnvironmentParams { + /// The name of the environment to delete. + pub name: String, +} + /// struct for passing parameters to the method [`delete_guest`] #[derive(Clone, Debug)] pub struct DeleteGuestParams { @@ -178,6 +199,21 @@ pub struct DeleteSecretParams { pub environment: Option, } +/// struct for passing parameters to the method [`delete_service_account`] +#[derive(Clone, Debug)] +pub struct DeleteServiceAccountParams { + /// The ID or name of the service account to delete. + pub id_or_name: String, +} + +/// struct for passing parameters to the method [`delete_service_account_api_key`] +#[derive(Clone, Debug)] +pub struct DeleteServiceAccountApiKeyParams { + /// The ID or name of the service account. + pub id_or_name: String, + pub delete_service_account_api_key_params: models::DeleteServiceAccountApiKeyParams, +} + /// struct for passing parameters to the method [`delete_session`] #[derive(Clone, Debug)] pub struct DeleteSessionParams { @@ -214,6 +250,8 @@ pub struct DeployAppParams { pub deploy_app_request: models::DeployAppRequest, /// The SHA256 hash of the content, used to verify integrity. pub x_tower_checksum_sha256: Option, + /// Optional opaque key (typically a git commit SHA or CI build ID). If a prior deploy for this app supplied the same value, the server reuses that AppVersion instead of creating a new one — letting consecutive deploys to different environments share a single version when the source hasn't changed. + pub x_tower_idempotency_key: Option, /// Size of the uploaded bundle in bytes. pub content_length: Option, /// The environment to deploy to. @@ -316,6 +354,13 @@ pub struct DescribeSecretsKeyParams { pub format: Option, } +/// struct for passing parameters to the method [`describe_service_account`] +#[derive(Clone, Debug)] +pub struct DescribeServiceAccountParams { + /// The ID or name of the service account. + pub id_or_name: String, +} + /// struct for passing parameters to the method [`describe_team`] #[derive(Clone, Debug)] pub struct DescribeTeamParams { @@ -447,10 +492,12 @@ pub struct ListCatalogsParams { pub page: Option, /// The number of records to fetch on each page. pub page_size: Option, - /// The environment to filter by. + /// The environment to filter by. When omitted, catalogs across all environments are returned. pub environment: Option, /// Whether to fetch all catalogs across all environments or only for the current environment. pub all: Option, + /// Filter catalogs by type, e.g. \"tower-catalog\". When omitted, all catalog types are returned. + pub r#type: Option, } /// struct for passing parameters to the method [`list_environments`] @@ -506,6 +553,8 @@ pub struct ListSchedulesParams { pub page_size: Option, /// Filter schedules by environment. If not provided, all environments will be included. pub environment: Option, + /// Filter schedules by app name. If not provided, schedules across all apps will be included. + pub app: Option, } /// struct for passing parameters to the method [`list_secrets`] @@ -521,6 +570,26 @@ pub struct ListSecretsParams { pub all: Option, } +/// struct for passing parameters to the method [`list_service_account_api_keys`] +#[derive(Clone, Debug)] +pub struct ListServiceAccountApiKeysParams { + /// The ID or name of the service account. + pub id_or_name: String, + /// The page number to fetch. + pub page: Option, + /// The number of records to fetch on each page. + pub page_size: Option, +} + +/// struct for passing parameters to the method [`list_service_accounts`] +#[derive(Clone, Debug)] +pub struct ListServiceAccountsParams { + /// The page number to fetch. + pub page: Option, + /// The number of records to fetch on each page. + pub page_size: Option, +} + /// struct for passing parameters to the method [`list_team_invitations`] #[derive(Clone, Debug)] pub struct ListTeamInvitationsParams { @@ -700,6 +769,14 @@ pub struct UpdateSecretParams { pub update_secret_params: models::UpdateSecretParams, } +/// struct for passing parameters to the method [`update_service_account`] +#[derive(Clone, Debug)] +pub struct UpdateServiceAccountParams { + /// The ID or name of the service account to update. + pub id_or_name: String, + pub update_service_account_params: models::UpdateServiceAccountParams, +} + /// struct for passing parameters to the method [`update_team`] #[derive(Clone, Debug)] pub struct UpdateTeamParams { @@ -730,6 +807,16 @@ pub struct UpdateWebhookParams { pub update_webhook_params: models::UpdateWebhookParams, } +/// struct for passing parameters to the method [`vend_catalog_credentials`] +#[derive(Clone, Debug)] +pub struct VendCatalogCredentialsParams { + /// The name of the catalog. + pub name: String, + pub vend_catalog_credentials_body: models::VendCatalogCredentialsBody, + /// The environment of the catalog. + pub environment: Option, +} + /// struct for typed successes of method [`acknowledge_alert`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -858,6 +945,22 @@ pub enum CreateSecretSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`create_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum CreateServiceAccountSuccess { + Status201(models::CreateServiceAccountResponse), + UnknownValue(serde_json::Value), +} + +/// struct for typed successes of method [`create_service_account_api_key`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum CreateServiceAccountApiKeySuccess { + Status201(models::CreateServiceAccountApiKeyResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`create_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -922,6 +1025,14 @@ pub enum DeleteCatalogSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`delete_environment`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DeleteEnvironmentSuccess { + Status200(models::DeleteEnvironmentResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`delete_guest`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -946,6 +1057,22 @@ pub enum DeleteSecretSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`delete_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DeleteServiceAccountSuccess { + Status204(), + UnknownValue(serde_json::Value), +} + +/// struct for typed successes of method [`delete_service_account_api_key`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DeleteServiceAccountApiKeySuccess { + Status204(), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`delete_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1026,6 +1153,15 @@ pub enum DescribeCatalogSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`describe_default_catalog`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DescribeDefaultCatalogSuccess { + Status200(models::DescribeCatalogResponse), + Status202(), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`describe_device_login_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1090,6 +1226,14 @@ pub enum DescribeSecretsKeySuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`describe_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DescribeServiceAccountSuccess { + Status200(models::DescribeServiceAccountResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`describe_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1114,6 +1258,14 @@ pub enum DescribeWebhookSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`describe_whoami`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DescribeWhoamiSuccess { + Status200(models::DescribeWhoamiResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`export_catalogs`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1290,6 +1442,22 @@ pub enum ListSecretsSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`list_service_account_api_keys`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ListServiceAccountApiKeysSuccess { + Status200(models::ListServiceAccountApiKeysResponse), + UnknownValue(serde_json::Value), +} + +/// struct for typed successes of method [`list_service_accounts`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ListServiceAccountsSuccess { + Status200(models::ListServiceAccountsResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`list_team_invitations`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1482,6 +1650,14 @@ pub enum UpdateSecretSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`update_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum UpdateServiceAccountSuccess { + Status200(models::UpdateServiceAccountResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed successes of method [`update_team`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1514,6 +1690,14 @@ pub enum UpdateWebhookSuccess { UnknownValue(serde_json::Value), } +/// struct for typed successes of method [`vend_catalog_credentials`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum VendCatalogCredentialsSuccess { + Status200(models::VendCatalogCredentialsResponse), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`acknowledge_alert`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1645,6 +1829,22 @@ pub enum CreateSecretError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`create_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum CreateServiceAccountError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`create_service_account_api_key`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum CreateServiceAccountApiKeyError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`create_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1709,6 +1909,14 @@ pub enum DeleteCatalogError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`delete_environment`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DeleteEnvironmentError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`delete_guest`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1733,6 +1941,22 @@ pub enum DeleteSecretError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`delete_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DeleteServiceAccountError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`delete_service_account_api_key`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DeleteServiceAccountApiKeyError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`delete_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1815,6 +2039,13 @@ pub enum DescribeCatalogError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`describe_default_catalog`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DescribeDefaultCatalogError { + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`describe_device_login_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1881,6 +2112,14 @@ pub enum DescribeSecretsKeyError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`describe_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DescribeServiceAccountError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`describe_session`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -1905,6 +2144,14 @@ pub enum DescribeWebhookError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`describe_whoami`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum DescribeWhoamiError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`export_catalogs`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -2081,6 +2328,22 @@ pub enum ListSecretsError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`list_service_account_api_keys`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ListServiceAccountApiKeysError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + +/// struct for typed errors of method [`list_service_accounts`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum ListServiceAccountsError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`list_team_invitations`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -2279,6 +2542,14 @@ pub enum UpdateSecretError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`update_service_account`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum UpdateServiceAccountError { + DefaultResponse(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// struct for typed errors of method [`update_team`] #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] @@ -2311,6 +2582,18 @@ pub enum UpdateWebhookError { UnknownValue(serde_json::Value), } +/// struct for typed errors of method [`vend_catalog_credentials`] +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(untagged)] +pub enum VendCatalogCredentialsError { + Status401(models::ErrorModel), + Status403(models::ErrorModel), + Status404(models::ErrorModel), + Status422(models::ErrorModel), + Status500(models::ErrorModel), + UnknownValue(serde_json::Value), +} + /// Mark an alert as acknowledged pub async fn acknowledge_alert( configuration: &configuration::Configuration, @@ -3219,12 +3502,12 @@ pub async fn create_secret( } } -/// Create a new session and return it. -pub async fn create_session( +/// Create a new service account in the current account. Team admin only. +pub async fn create_service_account( configuration: &configuration::Configuration, - params: CreateSessionParams, -) -> Result, Error> { - let uri_str = format!("{}/session", configuration.base_path); + params: CreateServiceAccountParams, +) -> Result, Error> { + let uri_str = format!("{}/service-accounts", configuration.base_path); let mut req_builder = configuration .client .request(reqwest::Method::POST, &uri_str); @@ -3232,7 +3515,18 @@ pub async fn create_session( if let Some(ref user_agent) = configuration.user_agent { req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); } - req_builder = req_builder.json(¶ms.create_session_params); + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + req_builder = req_builder.json(¶ms.create_service_account_params); let req = req_builder.build()?; let resp = configuration.client.execute(req).await?; @@ -3247,7 +3541,7 @@ pub async fn create_session( if !status.is_client_error() && !status.is_server_error() { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Ok(ResponseContent { tower_trace_id, status, @@ -3256,7 +3550,7 @@ pub async fn create_session( }) } else { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Err(Error::ResponseError(ResponseContent { tower_trace_id, status, @@ -3266,12 +3560,19 @@ pub async fn create_session( } } -/// Create a new team -pub async fn create_team( +/// Mint a new API key bound to a service account. The full identifier is only returned on this response. Team admin only. +pub async fn create_service_account_api_key( configuration: &configuration::Configuration, - params: CreateTeamParams, -) -> Result, Error> { - let uri_str = format!("{}/teams", configuration.base_path); + params: CreateServiceAccountApiKeyParams, +) -> Result< + ResponseContent, + Error, +> { + let uri_str = format!( + "{}/service-accounts/{idOrName}/api-keys", + configuration.base_path, + idOrName = crate::apis::urlencode(params.id_or_name) + ); let mut req_builder = configuration .client .request(reqwest::Method::POST, &uri_str); @@ -3290,7 +3591,7 @@ pub async fn create_team( }; req_builder = req_builder.header("X-API-Key", value); }; - req_builder = req_builder.json(¶ms.create_team_params); + req_builder = req_builder.json(¶ms.create_service_account_api_key_params); let req = req_builder.build()?; let resp = configuration.client.execute(req).await?; @@ -3305,7 +3606,7 @@ pub async fn create_team( if !status.is_client_error() && !status.is_server_error() { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Ok(ResponseContent { tower_trace_id, status, @@ -3314,7 +3615,7 @@ pub async fn create_team( }) } else { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Err(Error::ResponseError(ResponseContent { tower_trace_id, status, @@ -3324,11 +3625,12 @@ pub async fn create_team( } } -pub async fn create_webhook( +/// Create a new session and return it. +pub async fn create_session( configuration: &configuration::Configuration, - params: CreateWebhookParams, -) -> Result, Error> { - let uri_str = format!("{}/webhooks", configuration.base_path); + params: CreateSessionParams, +) -> Result, Error> { + let uri_str = format!("{}/session", configuration.base_path); let mut req_builder = configuration .client .request(reqwest::Method::POST, &uri_str); @@ -3336,18 +3638,7 @@ pub async fn create_webhook( if let Some(ref user_agent) = configuration.user_agent { req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); } - if let Some(ref token) = configuration.bearer_access_token { - req_builder = req_builder.bearer_auth(token.to_owned()); - }; - if let Some(ref apikey) = configuration.api_key { - let key = apikey.key.clone(); - let value = match apikey.prefix { - Some(ref prefix) => format!("{} {}", prefix, key), - None => key, - }; - req_builder = req_builder.header("X-API-Key", value); - }; - req_builder = req_builder.json(¶ms.create_webhook_params); + req_builder = req_builder.json(¶ms.create_session_params); let req = req_builder.build()?; let resp = configuration.client.execute(req).await?; @@ -3362,7 +3653,7 @@ pub async fn create_webhook( if !status.is_client_error() && !status.is_server_error() { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Ok(ResponseContent { tower_trace_id, status, @@ -3371,7 +3662,7 @@ pub async fn create_webhook( }) } else { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Err(Error::ResponseError(ResponseContent { tower_trace_id, status, @@ -3381,13 +3672,128 @@ pub async fn create_webhook( } } -/// Deactivate multiple schedules to disable their execution. -pub async fn deactivate_schedules( +/// Create a new team +pub async fn create_team( configuration: &configuration::Configuration, - params: DeactivateSchedulesParams, -) -> Result, Error> { - let uri_str = format!("{}/schedules/deactivate", configuration.base_path); - let mut req_builder = configuration + params: CreateTeamParams, +) -> Result, Error> { + let uri_str = format!("{}/teams", configuration.base_path); + let mut req_builder = configuration + .client + .request(reqwest::Method::POST, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + req_builder = req_builder.json(¶ms.create_team_params); + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + +pub async fn create_webhook( + configuration: &configuration::Configuration, + params: CreateWebhookParams, +) -> Result, Error> { + let uri_str = format!("{}/webhooks", configuration.base_path); + let mut req_builder = configuration + .client + .request(reqwest::Method::POST, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + req_builder = req_builder.json(¶ms.create_webhook_params); + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + +/// Deactivate multiple schedules to disable their execution. +pub async fn deactivate_schedules( + configuration: &configuration::Configuration, + params: DeactivateSchedulesParams, +) -> Result, Error> { + let uri_str = format!("{}/schedules/deactivate", configuration.base_path); + let mut req_builder = configuration .client .request(reqwest::Method::PATCH, &uri_str); @@ -3682,6 +4088,67 @@ pub async fn delete_catalog( } } +/// Delete an environment by name +pub async fn delete_environment( + configuration: &configuration::Configuration, + params: DeleteEnvironmentParams, +) -> Result, Error> { + let uri_str = format!( + "{}/environments/{name}", + configuration.base_path, + name = crate::apis::urlencode(params.name) + ); + let mut req_builder = configuration + .client + .request(reqwest::Method::DELETE, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + /// Deletes a guest and revokes their access. Any active sessions will be invalidated. pub async fn delete_guest( configuration: &configuration::Configuration, @@ -3865,6 +4332,132 @@ pub async fn delete_secret( } } +/// Tombstones a service account: revokes API keys, disables owned schedules, cancels in-flight runs, then soft-deletes the SA. Team admin only. +pub async fn delete_service_account( + configuration: &configuration::Configuration, + params: DeleteServiceAccountParams, +) -> Result, Error> { + let uri_str = format!( + "{}/service-accounts/{idOrName}", + configuration.base_path, + idOrName = crate::apis::urlencode(params.id_or_name) + ); + let mut req_builder = configuration + .client + .request(reqwest::Method::DELETE, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + +/// Revoke an API key bound to a service account. Team admin only. +pub async fn delete_service_account_api_key( + configuration: &configuration::Configuration, + params: DeleteServiceAccountApiKeyParams, +) -> Result< + ResponseContent, + Error, +> { + let uri_str = format!( + "{}/service-accounts/{idOrName}/api-keys", + configuration.base_path, + idOrName = crate::apis::urlencode(params.id_or_name) + ); + let mut req_builder = configuration + .client + .request(reqwest::Method::DELETE, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + req_builder = req_builder.json(¶ms.delete_service_account_api_key_params); + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + /// Terminate a session and revoke the access keys associated with it. pub async fn delete_session( configuration: &configuration::Configuration, @@ -4129,6 +4722,9 @@ pub async fn deploy_app( if let Some(param_value) = params.x_tower_checksum_sha256 { req_builder = req_builder.header("X-Tower-Checksum-SHA256", param_value.to_string()); } + if let Some(param_value) = params.x_tower_idempotency_key { + req_builder = req_builder.header("X-Tower-Idempotency-Key", param_value.to_string()); + } if let Some(param_value) = params.content_length { req_builder = req_builder.header("Content-Length", param_value.to_string()); } @@ -4491,6 +5087,60 @@ pub async fn describe_catalog( } } +/// Returns the team's default catalog, provisioning it lazily if it does not yet exist. When two concurrent first calls race to provision the catalog, the loser receives 202 Accepted; retry after a few seconds and the catalog will be ready. +pub async fn describe_default_catalog( + configuration: &configuration::Configuration, +) -> Result, Error> { + let uri_str = format!("{}/storage/catalogs/default", configuration.base_path); + let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + /// Checks if a device login code has been claimed and returns the user session if so. pub async fn describe_device_login_session( configuration: &configuration::Configuration, @@ -4954,6 +5604,65 @@ pub async fn describe_secrets_key( } } +/// Fetch a single service account by ID or name. Team admin only. +pub async fn describe_service_account( + configuration: &configuration::Configuration, + params: DescribeServiceAccountParams, +) -> Result, Error> { + let uri_str = format!( + "{}/service-accounts/{idOrName}", + configuration.base_path, + idOrName = crate::apis::urlencode(params.id_or_name) + ); + let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + /// Validate your current session and return the user information associated with the session. pub async fn describe_session( configuration: &configuration::Configuration, @@ -4989,7 +5698,66 @@ pub async fn describe_session( if !status.is_client_error() && !status.is_server_error() { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + +/// Get details about a team, including its members and invitations. +pub async fn describe_team( + configuration: &configuration::Configuration, + params: DescribeTeamParams, +) -> Result, Error> { + let uri_str = format!( + "{}/teams/{name}", + configuration.base_path, + name = crate::apis::urlencode(params.name) + ); + let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); Ok(ResponseContent { tower_trace_id, status, @@ -4998,7 +5766,7 @@ pub async fn describe_session( }) } else { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Err(Error::ResponseError(ResponseContent { tower_trace_id, status, @@ -5008,13 +5776,12 @@ pub async fn describe_session( } } -/// Get details about a team, including its members and invitations. -pub async fn describe_team( +pub async fn describe_webhook( configuration: &configuration::Configuration, - params: DescribeTeamParams, -) -> Result, Error> { + params: DescribeWebhookParams, +) -> Result, Error> { let uri_str = format!( - "{}/teams/{name}", + "{}/webhooks/{name}", configuration.base_path, name = crate::apis::urlencode(params.name) ); @@ -5048,7 +5815,7 @@ pub async fn describe_team( if !status.is_client_error() && !status.is_server_error() { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Ok(ResponseContent { tower_trace_id, status, @@ -5057,7 +5824,7 @@ pub async fn describe_team( }) } else { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Err(Error::ResponseError(ResponseContent { tower_trace_id, status, @@ -5067,15 +5834,11 @@ pub async fn describe_team( } } -pub async fn describe_webhook( +/// Returns an RS256-signed identity JWT for the authenticated user. The token's signature can be verified using the public keys served at /.well-known/jwks.json. Intended for downstream consumers (e.g. Convex) that need a verifiable user identity. +pub async fn describe_whoami( configuration: &configuration::Configuration, - params: DescribeWebhookParams, -) -> Result, Error> { - let uri_str = format!( - "{}/webhooks/{name}", - configuration.base_path, - name = crate::apis::urlencode(params.name) - ); +) -> Result, Error> { + let uri_str = format!("{}/whoami", configuration.base_path); let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); if let Some(ref user_agent) = configuration.user_agent { @@ -5106,7 +5869,7 @@ pub async fn describe_webhook( if !status.is_client_error() && !status.is_server_error() { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Ok(ResponseContent { tower_trace_id, status, @@ -5115,7 +5878,7 @@ pub async fn describe_webhook( }) } else { let content = resp.text().await?; - let entity: Option = serde_json::from_str(&content).ok(); + let entity: Option = serde_json::from_str(&content).ok(); Err(Error::ResponseError(ResponseContent { tower_trace_id, status, @@ -5971,6 +6734,9 @@ pub async fn list_catalogs( if let Some(ref param_value) = params.all { req_builder = req_builder.query(&[("all", ¶m_value.to_string())]); } + if let Some(ref param_value) = params.r#type { + req_builder = req_builder.query(&[("type", ¶m_value.to_string())]); + } if let Some(ref user_agent) = configuration.user_agent { req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); } @@ -6345,7 +7111,7 @@ pub async fn list_runs( } } -/// List all schedules for an app. +/// Lists all schedules for the current account, optionally filtered by environment and app. pub async fn list_schedules( configuration: &configuration::Configuration, params: ListSchedulesParams, @@ -6362,6 +7128,9 @@ pub async fn list_schedules( if let Some(ref param_value) = params.environment { req_builder = req_builder.query(&[("environment", ¶m_value.to_string())]); } + if let Some(ref param_value) = params.app { + req_builder = req_builder.query(&[("app", ¶m_value.to_string())]); + } if let Some(ref user_agent) = configuration.user_agent { req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); } @@ -6530,6 +7299,133 @@ pub async fn list_secrets( } } +/// List API keys bound to a service account. Team admin only. +pub async fn list_service_account_api_keys( + configuration: &configuration::Configuration, + params: ListServiceAccountApiKeysParams, +) -> Result, Error> +{ + let uri_str = format!( + "{}/service-accounts/{idOrName}/api-keys", + configuration.base_path, + idOrName = crate::apis::urlencode(params.id_or_name) + ); + let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); + + if let Some(ref param_value) = params.page { + req_builder = req_builder.query(&[("page", ¶m_value.to_string())]); + } + if let Some(ref param_value) = params.page_size { + req_builder = req_builder.query(&[("page_size", ¶m_value.to_string())]); + } + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + +/// List all service accounts in the current account. Team admin only. +pub async fn list_service_accounts( + configuration: &configuration::Configuration, + params: ListServiceAccountsParams, +) -> Result, Error> { + let uri_str = format!("{}/service-accounts", configuration.base_path); + let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); + + if let Some(ref param_value) = params.page { + req_builder = req_builder.query(&[("page", ¶m_value.to_string())]); + } + if let Some(ref param_value) = params.page_size { + req_builder = req_builder.query(&[("page_size", ¶m_value.to_string())]); + } + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + /// List the pending invitations for a team pub async fn list_team_invitations( configuration: &configuration::Configuration, @@ -7979,6 +8875,68 @@ pub async fn update_secret( } } +/// Update one or more fields on an existing service account. Team admin only. +pub async fn update_service_account( + configuration: &configuration::Configuration, + params: UpdateServiceAccountParams, +) -> Result, Error> { + let uri_str = format!( + "{}/service-accounts/{idOrName}", + configuration.base_path, + idOrName = crate::apis::urlencode(params.id_or_name) + ); + let mut req_builder = configuration + .client + .request(reqwest::Method::PATCH, &uri_str); + + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + req_builder = req_builder.json(¶ms.update_service_account_params); + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} + /// Update a team with a new name or name. Note that updating the team with a new name will cause all your URLs to change! pub async fn update_team( configuration: &configuration::Configuration, @@ -8213,3 +9171,68 @@ pub async fn update_webhook( })) } } + +/// Mints a short-lived OAuth bearer token for browser or SDK access to a managed (tower-catalog) catalog. Defaults to read-only (`mode: \"read\"`); pass `mode: \"read-write\"` in the body (requires the catalogs:update scope) for a token bound to the read-write principal. Team membership is enforced before vending; the master Polaris credentials never leave Tower. +pub async fn vend_catalog_credentials( + configuration: &configuration::Configuration, + params: VendCatalogCredentialsParams, +) -> Result, Error> { + let uri_str = format!( + "{}/catalogs/{name}/credentials", + configuration.base_path, + name = crate::apis::urlencode(params.name) + ); + let mut req_builder = configuration + .client + .request(reqwest::Method::POST, &uri_str); + + if let Some(ref param_value) = params.environment { + req_builder = req_builder.query(&[("environment", ¶m_value.to_string())]); + } + if let Some(ref user_agent) = configuration.user_agent { + req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); + } + if let Some(ref token) = configuration.bearer_access_token { + req_builder = req_builder.bearer_auth(token.to_owned()); + }; + if let Some(ref apikey) = configuration.api_key { + let key = apikey.key.clone(); + let value = match apikey.prefix { + Some(ref prefix) => format!("{} {}", prefix, key), + None => key, + }; + req_builder = req_builder.header("X-API-Key", value); + }; + req_builder = req_builder.json(¶ms.vend_catalog_credentials_body); + + let req = req_builder.build()?; + let resp = configuration.client.execute(req).await?; + + let status = resp.status(); + + let tower_trace_id = resp + .headers() + .get("x-tower-trace-id") + .and_then(|v| v.to_str().ok()) + .map_or(String::from(DEFAULT_TOWER_TRACE_ID), String::from); + + if !status.is_client_error() && !status.is_server_error() { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Ok(ResponseContent { + tower_trace_id, + status, + content, + entity, + }) + } else { + let content = resp.text().await?; + let entity: Option = serde_json::from_str(&content).ok(); + Err(Error::ResponseError(ResponseContent { + tower_trace_id, + status, + content, + entity, + })) + } +} diff --git a/crates/tower-api/src/apis/feature_flags_api.rs b/crates/tower-api/src/apis/feature_flags_api.rs index 1e9a0237..aea77e1d 100644 --- a/crates/tower-api/src/apis/feature_flags_api.rs +++ b/crates/tower-api/src/apis/feature_flags_api.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/account.rs b/crates/tower-api/src/models/account.rs index 116672a5..951c6f00 100644 --- a/crates/tower-api/src/models/account.rs +++ b/crates/tower-api/src/models/account.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/acknowledge_alert_response.rs b/crates/tower-api/src/models/acknowledge_alert_response.rs index 3cf58938..ce51f33c 100644 --- a/crates/tower-api/src/models/acknowledge_alert_response.rs +++ b/crates/tower-api/src/models/acknowledge_alert_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/acknowledge_all_alerts_response.rs b/crates/tower-api/src/models/acknowledge_all_alerts_response.rs index 91060002..191eac46 100644 --- a/crates/tower-api/src/models/acknowledge_all_alerts_response.rs +++ b/crates/tower-api/src/models/acknowledge_all_alerts_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/alert.rs b/crates/tower-api/src/models/alert.rs index 16e47b0c..b7fa9412 100644 --- a/crates/tower-api/src/models/alert.rs +++ b/crates/tower-api/src/models/alert.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/api_key.rs b/crates/tower-api/src/models/api_key.rs index 1f112ff5..14bf6bc8 100644 --- a/crates/tower-api/src/models/api_key.rs +++ b/crates/tower-api/src/models/api_key.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ @@ -27,6 +27,9 @@ pub struct ApiKey { #[serde_as(as = "DefaultOnNull")] #[serde(rename = "name")] pub name: String, + /// The principal this API key authenticates as. Omitted on legacy user-key responses that do not yet resolve the owner. + #[serde(rename = "owner", skip_serializing_if = "Option::is_none")] + pub owner: Option, #[serde(rename = "scopes", skip_serializing_if = "Option::is_none")] pub scopes: Option, } @@ -44,6 +47,7 @@ impl ApiKey { identifier, last_used_at, name, + owner: None, scopes: None, } } diff --git a/crates/tower-api/src/models/api_key_owner.rs b/crates/tower-api/src/models/api_key_owner.rs new file mode 100644 index 00000000..44a4f742 --- /dev/null +++ b/crates/tower-api/src/models/api_key_owner.rs @@ -0,0 +1,62 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct ApiKeyOwner { + /// The owner's name: a user's full name (or email) or a service account's name. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// The kind of principal this API key authenticates as. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "type")] + pub r#type: Type, +} + +impl ApiKeyOwner { + pub fn new(name: String, r#type: Type) -> ApiKeyOwner { + ApiKeyOwner { name, r#type } + } +} +/// The kind of principal this API key authenticates as. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Type { + #[serde(rename = "user")] + User, + #[serde(rename = "service_account")] + ServiceAccount, +} + +impl Default for Type { + fn default() -> Type { + Self::User + } +} + +impl<'de> Deserialize<'de> for Type { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "user" => Ok(Self::User), + "service_account" => Ok(Self::ServiceAccount), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["user", "service_account"], + )), + } + } +} diff --git a/crates/tower-api/src/models/app.rs b/crates/tower-api/src/models/app.rs index abbc4c54..02c904bc 100644 --- a/crates/tower-api/src/models/app.rs +++ b/crates/tower-api/src/models/app.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/app_statistics.rs b/crates/tower-api/src/models/app_statistics.rs index f2d9c680..dd89d788 100644 --- a/crates/tower-api/src/models/app_statistics.rs +++ b/crates/tower-api/src/models/app_statistics.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/app_summary.rs b/crates/tower-api/src/models/app_summary.rs index a2eb79df..e6f387df 100644 --- a/crates/tower-api/src/models/app_summary.rs +++ b/crates/tower-api/src/models/app_summary.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/app_version.rs b/crates/tower-api/src/models/app_version.rs index d1262e21..f097c4ec 100644 --- a/crates/tower-api/src/models/app_version.rs +++ b/crates/tower-api/src/models/app_version.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ @@ -14,9 +14,15 @@ use serde_with::{serde_as, DefaultOnNull}; #[serde_as] #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct AppVersion { + /// Server-computed SHA256 of the bundle contents for this version. + #[serde(rename = "content_checksum", skip_serializing_if = "Option::is_none")] + pub content_checksum: Option, #[serde_as(as = "DefaultOnNull")] #[serde(rename = "created_at")] pub created_at: String, + /// Client-supplied key (e.g. git SHA) that produced this version, or empty if none was supplied at deploy time. + #[serde(rename = "idempotency_key", skip_serializing_if = "Option::is_none")] + pub idempotency_key: Option, #[serde_as(as = "DefaultOnNull")] #[serde(rename = "parameters")] pub parameters: Vec, @@ -37,7 +43,9 @@ impl AppVersion { version: String, ) -> AppVersion { AppVersion { + content_checksum: None, created_at, + idempotency_key: None, parameters, towerfile, version, diff --git a/crates/tower-api/src/models/authentication_context.rs b/crates/tower-api/src/models/authentication_context.rs index ba6f7a8b..dd6d959a 100644 --- a/crates/tower-api/src/models/authentication_context.rs +++ b/crates/tower-api/src/models/authentication_context.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/batch_schedule_params.rs b/crates/tower-api/src/models/batch_schedule_params.rs index 54d803d5..77fecbc9 100644 --- a/crates/tower-api/src/models/batch_schedule_params.rs +++ b/crates/tower-api/src/models/batch_schedule_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/batch_schedule_response.rs b/crates/tower-api/src/models/batch_schedule_response.rs index 95604266..81becab0 100644 --- a/crates/tower-api/src/models/batch_schedule_response.rs +++ b/crates/tower-api/src/models/batch_schedule_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/cancel_run_response.rs b/crates/tower-api/src/models/cancel_run_response.rs index 07da93b7..c831171a 100644 --- a/crates/tower-api/src/models/cancel_run_response.rs +++ b/crates/tower-api/src/models/cancel_run_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/catalog.rs b/crates/tower-api/src/models/catalog.rs index cfc5944f..e1bdf005 100644 --- a/crates/tower-api/src/models/catalog.rs +++ b/crates/tower-api/src/models/catalog.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/catalog_credentials.rs b/crates/tower-api/src/models/catalog_credentials.rs new file mode 100644 index 00000000..03df38e9 --- /dev/null +++ b/crates/tower-api/src/models/catalog_credentials.rs @@ -0,0 +1,55 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct CatalogCredentials { + /// The Iceberg REST catalog endpoint. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "catalog_uri")] + pub catalog_uri: String, + /// When the OAuth token expires. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "expires_at")] + pub expires_at: String, + /// Access level the token is bound to. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "mode")] + pub mode: String, + /// Short-lived OAuth bearer token. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "oauth_token")] + pub oauth_token: String, + /// The Polaris catalog identifier (REST prefix). + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "warehouse")] + pub warehouse: String, +} + +impl CatalogCredentials { + pub fn new( + catalog_uri: String, + expires_at: String, + mode: String, + oauth_token: String, + warehouse: String, + ) -> CatalogCredentials { + CatalogCredentials { + catalog_uri, + expires_at, + mode, + oauth_token, + warehouse, + } + } +} diff --git a/crates/tower-api/src/models/catalog_property.rs b/crates/tower-api/src/models/catalog_property.rs index 708c9a98..c92a0000 100644 --- a/crates/tower-api/src/models/catalog_property.rs +++ b/crates/tower-api/src/models/catalog_property.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/claim_device_login_ticket_params.rs b/crates/tower-api/src/models/claim_device_login_ticket_params.rs index 4571e526..8178ae54 100644 --- a/crates/tower-api/src/models/claim_device_login_ticket_params.rs +++ b/crates/tower-api/src/models/claim_device_login_ticket_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/claim_device_login_ticket_response.rs b/crates/tower-api/src/models/claim_device_login_ticket_response.rs index c671b5eb..d17f0d7a 100644 --- a/crates/tower-api/src/models/claim_device_login_ticket_response.rs +++ b/crates/tower-api/src/models/claim_device_login_ticket_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_account_params.rs b/crates/tower-api/src/models/create_account_params.rs index 336e8686..15496daa 100644 --- a/crates/tower-api/src/models/create_account_params.rs +++ b/crates/tower-api/src/models/create_account_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_account_params_flags_struct.rs b/crates/tower-api/src/models/create_account_params_flags_struct.rs index 328e26c0..1bd7da96 100644 --- a/crates/tower-api/src/models/create_account_params_flags_struct.rs +++ b/crates/tower-api/src/models/create_account_params_flags_struct.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_account_response.rs b/crates/tower-api/src/models/create_account_response.rs index 1ea4ae6c..f2c14b47 100644 --- a/crates/tower-api/src/models/create_account_response.rs +++ b/crates/tower-api/src/models/create_account_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_api_key_params.rs b/crates/tower-api/src/models/create_api_key_params.rs index 2530d81d..1a464a7a 100644 --- a/crates/tower-api/src/models/create_api_key_params.rs +++ b/crates/tower-api/src/models/create_api_key_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_api_key_response.rs b/crates/tower-api/src/models/create_api_key_response.rs index d30a2857..e2ca492d 100644 --- a/crates/tower-api/src/models/create_api_key_response.rs +++ b/crates/tower-api/src/models/create_api_key_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_app_params.rs b/crates/tower-api/src/models/create_app_params.rs index 4e988c8f..0d32d4e2 100644 --- a/crates/tower-api/src/models/create_app_params.rs +++ b/crates/tower-api/src/models/create_app_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_app_response.rs b/crates/tower-api/src/models/create_app_response.rs index cd76db8f..725b5786 100644 --- a/crates/tower-api/src/models/create_app_response.rs +++ b/crates/tower-api/src/models/create_app_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_catalog_params.rs b/crates/tower-api/src/models/create_catalog_params.rs index 6d68e41e..41d8086d 100644 --- a/crates/tower-api/src/models/create_catalog_params.rs +++ b/crates/tower-api/src/models/create_catalog_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_catalog_response.rs b/crates/tower-api/src/models/create_catalog_response.rs index b18d7639..a6055b7d 100644 --- a/crates/tower-api/src/models/create_catalog_response.rs +++ b/crates/tower-api/src/models/create_catalog_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_device_login_ticket_response.rs b/crates/tower-api/src/models/create_device_login_ticket_response.rs index 8ed291d2..1d88b34f 100644 --- a/crates/tower-api/src/models/create_device_login_ticket_response.rs +++ b/crates/tower-api/src/models/create_device_login_ticket_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_environment_params.rs b/crates/tower-api/src/models/create_environment_params.rs index 7f5841f2..439b9ce2 100644 --- a/crates/tower-api/src/models/create_environment_params.rs +++ b/crates/tower-api/src/models/create_environment_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_environment_response.rs b/crates/tower-api/src/models/create_environment_response.rs index d6b5d4ac..81375354 100644 --- a/crates/tower-api/src/models/create_environment_response.rs +++ b/crates/tower-api/src/models/create_environment_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_guest_params.rs b/crates/tower-api/src/models/create_guest_params.rs index 6d24139a..d702e0f6 100644 --- a/crates/tower-api/src/models/create_guest_params.rs +++ b/crates/tower-api/src/models/create_guest_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_guest_response.rs b/crates/tower-api/src/models/create_guest_response.rs index efaa7b59..5c2d36ae 100644 --- a/crates/tower-api/src/models/create_guest_response.rs +++ b/crates/tower-api/src/models/create_guest_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_sandbox_secrets_params.rs b/crates/tower-api/src/models/create_sandbox_secrets_params.rs index ff6cc634..14ec6728 100644 --- a/crates/tower-api/src/models/create_sandbox_secrets_params.rs +++ b/crates/tower-api/src/models/create_sandbox_secrets_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_sandbox_secrets_response.rs b/crates/tower-api/src/models/create_sandbox_secrets_response.rs index afeb5d6b..64b40e79 100644 --- a/crates/tower-api/src/models/create_sandbox_secrets_response.rs +++ b/crates/tower-api/src/models/create_sandbox_secrets_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_schedule_params.rs b/crates/tower-api/src/models/create_schedule_params.rs index a87807d0..5d314759 100644 --- a/crates/tower-api/src/models/create_schedule_params.rs +++ b/crates/tower-api/src/models/create_schedule_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_schedule_response.rs b/crates/tower-api/src/models/create_schedule_response.rs index f2746869..8e126d56 100644 --- a/crates/tower-api/src/models/create_schedule_response.rs +++ b/crates/tower-api/src/models/create_schedule_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_secret_params.rs b/crates/tower-api/src/models/create_secret_params.rs index d074ecf0..4a26096b 100644 --- a/crates/tower-api/src/models/create_secret_params.rs +++ b/crates/tower-api/src/models/create_secret_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_secret_response.rs b/crates/tower-api/src/models/create_secret_response.rs index 6e67efbe..a65ae9b1 100644 --- a/crates/tower-api/src/models/create_secret_response.rs +++ b/crates/tower-api/src/models/create_secret_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_service_account_api_key_params.rs b/crates/tower-api/src/models/create_service_account_api_key_params.rs new file mode 100644 index 00000000..ea49d36b --- /dev/null +++ b/crates/tower-api/src/models/create_service_account_api_key_params.rs @@ -0,0 +1,41 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct CreateServiceAccountApiKeyParams { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + /// When the API key expires. + #[serde(rename = "expires_at", skip_serializing_if = "Option::is_none")] + pub expires_at: Option, + /// Human-readable name for the API key. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// Space-separated scopes for the key. Defaults to the SA's role scopes when omitted. + #[serde(rename = "scopes", skip_serializing_if = "Option::is_none")] + pub scopes: Option, +} + +impl CreateServiceAccountApiKeyParams { + pub fn new(name: String) -> CreateServiceAccountApiKeyParams { + CreateServiceAccountApiKeyParams { + schema: None, + expires_at: None, + name, + scopes: None, + } + } +} diff --git a/crates/tower-api/src/models/create_service_account_api_key_response.rs b/crates/tower-api/src/models/create_service_account_api_key_response.rs new file mode 100644 index 00000000..1ce190ef --- /dev/null +++ b/crates/tower-api/src/models/create_service_account_api_key_response.rs @@ -0,0 +1,32 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct CreateServiceAccountApiKeyResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "api_key")] + pub api_key: models::ApiKey, +} + +impl CreateServiceAccountApiKeyResponse { + pub fn new(api_key: models::ApiKey) -> CreateServiceAccountApiKeyResponse { + CreateServiceAccountApiKeyResponse { + schema: None, + api_key, + } + } +} diff --git a/crates/tower-api/src/models/create_service_account_params.rs b/crates/tower-api/src/models/create_service_account_params.rs new file mode 100644 index 00000000..2f4849bc --- /dev/null +++ b/crates/tower-api/src/models/create_service_account_params.rs @@ -0,0 +1,73 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct CreateServiceAccountParams { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + /// Optional, customer-supplied JSON metadata. + #[serde(rename = "metadata", skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// Human-readable name for the service account. Must be unique within the account. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// The team role this service account acts as. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "role")] + pub role: Role, +} + +impl CreateServiceAccountParams { + pub fn new(name: String, role: Role) -> CreateServiceAccountParams { + CreateServiceAccountParams { + schema: None, + metadata: None, + name, + role, + } + } +} +/// The team role this service account acts as. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Role { + #[serde(rename = "admin")] + Admin, + #[serde(rename = "developer")] + Developer, +} + +impl Default for Role { + fn default() -> Role { + Self::Admin + } +} + +impl<'de> Deserialize<'de> for Role { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "admin" => Ok(Self::Admin), + "developer" => Ok(Self::Developer), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["admin", "developer"], + )), + } + } +} diff --git a/crates/tower-api/src/models/create_service_account_response.rs b/crates/tower-api/src/models/create_service_account_response.rs new file mode 100644 index 00000000..4f5874e0 --- /dev/null +++ b/crates/tower-api/src/models/create_service_account_response.rs @@ -0,0 +1,32 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct CreateServiceAccountResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "service_account")] + pub service_account: models::ServiceAccount, +} + +impl CreateServiceAccountResponse { + pub fn new(service_account: models::ServiceAccount) -> CreateServiceAccountResponse { + CreateServiceAccountResponse { + schema: None, + service_account, + } + } +} diff --git a/crates/tower-api/src/models/create_session_params.rs b/crates/tower-api/src/models/create_session_params.rs index f911bb0e..67cba536 100644 --- a/crates/tower-api/src/models/create_session_params.rs +++ b/crates/tower-api/src/models/create_session_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_session_response.rs b/crates/tower-api/src/models/create_session_response.rs index 1b522b5b..635c27d1 100644 --- a/crates/tower-api/src/models/create_session_response.rs +++ b/crates/tower-api/src/models/create_session_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_team_params.rs b/crates/tower-api/src/models/create_team_params.rs index 6b1df789..4d289060 100644 --- a/crates/tower-api/src/models/create_team_params.rs +++ b/crates/tower-api/src/models/create_team_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_team_response.rs b/crates/tower-api/src/models/create_team_response.rs index a4641a5f..5345384e 100644 --- a/crates/tower-api/src/models/create_team_response.rs +++ b/crates/tower-api/src/models/create_team_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_webhook_params.rs b/crates/tower-api/src/models/create_webhook_params.rs index 2efa854f..34f74ca4 100644 --- a/crates/tower-api/src/models/create_webhook_params.rs +++ b/crates/tower-api/src/models/create_webhook_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/create_webhook_response.rs b/crates/tower-api/src/models/create_webhook_response.rs index 905ee30e..bd86b2e3 100644 --- a/crates/tower-api/src/models/create_webhook_response.rs +++ b/crates/tower-api/src/models/create_webhook_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_api_key_params.rs b/crates/tower-api/src/models/delete_api_key_params.rs index 08b09485..82d138ec 100644 --- a/crates/tower-api/src/models/delete_api_key_params.rs +++ b/crates/tower-api/src/models/delete_api_key_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_api_key_response.rs b/crates/tower-api/src/models/delete_api_key_response.rs index 6532f3c0..9c31c198 100644 --- a/crates/tower-api/src/models/delete_api_key_response.rs +++ b/crates/tower-api/src/models/delete_api_key_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_app_response.rs b/crates/tower-api/src/models/delete_app_response.rs index 23ee6d59..ddb17118 100644 --- a/crates/tower-api/src/models/delete_app_response.rs +++ b/crates/tower-api/src/models/delete_app_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_catalog_response.rs b/crates/tower-api/src/models/delete_catalog_response.rs index 1eab81e6..72774f84 100644 --- a/crates/tower-api/src/models/delete_catalog_response.rs +++ b/crates/tower-api/src/models/delete_catalog_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_environment_response.rs b/crates/tower-api/src/models/delete_environment_response.rs new file mode 100644 index 00000000..87988234 --- /dev/null +++ b/crates/tower-api/src/models/delete_environment_response.rs @@ -0,0 +1,32 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct DeleteEnvironmentResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "environment")] + pub environment: models::Environment, +} + +impl DeleteEnvironmentResponse { + pub fn new(environment: models::Environment) -> DeleteEnvironmentResponse { + DeleteEnvironmentResponse { + schema: None, + environment, + } + } +} diff --git a/crates/tower-api/src/models/delete_guest_output_body.rs b/crates/tower-api/src/models/delete_guest_output_body.rs index 4cad97b8..f9da8357 100644 --- a/crates/tower-api/src/models/delete_guest_output_body.rs +++ b/crates/tower-api/src/models/delete_guest_output_body.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_schedule_params.rs b/crates/tower-api/src/models/delete_schedule_params.rs index 7ac3e40a..04b08ae1 100644 --- a/crates/tower-api/src/models/delete_schedule_params.rs +++ b/crates/tower-api/src/models/delete_schedule_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_schedule_response.rs b/crates/tower-api/src/models/delete_schedule_response.rs index 2bb66758..514eb14a 100644 --- a/crates/tower-api/src/models/delete_schedule_response.rs +++ b/crates/tower-api/src/models/delete_schedule_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_secret_response.rs b/crates/tower-api/src/models/delete_secret_response.rs index 6b243271..3160f767 100644 --- a/crates/tower-api/src/models/delete_secret_response.rs +++ b/crates/tower-api/src/models/delete_secret_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_service_account_api_key_params.rs b/crates/tower-api/src/models/delete_service_account_api_key_params.rs new file mode 100644 index 00000000..15b5d602 --- /dev/null +++ b/crates/tower-api/src/models/delete_service_account_api_key_params.rs @@ -0,0 +1,33 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct DeleteServiceAccountApiKeyParams { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + /// The API key identifier (with or without the 'sk-' prefix). + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "identifier")] + pub identifier: String, +} + +impl DeleteServiceAccountApiKeyParams { + pub fn new(identifier: String) -> DeleteServiceAccountApiKeyParams { + DeleteServiceAccountApiKeyParams { + schema: None, + identifier, + } + } +} diff --git a/crates/tower-api/src/models/delete_session_params.rs b/crates/tower-api/src/models/delete_session_params.rs index 68502ec9..49df610b 100644 --- a/crates/tower-api/src/models/delete_session_params.rs +++ b/crates/tower-api/src/models/delete_session_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_session_response.rs b/crates/tower-api/src/models/delete_session_response.rs index fd2a8cca..d5aff912 100644 --- a/crates/tower-api/src/models/delete_session_response.rs +++ b/crates/tower-api/src/models/delete_session_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_team_invitation_params.rs b/crates/tower-api/src/models/delete_team_invitation_params.rs index e3612231..74edddb0 100644 --- a/crates/tower-api/src/models/delete_team_invitation_params.rs +++ b/crates/tower-api/src/models/delete_team_invitation_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_team_invitation_response.rs b/crates/tower-api/src/models/delete_team_invitation_response.rs index 8c158558..3a4ecd55 100644 --- a/crates/tower-api/src/models/delete_team_invitation_response.rs +++ b/crates/tower-api/src/models/delete_team_invitation_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_team_params.rs b/crates/tower-api/src/models/delete_team_params.rs index 68d0be3d..77a5d7a6 100644 --- a/crates/tower-api/src/models/delete_team_params.rs +++ b/crates/tower-api/src/models/delete_team_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_team_response.rs b/crates/tower-api/src/models/delete_team_response.rs index 0231e905..14bb7986 100644 --- a/crates/tower-api/src/models/delete_team_response.rs +++ b/crates/tower-api/src/models/delete_team_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/delete_webhook_response.rs b/crates/tower-api/src/models/delete_webhook_response.rs index f7988d8b..37eb9f02 100644 --- a/crates/tower-api/src/models/delete_webhook_response.rs +++ b/crates/tower-api/src/models/delete_webhook_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/deploy_app_request.rs b/crates/tower-api/src/models/deploy_app_request.rs index 0636309a..3aa8de66 100644 --- a/crates/tower-api/src/models/deploy_app_request.rs +++ b/crates/tower-api/src/models/deploy_app_request.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/deploy_app_response.rs b/crates/tower-api/src/models/deploy_app_response.rs index e3000f51..53833e61 100644 --- a/crates/tower-api/src/models/deploy_app_response.rs +++ b/crates/tower-api/src/models/deploy_app_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_account_body.rs b/crates/tower-api/src/models/describe_account_body.rs index d860bc7b..4da6bb86 100644 --- a/crates/tower-api/src/models/describe_account_body.rs +++ b/crates/tower-api/src/models/describe_account_body.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_app_response.rs b/crates/tower-api/src/models/describe_app_response.rs index 252b611f..d8b42461 100644 --- a/crates/tower-api/src/models/describe_app_response.rs +++ b/crates/tower-api/src/models/describe_app_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_app_version_response.rs b/crates/tower-api/src/models/describe_app_version_response.rs index 88011575..532ebde7 100644 --- a/crates/tower-api/src/models/describe_app_version_response.rs +++ b/crates/tower-api/src/models/describe_app_version_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_authentication_context_body.rs b/crates/tower-api/src/models/describe_authentication_context_body.rs index 49ae2ae9..ff6b5be8 100644 --- a/crates/tower-api/src/models/describe_authentication_context_body.rs +++ b/crates/tower-api/src/models/describe_authentication_context_body.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_catalog_response.rs b/crates/tower-api/src/models/describe_catalog_response.rs index 131c83ca..bb04c509 100644 --- a/crates/tower-api/src/models/describe_catalog_response.rs +++ b/crates/tower-api/src/models/describe_catalog_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_device_login_session_response.rs b/crates/tower-api/src/models/describe_device_login_session_response.rs index 9f002161..0608bef2 100644 --- a/crates/tower-api/src/models/describe_device_login_session_response.rs +++ b/crates/tower-api/src/models/describe_device_login_session_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_email_preferences_body.rs b/crates/tower-api/src/models/describe_email_preferences_body.rs index 37609c33..e3ce24f5 100644 --- a/crates/tower-api/src/models/describe_email_preferences_body.rs +++ b/crates/tower-api/src/models/describe_email_preferences_body.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_plan_response.rs b/crates/tower-api/src/models/describe_plan_response.rs index debd454f..47ea58e9 100644 --- a/crates/tower-api/src/models/describe_plan_response.rs +++ b/crates/tower-api/src/models/describe_plan_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_run_graph_response.rs b/crates/tower-api/src/models/describe_run_graph_response.rs index 63e9f060..d6c9c50c 100644 --- a/crates/tower-api/src/models/describe_run_graph_response.rs +++ b/crates/tower-api/src/models/describe_run_graph_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_run_links.rs b/crates/tower-api/src/models/describe_run_links.rs index 508248ce..2917622e 100644 --- a/crates/tower-api/src/models/describe_run_links.rs +++ b/crates/tower-api/src/models/describe_run_links.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_run_logs_response.rs b/crates/tower-api/src/models/describe_run_logs_response.rs index 2abee200..88ee459a 100644 --- a/crates/tower-api/src/models/describe_run_logs_response.rs +++ b/crates/tower-api/src/models/describe_run_logs_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_run_response.rs b/crates/tower-api/src/models/describe_run_response.rs index b14ea569..fa1b4b04 100644 --- a/crates/tower-api/src/models/describe_run_response.rs +++ b/crates/tower-api/src/models/describe_run_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_secrets_key_response.rs b/crates/tower-api/src/models/describe_secrets_key_response.rs index cbf925f0..37418b8f 100644 --- a/crates/tower-api/src/models/describe_secrets_key_response.rs +++ b/crates/tower-api/src/models/describe_secrets_key_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_service_account_response.rs b/crates/tower-api/src/models/describe_service_account_response.rs new file mode 100644 index 00000000..ebfb81f6 --- /dev/null +++ b/crates/tower-api/src/models/describe_service_account_response.rs @@ -0,0 +1,32 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct DescribeServiceAccountResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "service_account")] + pub service_account: models::ServiceAccount, +} + +impl DescribeServiceAccountResponse { + pub fn new(service_account: models::ServiceAccount) -> DescribeServiceAccountResponse { + DescribeServiceAccountResponse { + schema: None, + service_account, + } + } +} diff --git a/crates/tower-api/src/models/describe_session_response.rs b/crates/tower-api/src/models/describe_session_response.rs index 2d6af965..53ee5fd7 100644 --- a/crates/tower-api/src/models/describe_session_response.rs +++ b/crates/tower-api/src/models/describe_session_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_team_response.rs b/crates/tower-api/src/models/describe_team_response.rs index f866d4eb..372b69d7 100644 --- a/crates/tower-api/src/models/describe_team_response.rs +++ b/crates/tower-api/src/models/describe_team_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_webhook_response.rs b/crates/tower-api/src/models/describe_webhook_response.rs index b38ae16e..85d4fc62 100644 --- a/crates/tower-api/src/models/describe_webhook_response.rs +++ b/crates/tower-api/src/models/describe_webhook_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/describe_whoami_response.rs b/crates/tower-api/src/models/describe_whoami_response.rs new file mode 100644 index 00000000..b85b0937 --- /dev/null +++ b/crates/tower-api/src/models/describe_whoami_response.rs @@ -0,0 +1,38 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct DescribeWhoamiResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + /// Absolute time at which the token expires. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "expires_at")] + pub expires_at: String, + /// RS256-signed identity JWT scoped to the authenticated user. Verify against the public keys at /.well-known/jwks.json. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "token")] + pub token: String, +} + +impl DescribeWhoamiResponse { + pub fn new(expires_at: String, token: String) -> DescribeWhoamiResponse { + DescribeWhoamiResponse { + schema: None, + expires_at, + token, + } + } +} diff --git a/crates/tower-api/src/models/email_subscriptions.rs b/crates/tower-api/src/models/email_subscriptions.rs index 63f26c6b..856e5329 100644 --- a/crates/tower-api/src/models/email_subscriptions.rs +++ b/crates/tower-api/src/models/email_subscriptions.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/encrypted_catalog_property.rs b/crates/tower-api/src/models/encrypted_catalog_property.rs index ae3bad2a..095cb862 100644 --- a/crates/tower-api/src/models/encrypted_catalog_property.rs +++ b/crates/tower-api/src/models/encrypted_catalog_property.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/environment.rs b/crates/tower-api/src/models/environment.rs index fca84227..f8c5865a 100644 --- a/crates/tower-api/src/models/environment.rs +++ b/crates/tower-api/src/models/environment.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/error_detail.rs b/crates/tower-api/src/models/error_detail.rs index b38f2403..f7bebae8 100644 --- a/crates/tower-api/src/models/error_detail.rs +++ b/crates/tower-api/src/models/error_detail.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/error_model.rs b/crates/tower-api/src/models/error_model.rs index aad23278..c43e709f 100644 --- a/crates/tower-api/src/models/error_model.rs +++ b/crates/tower-api/src/models/error_model.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/event_alert.rs b/crates/tower-api/src/models/event_alert.rs index 2be91340..6853fa33 100644 --- a/crates/tower-api/src/models/event_alert.rs +++ b/crates/tower-api/src/models/event_alert.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/event_error.rs b/crates/tower-api/src/models/event_error.rs index f7728cc3..efc4a071 100644 --- a/crates/tower-api/src/models/event_error.rs +++ b/crates/tower-api/src/models/event_error.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/event_log.rs b/crates/tower-api/src/models/event_log.rs index 2ddb3bdd..e1234b98 100644 --- a/crates/tower-api/src/models/event_log.rs +++ b/crates/tower-api/src/models/event_log.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/event_shouldertap.rs b/crates/tower-api/src/models/event_shouldertap.rs index ae2d8478..ca76fbe8 100644 --- a/crates/tower-api/src/models/event_shouldertap.rs +++ b/crates/tower-api/src/models/event_shouldertap.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/event_warning.rs b/crates/tower-api/src/models/event_warning.rs index 5bf5d34b..2f37096f 100644 --- a/crates/tower-api/src/models/event_warning.rs +++ b/crates/tower-api/src/models/event_warning.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/export_catalogs_params.rs b/crates/tower-api/src/models/export_catalogs_params.rs index bb3405be..22839acc 100644 --- a/crates/tower-api/src/models/export_catalogs_params.rs +++ b/crates/tower-api/src/models/export_catalogs_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/export_catalogs_response.rs b/crates/tower-api/src/models/export_catalogs_response.rs index 97e63115..a340da23 100644 --- a/crates/tower-api/src/models/export_catalogs_response.rs +++ b/crates/tower-api/src/models/export_catalogs_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/export_secrets_params.rs b/crates/tower-api/src/models/export_secrets_params.rs index edbbae54..f7b7efef 100644 --- a/crates/tower-api/src/models/export_secrets_params.rs +++ b/crates/tower-api/src/models/export_secrets_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/export_secrets_response.rs b/crates/tower-api/src/models/export_secrets_response.rs index 3b0abe0e..cda52d63 100644 --- a/crates/tower-api/src/models/export_secrets_response.rs +++ b/crates/tower-api/src/models/export_secrets_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/exported_catalog.rs b/crates/tower-api/src/models/exported_catalog.rs index 487b6316..fc7e73f1 100644 --- a/crates/tower-api/src/models/exported_catalog.rs +++ b/crates/tower-api/src/models/exported_catalog.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/exported_catalog_property.rs b/crates/tower-api/src/models/exported_catalog_property.rs index d94e101c..19dccfe9 100644 --- a/crates/tower-api/src/models/exported_catalog_property.rs +++ b/crates/tower-api/src/models/exported_catalog_property.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/exported_secret.rs b/crates/tower-api/src/models/exported_secret.rs index ca789489..7d2af553 100644 --- a/crates/tower-api/src/models/exported_secret.rs +++ b/crates/tower-api/src/models/exported_secret.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/feature.rs b/crates/tower-api/src/models/feature.rs index 6e5ca4e0..f7d0384a 100644 --- a/crates/tower-api/src/models/feature.rs +++ b/crates/tower-api/src/models/feature.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/featurebase_identity.rs b/crates/tower-api/src/models/featurebase_identity.rs index faa671c0..baf1c026 100644 --- a/crates/tower-api/src/models/featurebase_identity.rs +++ b/crates/tower-api/src/models/featurebase_identity.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/generate_app_statistics_response.rs b/crates/tower-api/src/models/generate_app_statistics_response.rs index f81187c5..bcd5cf65 100644 --- a/crates/tower-api/src/models/generate_app_statistics_response.rs +++ b/crates/tower-api/src/models/generate_app_statistics_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/generate_organization_usage_time_series_response.rs b/crates/tower-api/src/models/generate_organization_usage_time_series_response.rs index 68ea2be1..40c72e7f 100644 --- a/crates/tower-api/src/models/generate_organization_usage_time_series_response.rs +++ b/crates/tower-api/src/models/generate_organization_usage_time_series_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/generate_run_statistics_response.rs b/crates/tower-api/src/models/generate_run_statistics_response.rs index 70bc530f..2a752cb7 100644 --- a/crates/tower-api/src/models/generate_run_statistics_response.rs +++ b/crates/tower-api/src/models/generate_run_statistics_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/generate_runner_credentials_response.rs b/crates/tower-api/src/models/generate_runner_credentials_response.rs index 0cf2c196..6bf89584 100644 --- a/crates/tower-api/src/models/generate_runner_credentials_response.rs +++ b/crates/tower-api/src/models/generate_runner_credentials_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/get_feature_flag_response_body.rs b/crates/tower-api/src/models/get_feature_flag_response_body.rs index cfe6bb45..f5399ef3 100644 --- a/crates/tower-api/src/models/get_feature_flag_response_body.rs +++ b/crates/tower-api/src/models/get_feature_flag_response_body.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/guest.rs b/crates/tower-api/src/models/guest.rs index 1d4490cc..de894874 100644 --- a/crates/tower-api/src/models/guest.rs +++ b/crates/tower-api/src/models/guest.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/invite_team_member_params.rs b/crates/tower-api/src/models/invite_team_member_params.rs index ecf9d14b..897bfbea 100644 --- a/crates/tower-api/src/models/invite_team_member_params.rs +++ b/crates/tower-api/src/models/invite_team_member_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/invite_team_member_response.rs b/crates/tower-api/src/models/invite_team_member_response.rs index 0d8acffb..9319b8c6 100644 --- a/crates/tower-api/src/models/invite_team_member_response.rs +++ b/crates/tower-api/src/models/invite_team_member_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/leave_team_response.rs b/crates/tower-api/src/models/leave_team_response.rs index ec53a0b7..b7761afe 100644 --- a/crates/tower-api/src/models/leave_team_response.rs +++ b/crates/tower-api/src/models/leave_team_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_alerts_response.rs b/crates/tower-api/src/models/list_alerts_response.rs index 1c076702..eea9cb1d 100644 --- a/crates/tower-api/src/models/list_alerts_response.rs +++ b/crates/tower-api/src/models/list_alerts_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_api_keys_response.rs b/crates/tower-api/src/models/list_api_keys_response.rs index 43d8ac38..076aa372 100644 --- a/crates/tower-api/src/models/list_api_keys_response.rs +++ b/crates/tower-api/src/models/list_api_keys_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_app_environments_response.rs b/crates/tower-api/src/models/list_app_environments_response.rs index 76a2c759..ebe6df97 100644 --- a/crates/tower-api/src/models/list_app_environments_response.rs +++ b/crates/tower-api/src/models/list_app_environments_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_app_versions_response.rs b/crates/tower-api/src/models/list_app_versions_response.rs index 730443b3..fc3afe2d 100644 --- a/crates/tower-api/src/models/list_app_versions_response.rs +++ b/crates/tower-api/src/models/list_app_versions_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_apps_response.rs b/crates/tower-api/src/models/list_apps_response.rs index 58d49b1d..154633a0 100644 --- a/crates/tower-api/src/models/list_apps_response.rs +++ b/crates/tower-api/src/models/list_apps_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_catalogs_response.rs b/crates/tower-api/src/models/list_catalogs_response.rs index c5db3834..ab17e6bb 100644 --- a/crates/tower-api/src/models/list_catalogs_response.rs +++ b/crates/tower-api/src/models/list_catalogs_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_environments_response.rs b/crates/tower-api/src/models/list_environments_response.rs index de3b3700..31d3a039 100644 --- a/crates/tower-api/src/models/list_environments_response.rs +++ b/crates/tower-api/src/models/list_environments_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_guests_response.rs b/crates/tower-api/src/models/list_guests_response.rs index d8c366c8..258d4dde 100644 --- a/crates/tower-api/src/models/list_guests_response.rs +++ b/crates/tower-api/src/models/list_guests_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_my_team_invitations_response.rs b/crates/tower-api/src/models/list_my_team_invitations_response.rs index 9c87365f..d6b5b37e 100644 --- a/crates/tower-api/src/models/list_my_team_invitations_response.rs +++ b/crates/tower-api/src/models/list_my_team_invitations_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_runners_response.rs b/crates/tower-api/src/models/list_runners_response.rs index edcea666..dbd6c5c6 100644 --- a/crates/tower-api/src/models/list_runners_response.rs +++ b/crates/tower-api/src/models/list_runners_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_runs_response.rs b/crates/tower-api/src/models/list_runs_response.rs index 3d622433..747cd580 100644 --- a/crates/tower-api/src/models/list_runs_response.rs +++ b/crates/tower-api/src/models/list_runs_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_schedules_response.rs b/crates/tower-api/src/models/list_schedules_response.rs index 7eaa5f94..62aa4aa9 100644 --- a/crates/tower-api/src/models/list_schedules_response.rs +++ b/crates/tower-api/src/models/list_schedules_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_secret_environments_response.rs b/crates/tower-api/src/models/list_secret_environments_response.rs index 1c4a0297..f452de5c 100644 --- a/crates/tower-api/src/models/list_secret_environments_response.rs +++ b/crates/tower-api/src/models/list_secret_environments_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_secrets_response.rs b/crates/tower-api/src/models/list_secrets_response.rs index 623502ac..8b22b35e 100644 --- a/crates/tower-api/src/models/list_secrets_response.rs +++ b/crates/tower-api/src/models/list_secrets_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_service_account_api_keys_response.rs b/crates/tower-api/src/models/list_service_account_api_keys_response.rs new file mode 100644 index 00000000..f6633ffa --- /dev/null +++ b/crates/tower-api/src/models/list_service_account_api_keys_response.rs @@ -0,0 +1,39 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct ListServiceAccountApiKeysResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "api_keys")] + pub api_keys: Vec, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "pages")] + pub pages: models::Pagination, +} + +impl ListServiceAccountApiKeysResponse { + pub fn new( + api_keys: Vec, + pages: models::Pagination, + ) -> ListServiceAccountApiKeysResponse { + ListServiceAccountApiKeysResponse { + schema: None, + api_keys, + pages, + } + } +} diff --git a/crates/tower-api/src/models/list_service_accounts_response.rs b/crates/tower-api/src/models/list_service_accounts_response.rs new file mode 100644 index 00000000..71e9065d --- /dev/null +++ b/crates/tower-api/src/models/list_service_accounts_response.rs @@ -0,0 +1,39 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct ListServiceAccountsResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "pages")] + pub pages: models::Pagination, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "service_accounts")] + pub service_accounts: Vec, +} + +impl ListServiceAccountsResponse { + pub fn new( + pages: models::Pagination, + service_accounts: Vec, + ) -> ListServiceAccountsResponse { + ListServiceAccountsResponse { + schema: None, + pages, + service_accounts, + } + } +} diff --git a/crates/tower-api/src/models/list_team_invitations_response.rs b/crates/tower-api/src/models/list_team_invitations_response.rs index 5b138a92..ac2f3f40 100644 --- a/crates/tower-api/src/models/list_team_invitations_response.rs +++ b/crates/tower-api/src/models/list_team_invitations_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_team_members_response.rs b/crates/tower-api/src/models/list_team_members_response.rs index 8564b6c5..93e4ec2f 100644 --- a/crates/tower-api/src/models/list_team_members_response.rs +++ b/crates/tower-api/src/models/list_team_members_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_teams_response.rs b/crates/tower-api/src/models/list_teams_response.rs index 8fea8f2f..4dcebb45 100644 --- a/crates/tower-api/src/models/list_teams_response.rs +++ b/crates/tower-api/src/models/list_teams_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/list_webhooks_response.rs b/crates/tower-api/src/models/list_webhooks_response.rs index ce232d2b..d5082909 100644 --- a/crates/tower-api/src/models/list_webhooks_response.rs +++ b/crates/tower-api/src/models/list_webhooks_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/mod.rs b/crates/tower-api/src/models/mod.rs index 5a3a8045..ceb0801a 100644 --- a/crates/tower-api/src/models/mod.rs +++ b/crates/tower-api/src/models/mod.rs @@ -8,6 +8,8 @@ pub mod alert; pub use self::alert::Alert; pub mod api_key; pub use self::api_key::ApiKey; +pub mod api_key_owner; +pub use self::api_key_owner::ApiKeyOwner; pub mod app; pub use self::app::App; pub mod app_statistics; @@ -26,6 +28,8 @@ pub mod cancel_run_response; pub use self::cancel_run_response::CancelRunResponse; pub mod catalog; pub use self::catalog::Catalog; +pub mod catalog_credentials; +pub use self::catalog_credentials::CatalogCredentials; pub mod catalog_property; pub use self::catalog_property::CatalogProperty; pub mod claim_device_login_ticket_params; @@ -72,6 +76,14 @@ pub mod create_secret_params; pub use self::create_secret_params::CreateSecretParams; pub mod create_secret_response; pub use self::create_secret_response::CreateSecretResponse; +pub mod create_service_account_api_key_params; +pub use self::create_service_account_api_key_params::CreateServiceAccountApiKeyParams; +pub mod create_service_account_api_key_response; +pub use self::create_service_account_api_key_response::CreateServiceAccountApiKeyResponse; +pub mod create_service_account_params; +pub use self::create_service_account_params::CreateServiceAccountParams; +pub mod create_service_account_response; +pub use self::create_service_account_response::CreateServiceAccountResponse; pub mod create_session_params; pub use self::create_session_params::CreateSessionParams; pub mod create_session_response; @@ -92,6 +104,8 @@ pub mod delete_app_response; pub use self::delete_app_response::DeleteAppResponse; pub mod delete_catalog_response; pub use self::delete_catalog_response::DeleteCatalogResponse; +pub mod delete_environment_response; +pub use self::delete_environment_response::DeleteEnvironmentResponse; pub mod delete_guest_output_body; pub use self::delete_guest_output_body::DeleteGuestOutputBody; pub mod delete_schedule_params; @@ -100,6 +114,8 @@ pub mod delete_schedule_response; pub use self::delete_schedule_response::DeleteScheduleResponse; pub mod delete_secret_response; pub use self::delete_secret_response::DeleteSecretResponse; +pub mod delete_service_account_api_key_params; +pub use self::delete_service_account_api_key_params::DeleteServiceAccountApiKeyParams; pub mod delete_session_params; pub use self::delete_session_params::DeleteSessionParams; pub mod delete_session_response; @@ -144,12 +160,16 @@ pub mod describe_run_response; pub use self::describe_run_response::DescribeRunResponse; pub mod describe_secrets_key_response; pub use self::describe_secrets_key_response::DescribeSecretsKeyResponse; +pub mod describe_service_account_response; +pub use self::describe_service_account_response::DescribeServiceAccountResponse; pub mod describe_session_response; pub use self::describe_session_response::DescribeSessionResponse; pub mod describe_team_response; pub use self::describe_team_response::DescribeTeamResponse; pub mod describe_webhook_response; pub use self::describe_webhook_response::DescribeWebhookResponse; +pub mod describe_whoami_response; +pub use self::describe_whoami_response::DescribeWhoamiResponse; pub mod email_subscriptions; pub use self::email_subscriptions::EmailSubscriptions; pub mod encrypted_catalog_property; @@ -234,6 +254,10 @@ pub mod list_secret_environments_response; pub use self::list_secret_environments_response::ListSecretEnvironmentsResponse; pub mod list_secrets_response; pub use self::list_secrets_response::ListSecretsResponse; +pub mod list_service_account_api_keys_response; +pub use self::list_service_account_api_keys_response::ListServiceAccountApiKeysResponse; +pub mod list_service_accounts_response; +pub use self::list_service_accounts_response::ListServiceAccountsResponse; pub mod list_team_invitations_response; pub use self::list_team_invitations_response::ListTeamInvitationsResponse; pub mod list_team_members_response; @@ -278,6 +302,8 @@ pub mod run_app_response; pub use self::run_app_response::RunAppResponse; pub mod run_attempt; pub use self::run_attempt::RunAttempt; +pub mod run_creator; +pub use self::run_creator::RunCreator; pub mod run_failure_alert; pub use self::run_failure_alert::RunFailureAlert; pub mod run_graph_node; @@ -308,6 +334,8 @@ pub mod runner_credentials; pub use self::runner_credentials::RunnerCredentials; pub mod schedule; pub use self::schedule::Schedule; +pub mod schedule_owner; +pub use self::schedule_owner::ScheduleOwner; pub mod schedule_run_initiator_details; pub use self::schedule_run_initiator_details::ScheduleRunInitiatorDetails; pub mod search_runs_response; @@ -320,6 +348,10 @@ pub mod server_sent_events_inner_1; pub use self::server_sent_events_inner_1::ServerSentEventsInner1; pub mod server_sent_events_inner_2; pub use self::server_sent_events_inner_2::ServerSentEventsInner2; +pub mod service_account; +pub use self::service_account::ServiceAccount; +pub mod service_account_creator; +pub use self::service_account_creator::ServiceAccountCreator; pub mod session; pub use self::session::Session; pub mod shoulder_tap; @@ -380,6 +412,10 @@ pub mod update_secret_params; pub use self::update_secret_params::UpdateSecretParams; pub mod update_secret_response; pub use self::update_secret_response::UpdateSecretResponse; +pub mod update_service_account_params; +pub use self::update_service_account_params::UpdateServiceAccountParams; +pub mod update_service_account_response; +pub use self::update_service_account_response::UpdateServiceAccountResponse; pub mod update_team_member_params; pub use self::update_team_member_params::UpdateTeamMemberParams; pub mod update_team_member_response; @@ -402,5 +438,9 @@ pub mod usage_metric_time_series_point; pub use self::usage_metric_time_series_point::UsageMetricTimeSeriesPoint; pub mod user; pub use self::user::User; +pub mod vend_catalog_credentials_body; +pub use self::vend_catalog_credentials_body::VendCatalogCredentialsBody; +pub mod vend_catalog_credentials_response; +pub use self::vend_catalog_credentials_response::VendCatalogCredentialsResponse; pub mod webhook; pub use self::webhook::Webhook; diff --git a/crates/tower-api/src/models/organization.rs b/crates/tower-api/src/models/organization.rs index 43aad387..84e6ea58 100644 --- a/crates/tower-api/src/models/organization.rs +++ b/crates/tower-api/src/models/organization.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/organization_usage.rs b/crates/tower-api/src/models/organization_usage.rs index 26ee42fb..9ecbc4b0 100644 --- a/crates/tower-api/src/models/organization_usage.rs +++ b/crates/tower-api/src/models/organization_usage.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/pagination.rs b/crates/tower-api/src/models/pagination.rs index 94a36b98..6a6ab28b 100644 --- a/crates/tower-api/src/models/pagination.rs +++ b/crates/tower-api/src/models/pagination.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/parameter.rs b/crates/tower-api/src/models/parameter.rs index 811bd79f..dcbaf919 100644 --- a/crates/tower-api/src/models/parameter.rs +++ b/crates/tower-api/src/models/parameter.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/plan.rs b/crates/tower-api/src/models/plan.rs index f830dd76..b4841171 100644 --- a/crates/tower-api/src/models/plan.rs +++ b/crates/tower-api/src/models/plan.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/refresh_session_params.rs b/crates/tower-api/src/models/refresh_session_params.rs index 37f9619c..90dfcba5 100644 --- a/crates/tower-api/src/models/refresh_session_params.rs +++ b/crates/tower-api/src/models/refresh_session_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/refresh_session_response.rs b/crates/tower-api/src/models/refresh_session_response.rs index f8f2d7c4..b3590a6d 100644 --- a/crates/tower-api/src/models/refresh_session_response.rs +++ b/crates/tower-api/src/models/refresh_session_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/regenerate_guest_login_url_params.rs b/crates/tower-api/src/models/regenerate_guest_login_url_params.rs index 8030a2ff..56d0119d 100644 --- a/crates/tower-api/src/models/regenerate_guest_login_url_params.rs +++ b/crates/tower-api/src/models/regenerate_guest_login_url_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/regenerate_guest_login_url_response.rs b/crates/tower-api/src/models/regenerate_guest_login_url_response.rs index 130e4623..14f3f4b5 100644 --- a/crates/tower-api/src/models/regenerate_guest_login_url_response.rs +++ b/crates/tower-api/src/models/regenerate_guest_login_url_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/remove_team_member_params.rs b/crates/tower-api/src/models/remove_team_member_params.rs index ba59de99..c89fb24b 100644 --- a/crates/tower-api/src/models/remove_team_member_params.rs +++ b/crates/tower-api/src/models/remove_team_member_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/remove_team_member_response.rs b/crates/tower-api/src/models/remove_team_member_response.rs index da320640..96dcfed8 100644 --- a/crates/tower-api/src/models/remove_team_member_response.rs +++ b/crates/tower-api/src/models/remove_team_member_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/resend_team_invitation_params.rs b/crates/tower-api/src/models/resend_team_invitation_params.rs index cbbcbf51..68d00541 100644 --- a/crates/tower-api/src/models/resend_team_invitation_params.rs +++ b/crates/tower-api/src/models/resend_team_invitation_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/resend_team_invitation_response.rs b/crates/tower-api/src/models/resend_team_invitation_response.rs index 90181711..3b63e543 100644 --- a/crates/tower-api/src/models/resend_team_invitation_response.rs +++ b/crates/tower-api/src/models/resend_team_invitation_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run.rs b/crates/tower-api/src/models/run.rs index 4e84df41..cb742960 100644 --- a/crates/tower-api/src/models/run.rs +++ b/crates/tower-api/src/models/run.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ @@ -35,6 +35,9 @@ pub struct Run { #[serde_as(as = "DefaultOnNull")] #[serde(rename = "created_at")] pub created_at: String, + /// The principal that created this run. Null on legacy rows that predate principal tracking. + #[serde(rename = "created_by", skip_serializing_if = "Option::is_none")] + pub created_by: Option, #[serde(rename = "ended_at", deserialize_with = "Option::deserialize")] pub ended_at: Option, #[serde_as(as = "DefaultOnNull")] @@ -126,6 +129,7 @@ impl Run { attempts: None, cancelled_at, created_at, + created_by: None, ended_at, environment, exit_code, diff --git a/crates/tower-api/src/models/run_app_initiator_data.rs b/crates/tower-api/src/models/run_app_initiator_data.rs index 6c8556b3..c5697d4d 100644 --- a/crates/tower-api/src/models/run_app_initiator_data.rs +++ b/crates/tower-api/src/models/run_app_initiator_data.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_app_params.rs b/crates/tower-api/src/models/run_app_params.rs index 741ed3cd..32a1ca0b 100644 --- a/crates/tower-api/src/models/run_app_params.rs +++ b/crates/tower-api/src/models/run_app_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_app_response.rs b/crates/tower-api/src/models/run_app_response.rs index abf80054..3c8aea09 100644 --- a/crates/tower-api/src/models/run_app_response.rs +++ b/crates/tower-api/src/models/run_app_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_attempt.rs b/crates/tower-api/src/models/run_attempt.rs index 85b59d80..f8c863a0 100644 --- a/crates/tower-api/src/models/run_attempt.rs +++ b/crates/tower-api/src/models/run_attempt.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_creator.rs b/crates/tower-api/src/models/run_creator.rs new file mode 100644 index 00000000..b354dc80 --- /dev/null +++ b/crates/tower-api/src/models/run_creator.rs @@ -0,0 +1,62 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct RunCreator { + /// The creator's name: a user's full name (or email) or a service account's name. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// The kind of principal that created the run. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "type")] + pub r#type: Type, +} + +impl RunCreator { + pub fn new(name: String, r#type: Type) -> RunCreator { + RunCreator { name, r#type } + } +} +/// The kind of principal that created the run. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Type { + #[serde(rename = "user")] + User, + #[serde(rename = "service_account")] + ServiceAccount, +} + +impl Default for Type { + fn default() -> Type { + Self::User + } +} + +impl<'de> Deserialize<'de> for Type { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "user" => Ok(Self::User), + "service_account" => Ok(Self::ServiceAccount), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["user", "service_account"], + )), + } + } +} diff --git a/crates/tower-api/src/models/run_failure_alert.rs b/crates/tower-api/src/models/run_failure_alert.rs index 93ce4473..c481c0ef 100644 --- a/crates/tower-api/src/models/run_failure_alert.rs +++ b/crates/tower-api/src/models/run_failure_alert.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_graph_node.rs b/crates/tower-api/src/models/run_graph_node.rs index 316a3882..c4e71bbd 100644 --- a/crates/tower-api/src/models/run_graph_node.rs +++ b/crates/tower-api/src/models/run_graph_node.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_graph_run_id.rs b/crates/tower-api/src/models/run_graph_run_id.rs index fc7047d9..305a3b39 100644 --- a/crates/tower-api/src/models/run_graph_run_id.rs +++ b/crates/tower-api/src/models/run_graph_run_id.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_initiator.rs b/crates/tower-api/src/models/run_initiator.rs index 00cbf42f..5a951be1 100644 --- a/crates/tower-api/src/models/run_initiator.rs +++ b/crates/tower-api/src/models/run_initiator.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_initiator_details.rs b/crates/tower-api/src/models/run_initiator_details.rs index cc6ff315..bfd83785 100644 --- a/crates/tower-api/src/models/run_initiator_details.rs +++ b/crates/tower-api/src/models/run_initiator_details.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_log_line.rs b/crates/tower-api/src/models/run_log_line.rs index 1dcad0c9..c48e1e0f 100644 --- a/crates/tower-api/src/models/run_log_line.rs +++ b/crates/tower-api/src/models/run_log_line.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_parameter.rs b/crates/tower-api/src/models/run_parameter.rs index cb98bfcd..b96fec96 100644 --- a/crates/tower-api/src/models/run_parameter.rs +++ b/crates/tower-api/src/models/run_parameter.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_results.rs b/crates/tower-api/src/models/run_results.rs index 72d6c3e7..4c8f6684 100644 --- a/crates/tower-api/src/models/run_results.rs +++ b/crates/tower-api/src/models/run_results.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_retry_policy.rs b/crates/tower-api/src/models/run_retry_policy.rs index bfe9489d..7d9d3785 100644 --- a/crates/tower-api/src/models/run_retry_policy.rs +++ b/crates/tower-api/src/models/run_retry_policy.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_run_initiator_details.rs b/crates/tower-api/src/models/run_run_initiator_details.rs index 4015ed98..bc9742d5 100644 --- a/crates/tower-api/src/models/run_run_initiator_details.rs +++ b/crates/tower-api/src/models/run_run_initiator_details.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_statistics.rs b/crates/tower-api/src/models/run_statistics.rs index af3a61f8..a5626d81 100644 --- a/crates/tower-api/src/models/run_statistics.rs +++ b/crates/tower-api/src/models/run_statistics.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/run_timeseries_point.rs b/crates/tower-api/src/models/run_timeseries_point.rs index 23bd370d..8f93cc0f 100644 --- a/crates/tower-api/src/models/run_timeseries_point.rs +++ b/crates/tower-api/src/models/run_timeseries_point.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/runner.rs b/crates/tower-api/src/models/runner.rs index 3835beeb..2aa67e32 100644 --- a/crates/tower-api/src/models/runner.rs +++ b/crates/tower-api/src/models/runner.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/runner_credentials.rs b/crates/tower-api/src/models/runner_credentials.rs index 1fd53e86..ba705735 100644 --- a/crates/tower-api/src/models/runner_credentials.rs +++ b/crates/tower-api/src/models/runner_credentials.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/schedule.rs b/crates/tower-api/src/models/schedule.rs index fde474d2..4c33beb2 100644 --- a/crates/tower-api/src/models/schedule.rs +++ b/crates/tower-api/src/models/schedule.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ @@ -49,6 +49,9 @@ pub struct Schedule { #[serde_as(as = "DefaultOnNull")] #[serde(rename = "overlap_policy")] pub overlap_policy: OverlapPolicy, + /// The schedule's runtime owner — the user or service account whose identity its scheduled runs execute under. + #[serde(rename = "owner", skip_serializing_if = "Option::is_none")] + pub owner: Option, /// The parameters to pass when running the app #[serde(rename = "parameters", skip_serializing_if = "Option::is_none")] pub parameters: Option>, @@ -90,6 +93,7 @@ impl Schedule { id, name, overlap_policy, + owner: None, parameters: None, status, timezone, diff --git a/crates/tower-api/src/models/schedule_owner.rs b/crates/tower-api/src/models/schedule_owner.rs new file mode 100644 index 00000000..b672bdda --- /dev/null +++ b/crates/tower-api/src/models/schedule_owner.rs @@ -0,0 +1,62 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct ScheduleOwner { + /// The owner's name: a user's full name (first + last) or a service account's name. Must identify exactly one member of the account. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// The kind of owner: 'user' or 'service_account' + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "type")] + pub r#type: Type, +} + +impl ScheduleOwner { + pub fn new(name: String, r#type: Type) -> ScheduleOwner { + ScheduleOwner { name, r#type } + } +} +/// The kind of owner: 'user' or 'service_account' +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Type { + #[serde(rename = "user")] + User, + #[serde(rename = "service_account")] + ServiceAccount, +} + +impl Default for Type { + fn default() -> Type { + Self::User + } +} + +impl<'de> Deserialize<'de> for Type { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "user" => Ok(Self::User), + "service_account" => Ok(Self::ServiceAccount), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["user", "service_account"], + )), + } + } +} diff --git a/crates/tower-api/src/models/schedule_run_initiator_details.rs b/crates/tower-api/src/models/schedule_run_initiator_details.rs index ae103d42..82f95c34 100644 --- a/crates/tower-api/src/models/schedule_run_initiator_details.rs +++ b/crates/tower-api/src/models/schedule_run_initiator_details.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/search_runs_response.rs b/crates/tower-api/src/models/search_runs_response.rs index 9971ebaf..28c2eef2 100644 --- a/crates/tower-api/src/models/search_runs_response.rs +++ b/crates/tower-api/src/models/search_runs_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/secret.rs b/crates/tower-api/src/models/secret.rs index fdbc37b9..dfaf3ed6 100644 --- a/crates/tower-api/src/models/secret.rs +++ b/crates/tower-api/src/models/secret.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/server_sent_events_inner.rs b/crates/tower-api/src/models/server_sent_events_inner.rs index 777b2918..0e4bed3a 100644 --- a/crates/tower-api/src/models/server_sent_events_inner.rs +++ b/crates/tower-api/src/models/server_sent_events_inner.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/server_sent_events_inner_1.rs b/crates/tower-api/src/models/server_sent_events_inner_1.rs index 4374a4c9..7fd9d3f4 100644 --- a/crates/tower-api/src/models/server_sent_events_inner_1.rs +++ b/crates/tower-api/src/models/server_sent_events_inner_1.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/server_sent_events_inner_2.rs b/crates/tower-api/src/models/server_sent_events_inner_2.rs index aa3416da..d3cac86f 100644 --- a/crates/tower-api/src/models/server_sent_events_inner_2.rs +++ b/crates/tower-api/src/models/server_sent_events_inner_2.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/service_account.rs b/crates/tower-api/src/models/service_account.rs new file mode 100644 index 00000000..92db4999 --- /dev/null +++ b/crates/tower-api/src/models/service_account.rs @@ -0,0 +1,98 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct ServiceAccount { + /// When the service account was created. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "created_at")] + pub created_at: String, + /// The user who created this service account. + #[serde(rename = "creator", skip_serializing_if = "Option::is_none")] + pub creator: Option, + /// The unique identifier for the service account. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "id")] + pub id: String, + #[serde( + rename = "metadata", + default, + with = "::serde_with::rust::double_option", + skip_serializing_if = "Option::is_none" + )] + pub metadata: Option>, + /// The human-readable name of the service account. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// The team role this service account acts as. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "role")] + pub role: Role, + /// When the service account was last updated. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "updated_at")] + pub updated_at: String, +} + +impl ServiceAccount { + pub fn new( + created_at: String, + id: String, + name: String, + role: Role, + updated_at: String, + ) -> ServiceAccount { + ServiceAccount { + created_at, + creator: None, + id, + metadata: None, + name, + role, + updated_at, + } + } +} +/// The team role this service account acts as. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Role { + #[serde(rename = "admin")] + Admin, + #[serde(rename = "developer")] + Developer, +} + +impl Default for Role { + fn default() -> Role { + Self::Admin + } +} + +impl<'de> Deserialize<'de> for Role { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "admin" => Ok(Self::Admin), + "developer" => Ok(Self::Developer), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["admin", "developer"], + )), + } + } +} diff --git a/crates/tower-api/src/models/service_account_creator.rs b/crates/tower-api/src/models/service_account_creator.rs new file mode 100644 index 00000000..9c64e583 --- /dev/null +++ b/crates/tower-api/src/models/service_account_creator.rs @@ -0,0 +1,62 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct ServiceAccountCreator { + /// The creator's name: a user's full name (or email) or a service account's name. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "name")] + pub name: String, + /// The kind of principal that created the service account. Always 'user'. + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "type")] + pub r#type: Type, +} + +impl ServiceAccountCreator { + pub fn new(name: String, r#type: Type) -> ServiceAccountCreator { + ServiceAccountCreator { name, r#type } + } +} +/// The kind of principal that created the service account. Always 'user'. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Type { + #[serde(rename = "user")] + User, + #[serde(rename = "service_account")] + ServiceAccount, +} + +impl Default for Type { + fn default() -> Type { + Self::User + } +} + +impl<'de> Deserialize<'de> for Type { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "user" => Ok(Self::User), + "service_account" => Ok(Self::ServiceAccount), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["user", "service_account"], + )), + } + } +} diff --git a/crates/tower-api/src/models/session.rs b/crates/tower-api/src/models/session.rs index 63873a02..fb11e205 100644 --- a/crates/tower-api/src/models/session.rs +++ b/crates/tower-api/src/models/session.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/shoulder_tap.rs b/crates/tower-api/src/models/shoulder_tap.rs index 3d5b91f7..d99688d3 100644 --- a/crates/tower-api/src/models/shoulder_tap.rs +++ b/crates/tower-api/src/models/shoulder_tap.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/sse_warning.rs b/crates/tower-api/src/models/sse_warning.rs index 28dc3f9e..e44d11ec 100644 --- a/crates/tower-api/src/models/sse_warning.rs +++ b/crates/tower-api/src/models/sse_warning.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/statistics_settings.rs b/crates/tower-api/src/models/statistics_settings.rs index 8026f7dc..fd40095e 100644 --- a/crates/tower-api/src/models/statistics_settings.rs +++ b/crates/tower-api/src/models/statistics_settings.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/team.rs b/crates/tower-api/src/models/team.rs index 537b57a1..9e6643ae 100644 --- a/crates/tower-api/src/models/team.rs +++ b/crates/tower-api/src/models/team.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/team_invitation.rs b/crates/tower-api/src/models/team_invitation.rs index 1a649f7b..071939c2 100644 --- a/crates/tower-api/src/models/team_invitation.rs +++ b/crates/tower-api/src/models/team_invitation.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/team_membership.rs b/crates/tower-api/src/models/team_membership.rs index ab61bc59..c5bb230f 100644 --- a/crates/tower-api/src/models/team_membership.rs +++ b/crates/tower-api/src/models/team_membership.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/test_webhook_response.rs b/crates/tower-api/src/models/test_webhook_response.rs index edb69308..05c4ae68 100644 --- a/crates/tower-api/src/models/test_webhook_response.rs +++ b/crates/tower-api/src/models/test_webhook_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/token.rs b/crates/tower-api/src/models/token.rs index bd119e00..5a3a8707 100644 --- a/crates/tower-api/src/models/token.rs +++ b/crates/tower-api/src/models/token.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_account_params.rs b/crates/tower-api/src/models/update_account_params.rs index 7f051a0b..b75e7462 100644 --- a/crates/tower-api/src/models/update_account_params.rs +++ b/crates/tower-api/src/models/update_account_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_account_response.rs b/crates/tower-api/src/models/update_account_response.rs index 6b289c94..99f1adf1 100644 --- a/crates/tower-api/src/models/update_account_response.rs +++ b/crates/tower-api/src/models/update_account_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_app_environment_params.rs b/crates/tower-api/src/models/update_app_environment_params.rs index d0fbc7f2..9cbdecc8 100644 --- a/crates/tower-api/src/models/update_app_environment_params.rs +++ b/crates/tower-api/src/models/update_app_environment_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_app_environment_response.rs b/crates/tower-api/src/models/update_app_environment_response.rs index 0da5a43b..8f56c3eb 100644 --- a/crates/tower-api/src/models/update_app_environment_response.rs +++ b/crates/tower-api/src/models/update_app_environment_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_app_params.rs b/crates/tower-api/src/models/update_app_params.rs index 7b030fa8..2ff74b19 100644 --- a/crates/tower-api/src/models/update_app_params.rs +++ b/crates/tower-api/src/models/update_app_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_app_response.rs b/crates/tower-api/src/models/update_app_response.rs index 1b6e34a0..e8e1d52b 100644 --- a/crates/tower-api/src/models/update_app_response.rs +++ b/crates/tower-api/src/models/update_app_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_catalog_params.rs b/crates/tower-api/src/models/update_catalog_params.rs index 8546d7be..14aa3e93 100644 --- a/crates/tower-api/src/models/update_catalog_params.rs +++ b/crates/tower-api/src/models/update_catalog_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_catalog_response.rs b/crates/tower-api/src/models/update_catalog_response.rs index f95ad2df..e10873d6 100644 --- a/crates/tower-api/src/models/update_catalog_response.rs +++ b/crates/tower-api/src/models/update_catalog_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_email_preferences_body.rs b/crates/tower-api/src/models/update_email_preferences_body.rs index 03e86fbf..0f30b3d1 100644 --- a/crates/tower-api/src/models/update_email_preferences_body.rs +++ b/crates/tower-api/src/models/update_email_preferences_body.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_environment_params.rs b/crates/tower-api/src/models/update_environment_params.rs index 750e217b..5a30ca1c 100644 --- a/crates/tower-api/src/models/update_environment_params.rs +++ b/crates/tower-api/src/models/update_environment_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_environment_response.rs b/crates/tower-api/src/models/update_environment_response.rs index 0d94e746..e2a0eec4 100644 --- a/crates/tower-api/src/models/update_environment_response.rs +++ b/crates/tower-api/src/models/update_environment_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_my_team_invitation_params.rs b/crates/tower-api/src/models/update_my_team_invitation_params.rs index 388fce68..f148d022 100644 --- a/crates/tower-api/src/models/update_my_team_invitation_params.rs +++ b/crates/tower-api/src/models/update_my_team_invitation_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_my_team_invitation_response.rs b/crates/tower-api/src/models/update_my_team_invitation_response.rs index bcbf9136..c7cb3c64 100644 --- a/crates/tower-api/src/models/update_my_team_invitation_response.rs +++ b/crates/tower-api/src/models/update_my_team_invitation_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_organization_params.rs b/crates/tower-api/src/models/update_organization_params.rs index 2912b546..1709b096 100644 --- a/crates/tower-api/src/models/update_organization_params.rs +++ b/crates/tower-api/src/models/update_organization_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_organization_response.rs b/crates/tower-api/src/models/update_organization_response.rs index 782b6124..a642bfce 100644 --- a/crates/tower-api/src/models/update_organization_response.rs +++ b/crates/tower-api/src/models/update_organization_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_plan_params.rs b/crates/tower-api/src/models/update_plan_params.rs index 6252fb2a..36c33ae4 100644 --- a/crates/tower-api/src/models/update_plan_params.rs +++ b/crates/tower-api/src/models/update_plan_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_plan_response.rs b/crates/tower-api/src/models/update_plan_response.rs index c1bb2d58..36903daf 100644 --- a/crates/tower-api/src/models/update_plan_response.rs +++ b/crates/tower-api/src/models/update_plan_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_schedule_params.rs b/crates/tower-api/src/models/update_schedule_params.rs index ba2541c8..7945c3a8 100644 --- a/crates/tower-api/src/models/update_schedule_params.rs +++ b/crates/tower-api/src/models/update_schedule_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ @@ -31,7 +31,7 @@ pub struct UpdateScheduleParams { /// The environment to run the app in #[serde(rename = "environment", skip_serializing_if = "Option::is_none")] pub environment: Option, - /// The name for this schedule. Must be unique per team. + /// The name for this schedule. Must be unique per environment. #[serde( rename = "name", default, @@ -47,6 +47,9 @@ pub struct UpdateScheduleParams { skip_serializing_if = "Option::is_none" )] pub overlap_policy: Option>, + /// Reassign the schedule's runtime owner. Requires team admin scope. Setting this field does NOT change the schedule's status — disabled schedules must be re-activated separately. + #[serde(rename = "owner", skip_serializing_if = "Option::is_none")] + pub owner: Option, /// Parameters to pass when running the app #[serde(rename = "parameters", skip_serializing_if = "Option::is_none")] pub parameters: Option>, @@ -77,6 +80,7 @@ impl UpdateScheduleParams { environment: None, name: None, overlap_policy: None, + owner: None, parameters: None, status: None, timezone: None, diff --git a/crates/tower-api/src/models/update_schedule_response.rs b/crates/tower-api/src/models/update_schedule_response.rs index a75eeca5..d8bf3429 100644 --- a/crates/tower-api/src/models/update_schedule_response.rs +++ b/crates/tower-api/src/models/update_schedule_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_secret_params.rs b/crates/tower-api/src/models/update_secret_params.rs index b4f02c80..5d02ded5 100644 --- a/crates/tower-api/src/models/update_secret_params.rs +++ b/crates/tower-api/src/models/update_secret_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_secret_response.rs b/crates/tower-api/src/models/update_secret_response.rs index 589c5013..d0ad752a 100644 --- a/crates/tower-api/src/models/update_secret_response.rs +++ b/crates/tower-api/src/models/update_secret_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_service_account_params.rs b/crates/tower-api/src/models/update_service_account_params.rs new file mode 100644 index 00000000..5b399d99 --- /dev/null +++ b/crates/tower-api/src/models/update_service_account_params.rs @@ -0,0 +1,71 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct UpdateServiceAccountParams { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + /// Replacement JSON metadata for the service account. + #[serde(rename = "metadata", skip_serializing_if = "Option::is_none")] + pub metadata: Option, + /// The new human-readable name for the service account. + #[serde(rename = "name", skip_serializing_if = "Option::is_none")] + pub name: Option, + /// The new team role this service account acts as. + #[serde(rename = "role", skip_serializing_if = "Option::is_none")] + pub role: Option, +} + +impl UpdateServiceAccountParams { + pub fn new() -> UpdateServiceAccountParams { + UpdateServiceAccountParams { + schema: None, + metadata: None, + name: None, + role: None, + } + } +} +/// The new team role this service account acts as. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Role { + #[serde(rename = "admin")] + Admin, + #[serde(rename = "developer")] + Developer, +} + +impl Default for Role { + fn default() -> Role { + Self::Admin + } +} + +impl<'de> Deserialize<'de> for Role { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "admin" => Ok(Self::Admin), + "developer" => Ok(Self::Developer), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["admin", "developer"], + )), + } + } +} diff --git a/crates/tower-api/src/models/update_service_account_response.rs b/crates/tower-api/src/models/update_service_account_response.rs new file mode 100644 index 00000000..99474b39 --- /dev/null +++ b/crates/tower-api/src/models/update_service_account_response.rs @@ -0,0 +1,32 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct UpdateServiceAccountResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "service_account")] + pub service_account: models::ServiceAccount, +} + +impl UpdateServiceAccountResponse { + pub fn new(service_account: models::ServiceAccount) -> UpdateServiceAccountResponse { + UpdateServiceAccountResponse { + schema: None, + service_account, + } + } +} diff --git a/crates/tower-api/src/models/update_team_member_params.rs b/crates/tower-api/src/models/update_team_member_params.rs index 5b34f5d7..040a3a2a 100644 --- a/crates/tower-api/src/models/update_team_member_params.rs +++ b/crates/tower-api/src/models/update_team_member_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_team_member_response.rs b/crates/tower-api/src/models/update_team_member_response.rs index 42511c70..a96eb7a1 100644 --- a/crates/tower-api/src/models/update_team_member_response.rs +++ b/crates/tower-api/src/models/update_team_member_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_team_params.rs b/crates/tower-api/src/models/update_team_params.rs index 4dcef519..45695eca 100644 --- a/crates/tower-api/src/models/update_team_params.rs +++ b/crates/tower-api/src/models/update_team_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_team_response.rs b/crates/tower-api/src/models/update_team_response.rs index 28c1734c..0a3cc0f1 100644 --- a/crates/tower-api/src/models/update_team_response.rs +++ b/crates/tower-api/src/models/update_team_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_user_params.rs b/crates/tower-api/src/models/update_user_params.rs index a95860ca..b228281e 100644 --- a/crates/tower-api/src/models/update_user_params.rs +++ b/crates/tower-api/src/models/update_user_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_user_response.rs b/crates/tower-api/src/models/update_user_response.rs index 727a11d9..40c8e37a 100644 --- a/crates/tower-api/src/models/update_user_response.rs +++ b/crates/tower-api/src/models/update_user_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_webhook_params.rs b/crates/tower-api/src/models/update_webhook_params.rs index 2272a311..2bcdaa4d 100644 --- a/crates/tower-api/src/models/update_webhook_params.rs +++ b/crates/tower-api/src/models/update_webhook_params.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/update_webhook_response.rs b/crates/tower-api/src/models/update_webhook_response.rs index 90ba489a..09de5707 100644 --- a/crates/tower-api/src/models/update_webhook_response.rs +++ b/crates/tower-api/src/models/update_webhook_response.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/usage_limit.rs b/crates/tower-api/src/models/usage_limit.rs index 53252d37..7002d7ca 100644 --- a/crates/tower-api/src/models/usage_limit.rs +++ b/crates/tower-api/src/models/usage_limit.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/usage_metric_time_series_point.rs b/crates/tower-api/src/models/usage_metric_time_series_point.rs index 38d14c80..76bd29e5 100644 --- a/crates/tower-api/src/models/usage_metric_time_series_point.rs +++ b/crates/tower-api/src/models/usage_metric_time_series_point.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/user.rs b/crates/tower-api/src/models/user.rs index d7e31814..03f9db29 100644 --- a/crates/tower-api/src/models/user.rs +++ b/crates/tower-api/src/models/user.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-api/src/models/vend_catalog_credentials_body.rs b/crates/tower-api/src/models/vend_catalog_credentials_body.rs new file mode 100644 index 00000000..e170dd6b --- /dev/null +++ b/crates/tower-api/src/models/vend_catalog_credentials_body.rs @@ -0,0 +1,63 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct VendCatalogCredentialsBody { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + /// Access level for the vended token. \"read\" (default) binds the token to the catalog's read-only principal; \"read-write\" requires the catalogs:update scope and binds it to the read-write principal. + #[serde(rename = "mode", skip_serializing_if = "Option::is_none")] + pub mode: Option, +} + +impl VendCatalogCredentialsBody { + pub fn new() -> VendCatalogCredentialsBody { + VendCatalogCredentialsBody { + schema: None, + mode: None, + } + } +} +/// Access level for the vended token. \"read\" (default) binds the token to the catalog's read-only principal; \"read-write\" requires the catalogs:update scope and binds it to the read-write principal. +#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)] +pub enum Mode { + #[serde(rename = "read")] + Read, + #[serde(rename = "read-write")] + ReadWrite, +} + +impl Default for Mode { + fn default() -> Mode { + Self::Read + } +} + +impl<'de> Deserialize<'de> for Mode { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s = String::deserialize(deserializer)?; + match s.to_lowercase().as_str() { + "read" => Ok(Self::Read), + "read-write" => Ok(Self::ReadWrite), + _ => Err(serde::de::Error::unknown_variant( + &s, + &["read", "read-write"], + )), + } + } +} diff --git a/crates/tower-api/src/models/vend_catalog_credentials_response.rs b/crates/tower-api/src/models/vend_catalog_credentials_response.rs new file mode 100644 index 00000000..7a9287bf --- /dev/null +++ b/crates/tower-api/src/models/vend_catalog_credentials_response.rs @@ -0,0 +1,32 @@ +/* + * Tower API + * + * REST API to interact with Tower Services. + * + * The version of the OpenAPI document: v0.11.7 + * Contact: hello@tower.dev + * Generated by: https://openapi-generator.tech + */ +use crate::models; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::{serde_as, DefaultOnNull}; + +#[serde_as] +#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] +pub struct VendCatalogCredentialsResponse { + /// A URL to the JSON Schema for this object. + #[serde(rename = "$schema", skip_serializing_if = "Option::is_none")] + pub schema: Option, + #[serde_as(as = "DefaultOnNull")] + #[serde(rename = "credentials")] + pub credentials: models::CatalogCredentials, +} + +impl VendCatalogCredentialsResponse { + pub fn new(credentials: models::CatalogCredentials) -> VendCatalogCredentialsResponse { + VendCatalogCredentialsResponse { + schema: None, + credentials, + } + } +} diff --git a/crates/tower-api/src/models/webhook.rs b/crates/tower-api/src/models/webhook.rs index ad5db127..7f40e16b 100644 --- a/crates/tower-api/src/models/webhook.rs +++ b/crates/tower-api/src/models/webhook.rs @@ -3,7 +3,7 @@ * * REST API to interact with Tower Services. * - * The version of the OpenAPI document: v0.10.24 + * The version of the OpenAPI document: v0.11.7 * Contact: hello@tower.dev * Generated by: https://openapi-generator.tech */ diff --git a/crates/tower-cmd/src/api.rs b/crates/tower-cmd/src/api.rs index 54454477..a61eb0be 100644 --- a/crates/tower-cmd/src/api.rs +++ b/crates/tower-cmd/src/api.rs @@ -364,6 +364,7 @@ pub async fn list_catalogs( all: Some(all), page: Some(page), page_size: Some(page_size), + r#type: None, }; unwrap_api_response(tower_api::apis::default_api::list_catalogs( api_config, params, @@ -1068,7 +1069,7 @@ pub async fn create_environment( pub async fn list_schedules( config: &Config, - _app_name: Option<&str>, + app_name: Option<&str>, environment: Option<&str>, ) -> Result, Error> { @@ -1078,11 +1079,14 @@ pub async fn list_schedules( fetch_all_pages(config, |page, page_size| { let api_config = &api_config; let environment = &environment; + let app = app_name.map(String::from); + async move { let params = tower_api::apis::default_api::ListSchedulesParams { environment: environment.clone(), page: Some(page), page_size: Some(page_size), + app: app, }; unwrap_api_response(tower_api::apis::default_api::list_schedules( api_config, params, diff --git a/crates/tower-runtime/src/errors.rs b/crates/tower-runtime/src/errors.rs index 75a6b09c..0b4a96fd 100644 --- a/crates/tower-runtime/src/errors.rs +++ b/crates/tower-runtime/src/errors.rs @@ -5,8 +5,8 @@ pub enum Error { #[snafu(display("failed to RPC server"))] RuntimeStartFailed, - #[snafu(display("spawning process"))] - SpawnFailed, + #[snafu(display("spawning process: {detail}"))] + SpawnFailed { detail: String }, #[snafu(display("no app running"))] NoRunningApp, @@ -23,8 +23,8 @@ pub enum Error { #[snafu(display("package create failed"))] PackageCreateFailed, - #[snafu(display("package unpack failed"))] - PackageUnpackFailed, + #[snafu(display("package unpack failed: {detail}"))] + PackageUnpackFailed { detail: String }, #[snafu(display("container already initialized"))] AlreadyInitialized, @@ -79,8 +79,10 @@ pub enum Error { } impl From for Error { - fn from(_: std::io::Error) -> Self { - Error::SpawnFailed + fn from(err: std::io::Error) -> Self { + Error::SpawnFailed { + detail: err.to_string(), + } } } @@ -93,19 +95,18 @@ impl From for Error { impl From for Error { fn from(err: tower_uv::Error) -> Self { match err { - tower_uv::Error::IoError(_) => Error::SpawnFailed, - tower_uv::Error::NotFound(_) => Error::SpawnFailed, - tower_uv::Error::PermissionDenied(_) => Error::SpawnFailed, - tower_uv::Error::Other(_) => Error::SpawnFailed, - tower_uv::Error::MissingPyprojectToml => Error::SpawnFailed, - tower_uv::Error::InvalidUv => Error::SpawnFailed, tower_uv::Error::UnsupportedPlatform => Error::UnsupportedPlatform, + other => Error::SpawnFailed { + detail: other.to_string(), + }, } } } impl From for Error { - fn from(_: tower_package::Error) -> Self { - Error::PackageUnpackFailed + fn from(err: tower_package::Error) -> Self { + Error::PackageUnpackFailed { + detail: err.to_string(), + } } } diff --git a/crates/tower-runtime/src/subprocess.rs b/crates/tower-runtime/src/subprocess.rs index 23c7d4ef..2816dc8c 100644 --- a/crates/tower-runtime/src/subprocess.rs +++ b/crates/tower-runtime/src/subprocess.rs @@ -81,7 +81,9 @@ impl SubprocessBackend { package.tmp_dir = Some(temp_dir); package.unpack().await.map_err(|e| { error!(ctx: ctx, "Failed to unpack package: {:?}", e); - Error::PackageUnpackFailed + Error::PackageUnpackFailed { + detail: format!("{:?}", e), + } })?; info!(ctx: ctx, "Successfully unpacked package"); @@ -124,7 +126,9 @@ impl ExecutionBackend for SubprocessBackend { let unpacked_path = package .unpacked_path .clone() - .ok_or(Error::PackageUnpackFailed)?; + .ok_or(Error::PackageUnpackFailed { + detail: "no unpacked_path after unpack".to_string(), + })?; // Extract tmp_dir from package for cleanup tracking // We need to keep this alive until execution completes diff --git a/crates/tower-uv/src/lib.rs b/crates/tower-uv/src/lib.rs index 203fddab..de35cedc 100644 --- a/crates/tower-uv/src/lib.rs +++ b/crates/tower-uv/src/lib.rs @@ -26,6 +26,20 @@ pub enum Error { UnsupportedPlatform, } +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::IoError(e) => write!(f, "IO error: {}", e), + Error::NotFound(msg) => write!(f, "not found: {}", msg), + Error::PermissionDenied(msg) => write!(f, "permission denied: {}", msg), + Error::Other(msg) => write!(f, "{}", msg), + Error::MissingPyprojectToml => write!(f, "missing pyproject.toml"), + Error::InvalidUv => write!(f, "invalid uv installation"), + Error::UnsupportedPlatform => write!(f, "unsupported platform"), + } + } +} + impl From for Error { fn from(err: std::io::Error) -> Self { // Convert std::fs::Error to your custom Error type diff --git a/pyproject.toml b/pyproject.toml index c4a3b831..8732727d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "tower" -version = "0.3.64" +version = "0.3.65" description = "Tower CLI and runtime environment for Tower." authors = [{ name = "Tower Computing Inc.", email = "brad@tower.dev" }] readme = "README.md" diff --git a/src/tower/tower_api_client/api/default/create_service_account.py b/src/tower/tower_api_client/api/default/create_service_account.py new file mode 100644 index 00000000..adc5fcbe --- /dev/null +++ b/src/tower/tower_api_client/api/default/create_service_account.py @@ -0,0 +1,167 @@ +from http import HTTPStatus +from typing import Any + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.create_service_account_params import CreateServiceAccountParams +from ...models.create_service_account_response import CreateServiceAccountResponse +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs( + *, + body: CreateServiceAccountParams, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/service-accounts", + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CreateServiceAccountResponse | ErrorModel: + if response.status_code == 201: + response_201 = CreateServiceAccountResponse.from_dict(response.json()) + + return response_201 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CreateServiceAccountResponse | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + body: CreateServiceAccountParams, +) -> Response[CreateServiceAccountResponse | ErrorModel]: + """Create service account + + Create a new service account in the current account. Team admin only. + + Args: + body (CreateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CreateServiceAccountResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + body: CreateServiceAccountParams, +) -> CreateServiceAccountResponse | ErrorModel | None: + """Create service account + + Create a new service account in the current account. Team admin only. + + Args: + body (CreateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CreateServiceAccountResponse | ErrorModel + """ + + return sync_detailed( + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + body: CreateServiceAccountParams, +) -> Response[CreateServiceAccountResponse | ErrorModel]: + """Create service account + + Create a new service account in the current account. Team admin only. + + Args: + body (CreateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CreateServiceAccountResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + body: CreateServiceAccountParams, +) -> CreateServiceAccountResponse | ErrorModel | None: + """Create service account + + Create a new service account in the current account. Team admin only. + + Args: + body (CreateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CreateServiceAccountResponse | ErrorModel + """ + + return ( + await asyncio_detailed( + client=client, + body=body, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/create_service_account_api_key.py b/src/tower/tower_api_client/api/default/create_service_account_api_key.py new file mode 100644 index 00000000..a61d1e3c --- /dev/null +++ b/src/tower/tower_api_client/api/default/create_service_account_api_key.py @@ -0,0 +1,191 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.create_service_account_api_key_params import ( + CreateServiceAccountAPIKeyParams, +) +from ...models.create_service_account_api_key_response import ( + CreateServiceAccountAPIKeyResponse, +) +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs( + id_or_name: str, + *, + body: CreateServiceAccountAPIKeyParams, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/service-accounts/{id_or_name}/api-keys".format( + id_or_name=quote(str(id_or_name), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> CreateServiceAccountAPIKeyResponse | ErrorModel: + if response.status_code == 201: + response_201 = CreateServiceAccountAPIKeyResponse.from_dict(response.json()) + + return response_201 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[CreateServiceAccountAPIKeyResponse | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + body: CreateServiceAccountAPIKeyParams, +) -> Response[CreateServiceAccountAPIKeyResponse | ErrorModel]: + """Create API key for service account + + Mint a new API key bound to a service account. The full identifier is only returned on this + response. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account this key authenticates as. + body (CreateServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CreateServiceAccountAPIKeyResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id_or_name: str, + *, + client: AuthenticatedClient, + body: CreateServiceAccountAPIKeyParams, +) -> CreateServiceAccountAPIKeyResponse | ErrorModel | None: + """Create API key for service account + + Mint a new API key bound to a service account. The full identifier is only returned on this + response. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account this key authenticates as. + body (CreateServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CreateServiceAccountAPIKeyResponse | ErrorModel + """ + + return sync_detailed( + id_or_name=id_or_name, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + body: CreateServiceAccountAPIKeyParams, +) -> Response[CreateServiceAccountAPIKeyResponse | ErrorModel]: + """Create API key for service account + + Mint a new API key bound to a service account. The full identifier is only returned on this + response. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account this key authenticates as. + body (CreateServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[CreateServiceAccountAPIKeyResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id_or_name: str, + *, + client: AuthenticatedClient, + body: CreateServiceAccountAPIKeyParams, +) -> CreateServiceAccountAPIKeyResponse | ErrorModel | None: + """Create API key for service account + + Mint a new API key bound to a service account. The full identifier is only returned on this + response. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account this key authenticates as. + body (CreateServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + CreateServiceAccountAPIKeyResponse | ErrorModel + """ + + return ( + await asyncio_detailed( + id_or_name=id_or_name, + client=client, + body=body, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/delete_environment.py b/src/tower/tower_api_client/api/default/delete_environment.py new file mode 100644 index 00000000..b3263192 --- /dev/null +++ b/src/tower/tower_api_client/api/default/delete_environment.py @@ -0,0 +1,161 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.delete_environment_response import DeleteEnvironmentResponse +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs( + name: str, +) -> dict[str, Any]: + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/environments/{name}".format( + name=quote(str(name), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DeleteEnvironmentResponse | ErrorModel: + if response.status_code == 200: + response_200 = DeleteEnvironmentResponse.from_dict(response.json()) + + return response_200 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DeleteEnvironmentResponse | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + name: str, + *, + client: AuthenticatedClient, +) -> Response[DeleteEnvironmentResponse | ErrorModel]: + """Delete environment + + Delete an environment by name + + Args: + name (str): The name of the environment to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DeleteEnvironmentResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + name=name, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + name: str, + *, + client: AuthenticatedClient, +) -> DeleteEnvironmentResponse | ErrorModel | None: + """Delete environment + + Delete an environment by name + + Args: + name (str): The name of the environment to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DeleteEnvironmentResponse | ErrorModel + """ + + return sync_detailed( + name=name, + client=client, + ).parsed + + +async def asyncio_detailed( + name: str, + *, + client: AuthenticatedClient, +) -> Response[DeleteEnvironmentResponse | ErrorModel]: + """Delete environment + + Delete an environment by name + + Args: + name (str): The name of the environment to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DeleteEnvironmentResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + name=name, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + name: str, + *, + client: AuthenticatedClient, +) -> DeleteEnvironmentResponse | ErrorModel | None: + """Delete environment + + Delete an environment by name + + Args: + name (str): The name of the environment to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DeleteEnvironmentResponse | ErrorModel + """ + + return ( + await asyncio_detailed( + name=name, + client=client, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/delete_service_account.py b/src/tower/tower_api_client/api/default/delete_service_account.py new file mode 100644 index 00000000..2e838da5 --- /dev/null +++ b/src/tower/tower_api_client/api/default/delete_service_account.py @@ -0,0 +1,163 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs( + id_or_name: str, +) -> dict[str, Any]: + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/service-accounts/{id_or_name}".format( + id_or_name=quote(str(id_or_name), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | ErrorModel: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> Response[Any | ErrorModel]: + """Delete service account + + Tombstones a service account: revokes API keys, disables owned schedules, cancels in-flight runs, + then soft-deletes the SA. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> Any | ErrorModel | None: + """Delete service account + + Tombstones a service account: revokes API keys, disables owned schedules, cancels in-flight runs, + then soft-deletes the SA. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorModel + """ + + return sync_detailed( + id_or_name=id_or_name, + client=client, + ).parsed + + +async def asyncio_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> Response[Any | ErrorModel]: + """Delete service account + + Tombstones a service account: revokes API keys, disables owned schedules, cancels in-flight runs, + then soft-deletes the SA. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> Any | ErrorModel | None: + """Delete service account + + Tombstones a service account: revokes API keys, disables owned schedules, cancels in-flight runs, + then soft-deletes the SA. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to delete. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorModel + """ + + return ( + await asyncio_detailed( + id_or_name=id_or_name, + client=client, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/delete_service_account_api_key.py b/src/tower/tower_api_client/api/default/delete_service_account_api_key.py new file mode 100644 index 00000000..4b51ccd8 --- /dev/null +++ b/src/tower/tower_api_client/api/default/delete_service_account_api_key.py @@ -0,0 +1,183 @@ +from http import HTTPStatus +from typing import Any, cast +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.delete_service_account_api_key_params import ( + DeleteServiceAccountAPIKeyParams, +) +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs( + id_or_name: str, + *, + body: DeleteServiceAccountAPIKeyParams, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "delete", + "url": "/service-accounts/{id_or_name}/api-keys".format( + id_or_name=quote(str(id_or_name), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | ErrorModel: + if response.status_code == 204: + response_204 = cast(Any, None) + return response_204 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + body: DeleteServiceAccountAPIKeyParams, +) -> Response[Any | ErrorModel]: + """Delete API key for service account + + Revoke an API key bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + body (DeleteServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id_or_name: str, + *, + client: AuthenticatedClient, + body: DeleteServiceAccountAPIKeyParams, +) -> Any | ErrorModel | None: + """Delete API key for service account + + Revoke an API key bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + body (DeleteServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorModel + """ + + return sync_detailed( + id_or_name=id_or_name, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + body: DeleteServiceAccountAPIKeyParams, +) -> Response[Any | ErrorModel]: + """Delete API key for service account + + Revoke an API key bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + body (DeleteServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id_or_name: str, + *, + client: AuthenticatedClient, + body: DeleteServiceAccountAPIKeyParams, +) -> Any | ErrorModel | None: + """Delete API key for service account + + Revoke an API key bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + body (DeleteServiceAccountAPIKeyParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | ErrorModel + """ + + return ( + await asyncio_detailed( + id_or_name=id_or_name, + client=client, + body=body, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/deploy_app.py b/src/tower/tower_api_client/api/default/deploy_app.py index 3e822ae0..47824719 100644 --- a/src/tower/tower_api_client/api/default/deploy_app.py +++ b/src/tower/tower_api_client/api/default/deploy_app.py @@ -19,12 +19,16 @@ def _get_kwargs( environment: str | Unset = UNSET, all_environments: bool | Unset = False, x_tower_checksum_sha256: str | Unset = UNSET, + x_tower_idempotency_key: str | Unset = UNSET, content_length: int | Unset = UNSET, ) -> dict[str, Any]: headers: dict[str, Any] = {} if not isinstance(x_tower_checksum_sha256, Unset): headers["X-Tower-Checksum-SHA256"] = x_tower_checksum_sha256 + if not isinstance(x_tower_idempotency_key, Unset): + headers["X-Tower-Idempotency-Key"] = x_tower_idempotency_key + if not isinstance(content_length, Unset): headers["Content-Length"] = str(content_length) @@ -105,6 +109,7 @@ def sync_detailed( environment: str | Unset = UNSET, all_environments: bool | Unset = False, x_tower_checksum_sha256: str | Unset = UNSET, + x_tower_idempotency_key: str | Unset = UNSET, content_length: int | Unset = UNSET, ) -> Response[DeployAppResponse | ErrorModel]: """Deploy app @@ -119,6 +124,10 @@ def sync_detailed( true, the 'environment' query parameter is ignored. Default: False. x_tower_checksum_sha256 (str | Unset): The SHA256 hash of the content, used to verify integrity. + x_tower_idempotency_key (str | Unset): Optional opaque key (typically a git commit SHA or + CI build ID). If a prior deploy for this app supplied the same value, the server reuses + that AppVersion instead of creating a new one — letting consecutive deploys to different + environments share a single version when the source hasn't changed. content_length (int | Unset): Size of the uploaded bundle in bytes. body (DeployAppJsonBody): Example: {'source_uri': 'https://github.com/tower/tower- examples/tree/main/01-hello-world'}. @@ -139,6 +148,7 @@ def sync_detailed( environment=environment, all_environments=all_environments, x_tower_checksum_sha256=x_tower_checksum_sha256, + x_tower_idempotency_key=x_tower_idempotency_key, content_length=content_length, ) @@ -157,6 +167,7 @@ def sync( environment: str | Unset = UNSET, all_environments: bool | Unset = False, x_tower_checksum_sha256: str | Unset = UNSET, + x_tower_idempotency_key: str | Unset = UNSET, content_length: int | Unset = UNSET, ) -> DeployAppResponse | ErrorModel | None: """Deploy app @@ -171,6 +182,10 @@ def sync( true, the 'environment' query parameter is ignored. Default: False. x_tower_checksum_sha256 (str | Unset): The SHA256 hash of the content, used to verify integrity. + x_tower_idempotency_key (str | Unset): Optional opaque key (typically a git commit SHA or + CI build ID). If a prior deploy for this app supplied the same value, the server reuses + that AppVersion instead of creating a new one — letting consecutive deploys to different + environments share a single version when the source hasn't changed. content_length (int | Unset): Size of the uploaded bundle in bytes. body (DeployAppJsonBody): Example: {'source_uri': 'https://github.com/tower/tower- examples/tree/main/01-hello-world'}. @@ -192,6 +207,7 @@ def sync( environment=environment, all_environments=all_environments, x_tower_checksum_sha256=x_tower_checksum_sha256, + x_tower_idempotency_key=x_tower_idempotency_key, content_length=content_length, ).parsed @@ -204,6 +220,7 @@ async def asyncio_detailed( environment: str | Unset = UNSET, all_environments: bool | Unset = False, x_tower_checksum_sha256: str | Unset = UNSET, + x_tower_idempotency_key: str | Unset = UNSET, content_length: int | Unset = UNSET, ) -> Response[DeployAppResponse | ErrorModel]: """Deploy app @@ -218,6 +235,10 @@ async def asyncio_detailed( true, the 'environment' query parameter is ignored. Default: False. x_tower_checksum_sha256 (str | Unset): The SHA256 hash of the content, used to verify integrity. + x_tower_idempotency_key (str | Unset): Optional opaque key (typically a git commit SHA or + CI build ID). If a prior deploy for this app supplied the same value, the server reuses + that AppVersion instead of creating a new one — letting consecutive deploys to different + environments share a single version when the source hasn't changed. content_length (int | Unset): Size of the uploaded bundle in bytes. body (DeployAppJsonBody): Example: {'source_uri': 'https://github.com/tower/tower- examples/tree/main/01-hello-world'}. @@ -238,6 +259,7 @@ async def asyncio_detailed( environment=environment, all_environments=all_environments, x_tower_checksum_sha256=x_tower_checksum_sha256, + x_tower_idempotency_key=x_tower_idempotency_key, content_length=content_length, ) @@ -254,6 +276,7 @@ async def asyncio( environment: str | Unset = UNSET, all_environments: bool | Unset = False, x_tower_checksum_sha256: str | Unset = UNSET, + x_tower_idempotency_key: str | Unset = UNSET, content_length: int | Unset = UNSET, ) -> DeployAppResponse | ErrorModel | None: """Deploy app @@ -268,6 +291,10 @@ async def asyncio( true, the 'environment' query parameter is ignored. Default: False. x_tower_checksum_sha256 (str | Unset): The SHA256 hash of the content, used to verify integrity. + x_tower_idempotency_key (str | Unset): Optional opaque key (typically a git commit SHA or + CI build ID). If a prior deploy for this app supplied the same value, the server reuses + that AppVersion instead of creating a new one — letting consecutive deploys to different + environments share a single version when the source hasn't changed. content_length (int | Unset): Size of the uploaded bundle in bytes. body (DeployAppJsonBody): Example: {'source_uri': 'https://github.com/tower/tower- examples/tree/main/01-hello-world'}. @@ -290,6 +317,7 @@ async def asyncio( environment=environment, all_environments=all_environments, x_tower_checksum_sha256=x_tower_checksum_sha256, + x_tower_idempotency_key=x_tower_idempotency_key, content_length=content_length, ) ).parsed diff --git a/src/tower/tower_api_client/api/default/describe_default_catalog.py b/src/tower/tower_api_client/api/default/describe_default_catalog.py new file mode 100644 index 00000000..02fd7a1d --- /dev/null +++ b/src/tower/tower_api_client/api/default/describe_default_catalog.py @@ -0,0 +1,151 @@ +from http import HTTPStatus +from typing import Any, cast + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.describe_catalog_response import DescribeCatalogResponse +from ...types import Response + + +def _get_kwargs() -> dict[str, Any]: + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/storage/catalogs/default", + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Any | DescribeCatalogResponse | None: + if response.status_code == 200: + response_200 = DescribeCatalogResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 202: + response_202 = cast(Any, None) + return response_202 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[Any | DescribeCatalogResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, +) -> Response[Any | DescribeCatalogResponse]: + """Describe default catalog + + Returns the team's default catalog, provisioning it lazily if it does not yet exist. + + When two concurrent first calls race to provision the catalog, the loser receives 202 Accepted; + retry after a few seconds and the catalog will be ready. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | DescribeCatalogResponse] + """ + + kwargs = _get_kwargs() + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, +) -> Any | DescribeCatalogResponse | None: + """Describe default catalog + + Returns the team's default catalog, provisioning it lazily if it does not yet exist. + + When two concurrent first calls race to provision the catalog, the loser receives 202 Accepted; + retry after a few seconds and the catalog will be ready. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | DescribeCatalogResponse + """ + + return sync_detailed( + client=client, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, +) -> Response[Any | DescribeCatalogResponse]: + """Describe default catalog + + Returns the team's default catalog, provisioning it lazily if it does not yet exist. + + When two concurrent first calls race to provision the catalog, the loser receives 202 Accepted; + retry after a few seconds and the catalog will be ready. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[Any | DescribeCatalogResponse] + """ + + kwargs = _get_kwargs() + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, +) -> Any | DescribeCatalogResponse | None: + """Describe default catalog + + Returns the team's default catalog, provisioning it lazily if it does not yet exist. + + When two concurrent first calls race to provision the catalog, the loser receives 202 Accepted; + retry after a few seconds and the catalog will be ready. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Any | DescribeCatalogResponse + """ + + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/describe_service_account.py b/src/tower/tower_api_client/api/default/describe_service_account.py new file mode 100644 index 00000000..5c855732 --- /dev/null +++ b/src/tower/tower_api_client/api/default/describe_service_account.py @@ -0,0 +1,161 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.describe_service_account_response import DescribeServiceAccountResponse +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs( + id_or_name: str, +) -> dict[str, Any]: + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/service-accounts/{id_or_name}".format( + id_or_name=quote(str(id_or_name), safe=""), + ), + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DescribeServiceAccountResponse | ErrorModel: + if response.status_code == 200: + response_200 = DescribeServiceAccountResponse.from_dict(response.json()) + + return response_200 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DescribeServiceAccountResponse | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> Response[DescribeServiceAccountResponse | ErrorModel]: + """Describe service account + + Fetch a single service account by ID or name. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DescribeServiceAccountResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> DescribeServiceAccountResponse | ErrorModel | None: + """Describe service account + + Fetch a single service account by ID or name. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DescribeServiceAccountResponse | ErrorModel + """ + + return sync_detailed( + id_or_name=id_or_name, + client=client, + ).parsed + + +async def asyncio_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> Response[DescribeServiceAccountResponse | ErrorModel]: + """Describe service account + + Fetch a single service account by ID or name. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DescribeServiceAccountResponse | ErrorModel] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id_or_name: str, + *, + client: AuthenticatedClient, +) -> DescribeServiceAccountResponse | ErrorModel | None: + """Describe service account + + Fetch a single service account by ID or name. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DescribeServiceAccountResponse | ErrorModel + """ + + return ( + await asyncio_detailed( + id_or_name=id_or_name, + client=client, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/describe_whoami.py b/src/tower/tower_api_client/api/default/describe_whoami.py new file mode 100644 index 00000000..5f6fb244 --- /dev/null +++ b/src/tower/tower_api_client/api/default/describe_whoami.py @@ -0,0 +1,142 @@ +from http import HTTPStatus +from typing import Any + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.describe_whoami_response import DescribeWhoamiResponse +from ...models.error_model import ErrorModel +from ...types import Response + + +def _get_kwargs() -> dict[str, Any]: + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/whoami", + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> DescribeWhoamiResponse | ErrorModel: + if response.status_code == 200: + response_200 = DescribeWhoamiResponse.from_dict(response.json()) + + return response_200 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[DescribeWhoamiResponse | ErrorModel]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, +) -> Response[DescribeWhoamiResponse | ErrorModel]: + """Describe whoami + + Returns an RS256-signed identity JWT for the authenticated user. The token's signature can be + verified using the public keys served at /.well-known/jwks.json. Intended for downstream consumers + (e.g. Convex) that need a verifiable user identity. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DescribeWhoamiResponse | ErrorModel] + """ + + kwargs = _get_kwargs() + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, +) -> DescribeWhoamiResponse | ErrorModel | None: + """Describe whoami + + Returns an RS256-signed identity JWT for the authenticated user. The token's signature can be + verified using the public keys served at /.well-known/jwks.json. Intended for downstream consumers + (e.g. Convex) that need a verifiable user identity. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DescribeWhoamiResponse | ErrorModel + """ + + return sync_detailed( + client=client, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, +) -> Response[DescribeWhoamiResponse | ErrorModel]: + """Describe whoami + + Returns an RS256-signed identity JWT for the authenticated user. The token's signature can be + verified using the public keys served at /.well-known/jwks.json. Intended for downstream consumers + (e.g. Convex) that need a verifiable user identity. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[DescribeWhoamiResponse | ErrorModel] + """ + + kwargs = _get_kwargs() + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, +) -> DescribeWhoamiResponse | ErrorModel | None: + """Describe whoami + + Returns an RS256-signed identity JWT for the authenticated user. The token's signature can be + verified using the public keys served at /.well-known/jwks.json. Intended for downstream consumers + (e.g. Convex) that need a verifiable user identity. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + DescribeWhoamiResponse | ErrorModel + """ + + return ( + await asyncio_detailed( + client=client, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/generate_organization_usage_time_series.py b/src/tower/tower_api_client/api/default/generate_organization_usage_time_series.py index c866ff4c..701b61b9 100644 --- a/src/tower/tower_api_client/api/default/generate_organization_usage_time_series.py +++ b/src/tower/tower_api_client/api/default/generate_organization_usage_time_series.py @@ -50,7 +50,7 @@ def sync_detailed( *, client: AuthenticatedClient, ) -> Response[ErrorModel | GenerateOrganizationUsageTimeSeriesResponse]: - """Get organization usage as time series + """Generate organization usage Get the current billing cycle usage as a time series. @@ -75,7 +75,7 @@ def sync( *, client: AuthenticatedClient, ) -> ErrorModel | GenerateOrganizationUsageTimeSeriesResponse | None: - """Get organization usage as time series + """Generate organization usage Get the current billing cycle usage as a time series. @@ -96,7 +96,7 @@ async def asyncio_detailed( *, client: AuthenticatedClient, ) -> Response[ErrorModel | GenerateOrganizationUsageTimeSeriesResponse]: - """Get organization usage as time series + """Generate organization usage Get the current billing cycle usage as a time series. @@ -119,7 +119,7 @@ async def asyncio( *, client: AuthenticatedClient, ) -> ErrorModel | GenerateOrganizationUsageTimeSeriesResponse | None: - """Get organization usage as time series + """Generate organization usage Get the current billing cycle usage as a time series. diff --git a/src/tower/tower_api_client/api/default/list_catalogs.py b/src/tower/tower_api_client/api/default/list_catalogs.py index b559eb5b..84b69bdb 100644 --- a/src/tower/tower_api_client/api/default/list_catalogs.py +++ b/src/tower/tower_api_client/api/default/list_catalogs.py @@ -15,6 +15,7 @@ def _get_kwargs( page_size: int | Unset = 20, environment: str | Unset = UNSET, all_: bool | Unset = UNSET, + type_: str | Unset = UNSET, ) -> dict[str, Any]: params: dict[str, Any] = {} @@ -26,6 +27,8 @@ def _get_kwargs( params["all"] = all_ + params["type"] = type_ + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} _kwargs: dict[str, Any] = { @@ -68,6 +71,7 @@ def sync_detailed( page_size: int | Unset = 20, environment: str | Unset = UNSET, all_: bool | Unset = UNSET, + type_: str | Unset = UNSET, ) -> Response[ErrorModel | ListCatalogsResponse]: """List catalogs @@ -76,9 +80,12 @@ def sync_detailed( Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. - environment (str | Unset): The environment to filter by. + environment (str | Unset): The environment to filter by. When omitted, catalogs across all + environments are returned. all_ (bool | Unset): Whether to fetch all catalogs across all environments or only for the current environment. + type_ (str | Unset): Filter catalogs by type, e.g. "tower-catalog". When omitted, all + catalog types are returned. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -93,6 +100,7 @@ def sync_detailed( page_size=page_size, environment=environment, all_=all_, + type_=type_, ) response = client.get_httpx_client().request( @@ -109,6 +117,7 @@ def sync( page_size: int | Unset = 20, environment: str | Unset = UNSET, all_: bool | Unset = UNSET, + type_: str | Unset = UNSET, ) -> ErrorModel | ListCatalogsResponse | None: """List catalogs @@ -117,9 +126,12 @@ def sync( Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. - environment (str | Unset): The environment to filter by. + environment (str | Unset): The environment to filter by. When omitted, catalogs across all + environments are returned. all_ (bool | Unset): Whether to fetch all catalogs across all environments or only for the current environment. + type_ (str | Unset): Filter catalogs by type, e.g. "tower-catalog". When omitted, all + catalog types are returned. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -135,6 +147,7 @@ def sync( page_size=page_size, environment=environment, all_=all_, + type_=type_, ).parsed @@ -145,6 +158,7 @@ async def asyncio_detailed( page_size: int | Unset = 20, environment: str | Unset = UNSET, all_: bool | Unset = UNSET, + type_: str | Unset = UNSET, ) -> Response[ErrorModel | ListCatalogsResponse]: """List catalogs @@ -153,9 +167,12 @@ async def asyncio_detailed( Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. - environment (str | Unset): The environment to filter by. + environment (str | Unset): The environment to filter by. When omitted, catalogs across all + environments are returned. all_ (bool | Unset): Whether to fetch all catalogs across all environments or only for the current environment. + type_ (str | Unset): Filter catalogs by type, e.g. "tower-catalog". When omitted, all + catalog types are returned. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -170,6 +187,7 @@ async def asyncio_detailed( page_size=page_size, environment=environment, all_=all_, + type_=type_, ) response = await client.get_async_httpx_client().request(**kwargs) @@ -184,6 +202,7 @@ async def asyncio( page_size: int | Unset = 20, environment: str | Unset = UNSET, all_: bool | Unset = UNSET, + type_: str | Unset = UNSET, ) -> ErrorModel | ListCatalogsResponse | None: """List catalogs @@ -192,9 +211,12 @@ async def asyncio( Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. - environment (str | Unset): The environment to filter by. + environment (str | Unset): The environment to filter by. When omitted, catalogs across all + environments are returned. all_ (bool | Unset): Whether to fetch all catalogs across all environments or only for the current environment. + type_ (str | Unset): Filter catalogs by type, e.g. "tower-catalog". When omitted, all + catalog types are returned. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -211,5 +233,6 @@ async def asyncio( page_size=page_size, environment=environment, all_=all_, + type_=type_, ) ).parsed diff --git a/src/tower/tower_api_client/api/default/list_schedules.py b/src/tower/tower_api_client/api/default/list_schedules.py index 582621bf..31a0bf0e 100644 --- a/src/tower/tower_api_client/api/default/list_schedules.py +++ b/src/tower/tower_api_client/api/default/list_schedules.py @@ -14,6 +14,7 @@ def _get_kwargs( page: int | Unset = 1, page_size: int | Unset = 20, environment: str | Unset = UNSET, + app: str | Unset = UNSET, ) -> dict[str, Any]: params: dict[str, Any] = {} @@ -23,6 +24,8 @@ def _get_kwargs( params["environment"] = environment + params["app"] = app + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} _kwargs: dict[str, Any] = { @@ -64,16 +67,19 @@ def sync_detailed( page: int | Unset = 1, page_size: int | Unset = 20, environment: str | Unset = UNSET, + app: str | Unset = UNSET, ) -> Response[ErrorModel | ListSchedulesResponse]: """List schedules - List all schedules for an app. + Lists all schedules for the current account, optionally filtered by environment and app. Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. environment (str | Unset): Filter schedules by environment. If not provided, all environments will be included. + app (str | Unset): Filter schedules by app name. If not provided, schedules across all + apps will be included. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -87,6 +93,7 @@ def sync_detailed( page=page, page_size=page_size, environment=environment, + app=app, ) response = client.get_httpx_client().request( @@ -102,16 +109,19 @@ def sync( page: int | Unset = 1, page_size: int | Unset = 20, environment: str | Unset = UNSET, + app: str | Unset = UNSET, ) -> ErrorModel | ListSchedulesResponse | None: """List schedules - List all schedules for an app. + Lists all schedules for the current account, optionally filtered by environment and app. Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. environment (str | Unset): Filter schedules by environment. If not provided, all environments will be included. + app (str | Unset): Filter schedules by app name. If not provided, schedules across all + apps will be included. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -126,6 +136,7 @@ def sync( page=page, page_size=page_size, environment=environment, + app=app, ).parsed @@ -135,16 +146,19 @@ async def asyncio_detailed( page: int | Unset = 1, page_size: int | Unset = 20, environment: str | Unset = UNSET, + app: str | Unset = UNSET, ) -> Response[ErrorModel | ListSchedulesResponse]: """List schedules - List all schedules for an app. + Lists all schedules for the current account, optionally filtered by environment and app. Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. environment (str | Unset): Filter schedules by environment. If not provided, all environments will be included. + app (str | Unset): Filter schedules by app name. If not provided, schedules across all + apps will be included. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -158,6 +172,7 @@ async def asyncio_detailed( page=page, page_size=page_size, environment=environment, + app=app, ) response = await client.get_async_httpx_client().request(**kwargs) @@ -171,16 +186,19 @@ async def asyncio( page: int | Unset = 1, page_size: int | Unset = 20, environment: str | Unset = UNSET, + app: str | Unset = UNSET, ) -> ErrorModel | ListSchedulesResponse | None: """List schedules - List all schedules for an app. + Lists all schedules for the current account, optionally filtered by environment and app. Args: page (int | Unset): The page number to fetch. Default: 1. page_size (int | Unset): The number of records to fetch on each page. Default: 20. environment (str | Unset): Filter schedules by environment. If not provided, all environments will be included. + app (str | Unset): Filter schedules by app name. If not provided, schedules across all + apps will be included. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -196,5 +214,6 @@ async def asyncio( page=page, page_size=page_size, environment=environment, + app=app, ) ).parsed diff --git a/src/tower/tower_api_client/api/default/list_service_account_api_keys.py b/src/tower/tower_api_client/api/default/list_service_account_api_keys.py new file mode 100644 index 00000000..5a356b94 --- /dev/null +++ b/src/tower/tower_api_client/api/default/list_service_account_api_keys.py @@ -0,0 +1,199 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.error_model import ErrorModel +from ...models.list_service_account_api_keys_response import ( + ListServiceAccountAPIKeysResponse, +) +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + id_or_name: str, + *, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> dict[str, Any]: + params: dict[str, Any] = {} + + params["page"] = page + + params["page_size"] = page_size + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/service-accounts/{id_or_name}/api-keys".format( + id_or_name=quote(str(id_or_name), safe=""), + ), + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ErrorModel | ListServiceAccountAPIKeysResponse: + if response.status_code == 200: + response_200 = ListServiceAccountAPIKeysResponse.from_dict(response.json()) + + return response_200 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ErrorModel | ListServiceAccountAPIKeysResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> Response[ErrorModel | ListServiceAccountAPIKeysResponse]: + """List API keys for service account + + List API keys bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | ListServiceAccountAPIKeysResponse] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + page=page, + page_size=page_size, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id_or_name: str, + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> ErrorModel | ListServiceAccountAPIKeysResponse | None: + """List API keys for service account + + List API keys bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | ListServiceAccountAPIKeysResponse + """ + + return sync_detailed( + id_or_name=id_or_name, + client=client, + page=page, + page_size=page_size, + ).parsed + + +async def asyncio_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> Response[ErrorModel | ListServiceAccountAPIKeysResponse]: + """List API keys for service account + + List API keys bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | ListServiceAccountAPIKeysResponse] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + page=page, + page_size=page_size, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id_or_name: str, + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> ErrorModel | ListServiceAccountAPIKeysResponse | None: + """List API keys for service account + + List API keys bound to a service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account. + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | ListServiceAccountAPIKeysResponse + """ + + return ( + await asyncio_detailed( + id_or_name=id_or_name, + client=client, + page=page, + page_size=page_size, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/list_service_accounts.py b/src/tower/tower_api_client/api/default/list_service_accounts.py new file mode 100644 index 00000000..5d44ce2f --- /dev/null +++ b/src/tower/tower_api_client/api/default/list_service_accounts.py @@ -0,0 +1,181 @@ +from http import HTTPStatus +from typing import Any + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.error_model import ErrorModel +from ...models.list_service_accounts_response import ListServiceAccountsResponse +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + *, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> dict[str, Any]: + params: dict[str, Any] = {} + + params["page"] = page + + params["page_size"] = page_size + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "get", + "url": "/service-accounts", + "params": params, + } + + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ErrorModel | ListServiceAccountsResponse: + if response.status_code == 200: + response_200 = ListServiceAccountsResponse.from_dict(response.json()) + + return response_200 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ErrorModel | ListServiceAccountsResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> Response[ErrorModel | ListServiceAccountsResponse]: + """List service accounts + + List all service accounts in the current account. Team admin only. + + Args: + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | ListServiceAccountsResponse] + """ + + kwargs = _get_kwargs( + page=page, + page_size=page_size, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> ErrorModel | ListServiceAccountsResponse | None: + """List service accounts + + List all service accounts in the current account. Team admin only. + + Args: + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | ListServiceAccountsResponse + """ + + return sync_detailed( + client=client, + page=page, + page_size=page_size, + ).parsed + + +async def asyncio_detailed( + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> Response[ErrorModel | ListServiceAccountsResponse]: + """List service accounts + + List all service accounts in the current account. Team admin only. + + Args: + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | ListServiceAccountsResponse] + """ + + kwargs = _get_kwargs( + page=page, + page_size=page_size, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + *, + client: AuthenticatedClient, + page: int | Unset = 1, + page_size: int | Unset = 20, +) -> ErrorModel | ListServiceAccountsResponse | None: + """List service accounts + + List all service accounts in the current account. Team admin only. + + Args: + page (int | Unset): The page number to fetch. Default: 1. + page_size (int | Unset): The number of records to fetch on each page. Default: 20. + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | ListServiceAccountsResponse + """ + + return ( + await asyncio_detailed( + client=client, + page=page, + page_size=page_size, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/update_service_account.py b/src/tower/tower_api_client/api/default/update_service_account.py new file mode 100644 index 00000000..2f7ccdeb --- /dev/null +++ b/src/tower/tower_api_client/api/default/update_service_account.py @@ -0,0 +1,183 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ...client import AuthenticatedClient, Client +from ...models.error_model import ErrorModel +from ...models.update_service_account_params import UpdateServiceAccountParams +from ...models.update_service_account_response import UpdateServiceAccountResponse +from ...types import Response + + +def _get_kwargs( + id_or_name: str, + *, + body: UpdateServiceAccountParams, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "patch", + "url": "/service-accounts/{id_or_name}".format( + id_or_name=quote(str(id_or_name), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ErrorModel | UpdateServiceAccountResponse: + if response.status_code == 200: + response_200 = UpdateServiceAccountResponse.from_dict(response.json()) + + return response_200 + + response_default = ErrorModel.from_dict(response.json()) + + return response_default + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ErrorModel | UpdateServiceAccountResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + body: UpdateServiceAccountParams, +) -> Response[ErrorModel | UpdateServiceAccountResponse]: + """Update service account + + Update one or more fields on an existing service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to update. + body (UpdateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | UpdateServiceAccountResponse] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + id_or_name: str, + *, + client: AuthenticatedClient, + body: UpdateServiceAccountParams, +) -> ErrorModel | UpdateServiceAccountResponse | None: + """Update service account + + Update one or more fields on an existing service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to update. + body (UpdateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | UpdateServiceAccountResponse + """ + + return sync_detailed( + id_or_name=id_or_name, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + id_or_name: str, + *, + client: AuthenticatedClient, + body: UpdateServiceAccountParams, +) -> Response[ErrorModel | UpdateServiceAccountResponse]: + """Update service account + + Update one or more fields on an existing service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to update. + body (UpdateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | UpdateServiceAccountResponse] + """ + + kwargs = _get_kwargs( + id_or_name=id_or_name, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + id_or_name: str, + *, + client: AuthenticatedClient, + body: UpdateServiceAccountParams, +) -> ErrorModel | UpdateServiceAccountResponse | None: + """Update service account + + Update one or more fields on an existing service account. Team admin only. + + Args: + id_or_name (str): The ID or name of the service account to update. + body (UpdateServiceAccountParams): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | UpdateServiceAccountResponse + """ + + return ( + await asyncio_detailed( + id_or_name=id_or_name, + client=client, + body=body, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/default/vend_catalog_credentials.py b/src/tower/tower_api_client/api/default/vend_catalog_credentials.py new file mode 100644 index 00000000..2c29f7f0 --- /dev/null +++ b/src/tower/tower_api_client/api/default/vend_catalog_credentials.py @@ -0,0 +1,242 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.error_model import ErrorModel +from ...models.vend_catalog_credentials_body import VendCatalogCredentialsBody +from ...models.vend_catalog_credentials_response import VendCatalogCredentialsResponse +from ...types import UNSET, Response, Unset + + +def _get_kwargs( + name: str, + *, + body: VendCatalogCredentialsBody, + environment: str | Unset = "default", +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + params: dict[str, Any] = {} + + params["environment"] = environment + + params = {k: v for k, v in params.items() if v is not UNSET and v is not None} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/catalogs/{name}/credentials".format( + name=quote(str(name), safe=""), + ), + "params": params, + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> ErrorModel | VendCatalogCredentialsResponse | None: + if response.status_code == 200: + response_200 = VendCatalogCredentialsResponse.from_dict(response.json()) + + return response_200 + + if response.status_code == 401: + response_401 = ErrorModel.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = ErrorModel.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = ErrorModel.from_dict(response.json()) + + return response_404 + + if response.status_code == 422: + response_422 = ErrorModel.from_dict(response.json()) + + return response_422 + + if response.status_code == 500: + response_500 = ErrorModel.from_dict(response.json()) + + return response_500 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[ErrorModel | VendCatalogCredentialsResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + name: str, + *, + client: AuthenticatedClient, + body: VendCatalogCredentialsBody, + environment: str | Unset = "default", +) -> Response[ErrorModel | VendCatalogCredentialsResponse]: + r"""Vend catalog credentials + + Mints a short-lived OAuth bearer token for browser or SDK access to a managed (tower-catalog) + catalog. Defaults to read-only (`mode: \"read\"`); pass `mode: \"read-write\"` in the body (requires + the catalogs:update scope) for a token bound to the read-write principal. Team membership is + enforced before vending; the master Polaris credentials never leave Tower. + + Args: + name (str): The name of the catalog. + environment (str | Unset): The environment of the catalog. Default: 'default'. + body (VendCatalogCredentialsBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | VendCatalogCredentialsResponse] + """ + + kwargs = _get_kwargs( + name=name, + body=body, + environment=environment, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + name: str, + *, + client: AuthenticatedClient, + body: VendCatalogCredentialsBody, + environment: str | Unset = "default", +) -> ErrorModel | VendCatalogCredentialsResponse | None: + r"""Vend catalog credentials + + Mints a short-lived OAuth bearer token for browser or SDK access to a managed (tower-catalog) + catalog. Defaults to read-only (`mode: \"read\"`); pass `mode: \"read-write\"` in the body (requires + the catalogs:update scope) for a token bound to the read-write principal. Team membership is + enforced before vending; the master Polaris credentials never leave Tower. + + Args: + name (str): The name of the catalog. + environment (str | Unset): The environment of the catalog. Default: 'default'. + body (VendCatalogCredentialsBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | VendCatalogCredentialsResponse + """ + + return sync_detailed( + name=name, + client=client, + body=body, + environment=environment, + ).parsed + + +async def asyncio_detailed( + name: str, + *, + client: AuthenticatedClient, + body: VendCatalogCredentialsBody, + environment: str | Unset = "default", +) -> Response[ErrorModel | VendCatalogCredentialsResponse]: + r"""Vend catalog credentials + + Mints a short-lived OAuth bearer token for browser or SDK access to a managed (tower-catalog) + catalog. Defaults to read-only (`mode: \"read\"`); pass `mode: \"read-write\"` in the body (requires + the catalogs:update scope) for a token bound to the read-write principal. Team membership is + enforced before vending; the master Polaris credentials never leave Tower. + + Args: + name (str): The name of the catalog. + environment (str | Unset): The environment of the catalog. Default: 'default'. + body (VendCatalogCredentialsBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[ErrorModel | VendCatalogCredentialsResponse] + """ + + kwargs = _get_kwargs( + name=name, + body=body, + environment=environment, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + name: str, + *, + client: AuthenticatedClient, + body: VendCatalogCredentialsBody, + environment: str | Unset = "default", +) -> ErrorModel | VendCatalogCredentialsResponse | None: + r"""Vend catalog credentials + + Mints a short-lived OAuth bearer token for browser or SDK access to a managed (tower-catalog) + catalog. Defaults to read-only (`mode: \"read\"`); pass `mode: \"read-write\"` in the body (requires + the catalogs:update scope) for a token bound to the read-write principal. Team membership is + enforced before vending; the master Polaris credentials never leave Tower. + + Args: + name (str): The name of the catalog. + environment (str | Unset): The environment of the catalog. Default: 'default'. + body (VendCatalogCredentialsBody): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + ErrorModel | VendCatalogCredentialsResponse + """ + + return ( + await asyncio_detailed( + name=name, + client=client, + body=body, + environment=environment, + ) + ).parsed diff --git a/src/tower/tower_api_client/api/feature_flags/get_feature_flag_value.py b/src/tower/tower_api_client/api/feature_flags/get_feature_flag_value.py index dd1cdc1f..15c3c7b4 100644 --- a/src/tower/tower_api_client/api/feature_flags/get_feature_flag_value.py +++ b/src/tower/tower_api_client/api/feature_flags/get_feature_flag_value.py @@ -58,7 +58,7 @@ def sync_detailed( value if disabled. Args: - key (str): The feature flag key Example: schedules-enabled. + key (str): The feature flag key Example: webhooks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -90,7 +90,7 @@ def sync( value if disabled. Args: - key (str): The feature flag key Example: schedules-enabled. + key (str): The feature flag key Example: webhooks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -117,7 +117,7 @@ async def asyncio_detailed( value if disabled. Args: - key (str): The feature flag key Example: schedules-enabled. + key (str): The feature flag key Example: webhooks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. @@ -147,7 +147,7 @@ async def asyncio( value if disabled. Args: - key (str): The feature flag key Example: schedules-enabled. + key (str): The feature flag key Example: webhooks. Raises: errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. diff --git a/src/tower/tower_api_client/models/__init__.py b/src/tower/tower_api_client/models/__init__.py index c3cdbb98..9f3664c4 100644 --- a/src/tower/tower_api_client/models/__init__.py +++ b/src/tower/tower_api_client/models/__init__.py @@ -5,6 +5,8 @@ from .acknowledge_all_alerts_response import AcknowledgeAllAlertsResponse from .alert import Alert from .api_key import APIKey +from .api_key_owner import APIKeyOwner +from .api_key_owner_type import APIKeyOwnerType from .app import App from .app_health_status import AppHealthStatus from .app_statistics import AppStatistics @@ -16,6 +18,7 @@ from .batch_schedule_response import BatchScheduleResponse from .cancel_run_response import CancelRunResponse from .catalog import Catalog +from .catalog_credentials import CatalogCredentials from .catalog_property import CatalogProperty from .claim_device_login_ticket_params import ClaimDeviceLoginTicketParams from .claim_device_login_ticket_response import ClaimDeviceLoginTicketResponse @@ -42,6 +45,11 @@ from .create_schedule_response import CreateScheduleResponse from .create_secret_params import CreateSecretParams from .create_secret_response import CreateSecretResponse +from .create_service_account_api_key_params import CreateServiceAccountAPIKeyParams +from .create_service_account_api_key_response import CreateServiceAccountAPIKeyResponse +from .create_service_account_params import CreateServiceAccountParams +from .create_service_account_params_role import CreateServiceAccountParamsRole +from .create_service_account_response import CreateServiceAccountResponse from .create_session_params import CreateSessionParams from .create_session_response import CreateSessionResponse from .create_team_params import CreateTeamParams @@ -52,10 +60,12 @@ from .delete_api_key_response import DeleteAPIKeyResponse from .delete_app_response import DeleteAppResponse from .delete_catalog_response import DeleteCatalogResponse +from .delete_environment_response import DeleteEnvironmentResponse from .delete_guest_output_body import DeleteGuestOutputBody from .delete_schedule_params import DeleteScheduleParams from .delete_schedule_response import DeleteScheduleResponse from .delete_secret_response import DeleteSecretResponse +from .delete_service_account_api_key_params import DeleteServiceAccountAPIKeyParams from .delete_session_params import DeleteSessionParams from .delete_session_response import DeleteSessionResponse from .delete_team_invitation_params import DeleteTeamInvitationParams @@ -78,9 +88,11 @@ from .describe_run_logs_response import DescribeRunLogsResponse from .describe_run_response import DescribeRunResponse from .describe_secrets_key_response import DescribeSecretsKeyResponse +from .describe_service_account_response import DescribeServiceAccountResponse from .describe_session_response import DescribeSessionResponse from .describe_team_response import DescribeTeamResponse from .describe_webhook_response import DescribeWebhookResponse +from .describe_whoami_response import DescribeWhoamiResponse from .email_subscriptions import EmailSubscriptions from .encrypted_catalog_property import EncryptedCatalogProperty from .environment import Environment @@ -128,6 +140,8 @@ from .list_schedules_response import ListSchedulesResponse from .list_secret_environments_response import ListSecretEnvironmentsResponse from .list_secrets_response import ListSecretsResponse +from .list_service_account_api_keys_response import ListServiceAccountAPIKeysResponse +from .list_service_accounts_response import ListServiceAccountsResponse from .list_team_invitations_response import ListTeamInvitationsResponse from .list_team_members_response import ListTeamMembersResponse from .list_teams_response import ListTeamsResponse @@ -152,6 +166,8 @@ from .run_app_params_parameters import RunAppParamsParameters from .run_app_response import RunAppResponse from .run_attempt import RunAttempt +from .run_creator import RunCreator +from .run_creator_type import RunCreatorType from .run_failure_alert import RunFailureAlert from .run_graph_node import RunGraphNode from .run_graph_run_id import RunGraphRunID @@ -171,11 +187,17 @@ from .schedule import Schedule from .schedule_app_status import ScheduleAppStatus from .schedule_overlap_policy import ScheduleOverlapPolicy +from .schedule_owner import ScheduleOwner +from .schedule_owner_type import ScheduleOwnerType from .schedule_run_initiator_details import ScheduleRunInitiatorDetails from .schedule_status import ScheduleStatus from .search_runs_response import SearchRunsResponse from .search_runs_status_item import SearchRunsStatusItem from .secret import Secret +from .service_account import ServiceAccount +from .service_account_creator import ServiceAccountCreator +from .service_account_creator_type import ServiceAccountCreatorType +from .service_account_role import ServiceAccountRole from .session import Session from .shoulder_tap import ShoulderTap from .sse_warning import SSEWarning @@ -217,6 +239,9 @@ from .update_schedule_response import UpdateScheduleResponse from .update_secret_params import UpdateSecretParams from .update_secret_response import UpdateSecretResponse +from .update_service_account_params import UpdateServiceAccountParams +from .update_service_account_params_role import UpdateServiceAccountParamsRole +from .update_service_account_response import UpdateServiceAccountResponse from .update_team_member_params import UpdateTeamMemberParams from .update_team_member_params_role import UpdateTeamMemberParamsRole from .update_team_member_response import UpdateTeamMemberResponse @@ -231,6 +256,9 @@ from .usage_metric_time_series_point import UsageMetricTimeSeriesPoint from .usage_metric_time_series_point_name import UsageMetricTimeSeriesPointName from .user import User +from .vend_catalog_credentials_body import VendCatalogCredentialsBody +from .vend_catalog_credentials_body_mode import VendCatalogCredentialsBodyMode +from .vend_catalog_credentials_response import VendCatalogCredentialsResponse from .webhook import Webhook from .webhook_state import WebhookState @@ -240,6 +268,8 @@ "AcknowledgeAllAlertsResponse", "Alert", "APIKey", + "APIKeyOwner", + "APIKeyOwnerType", "App", "AppHealthStatus", "AppStatistics", @@ -251,6 +281,7 @@ "BatchScheduleResponse", "CancelRunResponse", "Catalog", + "CatalogCredentials", "CatalogProperty", "ClaimDeviceLoginTicketParams", "ClaimDeviceLoginTicketResponse", @@ -277,6 +308,11 @@ "CreateScheduleResponse", "CreateSecretParams", "CreateSecretResponse", + "CreateServiceAccountAPIKeyParams", + "CreateServiceAccountAPIKeyResponse", + "CreateServiceAccountParams", + "CreateServiceAccountParamsRole", + "CreateServiceAccountResponse", "CreateSessionParams", "CreateSessionResponse", "CreateTeamParams", @@ -287,10 +323,12 @@ "DeleteAPIKeyResponse", "DeleteAppResponse", "DeleteCatalogResponse", + "DeleteEnvironmentResponse", "DeleteGuestOutputBody", "DeleteScheduleParams", "DeleteScheduleResponse", "DeleteSecretResponse", + "DeleteServiceAccountAPIKeyParams", "DeleteSessionParams", "DeleteSessionResponse", "DeleteTeamInvitationParams", @@ -313,9 +351,11 @@ "DescribeRunLogsResponse", "DescribeRunResponse", "DescribeSecretsKeyResponse", + "DescribeServiceAccountResponse", "DescribeSessionResponse", "DescribeTeamResponse", "DescribeWebhookResponse", + "DescribeWhoamiResponse", "EmailSubscriptions", "EncryptedCatalogProperty", "Environment", @@ -359,6 +399,8 @@ "ListSchedulesResponse", "ListSecretEnvironmentsResponse", "ListSecretsResponse", + "ListServiceAccountAPIKeysResponse", + "ListServiceAccountsResponse", "ListTeamInvitationsResponse", "ListTeamMembersResponse", "ListTeamsResponse", @@ -383,6 +425,8 @@ "RunAppParamsParameters", "RunAppResponse", "RunAttempt", + "RunCreator", + "RunCreatorType", "RunFailureAlert", "RunGraphNode", "RunGraphRunID", @@ -402,11 +446,17 @@ "Schedule", "ScheduleAppStatus", "ScheduleOverlapPolicy", + "ScheduleOwner", + "ScheduleOwnerType", "ScheduleRunInitiatorDetails", "ScheduleStatus", "SearchRunsResponse", "SearchRunsStatusItem", "Secret", + "ServiceAccount", + "ServiceAccountCreator", + "ServiceAccountCreatorType", + "ServiceAccountRole", "Session", "ShoulderTap", "SSEWarning", @@ -448,6 +498,9 @@ "UpdateScheduleResponse", "UpdateSecretParams", "UpdateSecretResponse", + "UpdateServiceAccountParams", + "UpdateServiceAccountParamsRole", + "UpdateServiceAccountResponse", "UpdateTeamMemberParams", "UpdateTeamMemberParamsRole", "UpdateTeamMemberResponse", @@ -462,6 +515,9 @@ "UsageMetricTimeSeriesPoint", "UsageMetricTimeSeriesPointName", "User", + "VendCatalogCredentialsBody", + "VendCatalogCredentialsBodyMode", + "VendCatalogCredentialsResponse", "Webhook", "WebhookState", ) diff --git a/src/tower/tower_api_client/models/api_key.py b/src/tower/tower_api_client/models/api_key.py index cffbde33..8c171184 100644 --- a/src/tower/tower_api_client/models/api_key.py +++ b/src/tower/tower_api_client/models/api_key.py @@ -2,13 +2,17 @@ import datetime from collections.abc import Mapping -from typing import Any, TypeVar, cast +from typing import TYPE_CHECKING, Any, TypeVar, cast from attrs import define as _attrs_define from dateutil.parser import isoparse from ..types import UNSET, Unset +if TYPE_CHECKING: + from ..models.api_key_owner import APIKeyOwner + + T = TypeVar("T", bound="APIKey") @@ -21,6 +25,7 @@ class APIKey: last_used_at (datetime.datetime | None): name (str): expires_at (datetime.datetime | Unset): + owner (APIKeyOwner | Unset): scopes (str | Unset): """ @@ -29,6 +34,7 @@ class APIKey: last_used_at: datetime.datetime | None name: str expires_at: datetime.datetime | Unset = UNSET + owner: APIKeyOwner | Unset = UNSET scopes: str | Unset = UNSET def to_dict(self) -> dict[str, Any]: @@ -48,6 +54,10 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.expires_at, Unset): expires_at = self.expires_at.isoformat() + owner: dict[str, Any] | Unset = UNSET + if not isinstance(self.owner, Unset): + owner = self.owner.to_dict() + scopes = self.scopes field_dict: dict[str, Any] = {} @@ -62,6 +72,8 @@ def to_dict(self) -> dict[str, Any]: ) if expires_at is not UNSET: field_dict["expires_at"] = expires_at + if owner is not UNSET: + field_dict["owner"] = owner if scopes is not UNSET: field_dict["scopes"] = scopes @@ -69,6 +81,8 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.api_key_owner import APIKeyOwner + d = dict(src_dict) created_at = isoparse(d.pop("created_at")) @@ -98,6 +112,13 @@ def _parse_last_used_at(data: object) -> datetime.datetime | None: else: expires_at = isoparse(_expires_at) + _owner = d.pop("owner", UNSET) + owner: APIKeyOwner | Unset + if isinstance(_owner, Unset): + owner = UNSET + else: + owner = APIKeyOwner.from_dict(_owner) + scopes = d.pop("scopes", UNSET) api_key = cls( @@ -106,6 +127,7 @@ def _parse_last_used_at(data: object) -> datetime.datetime | None: last_used_at=last_used_at, name=name, expires_at=expires_at, + owner=owner, scopes=scopes, ) diff --git a/src/tower/tower_api_client/models/api_key_owner.py b/src/tower/tower_api_client/models/api_key_owner.py new file mode 100644 index 00000000..2bc24117 --- /dev/null +++ b/src/tower/tower_api_client/models/api_key_owner.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.api_key_owner_type import APIKeyOwnerType + +T = TypeVar("T", bound="APIKeyOwner") + + +@_attrs_define +class APIKeyOwner: + """ + Attributes: + name (str): The owner's name: a user's full name (or email) or a service account's name. + type_ (APIKeyOwnerType): The kind of principal this API key authenticates as. + """ + + name: str + type_: APIKeyOwnerType + + def to_dict(self) -> dict[str, Any]: + name = self.name + + type_ = self.type_.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "type": type_, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + type_ = APIKeyOwnerType(d.pop("type")) + + api_key_owner = cls( + name=name, + type_=type_, + ) + + return api_key_owner diff --git a/src/tower/tower_api_client/models/api_key_owner_type.py b/src/tower/tower_api_client/models/api_key_owner_type.py new file mode 100644 index 00000000..80cccf58 --- /dev/null +++ b/src/tower/tower_api_client/models/api_key_owner_type.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class APIKeyOwnerType(str, Enum): + SERVICE_ACCOUNT = "service_account" + USER = "user" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/app_version.py b/src/tower/tower_api_client/models/app_version.py index 376fd435..b6d59d71 100644 --- a/src/tower/tower_api_client/models/app_version.py +++ b/src/tower/tower_api_client/models/app_version.py @@ -7,6 +7,8 @@ from attrs import define as _attrs_define from dateutil.parser import isoparse +from ..types import UNSET, Unset + if TYPE_CHECKING: from ..models.parameter import Parameter @@ -22,12 +24,17 @@ class AppVersion: parameters (list[Parameter]): towerfile (str): The Towerfile that this version was created from. version (str): + content_checksum (str | Unset): Server-computed SHA256 of the bundle contents for this version. + idempotency_key (str | Unset): Client-supplied key (e.g. git SHA) that produced this version, or empty if none + was supplied at deploy time. """ created_at: datetime.datetime parameters: list[Parameter] towerfile: str version: str + content_checksum: str | Unset = UNSET + idempotency_key: str | Unset = UNSET def to_dict(self) -> dict[str, Any]: created_at = self.created_at.isoformat() @@ -41,6 +48,10 @@ def to_dict(self) -> dict[str, Any]: version = self.version + content_checksum = self.content_checksum + + idempotency_key = self.idempotency_key + field_dict: dict[str, Any] = {} field_dict.update( @@ -51,6 +62,10 @@ def to_dict(self) -> dict[str, Any]: "version": version, } ) + if content_checksum is not UNSET: + field_dict["content_checksum"] = content_checksum + if idempotency_key is not UNSET: + field_dict["idempotency_key"] = idempotency_key return field_dict @@ -72,11 +87,17 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: version = d.pop("version") + content_checksum = d.pop("content_checksum", UNSET) + + idempotency_key = d.pop("idempotency_key", UNSET) + app_version = cls( created_at=created_at, parameters=parameters, towerfile=towerfile, version=version, + content_checksum=content_checksum, + idempotency_key=idempotency_key, ) return app_version diff --git a/src/tower/tower_api_client/models/catalog_credentials.py b/src/tower/tower_api_client/models/catalog_credentials.py new file mode 100644 index 00000000..5601059a --- /dev/null +++ b/src/tower/tower_api_client/models/catalog_credentials.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +T = TypeVar("T", bound="CatalogCredentials") + + +@_attrs_define +class CatalogCredentials: + """ + Attributes: + catalog_uri (str): The Iceberg REST catalog endpoint. + expires_at (datetime.datetime): When the OAuth token expires. + mode (str): Access level the token is bound to. + oauth_token (str): Short-lived OAuth bearer token. + warehouse (str): The Polaris catalog identifier (REST prefix). + """ + + catalog_uri: str + expires_at: datetime.datetime + mode: str + oauth_token: str + warehouse: str + + def to_dict(self) -> dict[str, Any]: + catalog_uri = self.catalog_uri + + expires_at = self.expires_at.isoformat() + + mode = self.mode + + oauth_token = self.oauth_token + + warehouse = self.warehouse + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "catalog_uri": catalog_uri, + "expires_at": expires_at, + "mode": mode, + "oauth_token": oauth_token, + "warehouse": warehouse, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + catalog_uri = d.pop("catalog_uri") + + expires_at = isoparse(d.pop("expires_at")) + + mode = d.pop("mode") + + oauth_token = d.pop("oauth_token") + + warehouse = d.pop("warehouse") + + catalog_credentials = cls( + catalog_uri=catalog_uri, + expires_at=expires_at, + mode=mode, + oauth_token=oauth_token, + warehouse=warehouse, + ) + + return catalog_credentials diff --git a/src/tower/tower_api_client/models/create_service_account_api_key_params.py b/src/tower/tower_api_client/models/create_service_account_api_key_params.py new file mode 100644 index 00000000..1e390740 --- /dev/null +++ b/src/tower/tower_api_client/models/create_service_account_api_key_params.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="CreateServiceAccountAPIKeyParams") + + +@_attrs_define +class CreateServiceAccountAPIKeyParams: + """ + Attributes: + name (str): Human-readable name for the API key. + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/CreateServiceAccountAPIKeyParams.json. + expires_at (datetime.datetime | Unset): When the API key expires. + scopes (str | Unset): Space-separated scopes for the key. Defaults to the SA's role scopes when omitted. + """ + + name: str + schema: str | Unset = UNSET + expires_at: datetime.datetime | Unset = UNSET + scopes: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + name = self.name + + schema = self.schema + + expires_at: str | Unset = UNSET + if not isinstance(self.expires_at, Unset): + expires_at = self.expires_at.isoformat() + + scopes = self.scopes + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + if expires_at is not UNSET: + field_dict["expires_at"] = expires_at + if scopes is not UNSET: + field_dict["scopes"] = scopes + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + schema = d.pop("$schema", UNSET) + + _expires_at = d.pop("expires_at", UNSET) + expires_at: datetime.datetime | Unset + if isinstance(_expires_at, Unset): + expires_at = UNSET + else: + expires_at = isoparse(_expires_at) + + scopes = d.pop("scopes", UNSET) + + create_service_account_api_key_params = cls( + name=name, + schema=schema, + expires_at=expires_at, + scopes=scopes, + ) + + return create_service_account_api_key_params diff --git a/src/tower/tower_api_client/models/create_service_account_api_key_response.py b/src/tower/tower_api_client/models/create_service_account_api_key_response.py new file mode 100644 index 00000000..5f6b5834 --- /dev/null +++ b/src/tower/tower_api_client/models/create_service_account_api_key_response.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.api_key import APIKey + + +T = TypeVar("T", bound="CreateServiceAccountAPIKeyResponse") + + +@_attrs_define +class CreateServiceAccountAPIKeyResponse: + """ + Attributes: + api_key (APIKey): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/CreateServiceAccountAPIKeyResponse.json. + """ + + api_key: APIKey + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + api_key = self.api_key.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "api_key": api_key, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.api_key import APIKey + + d = dict(src_dict) + api_key = APIKey.from_dict(d.pop("api_key")) + + schema = d.pop("$schema", UNSET) + + create_service_account_api_key_response = cls( + api_key=api_key, + schema=schema, + ) + + return create_service_account_api_key_response diff --git a/src/tower/tower_api_client/models/create_service_account_params.py b/src/tower/tower_api_client/models/create_service_account_params.py new file mode 100644 index 00000000..48408369 --- /dev/null +++ b/src/tower/tower_api_client/models/create_service_account_params.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.create_service_account_params_role import CreateServiceAccountParamsRole +from ..types import UNSET, Unset + +T = TypeVar("T", bound="CreateServiceAccountParams") + + +@_attrs_define +class CreateServiceAccountParams: + """ + Attributes: + name (str): Human-readable name for the service account. Must be unique within the account. + role (CreateServiceAccountParamsRole): The team role this service account acts as. + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/CreateServiceAccountParams.json. + metadata (str | Unset): Optional, customer-supplied JSON metadata. + """ + + name: str + role: CreateServiceAccountParamsRole + schema: str | Unset = UNSET + metadata: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + name = self.name + + role = self.role.value + + schema = self.schema + + metadata = self.metadata + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "role": role, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + if metadata is not UNSET: + field_dict["metadata"] = metadata + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + role = CreateServiceAccountParamsRole(d.pop("role")) + + schema = d.pop("$schema", UNSET) + + metadata = d.pop("metadata", UNSET) + + create_service_account_params = cls( + name=name, + role=role, + schema=schema, + metadata=metadata, + ) + + return create_service_account_params diff --git a/src/tower/tower_api_client/models/create_service_account_params_role.py b/src/tower/tower_api_client/models/create_service_account_params_role.py new file mode 100644 index 00000000..57cd7a27 --- /dev/null +++ b/src/tower/tower_api_client/models/create_service_account_params_role.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class CreateServiceAccountParamsRole(str, Enum): + ADMIN = "admin" + DEVELOPER = "developer" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/create_service_account_response.py b/src/tower/tower_api_client/models/create_service_account_response.py new file mode 100644 index 00000000..6f307bbd --- /dev/null +++ b/src/tower/tower_api_client/models/create_service_account_response.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.service_account import ServiceAccount + + +T = TypeVar("T", bound="CreateServiceAccountResponse") + + +@_attrs_define +class CreateServiceAccountResponse: + """ + Attributes: + service_account (ServiceAccount): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/CreateServiceAccountResponse.json. + """ + + service_account: ServiceAccount + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + service_account = self.service_account.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "service_account": service_account, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.service_account import ServiceAccount + + d = dict(src_dict) + service_account = ServiceAccount.from_dict(d.pop("service_account")) + + schema = d.pop("$schema", UNSET) + + create_service_account_response = cls( + service_account=service_account, + schema=schema, + ) + + return create_service_account_response diff --git a/src/tower/tower_api_client/models/delete_environment_response.py b/src/tower/tower_api_client/models/delete_environment_response.py new file mode 100644 index 00000000..986c64b4 --- /dev/null +++ b/src/tower/tower_api_client/models/delete_environment_response.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.environment import Environment + + +T = TypeVar("T", bound="DeleteEnvironmentResponse") + + +@_attrs_define +class DeleteEnvironmentResponse: + """ + Attributes: + environment (Environment): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/DeleteEnvironmentResponse.json. + """ + + environment: Environment + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + environment = self.environment.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "environment": environment, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.environment import Environment + + d = dict(src_dict) + environment = Environment.from_dict(d.pop("environment")) + + schema = d.pop("$schema", UNSET) + + delete_environment_response = cls( + environment=environment, + schema=schema, + ) + + return delete_environment_response diff --git a/src/tower/tower_api_client/models/delete_service_account_api_key_params.py b/src/tower/tower_api_client/models/delete_service_account_api_key_params.py new file mode 100644 index 00000000..8fa6c364 --- /dev/null +++ b/src/tower/tower_api_client/models/delete_service_account_api_key_params.py @@ -0,0 +1,54 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="DeleteServiceAccountAPIKeyParams") + + +@_attrs_define +class DeleteServiceAccountAPIKeyParams: + """ + Attributes: + identifier (str): The API key identifier (with or without the 'sk-' prefix). + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/DeleteServiceAccountAPIKeyParams.json. + """ + + identifier: str + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + identifier = self.identifier + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "identifier": identifier, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + identifier = d.pop("identifier") + + schema = d.pop("$schema", UNSET) + + delete_service_account_api_key_params = cls( + identifier=identifier, + schema=schema, + ) + + return delete_service_account_api_key_params diff --git a/src/tower/tower_api_client/models/describe_service_account_response.py b/src/tower/tower_api_client/models/describe_service_account_response.py new file mode 100644 index 00000000..a33b3c0c --- /dev/null +++ b/src/tower/tower_api_client/models/describe_service_account_response.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.service_account import ServiceAccount + + +T = TypeVar("T", bound="DescribeServiceAccountResponse") + + +@_attrs_define +class DescribeServiceAccountResponse: + """ + Attributes: + service_account (ServiceAccount): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/DescribeServiceAccountResponse.json. + """ + + service_account: ServiceAccount + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + service_account = self.service_account.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "service_account": service_account, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.service_account import ServiceAccount + + d = dict(src_dict) + service_account = ServiceAccount.from_dict(d.pop("service_account")) + + schema = d.pop("$schema", UNSET) + + describe_service_account_response = cls( + service_account=service_account, + schema=schema, + ) + + return describe_service_account_response diff --git a/src/tower/tower_api_client/models/describe_whoami_response.py b/src/tower/tower_api_client/models/describe_whoami_response.py new file mode 100644 index 00000000..c18de07f --- /dev/null +++ b/src/tower/tower_api_client/models/describe_whoami_response.py @@ -0,0 +1,65 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="DescribeWhoamiResponse") + + +@_attrs_define +class DescribeWhoamiResponse: + """ + Attributes: + expires_at (datetime.datetime): Absolute time at which the token expires. + token (str): RS256-signed identity JWT scoped to the authenticated user. Verify against the public keys at + /.well-known/jwks.json. + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/DescribeWhoamiResponse.json. + """ + + expires_at: datetime.datetime + token: str + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + expires_at = self.expires_at.isoformat() + + token = self.token + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "expires_at": expires_at, + "token": token, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + expires_at = isoparse(d.pop("expires_at")) + + token = d.pop("token") + + schema = d.pop("$schema", UNSET) + + describe_whoami_response = cls( + expires_at=expires_at, + token=token, + schema=schema, + ) + + return describe_whoami_response diff --git a/src/tower/tower_api_client/models/list_service_account_api_keys_response.py b/src/tower/tower_api_client/models/list_service_account_api_keys_response.py new file mode 100644 index 00000000..fcfec22b --- /dev/null +++ b/src/tower/tower_api_client/models/list_service_account_api_keys_response.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.api_key import APIKey + from ..models.pagination import Pagination + + +T = TypeVar("T", bound="ListServiceAccountAPIKeysResponse") + + +@_attrs_define +class ListServiceAccountAPIKeysResponse: + """ + Attributes: + api_keys (list[APIKey]): + pages (Pagination): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/ListServiceAccountAPIKeysResponse.json. + """ + + api_keys: list[APIKey] + pages: Pagination + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + api_keys = [] + for api_keys_item_data in self.api_keys: + api_keys_item = api_keys_item_data.to_dict() + api_keys.append(api_keys_item) + + pages = self.pages.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "api_keys": api_keys, + "pages": pages, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.api_key import APIKey + from ..models.pagination import Pagination + + d = dict(src_dict) + api_keys = [] + _api_keys = d.pop("api_keys") + for api_keys_item_data in _api_keys: + api_keys_item = APIKey.from_dict(api_keys_item_data) + + api_keys.append(api_keys_item) + + pages = Pagination.from_dict(d.pop("pages")) + + schema = d.pop("$schema", UNSET) + + list_service_account_api_keys_response = cls( + api_keys=api_keys, + pages=pages, + schema=schema, + ) + + return list_service_account_api_keys_response diff --git a/src/tower/tower_api_client/models/list_service_accounts_response.py b/src/tower/tower_api_client/models/list_service_accounts_response.py new file mode 100644 index 00000000..17eba1dd --- /dev/null +++ b/src/tower/tower_api_client/models/list_service_accounts_response.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.pagination import Pagination + from ..models.service_account import ServiceAccount + + +T = TypeVar("T", bound="ListServiceAccountsResponse") + + +@_attrs_define +class ListServiceAccountsResponse: + """ + Attributes: + pages (Pagination): + service_accounts (list[ServiceAccount]): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/ListServiceAccountsResponse.json. + """ + + pages: Pagination + service_accounts: list[ServiceAccount] + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + pages = self.pages.to_dict() + + service_accounts = [] + for service_accounts_item_data in self.service_accounts: + service_accounts_item = service_accounts_item_data.to_dict() + service_accounts.append(service_accounts_item) + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "pages": pages, + "service_accounts": service_accounts, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.pagination import Pagination + from ..models.service_account import ServiceAccount + + d = dict(src_dict) + pages = Pagination.from_dict(d.pop("pages")) + + service_accounts = [] + _service_accounts = d.pop("service_accounts") + for service_accounts_item_data in _service_accounts: + service_accounts_item = ServiceAccount.from_dict(service_accounts_item_data) + + service_accounts.append(service_accounts_item) + + schema = d.pop("$schema", UNSET) + + list_service_accounts_response = cls( + pages=pages, + service_accounts=service_accounts, + schema=schema, + ) + + return list_service_accounts_response diff --git a/src/tower/tower_api_client/models/run.py b/src/tower/tower_api_client/models/run.py index 748503d9..d118704e 100644 --- a/src/tower/tower_api_client/models/run.py +++ b/src/tower/tower_api_client/models/run.py @@ -13,6 +13,7 @@ if TYPE_CHECKING: from ..models.run_attempt import RunAttempt + from ..models.run_creator import RunCreator from ..models.run_initiator import RunInitiator from ..models.run_parameter import RunParameter from ..models.run_retry_policy import RunRetryPolicy @@ -47,6 +48,7 @@ class Run: status_group (RunStatusGroup): app_slug (str | Unset): This property is deprecated. Use app_name instead. attempts (list[RunAttempt] | Unset): Previous attempt details. Populated on describe, omitted on list. + created_by (RunCreator | Unset): hostname (str | Unset): hostname is deprecated, use subdomain retry_policy (RunRetryPolicy | Unset): subdomain (None | str | Unset): If app is externally accessible, then you can access this run with this @@ -74,6 +76,7 @@ class Run: status_group: RunStatusGroup app_slug: str | Unset = UNSET attempts: list[RunAttempt] | Unset = UNSET + created_by: RunCreator | Unset = UNSET hostname: str | Unset = UNSET retry_policy: RunRetryPolicy | Unset = UNSET subdomain: None | str | Unset = UNSET @@ -146,6 +149,10 @@ def to_dict(self) -> dict[str, Any]: attempts_item = attempts_item_data.to_dict() attempts.append(attempts_item) + created_by: dict[str, Any] | Unset = UNSET + if not isinstance(self.created_by, Unset): + created_by = self.created_by.to_dict() + hostname = self.hostname retry_policy: dict[str, Any] | Unset = UNSET @@ -187,6 +194,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["app_slug"] = app_slug if attempts is not UNSET: field_dict["attempts"] = attempts + if created_by is not UNSET: + field_dict["created_by"] = created_by if hostname is not UNSET: field_dict["hostname"] = hostname if retry_policy is not UNSET: @@ -199,6 +208,7 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.run_attempt import RunAttempt + from ..models.run_creator import RunCreator from ..models.run_initiator import RunInitiator from ..models.run_parameter import RunParameter from ..models.run_retry_policy import RunRetryPolicy @@ -315,6 +325,13 @@ def _parse_starting_at(data: object) -> datetime.datetime | None: attempts.append(attempts_item) + _created_by = d.pop("created_by", UNSET) + created_by: RunCreator | Unset + if isinstance(_created_by, Unset): + created_by = UNSET + else: + created_by = RunCreator.from_dict(_created_by) + hostname = d.pop("hostname", UNSET) _retry_policy = d.pop("retry_policy", UNSET) @@ -355,6 +372,7 @@ def _parse_subdomain(data: object) -> None | str | Unset: status_group=status_group, app_slug=app_slug, attempts=attempts, + created_by=created_by, hostname=hostname, retry_policy=retry_policy, subdomain=subdomain, diff --git a/src/tower/tower_api_client/models/run_creator.py b/src/tower/tower_api_client/models/run_creator.py new file mode 100644 index 00000000..79148bd6 --- /dev/null +++ b/src/tower/tower_api_client/models/run_creator.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.run_creator_type import RunCreatorType + +T = TypeVar("T", bound="RunCreator") + + +@_attrs_define +class RunCreator: + """ + Attributes: + name (str): The creator's name: a user's full name (or email) or a service account's name. + type_ (RunCreatorType): The kind of principal that created the run. + """ + + name: str + type_: RunCreatorType + + def to_dict(self) -> dict[str, Any]: + name = self.name + + type_ = self.type_.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "type": type_, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + type_ = RunCreatorType(d.pop("type")) + + run_creator = cls( + name=name, + type_=type_, + ) + + return run_creator diff --git a/src/tower/tower_api_client/models/run_creator_type.py b/src/tower/tower_api_client/models/run_creator_type.py new file mode 100644 index 00000000..d1b43bda --- /dev/null +++ b/src/tower/tower_api_client/models/run_creator_type.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class RunCreatorType(str, Enum): + SERVICE_ACCOUNT = "service_account" + USER = "user" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/schedule.py b/src/tower/tower_api_client/models/schedule.py index d34ea239..bfa35ee9 100644 --- a/src/tower/tower_api_client/models/schedule.py +++ b/src/tower/tower_api_client/models/schedule.py @@ -14,6 +14,7 @@ if TYPE_CHECKING: from ..models.run_parameter import RunParameter + from ..models.schedule_owner import ScheduleOwner T = TypeVar("T", bound="Schedule") @@ -37,6 +38,7 @@ class Schedule: updated_at (datetime.datetime): The timestamp when the schedule was last updated app_version (str | Unset): This property is deprecated. Schedules inherit the version from their environment. This field returns the environment's current version. + owner (ScheduleOwner | Unset): parameters (list[RunParameter] | Unset): The parameters to pass when running the app """ @@ -52,6 +54,7 @@ class Schedule: timezone: str updated_at: datetime.datetime app_version: str | Unset = UNSET + owner: ScheduleOwner | Unset = UNSET parameters: list[RunParameter] | Unset = UNSET def to_dict(self) -> dict[str, Any]: @@ -79,6 +82,10 @@ def to_dict(self) -> dict[str, Any]: app_version = self.app_version + owner: dict[str, Any] | Unset = UNSET + if not isinstance(self.owner, Unset): + owner = self.owner.to_dict() + parameters: list[dict[str, Any]] | Unset = UNSET if not isinstance(self.parameters, Unset): parameters = [] @@ -105,6 +112,8 @@ def to_dict(self) -> dict[str, Any]: ) if app_version is not UNSET: field_dict["app_version"] = app_version + if owner is not UNSET: + field_dict["owner"] = owner if parameters is not UNSET: field_dict["parameters"] = parameters @@ -113,6 +122,7 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.run_parameter import RunParameter + from ..models.schedule_owner import ScheduleOwner d = dict(src_dict) app_name = d.pop("app_name") @@ -139,6 +149,13 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: app_version = d.pop("app_version", UNSET) + _owner = d.pop("owner", UNSET) + owner: ScheduleOwner | Unset + if isinstance(_owner, Unset): + owner = UNSET + else: + owner = ScheduleOwner.from_dict(_owner) + _parameters = d.pop("parameters", UNSET) parameters: list[RunParameter] | Unset = UNSET if _parameters is not UNSET: @@ -161,6 +178,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: timezone=timezone, updated_at=updated_at, app_version=app_version, + owner=owner, parameters=parameters, ) diff --git a/src/tower/tower_api_client/models/schedule_owner.py b/src/tower/tower_api_client/models/schedule_owner.py new file mode 100644 index 00000000..ce88e5f2 --- /dev/null +++ b/src/tower/tower_api_client/models/schedule_owner.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.schedule_owner_type import ScheduleOwnerType + +T = TypeVar("T", bound="ScheduleOwner") + + +@_attrs_define +class ScheduleOwner: + """ + Attributes: + name (str): The owner's name: a user's full name (first + last) or a service account's name. Must identify + exactly one member of the account. + type_ (ScheduleOwnerType): The kind of owner: 'user' or 'service_account' + """ + + name: str + type_: ScheduleOwnerType + + def to_dict(self) -> dict[str, Any]: + name = self.name + + type_ = self.type_.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "type": type_, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + type_ = ScheduleOwnerType(d.pop("type")) + + schedule_owner = cls( + name=name, + type_=type_, + ) + + return schedule_owner diff --git a/src/tower/tower_api_client/models/schedule_owner_type.py b/src/tower/tower_api_client/models/schedule_owner_type.py new file mode 100644 index 00000000..ce83179a --- /dev/null +++ b/src/tower/tower_api_client/models/schedule_owner_type.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class ScheduleOwnerType(str, Enum): + SERVICE_ACCOUNT = "service_account" + USER = "user" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/service_account.py b/src/tower/tower_api_client/models/service_account.py new file mode 100644 index 00000000..89a45a6f --- /dev/null +++ b/src/tower/tower_api_client/models/service_account.py @@ -0,0 +1,110 @@ +from __future__ import annotations + +import datetime +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define +from dateutil.parser import isoparse + +from ..models.service_account_role import ServiceAccountRole +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.service_account_creator import ServiceAccountCreator + + +T = TypeVar("T", bound="ServiceAccount") + + +@_attrs_define +class ServiceAccount: + """ + Attributes: + created_at (datetime.datetime): When the service account was created. + id (str): The unique identifier for the service account. + name (str): The human-readable name of the service account. + role (ServiceAccountRole): The team role this service account acts as. + updated_at (datetime.datetime): When the service account was last updated. + creator (ServiceAccountCreator | Unset): + metadata (Any | Unset): Customer-supplied JSON metadata associated with the service account. + """ + + created_at: datetime.datetime + id: str + name: str + role: ServiceAccountRole + updated_at: datetime.datetime + creator: ServiceAccountCreator | Unset = UNSET + metadata: Any | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + created_at = self.created_at.isoformat() + + id = self.id + + name = self.name + + role = self.role.value + + updated_at = self.updated_at.isoformat() + + creator: dict[str, Any] | Unset = UNSET + if not isinstance(self.creator, Unset): + creator = self.creator.to_dict() + + metadata = self.metadata + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "created_at": created_at, + "id": id, + "name": name, + "role": role, + "updated_at": updated_at, + } + ) + if creator is not UNSET: + field_dict["creator"] = creator + if metadata is not UNSET: + field_dict["metadata"] = metadata + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.service_account_creator import ServiceAccountCreator + + d = dict(src_dict) + created_at = isoparse(d.pop("created_at")) + + id = d.pop("id") + + name = d.pop("name") + + role = ServiceAccountRole(d.pop("role")) + + updated_at = isoparse(d.pop("updated_at")) + + _creator = d.pop("creator", UNSET) + creator: ServiceAccountCreator | Unset + if isinstance(_creator, Unset): + creator = UNSET + else: + creator = ServiceAccountCreator.from_dict(_creator) + + metadata = d.pop("metadata", UNSET) + + service_account = cls( + created_at=created_at, + id=id, + name=name, + role=role, + updated_at=updated_at, + creator=creator, + metadata=metadata, + ) + + return service_account diff --git a/src/tower/tower_api_client/models/service_account_creator.py b/src/tower/tower_api_client/models/service_account_creator.py new file mode 100644 index 00000000..9539c947 --- /dev/null +++ b/src/tower/tower_api_client/models/service_account_creator.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.service_account_creator_type import ServiceAccountCreatorType + +T = TypeVar("T", bound="ServiceAccountCreator") + + +@_attrs_define +class ServiceAccountCreator: + """ + Attributes: + name (str): The creator's name: a user's full name (or email) or a service account's name. + type_ (ServiceAccountCreatorType): The kind of principal that created the service account. Always 'user'. + """ + + name: str + type_: ServiceAccountCreatorType + + def to_dict(self) -> dict[str, Any]: + name = self.name + + type_ = self.type_.value + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "name": name, + "type": type_, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + name = d.pop("name") + + type_ = ServiceAccountCreatorType(d.pop("type")) + + service_account_creator = cls( + name=name, + type_=type_, + ) + + return service_account_creator diff --git a/src/tower/tower_api_client/models/service_account_creator_type.py b/src/tower/tower_api_client/models/service_account_creator_type.py new file mode 100644 index 00000000..5a368037 --- /dev/null +++ b/src/tower/tower_api_client/models/service_account_creator_type.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class ServiceAccountCreatorType(str, Enum): + SERVICE_ACCOUNT = "service_account" + USER = "user" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/service_account_role.py b/src/tower/tower_api_client/models/service_account_role.py new file mode 100644 index 00000000..2b292e40 --- /dev/null +++ b/src/tower/tower_api_client/models/service_account_role.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class ServiceAccountRole(str, Enum): + ADMIN = "admin" + DEVELOPER = "developer" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/update_schedule_params.py b/src/tower/tower_api_client/models/update_schedule_params.py index fdb50089..5949f8b8 100644 --- a/src/tower/tower_api_client/models/update_schedule_params.py +++ b/src/tower/tower_api_client/models/update_schedule_params.py @@ -13,6 +13,7 @@ if TYPE_CHECKING: from ..models.run_parameter import RunParameter + from ..models.schedule_owner import ScheduleOwner T = TypeVar("T", bound="UpdateScheduleParams") @@ -28,8 +29,9 @@ class UpdateScheduleParams: their environment. cron (str | Unset): The cron expression defining when the app should run environment (str | Unset): The environment to run the app in Default: 'default'. - name (None | str | Unset): The name for this schedule. Must be unique per team. + name (None | str | Unset): The name for this schedule. Must be unique per environment. overlap_policy (UpdateScheduleParamsOverlapPolicy | Unset): The overlap policy for the schedule + owner (ScheduleOwner | Unset): parameters (list[RunParameter] | Unset): Parameters to pass when running the app status (UpdateScheduleParamsStatus | Unset): The status of the schedule timezone (None | str | Unset): The IANA timezone identifier that the cron expression should be evaluated in @@ -42,6 +44,7 @@ class UpdateScheduleParams: environment: str | Unset = "default" name: None | str | Unset = UNSET overlap_policy: UpdateScheduleParamsOverlapPolicy | Unset = UNSET + owner: ScheduleOwner | Unset = UNSET parameters: list[RunParameter] | Unset = UNSET status: UpdateScheduleParamsStatus | Unset = UNSET timezone: None | str | Unset = UNSET @@ -69,6 +72,10 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.overlap_policy, Unset): overlap_policy = self.overlap_policy.value + owner: dict[str, Any] | Unset = UNSET + if not isinstance(self.owner, Unset): + owner = self.owner.to_dict() + parameters: list[dict[str, Any]] | Unset = UNSET if not isinstance(self.parameters, Unset): parameters = [] @@ -101,6 +108,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["name"] = name if overlap_policy is not UNSET: field_dict["overlap_policy"] = overlap_policy + if owner is not UNSET: + field_dict["owner"] = owner if parameters is not UNSET: field_dict["parameters"] = parameters if status is not UNSET: @@ -113,6 +122,7 @@ def to_dict(self) -> dict[str, Any]: @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.run_parameter import RunParameter + from ..models.schedule_owner import ScheduleOwner d = dict(src_dict) schema = d.pop("$schema", UNSET) @@ -146,6 +156,13 @@ def _parse_name(data: object) -> None | str | Unset: else: overlap_policy = UpdateScheduleParamsOverlapPolicy(_overlap_policy) + _owner = d.pop("owner", UNSET) + owner: ScheduleOwner | Unset + if isinstance(_owner, Unset): + owner = UNSET + else: + owner = ScheduleOwner.from_dict(_owner) + _parameters = d.pop("parameters", UNSET) parameters: list[RunParameter] | Unset = UNSET if _parameters is not UNSET: @@ -178,6 +195,7 @@ def _parse_timezone(data: object) -> None | str | Unset: environment=environment, name=name, overlap_policy=overlap_policy, + owner=owner, parameters=parameters, status=status, timezone=timezone, diff --git a/src/tower/tower_api_client/models/update_service_account_params.py b/src/tower/tower_api_client/models/update_service_account_params.py new file mode 100644 index 00000000..ec26e696 --- /dev/null +++ b/src/tower/tower_api_client/models/update_service_account_params.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.update_service_account_params_role import UpdateServiceAccountParamsRole +from ..types import UNSET, Unset + +T = TypeVar("T", bound="UpdateServiceAccountParams") + + +@_attrs_define +class UpdateServiceAccountParams: + """ + Attributes: + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/UpdateServiceAccountParams.json. + metadata (str | Unset): Replacement JSON metadata for the service account. + name (str | Unset): The new human-readable name for the service account. + role (UpdateServiceAccountParamsRole | Unset): The new team role this service account acts as. + """ + + schema: str | Unset = UNSET + metadata: str | Unset = UNSET + name: str | Unset = UNSET + role: UpdateServiceAccountParamsRole | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + schema = self.schema + + metadata = self.metadata + + name = self.name + + role: str | Unset = UNSET + if not isinstance(self.role, Unset): + role = self.role.value + + field_dict: dict[str, Any] = {} + + field_dict.update({}) + if schema is not UNSET: + field_dict["$schema"] = schema + if metadata is not UNSET: + field_dict["metadata"] = metadata + if name is not UNSET: + field_dict["name"] = name + if role is not UNSET: + field_dict["role"] = role + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + schema = d.pop("$schema", UNSET) + + metadata = d.pop("metadata", UNSET) + + name = d.pop("name", UNSET) + + _role = d.pop("role", UNSET) + role: UpdateServiceAccountParamsRole | Unset + if isinstance(_role, Unset): + role = UNSET + else: + role = UpdateServiceAccountParamsRole(_role) + + update_service_account_params = cls( + schema=schema, + metadata=metadata, + name=name, + role=role, + ) + + return update_service_account_params diff --git a/src/tower/tower_api_client/models/update_service_account_params_role.py b/src/tower/tower_api_client/models/update_service_account_params_role.py new file mode 100644 index 00000000..c47c0069 --- /dev/null +++ b/src/tower/tower_api_client/models/update_service_account_params_role.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class UpdateServiceAccountParamsRole(str, Enum): + ADMIN = "admin" + DEVELOPER = "developer" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/update_service_account_response.py b/src/tower/tower_api_client/models/update_service_account_response.py new file mode 100644 index 00000000..9670f9ae --- /dev/null +++ b/src/tower/tower_api_client/models/update_service_account_response.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.service_account import ServiceAccount + + +T = TypeVar("T", bound="UpdateServiceAccountResponse") + + +@_attrs_define +class UpdateServiceAccountResponse: + """ + Attributes: + service_account (ServiceAccount): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/UpdateServiceAccountResponse.json. + """ + + service_account: ServiceAccount + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + service_account = self.service_account.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "service_account": service_account, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.service_account import ServiceAccount + + d = dict(src_dict) + service_account = ServiceAccount.from_dict(d.pop("service_account")) + + schema = d.pop("$schema", UNSET) + + update_service_account_response = cls( + service_account=service_account, + schema=schema, + ) + + return update_service_account_response diff --git a/src/tower/tower_api_client/models/vend_catalog_credentials_body.py b/src/tower/tower_api_client/models/vend_catalog_credentials_body.py new file mode 100644 index 00000000..853954f4 --- /dev/null +++ b/src/tower/tower_api_client/models/vend_catalog_credentials_body.py @@ -0,0 +1,62 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define + +from ..models.vend_catalog_credentials_body_mode import VendCatalogCredentialsBodyMode +from ..types import UNSET, Unset + +T = TypeVar("T", bound="VendCatalogCredentialsBody") + + +@_attrs_define +class VendCatalogCredentialsBody: + """ + Attributes: + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/VendCatalogCredentialsBody.json. + mode (VendCatalogCredentialsBodyMode | Unset): Access level for the vended token. "read" (default) binds the + token to the catalog's read-only principal; "read-write" requires the catalogs:update scope and binds it to the + read-write principal. Default: VendCatalogCredentialsBodyMode.READ. + """ + + schema: str | Unset = UNSET + mode: VendCatalogCredentialsBodyMode | Unset = VendCatalogCredentialsBodyMode.READ + + def to_dict(self) -> dict[str, Any]: + schema = self.schema + + mode: str | Unset = UNSET + if not isinstance(self.mode, Unset): + mode = self.mode.value + + field_dict: dict[str, Any] = {} + + field_dict.update({}) + if schema is not UNSET: + field_dict["$schema"] = schema + if mode is not UNSET: + field_dict["mode"] = mode + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + schema = d.pop("$schema", UNSET) + + _mode = d.pop("mode", UNSET) + mode: VendCatalogCredentialsBodyMode | Unset + if isinstance(_mode, Unset): + mode = UNSET + else: + mode = VendCatalogCredentialsBodyMode(_mode) + + vend_catalog_credentials_body = cls( + schema=schema, + mode=mode, + ) + + return vend_catalog_credentials_body diff --git a/src/tower/tower_api_client/models/vend_catalog_credentials_body_mode.py b/src/tower/tower_api_client/models/vend_catalog_credentials_body_mode.py new file mode 100644 index 00000000..99b0576a --- /dev/null +++ b/src/tower/tower_api_client/models/vend_catalog_credentials_body_mode.py @@ -0,0 +1,9 @@ +from enum import Enum + + +class VendCatalogCredentialsBodyMode(str, Enum): + READ = "read" + READ_WRITE = "read-write" + + def __str__(self) -> str: + return str(self.value) diff --git a/src/tower/tower_api_client/models/vend_catalog_credentials_response.py b/src/tower/tower_api_client/models/vend_catalog_credentials_response.py new file mode 100644 index 00000000..484088bd --- /dev/null +++ b/src/tower/tower_api_client/models/vend_catalog_credentials_response.py @@ -0,0 +1,60 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.catalog_credentials import CatalogCredentials + + +T = TypeVar("T", bound="VendCatalogCredentialsResponse") + + +@_attrs_define +class VendCatalogCredentialsResponse: + """ + Attributes: + credentials (CatalogCredentials): + schema (str | Unset): A URL to the JSON Schema for this object. Example: + https://api.tower.dev/v1/schemas/VendCatalogCredentialsResponse.json. + """ + + credentials: CatalogCredentials + schema: str | Unset = UNSET + + def to_dict(self) -> dict[str, Any]: + credentials = self.credentials.to_dict() + + schema = self.schema + + field_dict: dict[str, Any] = {} + + field_dict.update( + { + "credentials": credentials, + } + ) + if schema is not UNSET: + field_dict["$schema"] = schema + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.catalog_credentials import CatalogCredentials + + d = dict(src_dict) + credentials = CatalogCredentials.from_dict(d.pop("credentials")) + + schema = d.pop("$schema", UNSET) + + vend_catalog_credentials_response = cls( + credentials=credentials, + schema=schema, + ) + + return vend_catalog_credentials_response diff --git a/uv.lock b/uv.lock index 3f7fedc9..faae3350 100644 --- a/uv.lock +++ b/uv.lock @@ -2642,7 +2642,7 @@ wheels = [ [[package]] name = "tower" -version = "0.3.64" +version = "0.3.65" source = { editable = "." } dependencies = [ { name = "attrs" },