From 9d5085c856dd3206d6d1496a48955cedb60948c0 Mon Sep 17 00:00:00 2001 From: Mike DeAngelo Date: Mon, 8 Jun 2026 22:07:03 +0000 Subject: [PATCH] feat: generate SDKs for Looker 26.10 Release-As: 26.10.0 --- csharp/rtl/Constants.cs | 2 +- csharp/sdk/4.0/methods.cs | 152 ++- csharp/sdk/4.0/models.cs | 138 +- go/sdk/v4/methods.go | 123 +- go/sdk/v4/models.go | 155 ++- kotlin/src/main/com/looker/sdk/4.0/methods.kt | 152 ++- kotlin/src/main/com/looker/sdk/4.0/models.kt | 149 ++- kotlin/src/main/com/looker/sdk/4.0/streams.kt | 152 ++- kotlin/src/main/com/looker/sdk/Constants.kt | 2 +- packages/sdk/src/4.0/funcs.ts | 221 +++- packages/sdk/src/4.0/methods.ts | 205 ++- packages/sdk/src/4.0/methodsInterface.ts | 142 +- packages/sdk/src/4.0/models.ts | 239 +++- packages/sdk/src/4.0/streams.ts | 233 +++- packages/sdk/src/constants.ts | 2 +- python/looker_sdk/sdk/api40/methods.py | 198 ++- python/looker_sdk/sdk/api40/models.py | 298 ++++- python/looker_sdk/sdk/constants.py | 2 +- spec/Looker.4.0.json | 762 ++++++++++- spec/Looker.4.0.oas.json | 1155 +++++++++++++++-- swift/looker/rtl/constants.swift | 2 +- swift/looker/sdk/methods.swift | 183 ++- swift/looker/sdk/models.swift | 519 +++++++- swift/looker/sdk/streams.swift | 183 ++- 24 files changed, 5082 insertions(+), 287 deletions(-) diff --git a/csharp/rtl/Constants.cs b/csharp/rtl/Constants.cs index 009b76b39..8261874e1 100644 --- a/csharp/rtl/Constants.cs +++ b/csharp/rtl/Constants.cs @@ -61,7 +61,7 @@ public struct Constants public const string DefaultApiVersion = "4.0"; public const string AgentPrefix = "CS-SDK"; - public const string LookerVersion = "26.8"; + public const string LookerVersion = "26.10"; public const string Bearer = "Bearer"; public const string LookerAppiId = "x-looker-appid"; diff --git a/csharp/sdk/4.0/methods.cs b/csharp/sdk/4.0/methods.cs index dc0738e55..ec3f76f41 100644 --- a/csharp/sdk/4.0/methods.cs +++ b/csharp/sdk/4.0/methods.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 504 API methods +/// 512 API methods #nullable enable using System; @@ -3647,6 +3647,7 @@ public async Task> vector_thumbnail( /// Combine given search criteria in a boolean OR expression /// Filter out the agents owned by the user passed at the :created_by_user_id params /// Filter on soft deleted agents. + /// Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. public async Task> search_agents( string? id = null, string? name = null, @@ -3660,6 +3661,7 @@ public async Task> search_agents( bool? filter_or = null, bool? not_owned_by = null, bool? deleted = null, + string? primary_agent_id = null, ITransportSettings? options = null) { return await AuthRequest(HttpMethod.Get, "/agents/search", new Values { @@ -3674,7 +3676,8 @@ public async Task> search_agents( { "sorts", sorts }, { "filter_or", filter_or }, { "not_owned_by", not_owned_by }, - { "deleted", deleted }},null,options); + { "deleted", deleted }, + { "primary_agent_id", primary_agent_id }},null,options); } /// ### Create Agent @@ -4015,6 +4018,54 @@ public async Task> conversational_analytic return await AuthRequest(HttpMethod.Post, "/conversational_analytics/chat", null,body,options); } + /// ### Create Golden Query + /// + /// Creates a golden query. + /// + /// POST /golden_queries -> GoldenQuery + /// + /// GoldenQuery Golden Query (application/json) + /// + public async Task> create_golden_query( + WriteGoldenQuery body, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Post, "/golden_queries", null,body,options); + } + + /// ### Update Golden Query + /// + /// Updates a golden query. + /// + /// PATCH /golden_queries/{golden_query_id} -> GoldenQuery + /// + /// GoldenQuery Golden Query (application/json) + /// + /// Golden Query ID + public async Task> update_golden_query( + long golden_query_id, + WriteGoldenQuery body, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Patch, $"/golden_queries/{golden_query_id}", null,body,options); + } + + /// ### Delete Golden Query + /// + /// Deletes a golden query by ID. + /// + /// DELETE /golden_queries/{golden_query_id} -> string + /// + /// string Successfully deleted. (application/json) + /// + /// Golden Query ID + public async Task> delete_golden_query( + long golden_query_id, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Delete, $"/golden_queries/{golden_query_id}", null,null,options); + } + #endregion ConversationalAnalytics: Manage Conversations, Agents and Messages #region Dashboard: Manage Dashboards @@ -4890,6 +4941,36 @@ public async Task> create_dashboard_layo { "fields", fields }},body,options); } + /// ### Get Dashboard Filter State + /// Returns the stored filter state for a given GUID. + /// + /// GET /dashboard_filter_state/{guid} -> string + /// + /// string JSON string of filter state (application/json) + /// + /// GUID of the filter state + public async Task> dashboard_filter_state( + string guid, + ITransportSettings? options = null) +{ + guid = SdkUtils.EncodeParam(guid); + return await AuthRequest(HttpMethod.Get, $"/dashboard_filter_state/{guid}", null,null,options); + } + + /// ### Create Dashboard Filter State + /// Saves the filter state and returns a GUID. + /// + /// POST /dashboard_filter_state -> Dashboard + /// + /// Dashboard Dashboard Filter State (application/json) + /// + public async Task> create_dashboard_filter_state( + string body, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Post, "/dashboard_filter_state", null,body,options); + } + #endregion Dashboard: Manage Dashboards #region DataAction: Run Data Actions @@ -7065,6 +7146,50 @@ public async Task> deploy_ref_to_production AsyncDeployResponse + /// + /// AsyncDeployResponse Returns 200 if project deploy was successfully queued (application/json) + /// + /// Id of project + /// Branch to deploy to production + /// Ref to deploy to production + public async Task> async_deploy_ref_to_production( + string project_id, + string? branch = null, + string? @ref = null, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + return await AuthRequest(HttpMethod.Post, $"/projects/{project_id}/async_deploy_ref_to_production", new Values { + { "branch", branch }, + { "ref", @ref }},null,options); + } + + /// ### Check Status of Asynchronous Deploy + /// Get the status of an asynchronous deploy operation. + /// + /// GET /projects/{project_id}/deploy_status/{deployment_id} -> DeployStatusResponse + /// + /// DeployStatusResponse Returns 200 if status was successfully retrieved (application/json) + /// + /// Id of project + /// Id of deployment + public async Task> async_deploy_status( + string project_id, + long deployment_id, + ITransportSettings? options = null) +{ + project_id = SdkUtils.EncodeParam(project_id); + return await AuthRequest(HttpMethod.Get, $"/projects/{project_id}/deploy_status/{deployment_id}", null,null,options); + } + /// ### Deploy LookML from this Development Mode Project to Production /// /// Git must have been configured, must be in dev mode and deploy permission required @@ -9591,6 +9716,24 @@ public async Task> scheduled_plan_run_once #region SelfService: Self Service Models + /// ### Get Allowed Connections under advanced connection governance + /// + /// This endpoint returns the list of allowed connection names for self-service models + /// when advanced connection governance is enabled. + /// + /// GET /self_service_models/allowed_connections -> string[] + /// + /// string[] List of allowed connection names (application/json) + /// + /// Include connections allowed for Google Sheets. + public async Task> get_self_service_model_allowed_connections( + bool? google_sheets = null, + ITransportSettings? options = null) +{ + return await AuthRequest(HttpMethod.Get, "/self_service_models/allowed_connections", new Values { + { "google_sheets", google_sheets }},null,options); + } + /// ### Update certification for a Self Service Explore /// /// PATCH /self_service_models/{model_name}/certification -> Certification @@ -9830,6 +9973,7 @@ public async Task> create_theme( /// Fields to sort by. /// Requested fields. /// Combine given search criteria in a boolean OR expression + /// Match theme type ('internal', 'embed', or 'all'). public async Task> search_themes( string? id = null, string? name = null, @@ -9840,6 +9984,7 @@ public async Task> search_themes( string? sorts = null, string? fields = null, bool? filter_or = null, + string? theme_type = null, ITransportSettings? options = null) { return await AuthRequest(HttpMethod.Get, "/themes/search", new Values { @@ -9851,7 +9996,8 @@ public async Task> search_themes( { "offset", offset }, { "sorts", sorts }, { "fields", fields }, - { "filter_or", filter_or }},null,options); + { "filter_or", filter_or }, + { "theme_type", theme_type }},null,options); } /// ### Get the default theme diff --git a/csharp/sdk/4.0/models.cs b/csharp/sdk/4.0/models.cs index 4632dba9e..d0f1ee672 100644 --- a/csharp/sdk/4.0/models.cs +++ b/csharp/sdk/4.0/models.cs @@ -21,7 +21,7 @@ /// SOFTWARE. /// -/// 451 API models: 355 Spec, 0 Request, 70 Write, 26 Enum +/// 458 API models: 361 Spec, 0 Request, 71 Write, 26 Enum #nullable enable using System; @@ -57,7 +57,7 @@ public class Agent : SdkModel public StringDictionary? can { get; set; } = null; /// Agent unique identifier (read-only) public string? id { get; set; } = null; - /// User that created the Agent (read-only) + /// User that created the Agent public string? created_by_user_id { get; set; } = null; /// Name of user that created the Agent (read-only) public string? created_by_name { get; set; } = null; @@ -77,6 +77,10 @@ public class Agent : SdkModel public Source[]? sources { get; set; } = null; /// Has inaccessible source (read-only) public bool? has_inaccessible_source { get; set; } = null; + /// Agent golden questions (read-only) + public GoldenQuery[]? golden_queries { get; set; } = null; + /// IDs of golden queries linked to the agent + public long[]? golden_query_ids { get; set; } = null; public Context? context { get; set; } /// Is Agent soft deleted public bool? deleted { get; set; } = null; @@ -90,6 +94,7 @@ public class Agent : SdkModel public bool? code_interpreter { get; set; } = null; /// Studio Agent ID (if this agent was migrated) (read-only) public string? studio_agent_id { get; set; } = null; + public WorkflowParams? workflow_params { get; set; } } public class Alert : SdkModel @@ -428,6 +433,12 @@ public class AssertValidatorTestSuccess : SdkModel public string? lookml_url { get; set; } = null; } +public class AsyncDeployResponse : SdkModel +{ + /// Status of the async deploy request (e.g., 'queued') (read-only) + public string? status { get; set; } = null; +} + public class BackupConfiguration : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -499,7 +510,7 @@ public class Board : SdkModel public string? title { get; set; } = null; /// Date of last board update (read-only) public DateTime? updated_at { get; set; } = null; - /// User id of board creator (read-only) + /// User id of board creator public string? user_id { get; set; } = null; /// Whether the board is the primary homepage or not (read-only) public bool? primary_homepage { get; set; } = null; @@ -2013,6 +2024,26 @@ public class CredentialsTotp : SdkModel public string? url { get; set; } = null; } +public class CredentialsWorkforce : SdkModel +{ + /// Operations the current user is able to perform on this object (read-only) + public StringDictionary? can { get; set; } = null; + /// Timestamp for the creation of this credential (read-only) + public string? created_at { get; set; } = null; + /// Email address (read-only) + public string? email { get; set; } = null; + /// Has this credential been disabled? (read-only) + public bool? is_disabled { get; set; } = null; + /// Timestamp for most recent login using credential (read-only) + public string? logged_in_at { get; set; } = null; + /// Workforce Unique ID for this user (read-only) + public string? workforce_user_id { get; set; } = null; + /// Short name for the type of this kind of credential (read-only) + public string? type { get; set; } = null; + /// Link to get this item (read-only) + public string? url { get; set; } = null; +} + public class CustomWelcomeEmail : SdkModel { /// If true, custom email content will replace the default body of welcome emails @@ -2060,6 +2091,8 @@ public class Dashboard : SdkModel public Certification? certification_metadata { get; set; } /// Enables alerts to keep in sync with dashboard filter changes public bool? alert_sync_with_dashboard_filter_enabled { get; set; } = null; + /// Whether chat is enabled for this dashboard + public bool? chat_enabled { get; set; } = null; /// Background color public string? background_color { get; set; } = null; /// Time that the Dashboard was created. (read-only) @@ -2127,6 +2160,8 @@ public class Dashboard : SdkModel public bool? is_owner_disabled { get; set; } = null; /// Relative URL of the dashboard (read-only) public string? url { get; set; } = null; + /// Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. + public bool? preserve_desktop_layout { get; set; } = null; public DashboardDownloadSettings? download_settings { get; set; } } @@ -2785,6 +2820,16 @@ public enum DependencyStatus install_none } +public class DeployStatusResponse : SdkModel +{ + /// Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED') (read-only) + public string? status { get; set; } = null; + /// Error message if the deploy failed (read-only) + public string? error { get; set; } = null; + /// Commit SHA of the deployment (read-only) + public string? commit_sha { get; set; } = null; +} + /// Type of destination that the alert will be sent to Valid values are: "EMAIL", "ACTION_HUB". (Enum defined in AlertDestination) public enum DestinationType { @@ -2978,6 +3023,8 @@ public class EmbedConfig : SdkModel public bool? look_filters { get; set; } = null; /// When true, removes navigation to Looks from embedded dashboards and explores. public bool? hide_look_navigation { get; set; } = null; + /// Tree of allowed embed permissions (read-only) + public StringDictionary? permissions { get; set; } = null; /// True if embedding is licensed for this Looker instance. (read-only) public bool? embed_enabled { get; set; } = null; } @@ -3388,6 +3435,30 @@ public class GitStatus : SdkModel public string? text { get; set; } = null; } +public class GoldenQuery : SdkModel +{ + /// Operations the current user is able to perform on this object (read-only) + public StringDictionary? can { get; set; } = null; + /// Unique identifier for the golden question (read-only) + public long? id { get; set; } = null; + /// ID of the associated Looker Query resolved from the answer (read-only) + public long? query_id { get; set; } = null; + /// Variations of the golden question text + public string[]? questions { get; set; } = null; + /// The Explore URL representing the answer to the question + public string? answer { get; set; } = null; + /// Whether this golden question should be utilized by the agent + public bool? is_active { get; set; } = null; + /// ID of the user who created the question (read-only) + public long? created_by_user_id { get; set; } = null; + /// ID of the user who last updated the question (read-only) + public long? last_updated_by_user_id { get; set; } = null; + /// Time when the question was created (read-only) + public DateTime? created_at { get; set; } = null; + /// Time when the question was last updated (read-only) + public DateTime? last_updated_at { get; set; } = null; +} + public class Group : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -4279,6 +4350,8 @@ public class LookmlModelExplore : SdkModel public bool? supports_cost_estimate { get; set; } = null; /// Connection name (read-only) public string? connection_name { get; set; } = null; + /// Dialect name (read-only) + public string? dialect_name { get; set; } = null; /// How nulls are sorted, possible values are "low", "high", "first" and "last" (read-only) public string? null_sort_treatment { get; set; } = null; /// List of model source files (read-only) @@ -4955,7 +5028,6 @@ public class McpTools : SdkModel public McpToolSetting? get_lookml_tests { get; set; } public McpToolSetting? run_lookml_tests { get; set; } public McpToolSetting? create_view_from_table { get; set; } - public McpToolSetting? project_git_branch { get; set; } } public class McpToolSetting : SdkModel @@ -7037,6 +7109,7 @@ public class User : SdkModel public CredentialsOIDC? credentials_oidc { get; set; } public CredentialsSaml? credentials_saml { get; set; } public CredentialsTotp? credentials_totp { get; set; } + public CredentialsWorkforce? credentials_workforce { get; set; } /// Full name for display (available only if both first_name and last_name are set) (read-only) public string? display_name { get; set; } = null; /// EMail address (read-only) @@ -7344,6 +7417,23 @@ public class WhitelabelConfiguration : SdkModel public bool? folders_mentions { get; set; } = null; } +public class WorkflowDestination : SdkModel +{ + /// Defines the delivery mechanism ('email' or 'action_hub'). + public string? type { get; set; } = null; + /// The routing configuration. + public string? parameters { get; set; } = null; +} + +public class WorkflowParams : SdkModel +{ + /// The ID of the primary parent agent + public string? primary_agent { get; set; } = null; + /// Crontab specifying the execution frequency + public string? polling_frequency_cron { get; set; } = null; + public WorkflowDestination? destination { get; set; } +} + public class Workspace : SdkModel { /// Operations the current user is able to perform on this object (read-only) @@ -7355,9 +7445,11 @@ public class Workspace : SdkModel } /// Dynamic writeable type for Agent removes: -/// can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id +/// can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id public class WriteAgent : SdkModel { + /// User that created the Agent + public string? created_by_user_id { get; set; } = null; /// Agent name public string? name { get; set; } = null; /// Agent description @@ -7366,11 +7458,14 @@ public class WriteAgent : SdkModel public string? category { get; set; } = null; /// Agent sources public Source[]? sources { get; set; } = null; + /// IDs of golden queries linked to the agent + public long[]? golden_query_ids { get; set; } = null; public Context? context { get; set; } /// Is Agent soft deleted public bool? deleted { get; set; } = null; /// Enables Code Interpreter for this Agent public bool? code_interpreter { get; set; } = null; + public WorkflowParams? workflow_params { get; set; } } /// Dynamic writeable type for Alert removes: @@ -7453,7 +7548,7 @@ public class WriteBackupConfiguration : SdkModel } /// Dynamic writeable type for Board removes: -/// can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage +/// can, content_metadata_id, created_at, board_sections, id, updated_at, primary_homepage public class WriteBoard : SdkModel { /// Date of board deletion @@ -7464,6 +7559,8 @@ public class WriteBoard : SdkModel public string[]? section_order { get; set; } = null; /// Title of the board public string? title { get; set; } = null; + /// User id of board creator + public string? user_id { get; set; } = null; } /// Dynamic writeable type for BoardItem removes: @@ -7588,7 +7685,7 @@ public class WriteConversation : SdkModel public bool? deleted { get; set; } = null; /// /// Dynamic writeable type for Agent removes: - /// can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + /// can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id /// public WriteAgent? conversation_agent { get; set; } } @@ -7710,6 +7807,8 @@ public class WriteDashboard : SdkModel public WriteCertification? certification_metadata { get; set; } /// Enables alerts to keep in sync with dashboard filter changes public bool? alert_sync_with_dashboard_filter_enabled { get; set; } = null; + /// Whether chat is enabled for this dashboard + public bool? chat_enabled { get; set; } = null; /// Background color public string? background_color { get; set; } = null; /// Enables crossfiltering in dashboards - only available in dashboards-next (beta) @@ -7741,6 +7840,8 @@ public class WriteDashboard : SdkModel /// Title color public string? title_color { get; set; } = null; public DashboardAppearance? appearance { get; set; } + /// Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. + public bool? preserve_desktop_layout { get; set; } = null; public DashboardDownloadSettings? download_settings { get; set; } } @@ -8082,7 +8183,7 @@ public class WriteDBConnectionOverride : SdkModel } /// Dynamic writeable type for EmbedConfig removes: -/// embed_enabled +/// permissions, embed_enabled public class WriteEmbedConfig : SdkModel { /// List of domains to allow for embedding @@ -8160,6 +8261,18 @@ public class WriteGitBranch : SdkModel public string? @ref { get; set; } = null; } +/// Dynamic writeable type for GoldenQuery removes: +/// can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at +public class WriteGoldenQuery : SdkModel +{ + /// Variations of the golden question text + public string[]? questions { get; set; } = null; + /// The Explore URL representing the answer to the question + public string? answer { get; set; } = null; + /// Whether this golden question should be utilized by the agent + public bool? is_active { get; set; } = null; +} + /// Dynamic writeable type for Group removes: /// can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count public class WriteGroup : SdkModel @@ -8561,11 +8674,6 @@ public class WriteMcpTools : SdkModel /// description, category, access_level /// public WriteMcpToolSetting? create_view_from_table { get; set; } - /// - /// Dynamic writeable type for McpToolSetting removes: - /// description, category, access_level - /// - public WriteMcpToolSetting? project_git_branch { get; set; } } /// Dynamic writeable type for McpToolSetting removes: @@ -9085,7 +9193,7 @@ public class WriteSetting : SdkModel public bool? embed_cookieless_v2 { get; set; } = null; /// /// Dynamic writeable type for EmbedConfig removes: - /// embed_enabled + /// permissions, embed_enabled /// public WriteEmbedConfig? embed_config { get; set; } /// Toggle Dashboard Auto Refresh restriction @@ -9160,7 +9268,7 @@ public class WriteTheme : SdkModel } /// Dynamic writeable type for User removes: -/// can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url +/// can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, credentials_workforce, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url public class WriteUser : SdkModel { /// diff --git a/go/sdk/v4/methods.go b/go/sdk/v4/methods.go index 1f91e5fce..61dcfb6b5 100644 --- a/go/sdk/v4/methods.go +++ b/go/sdk/v4/methods.go @@ -26,7 +26,7 @@ SOFTWARE. /* -504 API methods +512 API methods */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API v4 @@ -2975,7 +2975,7 @@ func (l *LookerSDK) VectorThumbnail( func (l *LookerSDK) SearchAgents(request RequestSearchAgents, options *rtl.ApiSettings) ([]Agent, error) { var result []Agent - err := l.AuthSession.Do(&result, "GET", "/4.0", "/agents/search", map[string]interface{}{"id": request.Id, "name": request.Name, "description": request.Description, "created_by_user_id": request.CreatedByUserId, "fields": request.Fields, "limit": request.Limit, "category": request.Category, "offset": request.Offset, "sorts": request.Sorts, "filter_or": request.FilterOr, "not_owned_by": request.NotOwnedBy, "deleted": request.Deleted}, nil, options) + err := l.AuthSession.Do(&result, "GET", "/4.0", "/agents/search", map[string]interface{}{"id": request.Id, "name": request.Name, "description": request.Description, "created_by_user_id": request.CreatedByUserId, "fields": request.Fields, "limit": request.Limit, "category": request.Category, "offset": request.Offset, "sorts": request.Sorts, "filter_or": request.FilterOr, "not_owned_by": request.NotOwnedBy, "deleted": request.Deleted, "primary_agent_id": request.PrimaryAgentId}, nil, options) return result, err } @@ -3230,6 +3230,49 @@ func (l *LookerSDK) ConversationalAnalyticsChat( } +// ### Create Golden Query +// +// Creates a golden query. +// +// POST /golden_queries -> GoldenQuery +func (l *LookerSDK) CreateGoldenQuery( + body WriteGoldenQuery, + options *rtl.ApiSettings) (GoldenQuery, error) { + var result GoldenQuery + err := l.AuthSession.Do(&result, "POST", "/4.0", "/golden_queries", nil, body, options) + return result, err + +} + +// ### Update Golden Query +// +// Updates a golden query. +// +// PATCH /golden_queries/{golden_query_id} -> GoldenQuery +func (l *LookerSDK) UpdateGoldenQuery( + goldenQueryId int64, + body WriteGoldenQuery, + options *rtl.ApiSettings) (GoldenQuery, error) { + var result GoldenQuery + err := l.AuthSession.Do(&result, "PATCH", "/4.0", fmt.Sprintf("/golden_queries/%v", goldenQueryId), nil, body, options) + return result, err + +} + +// ### Delete Golden Query +// +// Deletes a golden query by ID. +// +// DELETE /golden_queries/{golden_query_id} -> string +func (l *LookerSDK) DeleteGoldenQuery( + goldenQueryId int64, + options *rtl.ApiSettings) (string, error) { + var result string + err := l.AuthSession.Do(&result, "DELETE", "/4.0", fmt.Sprintf("/golden_queries/%v", goldenQueryId), nil, nil, options) + return result, err + +} + // endregion ConversationalAnalytics: Manage Conversations, Agents and Messages // region Dashboard: Manage Dashboards @@ -3887,6 +3930,33 @@ func (l *LookerSDK) CreateDashboardLayout( } +// ### Get Dashboard Filter State +// Returns the stored filter state for a given GUID. +// +// GET /dashboard_filter_state/{guid} -> string +func (l *LookerSDK) DashboardFilterState( + guid string, + options *rtl.ApiSettings) (string, error) { + guid = url.PathEscape(guid) + var result string + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/dashboard_filter_state/%v", guid), nil, nil, options) + return result, err + +} + +// ### Create Dashboard Filter State +// Saves the filter state and returns a GUID. +// +// POST /dashboard_filter_state -> Dashboard +func (l *LookerSDK) CreateDashboardFilterState( + body string, + options *rtl.ApiSettings) (Dashboard, error) { + var result Dashboard + err := l.AuthSession.Do(&result, "POST", "/4.0", "/dashboard_filter_state", nil, body, options) + return result, err + +} + // endregion Dashboard: Manage Dashboards // region DataAction: Run Data Actions @@ -5385,6 +5455,38 @@ func (l *LookerSDK) DeployRefToProduction(request RequestDeployRefToProduction, } +// ### Asynchronously Deploy a Remote Branch or Ref to Production +// +// Git must have been configured and deploy permission required. +// This endpoint kicks off the deploy process and returns immediately. +// +// Can only specify either a branch or a ref. +// +// POST /projects/{project_id}/async_deploy_ref_to_production -> AsyncDeployResponse +func (l *LookerSDK) AsyncDeployRefToProduction(request RequestAsyncDeployRefToProduction, + options *rtl.ApiSettings) (AsyncDeployResponse, error) { + request.ProjectId = url.PathEscape(request.ProjectId) + var result AsyncDeployResponse + err := l.AuthSession.Do(&result, "POST", "/4.0", fmt.Sprintf("/projects/%v/async_deploy_ref_to_production", request.ProjectId), map[string]interface{}{"branch": request.Branch, "ref": request.Ref}, nil, options) + return result, err + +} + +// ### Check Status of Asynchronous Deploy +// Get the status of an asynchronous deploy operation. +// +// GET /projects/{project_id}/deploy_status/{deployment_id} -> DeployStatusResponse +func (l *LookerSDK) AsyncDeployStatus( + projectId string, + deploymentId int64, + options *rtl.ApiSettings) (DeployStatusResponse, error) { + projectId = url.PathEscape(projectId) + var result DeployStatusResponse + err := l.AuthSession.Do(&result, "GET", "/4.0", fmt.Sprintf("/projects/%v/deploy_status/%v", projectId, deploymentId), nil, nil, options) + return result, err + +} + // ### Deploy LookML from this Development Mode Project to Production // // # Git must have been configured, must be in dev mode and deploy permission required @@ -7228,6 +7330,21 @@ func (l *LookerSDK) ScheduledPlanRunOnceById( // region SelfService: Self Service Models +// ### Get Allowed Connections under advanced connection governance +// +// This endpoint returns the list of allowed connection names for self-service models +// when advanced connection governance is enabled. +// +// GET /self_service_models/allowed_connections -> []string +func (l *LookerSDK) GetSelfServiceModelAllowedConnections( + googleSheets bool, + options *rtl.ApiSettings) ([]string, error) { + var result []string + err := l.AuthSession.Do(&result, "GET", "/4.0", "/self_service_models/allowed_connections", map[string]interface{}{"google_sheets": googleSheets}, nil, options) + return result, err + +} + // ### Update certification for a Self Service Explore // // PATCH /self_service_models/{model_name}/certification -> Certification @@ -7439,7 +7556,7 @@ func (l *LookerSDK) CreateTheme( func (l *LookerSDK) SearchThemes(request RequestSearchThemes, options *rtl.ApiSettings) ([]Theme, error) { var result []Theme - err := l.AuthSession.Do(&result, "GET", "/4.0", "/themes/search", map[string]interface{}{"id": request.Id, "name": request.Name, "begin_at": request.BeginAt, "end_at": request.EndAt, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "fields": request.Fields, "filter_or": request.FilterOr}, nil, options) + err := l.AuthSession.Do(&result, "GET", "/4.0", "/themes/search", map[string]interface{}{"id": request.Id, "name": request.Name, "begin_at": request.BeginAt, "end_at": request.EndAt, "limit": request.Limit, "offset": request.Offset, "sorts": request.Sorts, "fields": request.Fields, "filter_or": request.FilterOr, "theme_type": request.ThemeType}, nil, options) return result, err } diff --git a/go/sdk/v4/models.go b/go/sdk/v4/models.go index 3072fd1cf..3b63739d9 100644 --- a/go/sdk/v4/models.go +++ b/go/sdk/v4/models.go @@ -26,7 +26,7 @@ SOFTWARE. /* -525 API models: 355 Spec, 75 Request, 69 Write, 26 Enum +533 API models: 361 Spec, 76 Request, 70 Write, 26 Enum */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API v4 @@ -58,6 +58,8 @@ type Agent struct { Category *string `json:"category,omitempty"` // The category of the agent (e.g., dashboard, conversation) Sources *[]Source `json:"sources,omitempty"` // Agent sources HasInaccessibleSource *bool `json:"has_inaccessible_source,omitempty"` // Has inaccessible source + GoldenQueries *[]GoldenQuery `json:"golden_queries,omitempty"` // Agent golden questions + GoldenQueryIds *[]int64 `json:"golden_query_ids,omitempty"` // IDs of golden queries linked to the agent Context *Context `json:"context,omitempty"` Deleted *bool `json:"deleted,omitempty"` // Is Agent soft deleted CreatedAt *time.Time `json:"created_at,omitempty"` // Agent created_at @@ -65,6 +67,7 @@ type Agent struct { ContentMetadataId *string `json:"content_metadata_id,omitempty"` // Content metadata ID for this Agent CodeInterpreter *bool `json:"code_interpreter,omitempty"` // Enables Code Interpreter for this Agent StudioAgentId *string `json:"studio_agent_id,omitempty"` // Studio Agent ID (if this agent was migrated) + WorkflowParams *WorkflowParams `json:"workflow_params,omitempty"` } type Alert struct { @@ -259,6 +262,10 @@ type AssertValidatorTestSuccess struct { LookmlUrl *string `json:"lookml_url,omitempty"` // URL to the LookML file where the data test is defined } +type AsyncDeployResponse struct { + Status *string `json:"status,omitempty"` // Status of the async deploy request (e.g., 'queued') +} + type BackupConfiguration struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Type *string `json:"type,omitempty"` // Type of backup: looker-s3 or custom-s3 @@ -1167,6 +1174,17 @@ type CredentialsTotp struct { Url *string `json:"url,omitempty"` // Link to get this item } +type CredentialsWorkforce struct { + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + CreatedAt *string `json:"created_at,omitempty"` // Timestamp for the creation of this credential + Email *string `json:"email,omitempty"` // Email address + IsDisabled *bool `json:"is_disabled,omitempty"` // Has this credential been disabled? + LoggedInAt *string `json:"logged_in_at,omitempty"` // Timestamp for most recent login using credential + WorkforceUserId *string `json:"workforce_user_id,omitempty"` // Workforce Unique ID for this user + Type *string `json:"type,omitempty"` // Short name for the type of this kind of credential + Url *string `json:"url,omitempty"` // Link to get this item +} + type CustomWelcomeEmail struct { Enabled *bool `json:"enabled,omitempty"` // If true, custom email content will replace the default body of welcome emails Content *string `json:"content,omitempty"` // The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. @@ -1193,6 +1211,7 @@ type Dashboard struct { PreferredViewer *string `json:"preferred_viewer,omitempty"` // The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) CertificationMetadata *Certification `json:"certification_metadata,omitempty"` AlertSyncWithDashboardFilterEnabled *bool `json:"alert_sync_with_dashboard_filter_enabled,omitempty"` // Enables alerts to keep in sync with dashboard filter changes + ChatEnabled *bool `json:"chat_enabled,omitempty"` // Whether chat is enabled for this dashboard BackgroundColor *string `json:"background_color,omitempty"` // Background color CreatedAt *time.Time `json:"created_at,omitempty"` // Time that the Dashboard was created. CrossfilterEnabled *bool `json:"crossfilter_enabled,omitempty"` // Enables crossfiltering in dashboards - only available in dashboards-next (beta) @@ -1224,9 +1243,10 @@ type Dashboard struct { TitleColor *string `json:"title_color,omitempty"` // Title color ViewCount *int64 `json:"view_count,omitempty"` // Number of times viewed in the Looker web UI Appearance *DashboardAppearance `json:"appearance,omitempty"` - UsageCount *int64 `json:"usage_count,omitempty"` // Number of queries executed on this dashboard in the last N days - IsOwnerDisabled *bool `json:"is_owner_disabled,omitempty"` // Is the owner disabled - Url *string `json:"url,omitempty"` // Relative URL of the dashboard + UsageCount *int64 `json:"usage_count,omitempty"` // Number of queries executed on this dashboard in the last N days + IsOwnerDisabled *bool `json:"is_owner_disabled,omitempty"` // Is the owner disabled + Url *string `json:"url,omitempty"` // Relative URL of the dashboard + PreserveDesktopLayout *bool `json:"preserve_desktop_layout,omitempty"` // Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. DownloadSettings *DashboardDownloadSettings `json:"download_settings,omitempty"` } @@ -1596,6 +1616,12 @@ const DependencyStatus_LockRequired DependencyStatus = "lock_required" const DependencyStatus_LockError DependencyStatus = "lock_error" const DependencyStatus_InstallNone DependencyStatus = "install_none" +type DeployStatusResponse struct { + Status *string `json:"status,omitempty"` // Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED') + Error *string `json:"error,omitempty"` // Error message if the deploy failed + CommitSha *string `json:"commit_sha,omitempty"` // Commit SHA of the deployment +} + type DestinationType string const DestinationType_EMAIL DestinationType = "EMAIL" @@ -1691,18 +1717,19 @@ type EgressIpAddresses struct { } type EmbedConfig struct { - DomainAllowlist *[]string `json:"domain_allowlist,omitempty"` // List of domains to allow for embedding - AlertUrlAllowlist *[]string `json:"alert_url_allowlist,omitempty"` // List of base urls to allow for alert/schedule - AlertUrlParamOwner *string `json:"alert_url_param_owner,omitempty"` // Owner of who defines the alert/schedule params on the base url - AlertUrlLabel *string `json:"alert_url_label,omitempty"` // Label for the alert/schedule url - SsoAuthEnabled *bool `json:"sso_auth_enabled,omitempty"` // Is SSO embedding enabled for this Looker - EmbedCookielessV2 *bool `json:"embed_cookieless_v2,omitempty"` // Is Cookieless embedding enabled for this Looker - EmbedContentNavigation *bool `json:"embed_content_navigation,omitempty"` // Is embed content navigation enabled for this looker - EmbedContentManagement *bool `json:"embed_content_management,omitempty"` // Is embed content management enabled for this Looker - StrictSameoriginForLogin *bool `json:"strict_sameorigin_for_login,omitempty"` // When true, prohibits the use of Looker login pages in non-Looker iframes. When false, Looker login pages may be used in non-Looker hosted iframes. - LookFilters *bool `json:"look_filters,omitempty"` // When true, filters are enabled on embedded Looks - HideLookNavigation *bool `json:"hide_look_navigation,omitempty"` // When true, removes navigation to Looks from embedded dashboards and explores. - EmbedEnabled *bool `json:"embed_enabled,omitempty"` // True if embedding is licensed for this Looker instance. + DomainAllowlist *[]string `json:"domain_allowlist,omitempty"` // List of domains to allow for embedding + AlertUrlAllowlist *[]string `json:"alert_url_allowlist,omitempty"` // List of base urls to allow for alert/schedule + AlertUrlParamOwner *string `json:"alert_url_param_owner,omitempty"` // Owner of who defines the alert/schedule params on the base url + AlertUrlLabel *string `json:"alert_url_label,omitempty"` // Label for the alert/schedule url + SsoAuthEnabled *bool `json:"sso_auth_enabled,omitempty"` // Is SSO embedding enabled for this Looker + EmbedCookielessV2 *bool `json:"embed_cookieless_v2,omitempty"` // Is Cookieless embedding enabled for this Looker + EmbedContentNavigation *bool `json:"embed_content_navigation,omitempty"` // Is embed content navigation enabled for this looker + EmbedContentManagement *bool `json:"embed_content_management,omitempty"` // Is embed content management enabled for this Looker + StrictSameoriginForLogin *bool `json:"strict_sameorigin_for_login,omitempty"` // When true, prohibits the use of Looker login pages in non-Looker iframes. When false, Looker login pages may be used in non-Looker hosted iframes. + LookFilters *bool `json:"look_filters,omitempty"` // When true, filters are enabled on embedded Looks + HideLookNavigation *bool `json:"hide_look_navigation,omitempty"` // When true, removes navigation to Looks from embedded dashboards and explores. + Permissions *map[string]interface{} `json:"permissions,omitempty"` // Tree of allowed embed permissions + EmbedEnabled *bool `json:"embed_enabled,omitempty"` // True if embedding is licensed for this Looker instance. } type EmbedCookielessSessionAcquire struct { @@ -1930,6 +1957,19 @@ type GitStatus struct { Text *string `json:"text,omitempty"` // Git description of the action } +type GoldenQuery struct { + Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object + Id *int64 `json:"id,omitempty"` // Unique identifier for the golden question + QueryId *int64 `json:"query_id,omitempty"` // ID of the associated Looker Query resolved from the answer + Questions *[]string `json:"questions,omitempty"` // Variations of the golden question text + Answer *string `json:"answer,omitempty"` // The Explore URL representing the answer to the question + IsActive *bool `json:"is_active,omitempty"` // Whether this golden question should be utilized by the agent + CreatedByUserId *int64 `json:"created_by_user_id,omitempty"` // ID of the user who created the question + LastUpdatedByUserId *int64 `json:"last_updated_by_user_id,omitempty"` // ID of the user who last updated the question + CreatedAt *time.Time `json:"created_at,omitempty"` // Time when the question was created + LastUpdatedAt *time.Time `json:"last_updated_at,omitempty"` // Time when the question was last updated +} + type Group struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object CanAddToContentMetadata *bool `json:"can_add_to_content_metadata,omitempty"` // Group can be used in content access controls @@ -2428,6 +2468,7 @@ type LookmlModelExplore struct { SelfServiceExploreData *SelfServiceModelUploadData `json:"self_service_explore_data,omitempty"` SupportsCostEstimate *bool `json:"supports_cost_estimate,omitempty"` // Cost estimates supported ConnectionName *string `json:"connection_name,omitempty"` // Connection name + DialectName *string `json:"dialect_name,omitempty"` // Dialect name NullSortTreatment *string `json:"null_sort_treatment,omitempty"` // How nulls are sorted, possible values are "low", "high", "first" and "last" Files *[]string `json:"files,omitempty"` // List of model source files SourceFile *string `json:"source_file,omitempty"` // Primary source_file file @@ -2818,7 +2859,6 @@ type McpTools struct { GetLookmlTests *McpToolSetting `json:"get_lookml_tests,omitempty"` RunLookmlTests *McpToolSetting `json:"run_lookml_tests,omitempty"` CreateViewFromTable *McpToolSetting `json:"create_view_from_table,omitempty"` - ProjectGitBranch *McpToolSetting `json:"project_git_branch,omitempty"` } type McpToolSetting struct { @@ -3391,6 +3431,13 @@ type RequestArtifactNamespaces struct { Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any. (used with limit) } +// Dynamically generated request type for async_deploy_ref_to_production +type RequestAsyncDeployRefToProduction struct { + ProjectId string `json:"project_id"` // Id of project + Branch *string `json:"branch,omitempty"` // Branch to deploy to production + Ref *string `json:"ref,omitempty"` // Ref to deploy to production +} + // Dynamically generated request type for connection_columns type RequestConnectionColumns struct { ConnectionName string `json:"connection_name"` // Name of connection @@ -3679,6 +3726,7 @@ type RequestSearchAgents struct { FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression NotOwnedBy *bool `json:"not_owned_by,omitempty"` // Filter out the agents owned by the user passed at the :created_by_user_id params Deleted *bool `json:"deleted,omitempty"` // Filter on soft deleted agents. + PrimaryAgentId *string `json:"primary_agent_id,omitempty"` // Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. } // Dynamically generated request type for search_alerts @@ -4013,15 +4061,16 @@ type RequestSearchScheduledPlans struct { // Dynamically generated request type for search_themes type RequestSearchThemes struct { - Id *string `json:"id,omitempty"` // Match theme id. - Name *string `json:"name,omitempty"` // Match theme name. - BeginAt *time.Time `json:"begin_at,omitempty"` // Timestamp for activation. - EndAt *time.Time `json:"end_at,omitempty"` // Timestamp for expiration. - Limit *int64 `json:"limit,omitempty"` // Number of results to return (used with `offset`). - Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any (used with `limit`). - Sorts *string `json:"sorts,omitempty"` // Fields to sort by. - Fields *string `json:"fields,omitempty"` // Requested fields. - FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression + Id *string `json:"id,omitempty"` // Match theme id. + Name *string `json:"name,omitempty"` // Match theme name. + BeginAt *time.Time `json:"begin_at,omitempty"` // Timestamp for activation. + EndAt *time.Time `json:"end_at,omitempty"` // Timestamp for expiration. + Limit *int64 `json:"limit,omitempty"` // Number of results to return (used with `offset`). + Offset *int64 `json:"offset,omitempty"` // Number of results to skip before returning any (used with `limit`). + Sorts *string `json:"sorts,omitempty"` // Fields to sort by. + Fields *string `json:"fields,omitempty"` // Requested fields. + FilterOr *bool `json:"filter_or,omitempty"` // Combine given search criteria in a boolean OR expression + ThemeType *string `json:"theme_type,omitempty"` // Match theme type ('internal', 'embed', or 'all'). } // Dynamically generated request type for search_user_login_lockouts @@ -4839,6 +4888,7 @@ type User struct { CredentialsOidc *CredentialsOIDC `json:"credentials_oidc,omitempty"` CredentialsSaml *CredentialsSaml `json:"credentials_saml,omitempty"` CredentialsTotp *CredentialsTotp `json:"credentials_totp,omitempty"` + CredentialsWorkforce *CredentialsWorkforce `json:"credentials_workforce,omitempty"` DisplayName *string `json:"display_name,omitempty"` // Full name for display (available only if both first_name and last_name are set) Email *string `json:"email,omitempty"` // EMail address EmbedGroupSpaceId *string `json:"embed_group_space_id,omitempty"` // (DEPRECATED) (Embed only) ID of user's group space based on the external_group_id optionally specified during embed user login @@ -5007,6 +5057,17 @@ type WhitelabelConfiguration struct { FoldersMentions *bool `json:"folders_mentions,omitempty"` // Remove Looker mentions in home folder page when you don’t have any items saved } +type WorkflowDestination struct { + Type *string `json:"type,omitempty"` // Defines the delivery mechanism ('email' or 'action_hub'). + Parameters *string `json:"parameters,omitempty"` // The routing configuration. +} + +type WorkflowParams struct { + PrimaryAgent *string `json:"primary_agent,omitempty"` // The ID of the primary parent agent + PollingFrequencyCron *string `json:"polling_frequency_cron,omitempty"` // Crontab specifying the execution frequency + Destination *WorkflowDestination `json:"destination,omitempty"` +} + type Workspace struct { Can *map[string]bool `json:"can,omitempty"` // Operations the current user is able to perform on this object Id *string `json:"id,omitempty"` // The unique id of this user workspace. Predefined workspace ids include "production" and "dev" @@ -5014,15 +5075,18 @@ type Workspace struct { } // Dynamic writeable type for Agent removes: -// can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id +// can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id type WriteAgent struct { - Name *string `json:"name,omitempty"` // Agent name - Description *string `json:"description,omitempty"` // Agent description - Category *string `json:"category,omitempty"` // The category of the agent (e.g., dashboard, conversation) - Sources *[]Source `json:"sources,omitempty"` // Agent sources - Context *Context `json:"context,omitempty"` - Deleted *bool `json:"deleted,omitempty"` // Is Agent soft deleted - CodeInterpreter *bool `json:"code_interpreter,omitempty"` // Enables Code Interpreter for this Agent + CreatedByUserId *string `json:"created_by_user_id,omitempty"` // User that created the Agent + Name *string `json:"name,omitempty"` // Agent name + Description *string `json:"description,omitempty"` // Agent description + Category *string `json:"category,omitempty"` // The category of the agent (e.g., dashboard, conversation) + Sources *[]Source `json:"sources,omitempty"` // Agent sources + GoldenQueryIds *[]int64 `json:"golden_query_ids,omitempty"` // IDs of golden queries linked to the agent + Context *Context `json:"context,omitempty"` + Deleted *bool `json:"deleted,omitempty"` // Is Agent soft deleted + CodeInterpreter *bool `json:"code_interpreter,omitempty"` // Enables Code Interpreter for this Agent + WorkflowParams *WorkflowParams `json:"workflow_params,omitempty"` } // Dynamic writeable type for Alert removes: @@ -5071,12 +5135,13 @@ type WriteBackupConfiguration struct { } // Dynamic writeable type for Board removes: -// can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage +// can, content_metadata_id, created_at, board_sections, id, updated_at, primary_homepage type WriteBoard struct { DeletedAt *time.Time `json:"deleted_at,omitempty"` // Date of board deletion Description *string `json:"description,omitempty"` // Description of the board SectionOrder *[]string `json:"section_order,omitempty"` // ids of the board sections in the order they should be displayed Title *string `json:"title,omitempty"` // Title of the board + UserId *string `json:"user_id,omitempty"` // User id of board creator } // Dynamic writeable type for BoardItem removes: @@ -5151,7 +5216,7 @@ type WriteConversation struct { AgentId *string `json:"agent_id,omitempty"` // Agent id Deleted *bool `json:"deleted,omitempty"` // Is conversation soft deleted ConversationAgent *WriteAgent `json:"conversation_agent,omitempty"` // Dynamic writeable type for Agent removes: - // can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + // can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id } // Dynamic writeable type for ConversationMessage removes: @@ -5223,6 +5288,7 @@ type WriteDashboard struct { CertificationMetadata *WriteCertification `json:"certification_metadata,omitempty"` // Dynamic writeable type for Certification removes: // ui_status, user_name, updated_at AlertSyncWithDashboardFilterEnabled *bool `json:"alert_sync_with_dashboard_filter_enabled,omitempty"` // Enables alerts to keep in sync with dashboard filter changes + ChatEnabled *bool `json:"chat_enabled,omitempty"` // Whether chat is enabled for this dashboard BackgroundColor *string `json:"background_color,omitempty"` // Background color CrossfilterEnabled *bool `json:"crossfilter_enabled,omitempty"` // Enables crossfiltering in dashboards - only available in dashboards-next (beta) Deleted *bool `json:"deleted,omitempty"` // Whether or not a dashboard is 'soft' deleted. @@ -5239,6 +5305,7 @@ type WriteDashboard struct { TileTextColor *string `json:"tile_text_color,omitempty"` // Tile text color TitleColor *string `json:"title_color,omitempty"` // Title color Appearance *DashboardAppearance `json:"appearance,omitempty"` + PreserveDesktopLayout *bool `json:"preserve_desktop_layout,omitempty"` // Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. DownloadSettings *DashboardDownloadSettings `json:"download_settings,omitempty"` } @@ -5426,7 +5493,7 @@ type WriteDBConnectionOverride struct { } // Dynamic writeable type for EmbedConfig removes: -// embed_enabled +// permissions, embed_enabled type WriteEmbedConfig struct { DomainAllowlist *[]string `json:"domain_allowlist,omitempty"` // List of domains to allow for embedding AlertUrlAllowlist *[]string `json:"alert_url_allowlist,omitempty"` // List of base urls to allow for alert/schedule @@ -5474,6 +5541,14 @@ type WriteGitBranch struct { Ref *string `json:"ref,omitempty"` // The resolved ref of this branch. Updating `ref` results in `git reset --hard ``. } +// Dynamic writeable type for GoldenQuery removes: +// can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at +type WriteGoldenQuery struct { + Questions *[]string `json:"questions,omitempty"` // Variations of the golden question text + Answer *string `json:"answer,omitempty"` // The Explore URL representing the answer to the question + IsActive *bool `json:"is_active,omitempty"` // Whether this golden question should be utilized by the agent +} + // Dynamic writeable type for Group removes: // can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count type WriteGroup struct { @@ -5673,8 +5748,6 @@ type WriteMcpTools struct { // description, category, access_level CreateViewFromTable *WriteMcpToolSetting `json:"create_view_from_table,omitempty"` // Dynamic writeable type for McpToolSetting removes: // description, category, access_level - ProjectGitBranch *WriteMcpToolSetting `json:"project_git_branch,omitempty"` // Dynamic writeable type for McpToolSetting removes: - // description, category, access_level } // Dynamic writeable type for McpToolSetting removes: @@ -5972,7 +6045,7 @@ type WriteSetting struct { EmailDomainAllowlist *[]string `json:"email_domain_allowlist,omitempty"` // An array of Email Domain Allowlist of type string for Scheduled Content EmbedCookielessV2 *bool `json:"embed_cookieless_v2,omitempty"` // (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. EmbedConfig *WriteEmbedConfig `json:"embed_config,omitempty"` // Dynamic writeable type for EmbedConfig removes: - // embed_enabled + // permissions, embed_enabled DashboardAutoRefreshRestriction *bool `json:"dashboard_auto_refresh_restriction,omitempty"` // Toggle Dashboard Auto Refresh restriction DashboardAutoRefreshMinimumInterval *string `json:"dashboard_auto_refresh_minimum_interval,omitempty"` // Minimum time interval for dashboard element automatic refresh. Examples: (30 seconds, 1 minute) ManagedCertificateUri *[]string `json:"managed_certificate_uri,omitempty"` // Array of URIs pointing to the location of a root certificate in Secret Manager @@ -6019,7 +6092,7 @@ type WriteTheme struct { } // Dynamic writeable type for User removes: -// can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url +// can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, credentials_workforce, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url type WriteUser struct { CredentialsEmail *WriteCredentialsEmail `json:"credentials_email,omitempty"` // Dynamic writeable type for CredentialsEmail removes: // can, created_at, user_id, is_disabled, logged_in_at, password_reset_url, account_setup_url, password_reset_url_expired, account_setup_url_expired, type, url, user_url diff --git a/kotlin/src/main/com/looker/sdk/4.0/methods.kt b/kotlin/src/main/com/looker/sdk/4.0/methods.kt index 30d6c222a..0a1b2f877 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/methods.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/methods.kt @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -3670,6 +3670,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * @param {Boolean} filter_or Combine given search criteria in a boolean OR expression * @param {Boolean} not_owned_by Filter out the agents owned by the user passed at the :created_by_user_id params * @param {Boolean} deleted Filter on soft deleted agents. + * @param {String} primary_agent_id Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. * * GET /agents/search -> Array */ @@ -3686,6 +3687,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { filter_or: Boolean? = null, not_owned_by: Boolean? = null, deleted: Boolean? = null, + primary_agent_id: String? = null, ): SDKResponse { return this.get>( "/agents/search", @@ -3702,6 +3704,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { "filter_or" to filter_or, "not_owned_by" to not_owned_by, "deleted" to deleted, + "primary_agent_id" to primary_agent_id, ), ) } @@ -4078,6 +4081,55 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { return this.post>("/conversational_analytics/chat", mapOf(), body) } + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * @param {WriteGoldenQuery} body + * + * POST /golden_queries -> GoldenQuery + */ + fun create_golden_query( + body: WriteGoldenQuery, + ): SDKResponse { + return this.post("/golden_queries", mapOf(), body) + } + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * @param {Long} golden_query_id Golden Query ID + * @param {WriteGoldenQuery} body + * + * PATCH /golden_queries/{golden_query_id} -> GoldenQuery + */ + fun update_golden_query( + golden_query_id: Long, + body: WriteGoldenQuery, + ): SDKResponse { + val path_golden_query_id = encodeParam(golden_query_id) + return this.patch("/golden_queries/${path_golden_query_id}", mapOf(), body) + } + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * @param {Long} golden_query_id Golden Query ID + * + * DELETE /golden_queries/{golden_query_id} -> String + */ + fun delete_golden_query( + golden_query_id: Long, + ): SDKResponse { + val path_golden_query_id = encodeParam(golden_query_id) + return this.delete("/golden_queries/${path_golden_query_id}", mapOf()) + } + //endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //region Dashboard: Manage Dashboards @@ -4997,6 +5049,35 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * @param {String} guid GUID of the filter state + * + * GET /dashboard_filter_state/{guid} -> String + */ + fun dashboard_filter_state( + guid: String, + ): SDKResponse { + val path_guid = encodeParam(guid) + return this.get("/dashboard_filter_state/${path_guid}", mapOf()) + } + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * @param {String} body + * + * POST /dashboard_filter_state -> Dashboard + */ + fun create_dashboard_filter_state( + body: String, + ): SDKResponse { + return this.post("/dashboard_filter_state", mapOf(), body) + } + //endregion Dashboard: Manage Dashboards //region DataAction: Run Data Actions @@ -7261,6 +7342,53 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * @param {String} project_id Id of project + * @param {String} branch Branch to deploy to production + * @param {String} ref Ref to deploy to production + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> AsyncDeployResponse + */ + @JvmOverloads fun async_deploy_ref_to_production( + project_id: String, + branch: String? = null, + ref: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post( + "/projects/${path_project_id}/async_deploy_ref_to_production", + mapOf( + "branch" to branch, + "ref" to ref, + ), + ) + } + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * @param {String} project_id Id of project + * @param {Long} deployment_id Id of deployment + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> DeployStatusResponse + */ + fun async_deploy_status( + project_id: String, + deployment_id: Long, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_deployment_id = encodeParam(deployment_id) + return this.get("/projects/${path_project_id}/deploy_status/${path_deployment_id}", mapOf()) + } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -9831,6 +9959,25 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { //region SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * @param {Boolean} google_sheets Include connections allowed for Google Sheets. + * + * GET /self_service_models/allowed_connections -> Array + */ + @JvmOverloads fun get_self_service_model_allowed_connections( + google_sheets: Boolean? = null, + ): SDKResponse { + return this.get>( + "/self_service_models/allowed_connections", + mapOf("google_sheets" to google_sheets), + ) + } + /** * ### Update certification for a Self Service Explore * @@ -10063,6 +10210,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { * @param {String} sorts Fields to sort by. * @param {String} fields Requested fields. * @param {Boolean} filter_or Combine given search criteria in a boolean OR expression + * @param {String} theme_type Match theme type ('internal', 'embed', or 'all'). * * GET /themes/search -> Array */ @@ -10076,6 +10224,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, fields: String? = null, filter_or: Boolean? = null, + theme_type: String? = null, ): SDKResponse { return this.get>( "/themes/search", @@ -10089,6 +10238,7 @@ class LookerSDK(authSession: AuthSession) : APIMethods(authSession) { "sorts" to sorts, "fields" to fields, "filter_or" to filter_or, + "theme_type" to theme_type, ), ) } diff --git a/kotlin/src/main/com/looker/sdk/4.0/models.kt b/kotlin/src/main/com/looker/sdk/4.0/models.kt index ca205bd2b..ecd251745 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/models.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/models.kt @@ -25,7 +25,7 @@ */ /** - * 451 API models: 355 Spec, 0 Request, 70 Write, 26 Enum + * 458 API models: 361 Spec, 0 Request, 71 Write, 26 Enum */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -52,7 +52,7 @@ data class AccessToken( /** * @property can Operations the current user is able to perform on this object (read-only) * @property id Agent unique identifier (read-only) - * @property created_by_user_id User that created the Agent (read-only) + * @property created_by_user_id User that created the Agent * @property created_by_name Name of user that created the Agent (read-only) * @property created_by_first_name Name of user that created the Agent (read-only) * @property created_by_last_name Name of user that created the Agent (read-only) @@ -62,6 +62,8 @@ data class AccessToken( * @property category The category of the agent (e.g., dashboard, conversation) * @property sources Agent sources * @property has_inaccessible_source Has inaccessible source (read-only) + * @property golden_queries Agent golden questions (read-only) + * @property golden_query_ids IDs of golden queries linked to the agent * @property context * @property deleted Is Agent soft deleted * @property created_at Agent created_at (read-only) @@ -69,6 +71,7 @@ data class AccessToken( * @property content_metadata_id Content metadata ID for this Agent (read-only) * @property code_interpreter Enables Code Interpreter for this Agent * @property studio_agent_id Studio Agent ID (if this agent was migrated) (read-only) + * @property workflow_params */ data class Agent( var can: Map? = null, @@ -83,6 +86,8 @@ data class Agent( var category: String? = null, var sources: Array? = null, var has_inaccessible_source: Boolean? = null, + var golden_queries: Array? = null, + var golden_query_ids: Array? = null, var context: Context? = null, var deleted: Boolean? = null, var created_at: Date? = null, @@ -90,6 +95,7 @@ data class Agent( var content_metadata_id: String? = null, var code_interpreter: Boolean? = null, var studio_agent_id: String? = null, + var workflow_params: WorkflowParams? = null, ) : Serializable /** @@ -452,6 +458,13 @@ data class AssertValidatorTestSuccess( var lookml_url: String? = null, ) : Serializable +/** + * @property status Status of the async deploy request (e.g., 'queued') (read-only) + */ +data class AsyncDeployResponse( + var status: String? = null, +) : Serializable + /** * @property can Operations the current user is able to perform on this object (read-only) * @property type Type of backup: looker-s3 or custom-s3 @@ -519,7 +532,7 @@ data class Blob( * @property section_order ids of the board sections in the order they should be displayed * @property title Title of the board * @property updated_at Date of last board update (read-only) - * @property user_id User id of board creator (read-only) + * @property user_id User id of board creator * @property primary_homepage Whether the board is the primary homepage or not (read-only) */ data class Board( @@ -2165,6 +2178,27 @@ data class CredentialsTotp( var url: String? = null, ) : Serializable +/** + * @property can Operations the current user is able to perform on this object (read-only) + * @property created_at Timestamp for the creation of this credential (read-only) + * @property email Email address (read-only) + * @property is_disabled Has this credential been disabled? (read-only) + * @property logged_in_at Timestamp for most recent login using credential (read-only) + * @property workforce_user_id Workforce Unique ID for this user (read-only) + * @property type Short name for the type of this kind of credential (read-only) + * @property url Link to get this item (read-only) + */ +data class CredentialsWorkforce( + var can: Map? = null, + var created_at: String? = null, + var email: String? = null, + var is_disabled: Boolean? = null, + var logged_in_at: String? = null, + var workforce_user_id: String? = null, + var type: String? = null, + var url: String? = null, +) : Serializable + /** * @property enabled If true, custom email content will replace the default body of welcome emails * @property content The HTML to use as custom content for welcome emails. Script elements and other potentially dangerous markup will be removed. @@ -2197,6 +2231,7 @@ data class CustomWelcomeEmail( * @property preferred_viewer The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) * @property certification_metadata * @property alert_sync_with_dashboard_filter_enabled Enables alerts to keep in sync with dashboard filter changes + * @property chat_enabled Whether chat is enabled for this dashboard * @property background_color Background color * @property created_at Time that the Dashboard was created. (read-only) * @property crossfilter_enabled Enables crossfiltering in dashboards - only available in dashboards-next (beta) @@ -2231,6 +2266,7 @@ data class CustomWelcomeEmail( * @property usage_count Number of queries executed on this dashboard in the last N days (read-only) * @property is_owner_disabled Is the owner disabled (read-only) * @property url Relative URL of the dashboard (read-only) + * @property preserve_desktop_layout Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. * @property download_settings */ data class Dashboard( @@ -2252,6 +2288,7 @@ data class Dashboard( var preferred_viewer: String? = null, var certification_metadata: Certification? = null, var alert_sync_with_dashboard_filter_enabled: Boolean? = null, + var chat_enabled: Boolean? = null, var background_color: String? = null, var created_at: Date? = null, var crossfilter_enabled: Boolean? = null, @@ -2286,6 +2323,7 @@ data class Dashboard( var usage_count: Long? = null, var is_owner_disabled: Boolean? = null, var url: String? = null, + var preserve_desktop_layout: Boolean? = null, var download_settings: DashboardDownloadSettings? = null, ) : Serializable @@ -2989,6 +3027,17 @@ enum class DependencyStatus : Serializable { install_none, } +/** + * @property status Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED') (read-only) + * @property error Error message if the deploy failed (read-only) + * @property commit_sha Commit SHA of the deployment (read-only) + */ +data class DeployStatusResponse( + var status: String? = null, + var error: String? = null, + var commit_sha: String? = null, +) : Serializable + /** * Type of destination that the alert will be sent to Valid values are: "EMAIL", "ACTION_HUB". (Enum defined in AlertDestination) */ @@ -3177,6 +3226,7 @@ data class EgressIpAddresses( * @property strict_sameorigin_for_login When true, prohibits the use of Looker login pages in non-Looker iframes. When false, Looker login pages may be used in non-Looker hosted iframes. * @property look_filters When true, filters are enabled on embedded Looks * @property hide_look_navigation When true, removes navigation to Looks from embedded dashboards and explores. + * @property permissions Tree of allowed embed permissions (read-only) * @property embed_enabled True if embedding is licensed for this Looker instance. (read-only) */ data class EmbedConfig( @@ -3191,6 +3241,7 @@ data class EmbedConfig( var strict_sameorigin_for_login: Boolean? = null, var look_filters: Boolean? = null, var hide_look_navigation: Boolean? = null, + var permissions: Map? = null, var embed_enabled: Boolean? = null, ) : Serializable @@ -3617,6 +3668,31 @@ data class GitStatus( var text: String? = null, ) : Serializable +/** + * @property can Operations the current user is able to perform on this object (read-only) + * @property id Unique identifier for the golden question (read-only) + * @property query_id ID of the associated Looker Query resolved from the answer (read-only) + * @property questions Variations of the golden question text + * @property answer The Explore URL representing the answer to the question + * @property is_active Whether this golden question should be utilized by the agent + * @property created_by_user_id ID of the user who created the question (read-only) + * @property last_updated_by_user_id ID of the user who last updated the question (read-only) + * @property created_at Time when the question was created (read-only) + * @property last_updated_at Time when the question was last updated (read-only) + */ +data class GoldenQuery( + var can: Map? = null, + var id: Long? = null, + var query_id: Long? = null, + var questions: Array? = null, + var answer: String? = null, + var is_active: Boolean? = null, + var created_by_user_id: Long? = null, + var last_updated_by_user_id: Long? = null, + var created_at: Date? = null, + var last_updated_at: Date? = null, +) : Serializable + /** * @property can Operations the current user is able to perform on this object (read-only) * @property can_add_to_content_metadata Group can be used in content access controls @@ -4547,6 +4623,7 @@ data class LookmlModel( * @property self_service_explore_data * @property supports_cost_estimate Cost estimates supported (read-only) * @property connection_name Connection name (read-only) + * @property dialect_name Dialect name (read-only) * @property null_sort_treatment How nulls are sorted, possible values are "low", "high", "first" and "last" (read-only) * @property files List of model source files (read-only) * @property source_file Primary source_file file (read-only) @@ -4589,6 +4666,7 @@ data class LookmlModelExplore( var self_service_explore_data: SelfServiceModelUploadData? = null, var supports_cost_estimate: Boolean? = null, var connection_name: String? = null, + var dialect_name: String? = null, var null_sort_treatment: String? = null, var files: Array? = null, var source_file: String? = null, @@ -5275,7 +5353,6 @@ data class MaterializePDT( * @property get_lookml_tests * @property run_lookml_tests * @property create_view_from_table - * @property project_git_branch */ data class McpTools( var enable_all: Boolean? = null, @@ -5319,7 +5396,6 @@ data class McpTools( var get_lookml_tests: McpToolSetting? = null, var run_lookml_tests: McpToolSetting? = null, var create_view_from_table: McpToolSetting? = null, - var project_git_branch: McpToolSetting? = null, ) : Serializable /** @@ -7484,6 +7560,7 @@ data class UpdateFolder( * @property credentials_oidc * @property credentials_saml * @property credentials_totp + * @property credentials_workforce * @property display_name Full name for display (available only if both first_name and last_name are set) (read-only) * @property email EMail address (read-only) * @property embed_group_space_id (DEPRECATED) (Embed only) ID of user's group space based on the external_group_id optionally specified during embed user login (read-only) @@ -7526,6 +7603,7 @@ data class User( var credentials_oidc: CredentialsOIDC? = null, var credentials_saml: CredentialsSaml? = null, var credentials_totp: CredentialsTotp? = null, + var credentials_workforce: CredentialsWorkforce? = null, var display_name: String? = null, var email: String? = null, var embed_group_space_id: String? = null, @@ -7804,6 +7882,26 @@ data class WhitelabelConfiguration( var folders_mentions: Boolean? = null, ) : Serializable +/** + * @property type Defines the delivery mechanism ('email' or 'action_hub'). + * @property parameters The routing configuration. + */ +data class WorkflowDestination( + var type: String? = null, + var parameters: String? = null, +) : Serializable + +/** + * @property primary_agent The ID of the primary parent agent + * @property polling_frequency_cron Crontab specifying the execution frequency + * @property destination + */ +data class WorkflowParams( + var primary_agent: String? = null, + var polling_frequency_cron: String? = null, + var destination: WorkflowDestination? = null, +) : Serializable + /** * @property can Operations the current user is able to perform on this object (read-only) * @property id The unique id of this user workspace. Predefined workspace ids include "production" and "dev" (read-only) @@ -7817,24 +7915,30 @@ data class Workspace( /** * Dynamic writeable type for Agent removes: - * can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + * can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id * + * @property created_by_user_id User that created the Agent * @property name Agent name * @property description Agent description * @property category The category of the agent (e.g., dashboard, conversation) * @property sources Agent sources + * @property golden_query_ids IDs of golden queries linked to the agent * @property context * @property deleted Is Agent soft deleted * @property code_interpreter Enables Code Interpreter for this Agent + * @property workflow_params */ data class WriteAgent( + var created_by_user_id: String? = null, var name: String? = null, var description: String? = null, var category: String? = null, var sources: Array? = null, + var golden_query_ids: Array? = null, var context: Context? = null, var deleted: Boolean? = null, var code_interpreter: Boolean? = null, + var workflow_params: WorkflowParams? = null, ) : Serializable /** @@ -7923,18 +8027,20 @@ data class WriteBackupConfiguration( /** * Dynamic writeable type for Board removes: - * can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage + * can, content_metadata_id, created_at, board_sections, id, updated_at, primary_homepage * * @property deleted_at Date of board deletion * @property description Description of the board * @property section_order ids of the board sections in the order they should be displayed * @property title Title of the board + * @property user_id User id of board creator */ data class WriteBoard( var deleted_at: Date? = null, var description: String? = null, var section_order: Array? = null, var title: String? = null, + var user_id: String? = null, ) : Serializable /** @@ -8058,7 +8164,7 @@ data class WriteContentMeta( * @property agent_id Agent id * @property deleted Is conversation soft deleted * @property conversation_agent Dynamic writeable type for Agent removes: - * can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + * can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id */ data class WriteConversation( var name: String? = null, @@ -8181,6 +8287,7 @@ data class WriteCredentialsEmail( * @property certification_metadata Dynamic writeable type for Certification removes: * ui_status, user_name, updated_at * @property alert_sync_with_dashboard_filter_enabled Enables alerts to keep in sync with dashboard filter changes + * @property chat_enabled Whether chat is enabled for this dashboard * @property background_color Background color * @property crossfilter_enabled Enables crossfiltering in dashboards - only available in dashboards-next (beta) * @property deleted Whether or not a dashboard is 'soft' deleted. @@ -8197,6 +8304,7 @@ data class WriteCredentialsEmail( * @property tile_text_color Tile text color * @property title_color Title color * @property appearance + * @property preserve_desktop_layout Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. * @property download_settings */ data class WriteDashboard( @@ -8211,6 +8319,7 @@ data class WriteDashboard( var preferred_viewer: String? = null, var certification_metadata: WriteCertification? = null, var alert_sync_with_dashboard_filter_enabled: Boolean? = null, + var chat_enabled: Boolean? = null, var background_color: String? = null, var crossfilter_enabled: Boolean? = null, var deleted: Boolean? = null, @@ -8227,6 +8336,7 @@ data class WriteDashboard( var tile_text_color: String? = null, var title_color: String? = null, var appearance: DashboardAppearance? = null, + var preserve_desktop_layout: Boolean? = null, var download_settings: DashboardDownloadSettings? = null, ) : Serializable @@ -8573,7 +8683,7 @@ data class WriteDBConnectionOverride( /** * Dynamic writeable type for EmbedConfig removes: - * embed_enabled + * permissions, embed_enabled * * @property domain_allowlist List of domains to allow for embedding * @property alert_url_allowlist List of base urls to allow for alert/schedule @@ -8659,6 +8769,20 @@ data class WriteGitBranch( var ref: String? = null, ) : Serializable +/** + * Dynamic writeable type for GoldenQuery removes: + * can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at + * + * @property questions Variations of the golden question text + * @property answer The Explore URL representing the answer to the question + * @property is_active Whether this golden question should be utilized by the agent + */ +data class WriteGoldenQuery( + var questions: Array? = null, + var answer: String? = null, + var is_active: Boolean? = null, +) : Serializable + /** * Dynamic writeable type for Group removes: * can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count @@ -8951,8 +9075,6 @@ data class WriteLookWithQuery( * description, category, access_level * @property create_view_from_table Dynamic writeable type for McpToolSetting removes: * description, category, access_level - * @property project_git_branch Dynamic writeable type for McpToolSetting removes: - * description, category, access_level */ data class WriteMcpTools( var enable_all: Boolean? = null, @@ -8996,7 +9118,6 @@ data class WriteMcpTools( var get_lookml_tests: WriteMcpToolSetting? = null, var run_lookml_tests: WriteMcpToolSetting? = null, var create_view_from_table: WriteMcpToolSetting? = null, - var project_git_branch: WriteMcpToolSetting? = null, ) : Serializable /** @@ -9530,7 +9651,7 @@ data class WriteSessionConfig( * @property email_domain_allowlist An array of Email Domain Allowlist of type string for Scheduled Content * @property embed_cookieless_v2 (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. * @property embed_config Dynamic writeable type for EmbedConfig removes: - * embed_enabled + * permissions, embed_enabled * @property dashboard_auto_refresh_restriction Toggle Dashboard Auto Refresh restriction * @property dashboard_auto_refresh_minimum_interval Minimum time interval for dashboard element automatic refresh. Examples: (30 seconds, 1 minute) * @property managed_certificate_uri Array of URIs pointing to the location of a root certificate in Secret Manager @@ -9632,7 +9753,7 @@ data class WriteTheme( /** * Dynamic writeable type for User removes: - * can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url + * can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, credentials_workforce, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url * * @property credentials_email Dynamic writeable type for CredentialsEmail removes: * can, created_at, user_id, is_disabled, logged_in_at, password_reset_url, account_setup_url, password_reset_url_expired, account_setup_url_expired, type, url, user_url diff --git a/kotlin/src/main/com/looker/sdk/4.0/streams.kt b/kotlin/src/main/com/looker/sdk/4.0/streams.kt index d38c4f6c1..75192dd38 100644 --- a/kotlin/src/main/com/looker/sdk/4.0/streams.kt +++ b/kotlin/src/main/com/looker/sdk/4.0/streams.kt @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ // NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -3668,6 +3668,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * @param {Boolean} filter_or Combine given search criteria in a boolean OR expression * @param {Boolean} not_owned_by Filter out the agents owned by the user passed at the :created_by_user_id params * @param {Boolean} deleted Filter on soft deleted agents. + * @param {String} primary_agent_id Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. * * GET /agents/search -> ByteArray */ @@ -3684,6 +3685,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { filter_or: Boolean? = null, not_owned_by: Boolean? = null, deleted: Boolean? = null, + primary_agent_id: String? = null, ): SDKResponse { return this.get( "/agents/search", @@ -3700,6 +3702,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { "filter_or" to filter_or, "not_owned_by" to not_owned_by, "deleted" to deleted, + "primary_agent_id" to primary_agent_id, ), ) } @@ -4076,6 +4079,55 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { return this.post("/conversational_analytics/chat", mapOf(), body) } + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * @param {WriteGoldenQuery} body + * + * POST /golden_queries -> ByteArray + */ + fun create_golden_query( + body: WriteGoldenQuery, + ): SDKResponse { + return this.post("/golden_queries", mapOf(), body) + } + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * @param {Long} golden_query_id Golden Query ID + * @param {WriteGoldenQuery} body + * + * PATCH /golden_queries/{golden_query_id} -> ByteArray + */ + fun update_golden_query( + golden_query_id: Long, + body: WriteGoldenQuery, + ): SDKResponse { + val path_golden_query_id = encodeParam(golden_query_id) + return this.patch("/golden_queries/${path_golden_query_id}", mapOf(), body) + } + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * @param {Long} golden_query_id Golden Query ID + * + * DELETE /golden_queries/{golden_query_id} -> ByteArray + */ + fun delete_golden_query( + golden_query_id: Long, + ): SDKResponse { + val path_golden_query_id = encodeParam(golden_query_id) + return this.delete("/golden_queries/${path_golden_query_id}", mapOf()) + } + //endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //region Dashboard: Manage Dashboards @@ -4995,6 +5047,35 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * @param {String} guid GUID of the filter state + * + * GET /dashboard_filter_state/{guid} -> ByteArray + */ + fun dashboard_filter_state( + guid: String, + ): SDKResponse { + val path_guid = encodeParam(guid) + return this.get("/dashboard_filter_state/${path_guid}", mapOf()) + } + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * @param {String} body + * + * POST /dashboard_filter_state -> ByteArray + */ + fun create_dashboard_filter_state( + body: String, + ): SDKResponse { + return this.post("/dashboard_filter_state", mapOf(), body) + } + //endregion Dashboard: Manage Dashboards //region DataAction: Run Data Actions @@ -7259,6 +7340,53 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { ) } + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * @param {String} project_id Id of project + * @param {String} branch Branch to deploy to production + * @param {String} ref Ref to deploy to production + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> ByteArray + */ + @JvmOverloads fun async_deploy_ref_to_production( + project_id: String, + branch: String? = null, + ref: String? = null, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + return this.post( + "/projects/${path_project_id}/async_deploy_ref_to_production", + mapOf( + "branch" to branch, + "ref" to ref, + ), + ) + } + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * @param {String} project_id Id of project + * @param {Long} deployment_id Id of deployment + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> ByteArray + */ + fun async_deploy_status( + project_id: String, + deployment_id: Long, + ): SDKResponse { + val path_project_id = encodeParam(project_id) + val path_deployment_id = encodeParam(deployment_id) + return this.get("/projects/${path_project_id}/deploy_status/${path_deployment_id}", mapOf()) + } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -9829,6 +9957,25 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { //region SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * @param {Boolean} google_sheets Include connections allowed for Google Sheets. + * + * GET /self_service_models/allowed_connections -> ByteArray + */ + @JvmOverloads fun get_self_service_model_allowed_connections( + google_sheets: Boolean? = null, + ): SDKResponse { + return this.get( + "/self_service_models/allowed_connections", + mapOf("google_sheets" to google_sheets), + ) + } + /** * ### Update certification for a Self Service Explore * @@ -10061,6 +10208,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { * @param {String} sorts Fields to sort by. * @param {String} fields Requested fields. * @param {Boolean} filter_or Combine given search criteria in a boolean OR expression + * @param {String} theme_type Match theme type ('internal', 'embed', or 'all'). * * GET /themes/search -> ByteArray */ @@ -10074,6 +10222,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { sorts: String? = null, fields: String? = null, filter_or: Boolean? = null, + theme_type: String? = null, ): SDKResponse { return this.get( "/themes/search", @@ -10087,6 +10236,7 @@ class LookerSDKStream(authSession: AuthSession) : APIMethods(authSession) { "sorts" to sorts, "fields" to fields, "filter_or" to filter_or, + "theme_type" to theme_type, ), ) } diff --git a/kotlin/src/main/com/looker/sdk/Constants.kt b/kotlin/src/main/com/looker/sdk/Constants.kt index 604087b97..21ec78e85 100644 --- a/kotlin/src/main/com/looker/sdk/Constants.kt +++ b/kotlin/src/main/com/looker/sdk/Constants.kt @@ -28,7 +28,7 @@ package com.looker.sdk const val ENVIRONMENT_PREFIX = "LOOKERSDK" const val SDK_TAG = "KT-SDK" -const val LOOKER_VERSION = "26.8" +const val LOOKER_VERSION = "26.10" const val API_VERSION = "4.0" const val AGENT_TAG = "$SDK_TAG $LOOKER_VERSION" const val LOOKER_APPID = "x-looker-appid" diff --git a/packages/sdk/src/4.0/funcs.ts b/packages/sdk/src/4.0/funcs.ts index cdf06e11b..f0bdd0356 100644 --- a/packages/sdk/src/4.0/funcs.ts +++ b/packages/sdk/src/4.0/funcs.ts @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ import type { @@ -55,6 +55,7 @@ import type { IArtifact, IArtifactNamespace, IArtifactUsage, + IAsyncDeployResponse, IBackupConfiguration, IBoard, IBoardItem, @@ -111,6 +112,7 @@ import type { IDBConnection, IDBConnectionTestResult, IDependencyGraph, + IDeployStatusResponse, IDialectInfo, IDigestEmails, IDigestEmailSend, @@ -130,6 +132,7 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, + IGoldenQuery, IGroup, IGroupHierarchy, IGroupIdForGroupInclusion, @@ -194,6 +197,7 @@ import type { IRequestAllUsers, IRequestArtifact, IRequestArtifactNamespaces, + IRequestAsyncDeployRefToProduction, IRequestConnectionColumns, IRequestConnectionSchemas, IRequestConnectionSearchColumns, @@ -323,6 +327,7 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, + IWriteGoldenQuery, IWriteGroup, IWriteIntegration, IWriteIntegrationHub, @@ -5286,6 +5291,7 @@ export const search_agents = async ( filter_or: request.filter_or, not_owned_by: request.not_owned_by, deleted: request.deleted, + primary_agent_id: request.primary_agent_id, }, null, options @@ -5734,6 +5740,83 @@ export const conversational_analytics_chat = async ( ); }; +/** + * ### Create Golden Query + * + * Creates a golden query. + * + * POST /golden_queries -> IGoldenQuery + * + * @param sdk IAPIMethods implementation + * @param body Partial + * @param options one-time API call overrides + * + */ +export const create_golden_query = async ( + sdk: IAPIMethods, + body: Partial, + options?: Partial +): Promise> => { + return sdk.post( + '/golden_queries', + null, + body, + options + ); +}; + +/** + * ### Update Golden Query + * + * Updates a golden query. + * + * PATCH /golden_queries/{golden_query_id} -> IGoldenQuery + * + * @param sdk IAPIMethods implementation + * @param golden_query_id Golden Query ID + * @param body Partial + * @param options one-time API call overrides + * + */ +export const update_golden_query = async ( + sdk: IAPIMethods, + golden_query_id: number, + body: Partial, + options?: Partial +): Promise> => { + return sdk.patch( + `/golden_queries/${golden_query_id}`, + null, + body, + options + ); +}; + +/** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * DELETE /golden_queries/{golden_query_id} -> string + * + * @param sdk IAPIMethods implementation + * @param golden_query_id Golden Query ID + * @param options one-time API call overrides + * + */ +export const delete_golden_query = async ( + sdk: IAPIMethods, + golden_query_id: number, + options?: Partial +): Promise> => { + return sdk.delete( + `/golden_queries/${golden_query_id}`, + null, + null, + options + ); +}; + //#endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //#region Dashboard: Manage Dashboards @@ -6859,6 +6942,55 @@ export const create_dashboard_layout = async ( ); }; +/** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * GET /dashboard_filter_state/{guid} -> string + * + * @param sdk IAPIMethods implementation + * @param guid GUID of the filter state + * @param options one-time API call overrides + * + */ +export const dashboard_filter_state = async ( + sdk: IAPIMethods, + guid: string, + options?: Partial +): Promise> => { + guid = encodeParam(guid); + return sdk.get( + `/dashboard_filter_state/${guid}`, + null, + null, + options + ); +}; + +/** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * POST /dashboard_filter_state -> IDashboard + * + * @param sdk IAPIMethods implementation + * @param body string + * @param options one-time API call overrides + * + */ +export const create_dashboard_filter_state = async ( + sdk: IAPIMethods, + body: string, + options?: Partial +): Promise> => { + return sdk.post( + '/dashboard_filter_state', + null, + body, + options + ); +}; + //#endregion Dashboard: Manage Dashboards //#region DataAction: Run Data Actions @@ -9525,6 +9657,62 @@ export const deploy_ref_to_production = async ( ); }; +/** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> IAsyncDeployResponse + * + * @param sdk IAPIMethods implementation + * @param request composed interface "IRequestAsyncDeployRefToProduction" for complex method parameters + * @param options one-time API call overrides + * + */ +export const async_deploy_ref_to_production = async ( + sdk: IAPIMethods, + request: IRequestAsyncDeployRefToProduction, + options?: Partial +): Promise> => { + request.project_id = encodeParam(request.project_id); + return sdk.post( + `/projects/${request.project_id}/async_deploy_ref_to_production`, + { branch: request.branch, ref: request.ref }, + null, + options + ); +}; + +/** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> IDeployStatusResponse + * + * @param sdk IAPIMethods implementation + * @param project_id Id of project + * @param deployment_id Id of deployment + * @param options one-time API call overrides + * + */ +export const async_deploy_status = async ( + sdk: IAPIMethods, + project_id: string, + deployment_id: number, + options?: Partial +): Promise> => { + project_id = encodeParam(project_id); + return sdk.get( + `/projects/${project_id}/deploy_status/${deployment_id}`, + null, + null, + options + ); +}; + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -12481,6 +12669,32 @@ export const scheduled_plan_run_once_by_id = async ( //#region SelfService: Self Service Models +/** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * GET /self_service_models/allowed_connections -> string[] + * + * @param sdk IAPIMethods implementation + * @param google_sheets Include connections allowed for Google Sheets. + * @param options one-time API call overrides + * + */ +export const get_self_service_model_allowed_connections = async ( + sdk: IAPIMethods, + google_sheets?: boolean, + options?: Partial +): Promise> => { + return sdk.get( + '/self_service_models/allowed_connections', + { google_sheets }, + null, + options + ); +}; + /** * ### Update certification for a Self Service Explore * @@ -12780,8 +12994,8 @@ export const search_themes = async ( sdk: IAPIMethods, request: IRequestSearchThemes, options?: Partial -): Promise> => { - return sdk.get( +): Promise> => { + return sdk.get( '/themes/search', { id: request.id, @@ -12793,6 +13007,7 @@ export const search_themes = async ( sorts: request.sorts, fields: request.fields, filter_or: request.filter_or, + theme_type: request.theme_type, }, null, options diff --git a/packages/sdk/src/4.0/methods.ts b/packages/sdk/src/4.0/methods.ts index 178e9d139..0f71a2336 100644 --- a/packages/sdk/src/4.0/methods.ts +++ b/packages/sdk/src/4.0/methods.ts @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ import type { @@ -53,6 +53,7 @@ import type { IArtifact, IArtifactNamespace, IArtifactUsage, + IAsyncDeployResponse, IBackupConfiguration, IBoard, IBoardItem, @@ -109,6 +110,7 @@ import type { IDBConnection, IDBConnectionTestResult, IDependencyGraph, + IDeployStatusResponse, IDialectInfo, IDigestEmails, IDigestEmailSend, @@ -128,6 +130,7 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, + IGoldenQuery, IGroup, IGroupHierarchy, IGroupIdForGroupInclusion, @@ -192,6 +195,7 @@ import type { IRequestAllUsers, IRequestArtifact, IRequestArtifactNamespaces, + IRequestAsyncDeployRefToProduction, IRequestConnectionColumns, IRequestConnectionSchemas, IRequestConnectionSearchColumns, @@ -321,6 +325,7 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, + IWriteGoldenQuery, IWriteGroup, IWriteIntegration, IWriteIntegrationHub, @@ -4968,6 +4973,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { filter_or: request.filter_or, not_owned_by: request.not_owned_by, deleted: request.deleted, + primary_agent_id: request.primary_agent_id, }, null, options @@ -5391,6 +5397,77 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * POST /golden_queries -> IGoldenQuery + * + * @param body Partial + * @param options one-time API call overrides + * + */ + async create_golden_query( + body: Partial, + options?: Partial + ): Promise> { + return this.post( + '/golden_queries', + null, + body, + options + ); + } + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * PATCH /golden_queries/{golden_query_id} -> IGoldenQuery + * + * @param golden_query_id Golden Query ID + * @param body Partial + * @param options one-time API call overrides + * + */ + async update_golden_query( + golden_query_id: number, + body: Partial, + options?: Partial + ): Promise> { + return this.patch( + `/golden_queries/${golden_query_id}`, + null, + body, + options + ); + } + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * DELETE /golden_queries/{golden_query_id} -> string + * + * @param golden_query_id Golden Query ID + * @param options one-time API call overrides + * + */ + async delete_golden_query( + golden_query_id: number, + options?: Partial + ): Promise> { + return this.delete( + `/golden_queries/${golden_query_id}`, + null, + null, + options + ); + } + //#endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //#region Dashboard: Manage Dashboards @@ -6444,6 +6521,51 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * GET /dashboard_filter_state/{guid} -> string + * + * @param guid GUID of the filter state + * @param options one-time API call overrides + * + */ + async dashboard_filter_state( + guid: string, + options?: Partial + ): Promise> { + guid = encodeParam(guid); + return this.get( + `/dashboard_filter_state/${guid}`, + null, + null, + options + ); + } + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * POST /dashboard_filter_state -> IDashboard + * + * @param body string + * @param options one-time API call overrides + * + */ + async create_dashboard_filter_state( + body: string, + options?: Partial + ): Promise> { + return this.post( + '/dashboard_filter_state', + null, + body, + options + ); + } + //#endregion Dashboard: Manage Dashboards //#region DataAction: Run Data Actions @@ -8953,6 +9075,58 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { ); } + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> IAsyncDeployResponse + * + * @param request composed interface "IRequestAsyncDeployRefToProduction" for complex method parameters + * @param options one-time API call overrides + * + */ + async async_deploy_ref_to_production( + request: IRequestAsyncDeployRefToProduction, + options?: Partial + ): Promise> { + request.project_id = encodeParam(request.project_id); + return this.post( + `/projects/${request.project_id}/async_deploy_ref_to_production`, + { branch: request.branch, ref: request.ref }, + null, + options + ); + } + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> IDeployStatusResponse + * + * @param project_id Id of project + * @param deployment_id Id of deployment + * @param options one-time API call overrides + * + */ + async async_deploy_status( + project_id: string, + deployment_id: number, + options?: Partial + ): Promise> { + project_id = encodeParam(project_id); + return this.get( + `/projects/${project_id}/deploy_status/${deployment_id}`, + null, + null, + options + ); + } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -11754,6 +11928,30 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { //#region SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * GET /self_service_models/allowed_connections -> string[] + * + * @param google_sheets Include connections allowed for Google Sheets. + * @param options one-time API call overrides + * + */ + async get_self_service_model_allowed_connections( + google_sheets?: boolean, + options?: Partial + ): Promise> { + return this.get( + '/self_service_models/allowed_connections', + { google_sheets }, + null, + options + ); + } + /** * ### Update certification for a Self Service Explore * @@ -12035,8 +12233,8 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { async search_themes( request: IRequestSearchThemes, options?: Partial - ): Promise> { - return this.get( + ): Promise> { + return this.get( '/themes/search', { id: request.id, @@ -12048,6 +12246,7 @@ export class Looker40SDK extends APIMethods implements ILooker40SDK { sorts: request.sorts, fields: request.fields, filter_or: request.filter_or, + theme_type: request.theme_type, }, null, options diff --git a/packages/sdk/src/4.0/methodsInterface.ts b/packages/sdk/src/4.0/methodsInterface.ts index a56c0efcf..44d87efe3 100644 --- a/packages/sdk/src/4.0/methodsInterface.ts +++ b/packages/sdk/src/4.0/methodsInterface.ts @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ import type { @@ -50,6 +50,7 @@ import type { IArtifact, IArtifactNamespace, IArtifactUsage, + IAsyncDeployResponse, IBackupConfiguration, IBoard, IBoardItem, @@ -106,6 +107,7 @@ import type { IDBConnection, IDBConnectionTestResult, IDependencyGraph, + IDeployStatusResponse, IDialectInfo, IDigestEmails, IDigestEmailSend, @@ -125,6 +127,7 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, + IGoldenQuery, IGroup, IGroupHierarchy, IGroupIdForGroupInclusion, @@ -189,6 +192,7 @@ import type { IRequestAllUsers, IRequestArtifact, IRequestArtifactNamespaces, + IRequestAsyncDeployRefToProduction, IRequestConnectionColumns, IRequestConnectionSchemas, IRequestConnectionSearchColumns, @@ -318,6 +322,7 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, + IWriteGoldenQuery, IWriteGroup, IWriteIntegration, IWriteIntegrationHub, @@ -3896,6 +3901,56 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * POST /golden_queries -> IGoldenQuery + * + * @param body Partial + * @param options one-time API call overrides + * + */ + create_golden_query( + body: Partial, + options?: Partial + ): Promise>; + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * PATCH /golden_queries/{golden_query_id} -> IGoldenQuery + * + * @param golden_query_id Golden Query ID + * @param body Partial + * @param options one-time API call overrides + * + */ + update_golden_query( + golden_query_id: number, + body: Partial, + options?: Partial + ): Promise>; + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * DELETE /golden_queries/{golden_query_id} -> string + * + * @param golden_query_id Golden Query ID + * @param options one-time API call overrides + * + */ + delete_golden_query( + golden_query_id: number, + options?: Partial + ): Promise>; + //#endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //#region Dashboard: Manage Dashboards @@ -4631,6 +4686,36 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * GET /dashboard_filter_state/{guid} -> string + * + * @param guid GUID of the filter state + * @param options one-time API call overrides + * + */ + dashboard_filter_state( + guid: string, + options?: Partial + ): Promise>; + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * POST /dashboard_filter_state -> IDashboard + * + * @param body string + * @param options one-time API call overrides + * + */ + create_dashboard_filter_state( + body: string, + options?: Partial + ): Promise>; + //#endregion Dashboard: Manage Dashboards //#region DataAction: Run Data Actions @@ -6306,6 +6391,42 @@ export interface ILooker40SDK extends IAPIMethods { options?: Partial ): Promise>; + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> IAsyncDeployResponse + * + * @param request composed interface "IRequestAsyncDeployRefToProduction" for complex method parameters + * @param options one-time API call overrides + * + */ + async_deploy_ref_to_production( + request: IRequestAsyncDeployRefToProduction, + options?: Partial + ): Promise>; + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> IDeployStatusResponse + * + * @param project_id Id of project + * @param deployment_id Id of deployment + * @param options one-time API call overrides + * + */ + async_deploy_status( + project_id: string, + deployment_id: number, + options?: Partial + ): Promise>; + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -8326,6 +8447,23 @@ export interface ILooker40SDK extends IAPIMethods { //#region SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * GET /self_service_models/allowed_connections -> string[] + * + * @param google_sheets Include connections allowed for Google Sheets. + * @param options one-time API call overrides + * + */ + get_self_service_model_allowed_connections( + google_sheets?: boolean, + options?: Partial + ): Promise>; + /** * ### Update certification for a Self Service Explore * @@ -8559,7 +8697,7 @@ export interface ILooker40SDK extends IAPIMethods { search_themes( request: IRequestSearchThemes, options?: Partial - ): Promise>; + ): Promise>; /** * ### Get the default theme diff --git a/packages/sdk/src/4.0/models.ts b/packages/sdk/src/4.0/models.ts index 65b676ceb..be6eeb089 100644 --- a/packages/sdk/src/4.0/models.ts +++ b/packages/sdk/src/4.0/models.ts @@ -25,7 +25,7 @@ */ /** - * 526 API models: 355 Spec, 75 Request, 70 Write, 26 Enum + * 534 API models: 361 Spec, 76 Request, 71 Write, 26 Enum */ import type { IDictionary, DelimArray } from '@looker/sdk-rtl'; @@ -63,7 +63,7 @@ export interface IAgent { */ id?: string; /** - * User that created the Agent (read-only) + * User that created the Agent */ created_by_user_id?: string; /** @@ -102,6 +102,14 @@ export interface IAgent { * Has inaccessible source (read-only) */ has_inaccessible_source?: boolean; + /** + * Agent golden questions (read-only) + */ + golden_queries?: IGoldenQuery[] | null; + /** + * IDs of golden queries linked to the agent + */ + golden_query_ids?: number[] | null; context?: IContext; /** * Is Agent soft deleted @@ -127,6 +135,7 @@ export interface IAgent { * Studio Agent ID (if this agent was migrated) (read-only) */ studio_agent_id?: string | null; + workflow_params?: IWorkflowParams; } export interface IAlert { @@ -663,6 +672,13 @@ export interface IAssertValidatorTestSuccess { lookml_url?: string; } +export interface IAsyncDeployResponse { + /** + * Status of the async deploy request (e.g., 'queued') (read-only) + */ + status?: string; +} + export interface IBackupConfiguration { /** * Operations the current user is able to perform on this object (read-only) @@ -780,7 +796,7 @@ export interface IBoard { */ updated_at?: Date | null; /** - * User id of board creator (read-only) + * User id of board creator */ user_id?: string | null; /** @@ -3281,6 +3297,41 @@ export interface ICredentialsTotp { url?: string | null; } +export interface ICredentialsWorkforce { + /** + * Operations the current user is able to perform on this object (read-only) + */ + can?: IDictionary; + /** + * Timestamp for the creation of this credential (read-only) + */ + created_at?: string | null; + /** + * Email address (read-only) + */ + email?: string | null; + /** + * Has this credential been disabled? (read-only) + */ + is_disabled?: boolean; + /** + * Timestamp for most recent login using credential (read-only) + */ + logged_in_at?: string | null; + /** + * Workforce Unique ID for this user (read-only) + */ + workforce_user_id?: string | null; + /** + * Short name for the type of this kind of credential (read-only) + */ + type?: string | null; + /** + * Link to get this item (read-only) + */ + url?: string | null; +} + export interface ICustomWelcomeEmail { /** * If true, custom email content will replace the default body of welcome emails @@ -3364,6 +3415,10 @@ export interface IDashboard { * Enables alerts to keep in sync with dashboard filter changes */ alert_sync_with_dashboard_filter_enabled?: boolean; + /** + * Whether chat is enabled for this dashboard + */ + chat_enabled?: boolean; /** * Background color */ @@ -3497,6 +3552,10 @@ export interface IDashboard { * Relative URL of the dashboard (read-only) */ url?: string | null; + /** + * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. + */ + preserve_desktop_layout?: boolean; download_settings?: IDashboardDownloadSettings; } @@ -4634,6 +4693,21 @@ export enum DependencyStatus { install_none = 'install_none', } +export interface IDeployStatusResponse { + /** + * Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED') (read-only) + */ + status?: string; + /** + * Error message if the deploy failed (read-only) + */ + error?: string | null; + /** + * Commit SHA of the deployment (read-only) + */ + commit_sha?: string | null; +} + /** * Type of destination that the alert will be sent to Valid values are: "EMAIL", "ACTION_HUB". (Enum defined in AlertDestination) */ @@ -4956,6 +5030,10 @@ export interface IEmbedConfig { * When true, removes navigation to Looks from embedded dashboards and explores. */ hide_look_navigation?: boolean; + /** + * Tree of allowed embed permissions (read-only) + */ + permissions?: IDictionary | null; /** * True if embedding is licensed for this Looker instance. (read-only) */ @@ -5637,6 +5715,49 @@ export interface IGitStatus { text?: string | null; } +export interface IGoldenQuery { + /** + * Operations the current user is able to perform on this object (read-only) + */ + can?: IDictionary; + /** + * Unique identifier for the golden question (read-only) + */ + id?: number; + /** + * ID of the associated Looker Query resolved from the answer (read-only) + */ + query_id?: number | null; + /** + * Variations of the golden question text + */ + questions?: string[]; + /** + * The Explore URL representing the answer to the question + */ + answer?: string; + /** + * Whether this golden question should be utilized by the agent + */ + is_active?: boolean; + /** + * ID of the user who created the question (read-only) + */ + created_by_user_id?: number | null; + /** + * ID of the user who last updated the question (read-only) + */ + last_updated_by_user_id?: number | null; + /** + * Time when the question was created (read-only) + */ + created_at?: Date; + /** + * Time when the question was last updated (read-only) + */ + last_updated_at?: Date | null; +} + export interface IGroup { /** * Operations the current user is able to perform on this object (read-only) @@ -7168,6 +7289,10 @@ export interface ILookmlModelExplore { * Connection name (read-only) */ connection_name?: string | null; + /** + * Dialect name (read-only) + */ + dialect_name?: string | null; /** * How nulls are sorted, possible values are "low", "high", "first" and "last" (read-only) */ @@ -8305,7 +8430,6 @@ export interface IMcpTools { get_lookml_tests?: IMcpToolSetting; run_lookml_tests?: IMcpToolSetting; create_view_from_table?: IMcpToolSetting; - project_git_branch?: IMcpToolSetting; } export interface IMcpToolSetting { @@ -10000,6 +10124,24 @@ export interface IRequestArtifactNamespaces { offset?: number | null; } +/** + * Dynamically generated request type for async_deploy_ref_to_production + */ +export interface IRequestAsyncDeployRefToProduction { + /** + * Id of project + */ + project_id: string; + /** + * Branch to deploy to production + */ + branch?: string | null; + /** + * Ref to deploy to production + */ + ref?: string | null; +} + /** * Dynamically generated request type for connection_columns */ @@ -10868,6 +11010,10 @@ export interface IRequestSearchAgents { * Filter on soft deleted agents. */ deleted?: boolean | null; + /** + * Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. + */ + primary_agent_id?: string | null; } /** @@ -12010,6 +12156,10 @@ export interface IRequestSearchThemes { * Combine given search criteria in a boolean OR expression */ filter_or?: boolean | null; + /** + * Match theme type ('internal', 'embed', or 'all'). + */ + theme_type?: string | null; } /** @@ -14337,6 +14487,7 @@ export interface IUser { credentials_oidc?: ICredentialsOIDC; credentials_saml?: ICredentialsSaml; credentials_totp?: ICredentialsTotp; + credentials_workforce?: ICredentialsWorkforce; /** * Full name for display (available only if both first_name and last_name are set) (read-only) */ @@ -14834,6 +14985,29 @@ export interface IWhitelabelConfiguration { folders_mentions?: boolean; } +export interface IWorkflowDestination { + /** + * Defines the delivery mechanism ('email' or 'action_hub'). + */ + type?: string; + /** + * The routing configuration. + */ + parameters?: string; +} + +export interface IWorkflowParams { + /** + * The ID of the primary parent agent + */ + primary_agent?: string | null; + /** + * Crontab specifying the execution frequency + */ + polling_frequency_cron?: string; + destination?: IWorkflowDestination; +} + export interface IWorkspace { /** * Operations the current user is able to perform on this object (read-only) @@ -14851,9 +15025,13 @@ export interface IWorkspace { /** * Dynamic writeable type for Agent removes: - * can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + * can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id */ export interface IWriteAgent { + /** + * User that created the Agent + */ + created_by_user_id?: string; /** * Agent name */ @@ -14870,6 +15048,10 @@ export interface IWriteAgent { * Agent sources */ sources?: ISource[] | null; + /** + * IDs of golden queries linked to the agent + */ + golden_query_ids?: number[] | null; context?: IContext | null; /** * Is Agent soft deleted @@ -14879,6 +15061,7 @@ export interface IWriteAgent { * Enables Code Interpreter for this Agent */ code_interpreter?: boolean; + workflow_params?: IWorkflowParams | null; } /** @@ -15018,7 +15201,7 @@ export interface IWriteBackupConfiguration { /** * Dynamic writeable type for Board removes: - * can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage + * can, content_metadata_id, created_at, board_sections, id, updated_at, primary_homepage */ export interface IWriteBoard { /** @@ -15037,6 +15220,10 @@ export interface IWriteBoard { * Title of the board */ title?: string | null; + /** + * User id of board creator + */ + user_id?: string | null; } /** @@ -15231,7 +15418,7 @@ export interface IWriteConversation { deleted?: boolean; /** * Dynamic writeable type for Agent removes: - * can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + * can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id */ conversation_agent?: IWriteAgent | null; } @@ -15425,6 +15612,10 @@ export interface IWriteDashboard { * Enables alerts to keep in sync with dashboard filter changes */ alert_sync_with_dashboard_filter_enabled?: boolean; + /** + * Whether chat is enabled for this dashboard + */ + chat_enabled?: boolean; /** * Background color */ @@ -15486,6 +15677,10 @@ export interface IWriteDashboard { */ title_color?: string | null; appearance?: IDashboardAppearance | null; + /** + * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. + */ + preserve_desktop_layout?: boolean; download_settings?: IDashboardDownloadSettings | null; } @@ -16085,7 +16280,7 @@ export interface IWriteDBConnectionOverride { /** * Dynamic writeable type for EmbedConfig removes: - * embed_enabled + * permissions, embed_enabled */ export interface IWriteEmbedConfig { /** @@ -16214,6 +16409,25 @@ export interface IWriteGitBranch { ref?: string | null; } +/** + * Dynamic writeable type for GoldenQuery removes: + * can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at + */ +export interface IWriteGoldenQuery { + /** + * Variations of the golden question text + */ + questions?: string[] | null; + /** + * The Explore URL representing the answer to the question + */ + answer?: string; + /** + * Whether this golden question should be utilized by the agent + */ + is_active?: boolean; +} + /** * Dynamic writeable type for Group removes: * can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count @@ -16744,11 +16958,6 @@ export interface IWriteMcpTools { * description, category, access_level */ create_view_from_table?: IWriteMcpToolSetting | null; - /** - * Dynamic writeable type for McpToolSetting removes: - * description, category, access_level - */ - project_git_branch?: IWriteMcpToolSetting | null; } /** @@ -17661,7 +17870,7 @@ export interface IWriteSetting { embed_cookieless_v2?: boolean; /** * Dynamic writeable type for EmbedConfig removes: - * embed_enabled + * permissions, embed_enabled */ embed_config?: IWriteEmbedConfig | null; /** @@ -17785,7 +17994,7 @@ export interface IWriteTheme { /** * Dynamic writeable type for User removes: - * can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url + * can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, credentials_workforce, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url */ export interface IWriteUser { /** diff --git a/packages/sdk/src/4.0/streams.ts b/packages/sdk/src/4.0/streams.ts index 5d870b3d3..6a39545ce 100644 --- a/packages/sdk/src/4.0/streams.ts +++ b/packages/sdk/src/4.0/streams.ts @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ import type { @@ -52,6 +52,7 @@ import type { IArtifact, IArtifactNamespace, IArtifactUsage, + IAsyncDeployResponse, IBackupConfiguration, IBoard, IBoardItem, @@ -108,6 +109,7 @@ import type { IDBConnection, IDBConnectionTestResult, IDependencyGraph, + IDeployStatusResponse, IDialectInfo, IDigestEmails, IDigestEmailSend, @@ -126,6 +128,7 @@ import type { IGitBranch, IGitConnectionTest, IGitConnectionTestResult, + IGoldenQuery, IGroup, IGroupHierarchy, IGroupIdForGroupInclusion, @@ -190,6 +193,7 @@ import type { IRequestAllUsers, IRequestArtifact, IRequestArtifactNamespaces, + IRequestAsyncDeployRefToProduction, IRequestConnectionColumns, IRequestConnectionSchemas, IRequestConnectionSearchColumns, @@ -319,6 +323,7 @@ import type { IWriteEmbedSecret, IWriteExternalOauthApplication, IWriteGitBranch, + IWriteGoldenQuery, IWriteGroup, IWriteIntegration, IWriteIntegrationHub, @@ -5672,6 +5677,7 @@ export class Looker40SDKStream extends APIMethods { filter_or: request.filter_or, not_owned_by: request.not_owned_by, deleted: request.deleted, + primary_agent_id: request.primary_agent_id, }, null, options @@ -6155,6 +6161,89 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * POST /golden_queries -> IGoldenQuery + * + * @param callback streaming output function + * @param body Partial + * @param options one-time API call overrides + * + */ + async create_golden_query( + callback: (response: Response) => Promise, + body: Partial, + options?: Partial + ) { + return this.authStream( + callback, + 'POST', + '/golden_queries', + null, + body, + options + ); + } + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * PATCH /golden_queries/{golden_query_id} -> IGoldenQuery + * + * @param callback streaming output function + * @param golden_query_id Golden Query ID + * @param body Partial + * @param options one-time API call overrides + * + */ + async update_golden_query( + callback: (response: Response) => Promise, + golden_query_id: number, + body: Partial, + options?: Partial + ) { + return this.authStream( + callback, + 'PATCH', + `/golden_queries/${golden_query_id}`, + null, + body, + options + ); + } + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * DELETE /golden_queries/{golden_query_id} -> string + * + * @param callback streaming output function + * @param golden_query_id Golden Query ID + * @param options one-time API call overrides + * + */ + async delete_golden_query( + callback: (response: Response) => Promise, + golden_query_id: number, + options?: Partial + ) { + return this.authStream( + callback, + 'DELETE', + `/golden_queries/${golden_query_id}`, + null, + null, + options + ); + } + //#endregion ConversationalAnalytics: Manage Conversations, Agents and Messages //#region Dashboard: Manage Dashboards @@ -7350,6 +7439,59 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * GET /dashboard_filter_state/{guid} -> string + * + * @param callback streaming output function + * @param guid GUID of the filter state + * @param options one-time API call overrides + * + */ + async dashboard_filter_state( + callback: (response: Response) => Promise, + guid: string, + options?: Partial + ) { + guid = encodeParam(guid); + return this.authStream( + callback, + 'GET', + `/dashboard_filter_state/${guid}`, + null, + null, + options + ); + } + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * POST /dashboard_filter_state -> IDashboard + * + * @param callback streaming output function + * @param body string + * @param options one-time API call overrides + * + */ + async create_dashboard_filter_state( + callback: (response: Response) => Promise, + body: string, + options?: Partial + ) { + return this.authStream( + callback, + 'POST', + '/dashboard_filter_state', + null, + body, + options + ); + } + //#endregion Dashboard: Manage Dashboards //#region DataAction: Run Data Actions @@ -10223,6 +10365,66 @@ export class Looker40SDKStream extends APIMethods { ); } + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> IAsyncDeployResponse + * + * @param callback streaming output function + * @param request composed interface "IRequestAsyncDeployRefToProduction" for complex method parameters + * @param options one-time API call overrides + * + */ + async async_deploy_ref_to_production( + callback: (response: Response) => Promise, + request: IRequestAsyncDeployRefToProduction, + options?: Partial + ) { + request.project_id = encodeParam(request.project_id); + return this.authStream( + callback, + 'POST', + `/projects/${request.project_id}/async_deploy_ref_to_production`, + { branch: request.branch, ref: request.ref }, + null, + options + ); + } + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> IDeployStatusResponse + * + * @param callback streaming output function + * @param project_id Id of project + * @param deployment_id Id of deployment + * @param options one-time API call overrides + * + */ + async async_deploy_status( + callback: (response: Response) => Promise, + project_id: string, + deployment_id: number, + options?: Partial + ) { + project_id = encodeParam(project_id); + return this.authStream( + callback, + 'GET', + `/projects/${project_id}/deploy_status/${deployment_id}`, + null, + null, + options + ); + } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -13371,6 +13573,34 @@ export class Looker40SDKStream extends APIMethods { //#region SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * GET /self_service_models/allowed_connections -> string[] + * + * @param callback streaming output function + * @param google_sheets Include connections allowed for Google Sheets. + * @param options one-time API call overrides + * + */ + async get_self_service_model_allowed_connections( + callback: (response: Response) => Promise, + google_sheets?: boolean, + options?: Partial + ) { + return this.authStream( + callback, + 'GET', + '/self_service_models/allowed_connections', + { google_sheets }, + null, + options + ); + } + /** * ### Update certification for a Self Service Explore * @@ -13711,6 +13941,7 @@ export class Looker40SDKStream extends APIMethods { sorts: request.sorts, fields: request.fields, filter_or: request.filter_or, + theme_type: request.theme_type, }, null, options diff --git a/packages/sdk/src/constants.ts b/packages/sdk/src/constants.ts index d9e51de39..e619d3f32 100644 --- a/packages/sdk/src/constants.ts +++ b/packages/sdk/src/constants.ts @@ -24,5 +24,5 @@ */ -export const sdkVersion = '26.8'; +export const sdkVersion = '26.10'; export const environmentPrefix = 'LOOKERSDK'; diff --git a/python/looker_sdk/sdk/api40/methods.py b/python/looker_sdk/sdk/api40/methods.py index 176d797e6..4c64e0233 100644 --- a/python/looker_sdk/sdk/api40/methods.py +++ b/python/looker_sdk/sdk/api40/methods.py @@ -21,7 +21,7 @@ # SOFTWARE. # -# 504 API methods +# 512 API methods # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -4742,6 +4742,8 @@ def search_agents( not_owned_by: Optional[bool] = None, # Filter on soft deleted agents. deleted: Optional[bool] = None, + # Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. + primary_agent_id: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[mdls.Agent]: """Search Agents""" @@ -4763,6 +4765,7 @@ def search_agents( "filter_or": filter_or, "not_owned_by": not_owned_by, "deleted": deleted, + "primary_agent_id": primary_agent_id, }, transport_options=transport_options, ), @@ -5203,6 +5206,74 @@ def conversational_analytics_chat( ) return response + # ### Create Golden Query + # + # Creates a golden query. + # + # POST /golden_queries -> mdls.GoldenQuery + def create_golden_query( + self, + body: mdls.WriteGoldenQuery, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.GoldenQuery: + """Create Golden Query""" + response = cast( + mdls.GoldenQuery, + self.post( + path="/golden_queries", + structure=mdls.GoldenQuery, + body=body, + transport_options=transport_options, + ), + ) + return response + + # ### Update Golden Query + # + # Updates a golden query. + # + # PATCH /golden_queries/{golden_query_id} -> mdls.GoldenQuery + def update_golden_query( + self, + # Golden Query ID + golden_query_id: int, + body: mdls.WriteGoldenQuery, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.GoldenQuery: + """Update Golden Query""" + response = cast( + mdls.GoldenQuery, + self.patch( + path=f"/golden_queries/{golden_query_id}", + structure=mdls.GoldenQuery, + body=body, + transport_options=transport_options, + ), + ) + return response + + # ### Delete Golden Query + # + # Deletes a golden query by ID. + # + # DELETE /golden_queries/{golden_query_id} -> str + def delete_golden_query( + self, + # Golden Query ID + golden_query_id: int, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Delete Golden Query""" + response = cast( + str, + self.delete( + path=f"/golden_queries/{golden_query_id}", + structure=str, + transport_options=transport_options, + ), + ) + return response + # endregion # region Dashboard: Manage Dashboards @@ -6316,6 +6387,49 @@ def create_dashboard_layout( ) return response + # ### Get Dashboard Filter State + # Returns the stored filter state for a given GUID. + # + # GET /dashboard_filter_state/{guid} -> str + def dashboard_filter_state( + self, + # GUID of the filter state + guid: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> str: + """Get Dashboard Filter State""" + guid = self.encode_path_param(guid) + response = cast( + str, + self.get( + path=f"/dashboard_filter_state/{guid}", + structure=str, + transport_options=transport_options, + ), + ) + return response + + # ### Create Dashboard Filter State + # Saves the filter state and returns a GUID. + # + # POST /dashboard_filter_state -> mdls.Dashboard + def create_dashboard_filter_state( + self, + body: str, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.Dashboard: + """Create Dashboard Filter State""" + response = cast( + mdls.Dashboard, + self.post( + path="/dashboard_filter_state", + structure=mdls.Dashboard, + body=body, + transport_options=transport_options, + ), + ) + return response + # endregion # region DataAction: Run Data Actions @@ -9060,6 +9174,61 @@ def deploy_ref_to_production( ) return response + # ### Asynchronously Deploy a Remote Branch or Ref to Production + # + # Git must have been configured and deploy permission required. + # This endpoint kicks off the deploy process and returns immediately. + # + # Can only specify either a branch or a ref. + # + # POST /projects/{project_id}/async_deploy_ref_to_production -> mdls.AsyncDeployResponse + def async_deploy_ref_to_production( + self, + # Id of project + project_id: str, + # Branch to deploy to production + branch: Optional[str] = None, + # Ref to deploy to production + ref: Optional[str] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.AsyncDeployResponse: + """Asynchronously Deploy Remote Branch or Ref to Production""" + project_id = self.encode_path_param(project_id) + response = cast( + mdls.AsyncDeployResponse, + self.post( + path=f"/projects/{project_id}/async_deploy_ref_to_production", + structure=mdls.AsyncDeployResponse, + query_params={"branch": branch, "ref": ref}, + transport_options=transport_options, + ), + ) + return response + + # ### Check Status of Asynchronous Deploy + # Get the status of an asynchronous deploy operation. + # + # GET /projects/{project_id}/deploy_status/{deployment_id} -> mdls.DeployStatusResponse + def async_deploy_status( + self, + # Id of project + project_id: str, + # Id of deployment + deployment_id: int, + transport_options: Optional[transport.TransportOptions] = None, + ) -> mdls.DeployStatusResponse: + """Check Async Deploy Status""" + project_id = self.encode_path_param(project_id) + response = cast( + mdls.DeployStatusResponse, + self.get( + path=f"/projects/{project_id}/deploy_status/{deployment_id}", + structure=mdls.DeployStatusResponse, + transport_options=transport_options, + ), + ) + return response + # ### Deploy LookML from this Development Mode Project to Production # # Git must have been configured, must be in dev mode and deploy permission required @@ -12085,6 +12254,30 @@ def scheduled_plan_run_once_by_id( # region SelfService: Self Service Models + # ### Get Allowed Connections under advanced connection governance + # + # This endpoint returns the list of allowed connection names for self-service models + # when advanced connection governance is enabled. + # + # GET /self_service_models/allowed_connections -> Sequence[str] + def get_self_service_model_allowed_connections( + self, + # Include connections allowed for Google Sheets. + google_sheets: Optional[bool] = None, + transport_options: Optional[transport.TransportOptions] = None, + ) -> Sequence[str]: + """Get self service allowed connections""" + response = cast( + Sequence[str], + self.get( + path="/self_service_models/allowed_connections", + structure=Sequence[str], + query_params={"google_sheets": google_sheets}, + transport_options=transport_options, + ), + ) + return response + # ### Update certification for a Self Service Explore # # PATCH /self_service_models/{model_name}/certification -> mdls.Certification @@ -12381,6 +12574,8 @@ def search_themes( fields: Optional[str] = None, # Combine given search criteria in a boolean OR expression filter_or: Optional[bool] = None, + # Match theme type ('internal', 'embed', or 'all'). + theme_type: Optional[str] = None, transport_options: Optional[transport.TransportOptions] = None, ) -> Sequence[mdls.Theme]: """Search Themes""" @@ -12399,6 +12594,7 @@ def search_themes( "sorts": sorts, "fields": fields, "filter_or": filter_or, + "theme_type": theme_type, }, transport_options=transport_options, ), diff --git a/python/looker_sdk/sdk/api40/models.py b/python/looker_sdk/sdk/api40/models.py index 2646890aa..b2ec55f00 100644 --- a/python/looker_sdk/sdk/api40/models.py +++ b/python/looker_sdk/sdk/api40/models.py @@ -21,7 +21,7 @@ # SOFTWARE. # -# 451 API models: 355 Spec, 0 Request, 70 Write, 26 Enum +# 458 API models: 361 Spec, 0 Request, 71 Write, 26 Enum # NOTE: Do not edit this file generated by Looker SDK Codegen for API 4.0 @@ -88,6 +88,8 @@ class Agent(model.Model): category: The category of the agent (e.g., dashboard, conversation) sources: Agent sources has_inaccessible_source: Has inaccessible source + golden_queries: Agent golden questions + golden_query_ids: IDs of golden queries linked to the agent context: deleted: Is Agent soft deleted created_at: Agent created_at @@ -95,6 +97,7 @@ class Agent(model.Model): content_metadata_id: Content metadata ID for this Agent code_interpreter: Enables Code Interpreter for this Agent studio_agent_id: Studio Agent ID (if this agent was migrated) + workflow_params: """ can: Optional[MutableMapping[str, bool]] = None @@ -109,6 +112,8 @@ class Agent(model.Model): category: Optional[str] = None sources: Optional[Sequence["Source"]] = None has_inaccessible_source: Optional[bool] = None + golden_queries: Optional[Sequence["GoldenQuery"]] = None + golden_query_ids: Optional[Sequence[int]] = None context: Optional["Context"] = None deleted: Optional[bool] = None created_at: Optional[datetime.datetime] = None @@ -116,6 +121,7 @@ class Agent(model.Model): content_metadata_id: Optional[str] = None code_interpreter: Optional[bool] = None studio_agent_id: Optional[str] = None + workflow_params: Optional["WorkflowParams"] = None def __init__( self, @@ -132,13 +138,16 @@ def __init__( category: Optional[str] = None, sources: Optional[Sequence["Source"]] = None, has_inaccessible_source: Optional[bool] = None, + golden_queries: Optional[Sequence["GoldenQuery"]] = None, + golden_query_ids: Optional[Sequence[int]] = None, context: Optional["Context"] = None, deleted: Optional[bool] = None, created_at: Optional[datetime.datetime] = None, updated_at: Optional[datetime.datetime] = None, content_metadata_id: Optional[str] = None, code_interpreter: Optional[bool] = None, - studio_agent_id: Optional[str] = None + studio_agent_id: Optional[str] = None, + workflow_params: Optional["WorkflowParams"] = None ): self.can = can self.id = id @@ -152,6 +161,8 @@ def __init__( self.category = category self.sources = sources self.has_inaccessible_source = has_inaccessible_source + self.golden_queries = golden_queries + self.golden_query_ids = golden_query_ids self.context = context self.deleted = deleted self.created_at = created_at @@ -159,6 +170,7 @@ def __init__( self.content_metadata_id = content_metadata_id self.code_interpreter = code_interpreter self.studio_agent_id = studio_agent_id + self.workflow_params = workflow_params @attr.s(auto_attribs=True, init=False) @@ -971,6 +983,19 @@ def __init__( self.lookml_url = lookml_url +@attr.s(auto_attribs=True, init=False) +class AsyncDeployResponse(model.Model): + """ + Attributes: + status: Status of the async deploy request (e.g., 'queued') + """ + + status: Optional[str] = None + + def __init__(self, *, status: Optional[str] = None): + self.status = status + + @attr.s(auto_attribs=True, init=False) class BackupConfiguration(model.Model): """ @@ -4605,6 +4630,51 @@ def __init__( self.url = url +@attr.s(auto_attribs=True, init=False) +class CredentialsWorkforce(model.Model): + """ + Attributes: + can: Operations the current user is able to perform on this object + created_at: Timestamp for the creation of this credential + email: Email address + is_disabled: Has this credential been disabled? + logged_in_at: Timestamp for most recent login using credential + workforce_user_id: Workforce Unique ID for this user + type: Short name for the type of this kind of credential + url: Link to get this item + """ + + can: Optional[MutableMapping[str, bool]] = None + created_at: Optional[str] = None + email: Optional[str] = None + is_disabled: Optional[bool] = None + logged_in_at: Optional[str] = None + workforce_user_id: Optional[str] = None + type: Optional[str] = None + url: Optional[str] = None + + def __init__( + self, + *, + can: Optional[MutableMapping[str, bool]] = None, + created_at: Optional[str] = None, + email: Optional[str] = None, + is_disabled: Optional[bool] = None, + logged_in_at: Optional[str] = None, + workforce_user_id: Optional[str] = None, + type: Optional[str] = None, + url: Optional[str] = None + ): + self.can = can + self.created_at = created_at + self.email = email + self.is_disabled = is_disabled + self.logged_in_at = logged_in_at + self.workforce_user_id = workforce_user_id + self.type = type + self.url = url + + @attr.s(auto_attribs=True, init=False) class CustomWelcomeEmail(model.Model): """ @@ -4656,6 +4726,7 @@ class Dashboard(model.Model): preferred_viewer: The preferred route for viewing this dashboard (ie: dashboards or dashboards-next) certification_metadata: alert_sync_with_dashboard_filter_enabled: Enables alerts to keep in sync with dashboard filter changes + chat_enabled: Whether chat is enabled for this dashboard background_color: Background color created_at: Time that the Dashboard was created. crossfilter_enabled: Enables crossfiltering in dashboards - only available in dashboards-next (beta) @@ -4690,6 +4761,7 @@ class Dashboard(model.Model): usage_count: Number of queries executed on this dashboard in the last N days is_owner_disabled: Is the owner disabled url: Relative URL of the dashboard + preserve_desktop_layout: Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. download_settings: """ @@ -4711,6 +4783,7 @@ class Dashboard(model.Model): preferred_viewer: Optional[str] = None certification_metadata: Optional["Certification"] = None alert_sync_with_dashboard_filter_enabled: Optional[bool] = None + chat_enabled: Optional[bool] = None background_color: Optional[str] = None created_at: Optional[datetime.datetime] = None crossfilter_enabled: Optional[bool] = None @@ -4745,6 +4818,7 @@ class Dashboard(model.Model): usage_count: Optional[int] = None is_owner_disabled: Optional[bool] = None url: Optional[str] = None + preserve_desktop_layout: Optional[bool] = None download_settings: Optional["DashboardDownloadSettings"] = None def __init__( @@ -4768,6 +4842,7 @@ def __init__( preferred_viewer: Optional[str] = None, certification_metadata: Optional["Certification"] = None, alert_sync_with_dashboard_filter_enabled: Optional[bool] = None, + chat_enabled: Optional[bool] = None, background_color: Optional[str] = None, created_at: Optional[datetime.datetime] = None, crossfilter_enabled: Optional[bool] = None, @@ -4802,6 +4877,7 @@ def __init__( usage_count: Optional[int] = None, is_owner_disabled: Optional[bool] = None, url: Optional[str] = None, + preserve_desktop_layout: Optional[bool] = None, download_settings: Optional["DashboardDownloadSettings"] = None ): self.can = can @@ -4824,6 +4900,7 @@ def __init__( self.alert_sync_with_dashboard_filter_enabled = ( alert_sync_with_dashboard_filter_enabled ) + self.chat_enabled = chat_enabled self.background_color = background_color self.created_at = created_at self.crossfilter_enabled = crossfilter_enabled @@ -4858,6 +4935,7 @@ def __init__( self.usage_count = usage_count self.is_owner_disabled = is_owner_disabled self.url = url + self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings @@ -6332,6 +6410,31 @@ class DependencyStatus(enum.Enum): DependencyStatus.__new__ = model.safe_enum__new__ # type: ignore +@attr.s(auto_attribs=True, init=False) +class DeployStatusResponse(model.Model): + """ + Attributes: + status: Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED') + error: Error message if the deploy failed + commit_sha: Commit SHA of the deployment + """ + + status: Optional[str] = None + error: Optional[str] = None + commit_sha: Optional[str] = None + + def __init__( + self, + *, + status: Optional[str] = None, + error: Optional[str] = None, + commit_sha: Optional[str] = None + ): + self.status = status + self.error = error + self.commit_sha = commit_sha + + class DestinationType(enum.Enum): """ Type of destination that the alert will be sent to Valid values are: "EMAIL", "ACTION_HUB". (Enum defined in AlertDestination) @@ -6710,6 +6813,7 @@ class EmbedConfig(model.Model): strict_sameorigin_for_login: When true, prohibits the use of Looker login pages in non-Looker iframes. When false, Looker login pages may be used in non-Looker hosted iframes. look_filters: When true, filters are enabled on embedded Looks hide_look_navigation: When true, removes navigation to Looks from embedded dashboards and explores. + permissions: Tree of allowed embed permissions embed_enabled: True if embedding is licensed for this Looker instance. """ @@ -6724,6 +6828,7 @@ class EmbedConfig(model.Model): strict_sameorigin_for_login: Optional[bool] = None look_filters: Optional[bool] = None hide_look_navigation: Optional[bool] = None + permissions: Optional[MutableMapping[str, Any]] = None embed_enabled: Optional[bool] = None def __init__( @@ -6740,6 +6845,7 @@ def __init__( strict_sameorigin_for_login: Optional[bool] = None, look_filters: Optional[bool] = None, hide_look_navigation: Optional[bool] = None, + permissions: Optional[MutableMapping[str, Any]] = None, embed_enabled: Optional[bool] = None ): self.domain_allowlist = domain_allowlist @@ -6753,6 +6859,7 @@ def __init__( self.strict_sameorigin_for_login = strict_sameorigin_for_login self.look_filters = look_filters self.hide_look_navigation = hide_look_navigation + self.permissions = permissions self.embed_enabled = embed_enabled @@ -7645,6 +7752,59 @@ def __init__( self.text = text +@attr.s(auto_attribs=True, init=False) +class GoldenQuery(model.Model): + """ + Attributes: + can: Operations the current user is able to perform on this object + id: Unique identifier for the golden question + query_id: ID of the associated Looker Query resolved from the answer + questions: Variations of the golden question text + answer: The Explore URL representing the answer to the question + is_active: Whether this golden question should be utilized by the agent + created_by_user_id: ID of the user who created the question + last_updated_by_user_id: ID of the user who last updated the question + created_at: Time when the question was created + last_updated_at: Time when the question was last updated + """ + + can: Optional[MutableMapping[str, bool]] = None + id: Optional[int] = None + query_id: Optional[int] = None + questions: Optional[Sequence[str]] = None + answer: Optional[str] = None + is_active: Optional[bool] = None + created_by_user_id: Optional[int] = None + last_updated_by_user_id: Optional[int] = None + created_at: Optional[datetime.datetime] = None + last_updated_at: Optional[datetime.datetime] = None + + def __init__( + self, + *, + can: Optional[MutableMapping[str, bool]] = None, + id: Optional[int] = None, + query_id: Optional[int] = None, + questions: Optional[Sequence[str]] = None, + answer: Optional[str] = None, + is_active: Optional[bool] = None, + created_by_user_id: Optional[int] = None, + last_updated_by_user_id: Optional[int] = None, + created_at: Optional[datetime.datetime] = None, + last_updated_at: Optional[datetime.datetime] = None + ): + self.can = can + self.id = id + self.query_id = query_id + self.questions = questions + self.answer = answer + self.is_active = is_active + self.created_by_user_id = created_by_user_id + self.last_updated_by_user_id = last_updated_by_user_id + self.created_at = created_at + self.last_updated_at = last_updated_at + + @attr.s(auto_attribs=True, init=False) class Group(model.Model): """ @@ -9610,6 +9770,7 @@ class LookmlModelExplore(model.Model): self_service_explore_data: supports_cost_estimate: Cost estimates supported connection_name: Connection name + dialect_name: Dialect name null_sort_treatment: How nulls are sorted, possible values are "low", "high", "first" and "last" files: List of model source files source_file: Primary source_file file @@ -9652,6 +9813,7 @@ class LookmlModelExplore(model.Model): self_service_explore_data: Optional["SelfServiceModelUploadData"] = None supports_cost_estimate: Optional[bool] = None connection_name: Optional[str] = None + dialect_name: Optional[str] = None null_sort_treatment: Optional[str] = None files: Optional[Sequence[str]] = None source_file: Optional[str] = None @@ -9700,6 +9862,7 @@ def __init__( self_service_explore_data: Optional["SelfServiceModelUploadData"] = None, supports_cost_estimate: Optional[bool] = None, connection_name: Optional[str] = None, + dialect_name: Optional[str] = None, null_sort_treatment: Optional[str] = None, files: Optional[Sequence[str]] = None, source_file: Optional[str] = None, @@ -9745,6 +9908,7 @@ def __init__( self.self_service_explore_data = self_service_explore_data self.supports_cost_estimate = supports_cost_estimate self.connection_name = connection_name + self.dialect_name = dialect_name self.null_sort_treatment = null_sort_treatment self.files = files self.source_file = source_file @@ -11098,7 +11262,6 @@ class McpTools(model.Model): get_lookml_tests: run_lookml_tests: create_view_from_table: - project_git_branch: """ enable_all: Optional[bool] = None @@ -11142,7 +11305,6 @@ class McpTools(model.Model): get_lookml_tests: Optional["McpToolSetting"] = None run_lookml_tests: Optional["McpToolSetting"] = None create_view_from_table: Optional["McpToolSetting"] = None - project_git_branch: Optional["McpToolSetting"] = None def __init__( self, @@ -11187,8 +11349,7 @@ def __init__( delete_project_directory: Optional["McpToolSetting"] = None, get_lookml_tests: Optional["McpToolSetting"] = None, run_lookml_tests: Optional["McpToolSetting"] = None, - create_view_from_table: Optional["McpToolSetting"] = None, - project_git_branch: Optional["McpToolSetting"] = None + create_view_from_table: Optional["McpToolSetting"] = None ): self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element @@ -11231,7 +11392,6 @@ def __init__( self.get_lookml_tests = get_lookml_tests self.run_lookml_tests = run_lookml_tests self.create_view_from_table = create_view_from_table - self.project_git_branch = project_git_branch @attr.s(auto_attribs=True, init=False) @@ -15734,6 +15894,7 @@ class User(model.Model): credentials_oidc: credentials_saml: credentials_totp: + credentials_workforce: display_name: Full name for display (available only if both first_name and last_name are set) email: EMail address embed_group_space_id: (DEPRECATED) (Embed only) ID of user's group space based on the external_group_id optionally specified during embed user login @@ -15776,6 +15937,7 @@ class User(model.Model): credentials_oidc: Optional["CredentialsOIDC"] = None credentials_saml: Optional["CredentialsSaml"] = None credentials_totp: Optional["CredentialsTotp"] = None + credentials_workforce: Optional["CredentialsWorkforce"] = None display_name: Optional[str] = None email: Optional[str] = None embed_group_space_id: Optional[str] = None @@ -15820,6 +15982,7 @@ def __init__( credentials_oidc: Optional["CredentialsOIDC"] = None, credentials_saml: Optional["CredentialsSaml"] = None, credentials_totp: Optional["CredentialsTotp"] = None, + credentials_workforce: Optional["CredentialsWorkforce"] = None, display_name: Optional[str] = None, email: Optional[str] = None, embed_group_space_id: Optional[str] = None, @@ -15861,6 +16024,7 @@ def __init__( self.credentials_oidc = credentials_oidc self.credentials_saml = credentials_saml self.credentials_totp = credentials_totp + self.credentials_workforce = credentials_workforce self.display_name = display_name self.email = email self.embed_group_space_id = embed_group_space_id @@ -16394,6 +16558,47 @@ def __init__( self.folders_mentions = folders_mentions +@attr.s(auto_attribs=True, init=False) +class WorkflowDestination(model.Model): + """ + Attributes: + type: Defines the delivery mechanism ('email' or 'action_hub'). + parameters: The routing configuration. + """ + + type: Optional[str] = None + parameters: Optional[str] = None + + def __init__(self, *, type: Optional[str] = None, parameters: Optional[str] = None): + self.type = type + self.parameters = parameters + + +@attr.s(auto_attribs=True, init=False) +class WorkflowParams(model.Model): + """ + Attributes: + primary_agent: The ID of the primary parent agent + polling_frequency_cron: Crontab specifying the execution frequency + destination: + """ + + primary_agent: Optional[str] = None + polling_frequency_cron: Optional[str] = None + destination: Optional["WorkflowDestination"] = None + + def __init__( + self, + *, + primary_agent: Optional[str] = None, + polling_frequency_cron: Optional[str] = None, + destination: Optional["WorkflowDestination"] = None + ): + self.primary_agent = primary_agent + self.polling_frequency_cron = polling_frequency_cron + self.destination = destination + + @attr.s(auto_attribs=True, init=False) class Workspace(model.Model): """ @@ -16423,44 +16628,56 @@ def __init__( class WriteAgent(model.Model): """ Dynamic writeable type for Agent removes: - can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id Attributes: + created_by_user_id: User that created the Agent name: Agent name description: Agent description category: The category of the agent (e.g., dashboard, conversation) sources: Agent sources + golden_query_ids: IDs of golden queries linked to the agent context: deleted: Is Agent soft deleted code_interpreter: Enables Code Interpreter for this Agent + workflow_params: """ + created_by_user_id: Optional[str] = None name: Optional[str] = None description: Optional[str] = None category: Optional[str] = None sources: Optional[Sequence["Source"]] = None + golden_query_ids: Optional[Sequence[int]] = None context: Optional["Context"] = None deleted: Optional[bool] = None code_interpreter: Optional[bool] = None + workflow_params: Optional["WorkflowParams"] = None def __init__( self, *, + created_by_user_id: Optional[str] = None, name: Optional[str] = None, description: Optional[str] = None, category: Optional[str] = None, sources: Optional[Sequence["Source"]] = None, + golden_query_ids: Optional[Sequence[int]] = None, context: Optional["Context"] = None, deleted: Optional[bool] = None, - code_interpreter: Optional[bool] = None + code_interpreter: Optional[bool] = None, + workflow_params: Optional["WorkflowParams"] = None ): + self.created_by_user_id = created_by_user_id self.name = name self.description = description self.category = category self.sources = sources + self.golden_query_ids = golden_query_ids self.context = context self.deleted = deleted self.code_interpreter = code_interpreter + self.workflow_params = workflow_params @attr.s(auto_attribs=True, init=False) @@ -16659,19 +16876,21 @@ def __init__( class WriteBoard(model.Model): """ Dynamic writeable type for Board removes: - can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage + can, content_metadata_id, created_at, board_sections, id, updated_at, primary_homepage Attributes: deleted_at: Date of board deletion description: Description of the board section_order: ids of the board sections in the order they should be displayed title: Title of the board + user_id: User id of board creator """ deleted_at: Optional[datetime.datetime] = None description: Optional[str] = None section_order: Optional[Sequence[str]] = None title: Optional[str] = None + user_id: Optional[str] = None def __init__( self, @@ -16679,12 +16898,14 @@ def __init__( deleted_at: Optional[datetime.datetime] = None, description: Optional[str] = None, section_order: Optional[Sequence[str]] = None, - title: Optional[str] = None + title: Optional[str] = None, + user_id: Optional[str] = None ): self.deleted_at = deleted_at self.description = description self.section_order = section_order self.title = title + self.user_id = user_id @attr.s(auto_attribs=True, init=False) @@ -16915,7 +17136,7 @@ class WriteConversation(model.Model): agent_id: Agent id deleted: Is conversation soft deleted conversation_agent: Dynamic writeable type for Agent removes: - can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id """ name: Optional[str] = None @@ -17156,6 +17377,7 @@ class WriteDashboard(model.Model): certification_metadata: Dynamic writeable type for Certification removes: ui_status, user_name, updated_at alert_sync_with_dashboard_filter_enabled: Enables alerts to keep in sync with dashboard filter changes + chat_enabled: Whether chat is enabled for this dashboard background_color: Background color crossfilter_enabled: Enables crossfiltering in dashboards - only available in dashboards-next (beta) deleted: Whether or not a dashboard is 'soft' deleted. @@ -17172,6 +17394,7 @@ class WriteDashboard(model.Model): tile_text_color: Tile text color title_color: Title color appearance: + preserve_desktop_layout: Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. download_settings: """ @@ -17186,6 +17409,7 @@ class WriteDashboard(model.Model): preferred_viewer: Optional[str] = None certification_metadata: Optional["WriteCertification"] = None alert_sync_with_dashboard_filter_enabled: Optional[bool] = None + chat_enabled: Optional[bool] = None background_color: Optional[str] = None crossfilter_enabled: Optional[bool] = None deleted: Optional[bool] = None @@ -17202,6 +17426,7 @@ class WriteDashboard(model.Model): tile_text_color: Optional[str] = None title_color: Optional[str] = None appearance: Optional["DashboardAppearance"] = None + preserve_desktop_layout: Optional[bool] = None download_settings: Optional["DashboardDownloadSettings"] = None def __init__( @@ -17218,6 +17443,7 @@ def __init__( preferred_viewer: Optional[str] = None, certification_metadata: Optional["WriteCertification"] = None, alert_sync_with_dashboard_filter_enabled: Optional[bool] = None, + chat_enabled: Optional[bool] = None, background_color: Optional[str] = None, crossfilter_enabled: Optional[bool] = None, deleted: Optional[bool] = None, @@ -17234,6 +17460,7 @@ def __init__( tile_text_color: Optional[str] = None, title_color: Optional[str] = None, appearance: Optional["DashboardAppearance"] = None, + preserve_desktop_layout: Optional[bool] = None, download_settings: Optional["DashboardDownloadSettings"] = None ): self.description = description @@ -17249,6 +17476,7 @@ def __init__( self.alert_sync_with_dashboard_filter_enabled = ( alert_sync_with_dashboard_filter_enabled ) + self.chat_enabled = chat_enabled self.background_color = background_color self.crossfilter_enabled = crossfilter_enabled self.deleted = deleted @@ -17265,6 +17493,7 @@ def __init__( self.tile_text_color = tile_text_color self.title_color = title_color self.appearance = appearance + self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings @@ -17943,7 +18172,7 @@ def __init__( class WriteEmbedConfig(model.Model): """ Dynamic writeable type for EmbedConfig removes: - embed_enabled + permissions, embed_enabled Attributes: domain_allowlist: List of domains to allow for embedding @@ -18105,6 +18334,34 @@ def __init__(self, *, name: Optional[str] = None, ref: Optional[str] = None): self.ref = ref +@attr.s(auto_attribs=True, init=False) +class WriteGoldenQuery(model.Model): + """ + Dynamic writeable type for GoldenQuery removes: + can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at + + Attributes: + questions: Variations of the golden question text + answer: The Explore URL representing the answer to the question + is_active: Whether this golden question should be utilized by the agent + """ + + questions: Optional[Sequence[str]] = None + answer: Optional[str] = None + is_active: Optional[bool] = None + + def __init__( + self, + *, + questions: Optional[Sequence[str]] = None, + answer: Optional[str] = None, + is_active: Optional[bool] = None + ): + self.questions = questions + self.answer = answer + self.is_active = is_active + + @attr.s(auto_attribs=True, init=False) class WriteGroup(model.Model): """ @@ -18592,8 +18849,6 @@ class WriteMcpTools(model.Model): run_lookml_tests: Dynamic writeable type for McpToolSetting removes: description, category, access_level create_view_from_table: Dynamic writeable type for McpToolSetting removes: - description, category, access_level - project_git_branch: Dynamic writeable type for McpToolSetting removes: description, category, access_level """ @@ -18638,7 +18893,6 @@ class WriteMcpTools(model.Model): get_lookml_tests: Optional["WriteMcpToolSetting"] = None run_lookml_tests: Optional["WriteMcpToolSetting"] = None create_view_from_table: Optional["WriteMcpToolSetting"] = None - project_git_branch: Optional["WriteMcpToolSetting"] = None def __init__( self, @@ -18683,8 +18937,7 @@ def __init__( delete_project_directory: Optional["WriteMcpToolSetting"] = None, get_lookml_tests: Optional["WriteMcpToolSetting"] = None, run_lookml_tests: Optional["WriteMcpToolSetting"] = None, - create_view_from_table: Optional["WriteMcpToolSetting"] = None, - project_git_branch: Optional["WriteMcpToolSetting"] = None + create_view_from_table: Optional["WriteMcpToolSetting"] = None ): self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element @@ -18727,7 +18980,6 @@ def __init__( self.get_lookml_tests = get_lookml_tests self.run_lookml_tests = run_lookml_tests self.create_view_from_table = create_view_from_table - self.project_git_branch = project_git_branch @attr.s(auto_attribs=True, init=False) @@ -19758,7 +20010,7 @@ class WriteSetting(model.Model): email_domain_allowlist: An array of Email Domain Allowlist of type string for Scheduled Content embed_cookieless_v2: (DEPRECATED) Use embed_config.embed_cookieless_v2 instead. If embed_config.embed_cookieless_v2 is specified, it overrides this value. embed_config: Dynamic writeable type for EmbedConfig removes: - embed_enabled + permissions, embed_enabled dashboard_auto_refresh_restriction: Toggle Dashboard Auto Refresh restriction dashboard_auto_refresh_minimum_interval: Minimum time interval for dashboard element automatic refresh. Examples: (30 seconds, 1 minute) managed_certificate_uri: Array of URIs pointing to the location of a root certificate in Secret Manager @@ -19978,7 +20230,7 @@ def __init__( class WriteUser(model.Model): """ Dynamic writeable type for User removes: - can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url + can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, credentials_workforce, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url Attributes: credentials_email: Dynamic writeable type for CredentialsEmail removes: @@ -20180,9 +20432,9 @@ def __init__( ) sr.converter40.register_structure_hook( LookmlModelExploreJoins, # type: ignore - translate_keys_structure_hook, # type:ignore + translate_keys_structure_hook, # type: ignore ) sr.converter40.register_structure_hook( SmtpSettings, # type: ignore - translate_keys_structure_hook, # type:ignore + translate_keys_structure_hook, # type: ignore ) diff --git a/python/looker_sdk/sdk/constants.py b/python/looker_sdk/sdk/constants.py index 82ab64ffc..07a579458 100644 --- a/python/looker_sdk/sdk/constants.py +++ b/python/looker_sdk/sdk/constants.py @@ -20,5 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -sdk_version = "26.8" +sdk_version = "26.10" environment_prefix = "LOOKERSDK" diff --git a/spec/Looker.4.0.json b/spec/Looker.4.0.json index d9f1feb62..3ff2ccbd6 100644 --- a/spec/Looker.4.0.json +++ b/spec/Looker.4.0.json @@ -1,8 +1,8 @@ { "swagger": "2.0", "info": { - "version": "4.0.26.8", - "x-looker-release-version": "26.8.3", + "version": "4.0.26.10", + "x-looker-release-version": "26.10.4", "title": "Looker API 4.0 Reference", "description": "\nAPI 4.0 is the current release of the Looker API. API 3.x has been removed.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API** credentials for authorization and access control.\nLooker admins can create API credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://docs.cloud.google.com/looker/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\n\nFor details, see the [API Explorer documentation](https://docs.cloud.google.com/looker/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://docs.cloud.google.com/looker/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://docs.cloud.google.com/looker/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 is the only supported API version for Looker starting with release 23.18. API 3.0 and 3.1 have been removed.\n\nAPI 4.0 has better support for strongly typed languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nSee the [API 4.0 GA announcement](https://developers.looker.com/api/advanced-usage/version-4-ga) for more information\nabout API 4.0.\n\nThe API Explorer can be used to [interactively compare](https://docs.cloud.google.com/looker/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://docs.cloud.google.com/looker/docs/r/api/support-policy) for more information.\n\n\n", "contact": { @@ -1297,6 +1297,13 @@ "description": "Filter on soft deleted agents.", "required": false, "type": "boolean" + }, + { + "name": "primary_agent_id", + "in": "query", + "description": "Match workflow agents with a particular primary agent (parent). Pass \"null\" to find agents with no primary agent.", + "required": false, + "type": "string" } ], "responses": { @@ -8259,6 +8266,122 @@ "x-looker-rate-limited": true } }, + "/dashboard_filter_state/{guid}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_filter_state", + "summary": "Get Dashboard Filter State", + "description": "### Get Dashboard Filter State\nReturns the stored filter state for a given GUID.\n", + "parameters": [ + { + "name": "guid", + "in": "path", + "description": "GUID of the filter state", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "JSON string of filter state", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/dashboard_filter_state": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard_filter_state", + "summary": "Create Dashboard Filter State", + "description": "### Create Dashboard Filter State\nSaves the filter state and returns a GUID.\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "JSON string of filter state", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Dashboard Filter State", + "schema": { + "$ref": "#/definitions/Dashboard" + } + }, + "201": { + "description": "JSON with GUID", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, "/data_actions": { "post": { "tags": [ @@ -10817,6 +10940,179 @@ "x-looker-rate-limited": true } }, + "/golden_queries": { + "post": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "create_golden_query", + "summary": "Create Golden Query", + "description": "### Create Golden Query\n\nCreates a golden query.\n", + "parameters": [ + { + "name": "body", + "in": "body", + "description": "Golden Query", + "required": true, + "schema": { + "$ref": "#/definitions/GoldenQuery" + } + } + ], + "responses": { + "200": { + "description": "Golden Query", + "schema": { + "$ref": "#/definitions/GoldenQuery" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "409": { + "description": "Resource Already Exists", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true + } + }, + "/golden_queries/{golden_query_id}": { + "patch": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "update_golden_query", + "summary": "Update Golden Query", + "description": "### Update Golden Query\n\nUpdates a golden query.\n", + "parameters": [ + { + "name": "golden_query_id", + "in": "path", + "description": "Golden Query ID", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "body", + "in": "body", + "description": "Golden Query", + "required": true, + "schema": { + "$ref": "#/definitions/GoldenQuery" + } + } + ], + "responses": { + "200": { + "description": "Golden Query", + "schema": { + "$ref": "#/definitions/GoldenQuery" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true + }, + "delete": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "delete_golden_query", + "summary": "Delete Golden Query", + "description": "### Delete Golden Query\n\nDeletes a golden query by ID.\n", + "parameters": [ + { + "name": "golden_query_id", + "in": "path", + "description": "Golden Query ID", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true + } + }, "/groups": { "get": { "tags": [ @@ -18646,6 +18942,130 @@ "x-looker-rate-limited": true } }, + "/projects/{project_id}/async_deploy_ref_to_production": { + "post": { + "tags": [ + "Project" + ], + "operationId": "async_deploy_ref_to_production", + "summary": "Asynchronously Deploy Remote Branch or Ref to Production", + "description": "### Asynchronously Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\nThis endpoint kicks off the deploy process and returns immediately.\n\nCan only specify either a branch or a ref.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "type": "string" + }, + { + "name": "branch", + "in": "query", + "description": "Branch to deploy to production", + "required": false, + "type": "string" + }, + { + "name": "ref", + "in": "query", + "description": "Ref to deploy to production", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns 200 if project deploy was successfully queued", + "schema": { + "$ref": "#/definitions/AsyncDeployResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/projects/{project_id}/deploy_status/{deployment_id}": { + "get": { + "tags": [ + "Project" + ], + "operationId": "async_deploy_status", + "summary": "Check Async Deploy Status", + "description": "### Check Status of Asynchronous Deploy\nGet the status of an asynchronous deploy operation.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "type": "string" + }, + { + "name": "deployment_id", + "in": "path", + "description": "Id of deployment", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "200": { + "description": "Returns 200 if status was successfully retrieved", + "schema": { + "$ref": "#/definitions/DeployStatusResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, "/projects/{project_id}/deploy_to_production": { "post": { "tags": [ @@ -22721,6 +23141,63 @@ "x-looker-rate-limited": true } }, + "/self_service_models/allowed_connections": { + "get": { + "tags": [ + "SelfService" + ], + "operationId": "get_self_service_model_allowed_connections", + "summary": "Get self service allowed connections", + "description": "### Get Allowed Connections under advanced connection governance\n\nThis endpoint returns the list of allowed connection names for self-service models\nwhen advanced connection governance is enabled.\n", + "parameters": [ + { + "name": "google_sheets", + "in": "query", + "description": "Include connections allowed for Google Sheets.", + "required": false, + "type": "boolean" + } + ], + "responses": { + "200": { + "description": "List of allowed connection names", + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "404": { + "description": "Not Found", + "schema": { + "$ref": "#/definitions/Error" + } + }, + "429": { + "description": "Too Many Requests", + "schema": { + "$ref": "#/definitions/Error" + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, "/self_service_models/{model_name}/certification": { "patch": { "tags": [ @@ -25050,6 +25527,13 @@ "description": "Combine given search criteria in a boolean OR expression", "required": false, "type": "boolean" + }, + { + "name": "theme_type", + "in": "query", + "description": "Match theme type ('internal', 'embed', or 'all').", + "required": false, + "type": "string" } ], "responses": { @@ -25068,12 +25552,24 @@ "$ref": "#/definitions/Error" } }, + "403": { + "description": "Permission Denied", + "schema": { + "$ref": "#/definitions/Error" + } + }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/Error" } }, + "422": { + "description": "Validation Error", + "schema": { + "$ref": "#/definitions/ValidationError" + } + }, "429": { "description": "Too Many Requests", "schema": { @@ -31125,7 +31621,6 @@ }, "created_by_user_id": { "type": "string", - "readOnly": true, "description": "User that created the Agent", "x-looker-nullable": false }, @@ -31183,6 +31678,24 @@ "description": "Has inaccessible source", "x-looker-nullable": false }, + "golden_queries": { + "type": "array", + "items": { + "$ref": "#/definitions/GoldenQuery" + }, + "readOnly": true, + "description": "Agent golden questions", + "x-looker-nullable": true + }, + "golden_query_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "IDs of golden queries linked to the agent", + "x-looker-nullable": true + }, "context": { "$ref": "#/definitions/Context", "description": "Agent context", @@ -31223,6 +31736,11 @@ "readOnly": true, "description": "Studio Agent ID (if this agent was migrated)", "x-looker-nullable": true + }, + "workflow_params": { + "$ref": "#/definitions/WorkflowParams", + "description": "Workflow parameters", + "x-looker-nullable": true } }, "x-looker-status": "beta" @@ -31252,6 +31770,41 @@ }, "x-looker-status": "beta" }, + "WorkflowDestination": { + "properties": { + "type": { + "type": "string", + "description": "Defines the delivery mechanism ('email' or 'action_hub').", + "x-looker-nullable": false + }, + "parameters": { + "type": "string", + "description": "The routing configuration.", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta" + }, + "WorkflowParams": { + "properties": { + "primary_agent": { + "type": "string", + "description": "The ID of the primary parent agent", + "x-looker-nullable": true + }, + "polling_frequency_cron": { + "type": "string", + "description": "Crontab specifying the execution frequency", + "x-looker-nullable": false + }, + "destination": { + "$ref": "#/definitions/WorkflowDestination", + "description": "Workflow delivery destination", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta" + }, "ConversationalAnalyticsChatRequest": { "properties": { "conversation_id": { @@ -32205,7 +32758,6 @@ }, "user_id": { "type": "string", - "readOnly": true, "description": "User id of board creator", "x-looker-nullable": true }, @@ -35324,6 +35876,63 @@ }, "x-looker-status": "stable" }, + "CredentialsWorkforce": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "x-looker-nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "x-looker-nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "Email address", + "x-looker-nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "x-looker-nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "x-looker-nullable": true + }, + "workforce_user_id": { + "type": "string", + "readOnly": true, + "description": "Workforce Unique ID for this user", + "x-looker-nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "x-looker-nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "x-looker-nullable": true + } + }, + "x-looker-status": "stable" + }, "CustomWelcomeEmail": { "properties": { "enabled": { @@ -36165,6 +36774,11 @@ "description": "Enables alerts to keep in sync with dashboard filter changes", "x-looker-nullable": false }, + "chat_enabled": { + "type": "boolean", + "description": "Whether chat is enabled for this dashboard", + "x-looker-nullable": false + }, "background_color": { "type": "string", "description": "Background color", @@ -36371,6 +36985,11 @@ "description": "Relative URL of the dashboard", "x-looker-nullable": true }, + "preserve_desktop_layout": { + "type": "boolean", + "description": "Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile.", + "x-looker-nullable": false + }, "download_settings": { "$ref": "#/definitions/DashboardDownloadSettings", "description": "Default download settings for the tiles on the dashboard.", @@ -37679,6 +38298,16 @@ "description": "When true, removes navigation to Looks from embedded dashboards and explores.", "x-looker-nullable": false }, + "permissions": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Tree of allowed embed permissions", + "x-looker-nullable": true + }, "embed_enabled": { "type": "boolean", "readOnly": true, @@ -39418,6 +40047,80 @@ }, "x-looker-status": "stable" }, + "GoldenQuery": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "x-looker-nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique identifier for the golden question", + "x-looker-nullable": false + }, + "query_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the associated Looker Query resolved from the answer", + "x-looker-nullable": true + }, + "questions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Variations of the golden question text", + "x-looker-nullable": false + }, + "answer": { + "type": "string", + "description": "The Explore URL representing the answer to the question", + "x-looker-nullable": false + }, + "is_active": { + "type": "boolean", + "description": "Whether this golden question should be utilized by the agent", + "x-looker-nullable": false + }, + "created_by_user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the user who created the question", + "x-looker-nullable": true + }, + "last_updated_by_user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the user who last updated the question", + "x-looker-nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time when the question was created", + "x-looker-nullable": false + }, + "last_updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time when the question was last updated", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta" + }, "GroupIdForGroupInclusion": { "properties": { "group_id": { @@ -42103,6 +42806,12 @@ "description": "Connection name", "x-looker-nullable": true }, + "dialect_name": { + "type": "string", + "readOnly": true, + "description": "Dialect name", + "x-looker-nullable": true + }, "null_sort_treatment": { "type": "string", "readOnly": true, @@ -43730,11 +44439,6 @@ "$ref": "#/definitions/McpToolSetting", "description": "Generates boilerplate LookML views directly from the database schema.", "x-looker-nullable": false - }, - "project_git_branch": { - "$ref": "#/definitions/McpToolSetting", - "description": "Retrieve and manipulate the git branch of a LookML project", - "x-looker-nullable": false } }, "x-looker-status": "stable" @@ -44719,6 +45423,40 @@ }, "x-looker-status": "stable" }, + "AsyncDeployResponse": { + "properties": { + "status": { + "type": "string", + "readOnly": true, + "description": "Status of the async deploy request (e.g., 'queued')", + "x-looker-nullable": false + } + }, + "x-looker-status": "beta" + }, + "DeployStatusResponse": { + "properties": { + "status": { + "type": "string", + "readOnly": true, + "description": "Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED')", + "x-looker-nullable": false + }, + "error": { + "type": "string", + "readOnly": true, + "description": "Error message if the deploy failed", + "x-looker-nullable": true + }, + "commit_sha": { + "type": "string", + "readOnly": true, + "description": "Commit SHA of the deployment", + "x-looker-nullable": true + } + }, + "x-looker-status": "beta" + }, "ProjectRun": { "properties": { "run": { @@ -49802,6 +50540,12 @@ "description": "Two-factor credentials", "x-looker-nullable": true }, + "credentials_workforce": { + "$ref": "#/definitions/CredentialsWorkforce", + "readOnly": true, + "description": "Workforce Identity auth credentials", + "x-looker-nullable": true + }, "display_name": { "type": "string", "readOnly": true, diff --git a/spec/Looker.4.0.oas.json b/spec/Looker.4.0.oas.json index 69fd43958..2876affdf 100644 --- a/spec/Looker.4.0.oas.json +++ b/spec/Looker.4.0.oas.json @@ -1,8 +1,8 @@ { "openapi": "3.0.0", "info": { - "version": "4.0.26.8", - "x-looker-release-version": "26.8.3", + "version": "4.0.26.10", + "x-looker-release-version": "26.10.4", "title": "Looker API 4.0 Reference", "description": "\nAPI 4.0 is the current release of the Looker API. API 3.x has been removed.\n\n### Authorization\n\nThe classic method of API authorization uses Looker **API** credentials for authorization and access control.\nLooker admins can create API credentials on Looker's **Admin/Users** page.\n\nAPI 4.0 adds additional ways to authenticate API requests, including OAuth and CORS requests.\n\nFor details, see [Looker API Authorization](https://docs.cloud.google.com/looker/docs/r/api/authorization).\n\n\n### API Explorer\n\nThe API Explorer is a Looker-provided utility with many new and unique features for learning and using the Looker API and SDKs.\n\nFor details, see the [API Explorer documentation](https://docs.cloud.google.com/looker/docs/r/api/explorer).\n\n\n### Looker Language SDKs\n\nThe Looker API is a RESTful system that should be usable by any programming language capable of making\nHTTPS requests. SDKs for a variety of programming languages are also provided to streamline using the API. Looker\nhas an OpenSource [sdk-codegen project](https://github.com/looker-open-source/sdk-codegen) that provides several\nlanguage SDKs. Language SDKs generated by `sdk-codegen` have an Authentication manager that can automatically\nauthenticate API requests when needed.\n\nFor details on available Looker SDKs, see [Looker API Client SDKs](https://docs.cloud.google.com/looker/docs/r/api/client_sdks).\n\n\n### API Versioning\n\nFuture releases of Looker expand the latest API version release-by-release to securely expose more and more of the core\npower of the Looker platform to API client applications. API endpoints marked as \"beta\" may receive breaking changes without\nwarning (but we will try to avoid doing that). Stable (non-beta) API endpoints should not receive breaking\nchanges in future releases.\n\nFor details, see [Looker API Versioning](https://docs.cloud.google.com/looker/docs/r/api/versioning).\n\n\n### In This Release\n\nAPI 4.0 is the only supported API version for Looker starting with release 23.18. API 3.0 and 3.1 have been removed.\n\nAPI 4.0 has better support for strongly typed languages like TypeScript, Kotlin, Swift, Go, C#, and more.\n\nSee the [API 4.0 GA announcement](https://developers.looker.com/api/advanced-usage/version-4-ga) for more information\nabout API 4.0.\n\nThe API Explorer can be used to [interactively compare](https://docs.cloud.google.com/looker/docs/r/api/explorer#comparing_api_versions) the differences between API 3.1 and 4.0.\n\n\n### API and SDK Support Policies\n\nLooker API versions and language SDKs have varying support levels. Please read the API and SDK\n[support policies](https://docs.cloud.google.com/looker/docs/r/api/support-policy) for more information.\n\n\n", "contact": { @@ -1939,6 +1939,15 @@ "schema": { "type": "boolean" } + }, + { + "name": "primary_agent_id", + "in": "query", + "description": "Match workflow agents with a particular primary agent (parent). Pass \"null\" to find agents with no primary agent.", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -11471,6 +11480,168 @@ } } }, + "/dashboard_filter_state/{guid}": { + "get": { + "tags": [ + "Dashboard" + ], + "operationId": "dashboard_filter_state", + "summary": "Get Dashboard Filter State", + "description": "### Get Dashboard Filter State\nReturns the stored filter state for a given GUID.\n", + "parameters": [ + { + "name": "guid", + "in": "path", + "description": "GUID of the filter state", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "JSON string of filter state", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/dashboard_filter_state": { + "post": { + "tags": [ + "Dashboard" + ], + "operationId": "create_dashboard_filter_state", + "summary": "Create Dashboard Filter State", + "description": "### Create Dashboard Filter State\nSaves the filter state and returns a GUID.\n", + "responses": { + "200": { + "description": "Dashboard Filter State", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dashboard" + } + } + } + }, + "201": { + "description": "JSON with GUID", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "stable", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "description": "JSON string of filter state", + "required": true + } + } + }, "/data_actions": { "post": { "tags": [ @@ -15013,118 +15184,357 @@ "x-looker-rate-limited": true } }, - "/groups": { - "get": { + "/golden_queries": { + "post": { "tags": [ - "Group" - ], - "operationId": "all_groups", - "summary": "Get All Groups", - "description": "### Get information about all groups.\n", - "parameters": [ - { - "name": "fields", - "in": "query", - "description": "Requested fields.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", - "required": false, - "deprecated": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "per_page", - "in": "query", - "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", - "required": false, - "deprecated": true, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to return. (used with offset and takes priority over page and per_page)", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "offset", - "in": "query", - "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", - "required": false, - "schema": { - "type": "integer", - "format": "int64" - } - }, - { - "name": "sorts", - "in": "query", - "description": "Fields to sort by.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "ids", - "in": "query", - "description": "Optional of ids to get specific groups.", - "required": false, - "style": "simple", - "explode": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "name": "content_metadata_id", - "in": "query", - "description": "Id of content metadata to which groups must have access.", - "required": false, - "schema": { - "type": "string" - } - }, - { - "name": "can_add_to_content_metadata", - "in": "query", - "description": "Select only groups that either can/cannot be given access to content.", - "required": false, - "schema": { - "type": "boolean" - } - } + "ConversationalAnalytics" ], + "operationId": "create_golden_query", + "summary": "Create Golden Query", + "description": "### Create Golden Query\n\nCreates a golden query.\n", "responses": { "200": { - "description": "Group", + "description": "Golden Query", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } + "$ref": "#/components/schemas/GoldenQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "409": { + "description": "Resource Already Exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GoldenQuery" + } + } + }, + "description": "Golden Query", + "required": true + } + } + }, + "/golden_queries/{golden_query_id}": { + "patch": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "update_golden_query", + "summary": "Update Golden Query", + "description": "### Update Golden Query\n\nUpdates a golden query.\n", + "parameters": [ + { + "name": "golden_query_id", + "in": "path", + "description": "Golden Query ID", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Golden Query", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GoldenQuery" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GoldenQuery" + } + } + }, + "description": "Golden Query", + "required": true + } + }, + "delete": { + "tags": [ + "ConversationalAnalytics" + ], + "operationId": "delete_golden_query", + "summary": "Delete Golden Query", + "description": "### Delete Golden Query\n\nDeletes a golden query by ID.\n", + "parameters": [ + { + "name": "golden_query_id", + "in": "path", + "description": "Golden Query ID", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "204": { + "description": "Successfully deleted.", + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "db_query", + "x-looker-rate-limited": true + } + }, + "/groups": { + "get": { + "tags": [ + "Group" + ], + "operationId": "all_groups", + "summary": "Get All Groups", + "description": "### Get information about all groups.\n", + "parameters": [ + { + "name": "fields", + "in": "query", + "description": "Requested fields.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return only page N of paginated results", + "required": false, + "deprecated": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "per_page", + "in": "query", + "description": "DEPRECATED. Use limit and offset instead. Return N rows of data per page", + "required": false, + "deprecated": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of results to return. (used with offset and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "offset", + "in": "query", + "description": "Number of results to skip before returning any. (used with limit and takes priority over page and per_page)", + "required": false, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "sorts", + "in": "query", + "description": "Fields to sort by.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ids", + "in": "query", + "description": "Optional of ids to get specific groups.", + "required": false, + "style": "simple", + "explode": false, + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + }, + { + "name": "content_metadata_id", + "in": "query", + "description": "Id of content metadata to which groups must have access.", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "can_add_to_content_metadata", + "in": "query", + "description": "Select only groups that either can/cannot be given access to content.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "Group", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } } } } @@ -25810,6 +26220,176 @@ "x-looker-rate-limited": true } }, + "/projects/{project_id}/async_deploy_ref_to_production": { + "post": { + "tags": [ + "Project" + ], + "operationId": "async_deploy_ref_to_production", + "summary": "Asynchronously Deploy Remote Branch or Ref to Production", + "description": "### Asynchronously Deploy a Remote Branch or Ref to Production\n\nGit must have been configured and deploy permission required.\nThis endpoint kicks off the deploy process and returns immediately.\n\nCan only specify either a branch or a ref.\n\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "branch", + "in": "query", + "description": "Branch to deploy to production", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "ref", + "in": "query", + "description": "Ref to deploy to production", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Returns 200 if project deploy was successfully queued", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AsyncDeployResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, + "/projects/{project_id}/deploy_status/{deployment_id}": { + "get": { + "tags": [ + "Project" + ], + "operationId": "async_deploy_status", + "summary": "Check Async Deploy Status", + "description": "### Check Status of Asynchronous Deploy\nGet the status of an asynchronous deploy operation.\n", + "parameters": [ + { + "name": "project_id", + "in": "path", + "description": "Id of project", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "deployment_id", + "in": "path", + "description": "Id of deployment", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + } + ], + "responses": { + "200": { + "description": "Returns 200 if status was successfully retrieved", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeployStatusResponse" + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, "/projects/{project_id}/deploy_to_production": { "post": { "tags": [ @@ -31415,6 +31995,85 @@ } } }, + "/self_service_models/allowed_connections": { + "get": { + "tags": [ + "SelfService" + ], + "operationId": "get_self_service_model_allowed_connections", + "summary": "Get self service allowed connections", + "description": "### Get Allowed Connections under advanced connection governance\n\nThis endpoint returns the list of allowed connection names for self-service models\nwhen advanced connection governance is enabled.\n", + "parameters": [ + { + "name": "google_sheets", + "in": "query", + "description": "Include connections allowed for Google Sheets.", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "List of allowed connection names", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "400": { + "description": "Bad Request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "404": { + "description": "Not Found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, + "429": { + "description": "Too Many Requests", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + } + }, + "x-looker-status": "beta", + "x-looker-activity-type": "non_query", + "x-looker-rate-limited": true + } + }, "/self_service_models/{model_name}/certification": { "patch": { "tags": [ @@ -34655,6 +35314,15 @@ "schema": { "type": "boolean" } + }, + { + "name": "theme_type", + "in": "query", + "description": "Match theme type ('internal', 'embed', or 'all').", + "required": false, + "schema": { + "type": "string" + } } ], "responses": { @@ -34681,6 +35349,16 @@ } } }, + "403": { + "description": "Permission Denied", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Error" + } + } + } + }, "404": { "description": "Not Found", "content": { @@ -34691,6 +35369,16 @@ } } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + }, "429": { "description": "Too Many Requests", "content": { @@ -42833,7 +43521,6 @@ }, "created_by_user_id": { "type": "string", - "readOnly": true, "description": "User that created the Agent", "nullable": false }, @@ -42891,6 +43578,24 @@ "description": "Has inaccessible source", "nullable": false }, + "golden_queries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GoldenQuery" + }, + "readOnly": true, + "description": "Agent golden questions", + "nullable": true + }, + "golden_query_ids": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + }, + "description": "IDs of golden queries linked to the agent", + "nullable": true + }, "context": { "$ref": "#/components/schemas/Context" }, @@ -42929,6 +43634,9 @@ "readOnly": true, "description": "Studio Agent ID (if this agent was migrated)", "nullable": true + }, + "workflow_params": { + "$ref": "#/components/schemas/WorkflowParams" } }, "x-looker-status": "beta" @@ -42958,6 +43666,39 @@ }, "x-looker-status": "beta" }, + "WorkflowDestination": { + "properties": { + "type": { + "type": "string", + "description": "Defines the delivery mechanism ('email' or 'action_hub').", + "nullable": false + }, + "parameters": { + "type": "string", + "description": "The routing configuration.", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "WorkflowParams": { + "properties": { + "primary_agent": { + "type": "string", + "description": "The ID of the primary parent agent", + "nullable": true + }, + "polling_frequency_cron": { + "type": "string", + "description": "Crontab specifying the execution frequency", + "nullable": false + }, + "destination": { + "$ref": "#/components/schemas/WorkflowDestination" + } + }, + "x-looker-status": "beta" + }, "ConversationalAnalyticsChatRequest": { "properties": { "conversation_id": { @@ -43903,7 +44644,6 @@ }, "user_id": { "type": "string", - "readOnly": true, "description": "User id of board creator", "nullable": true }, @@ -46949,6 +47689,63 @@ }, "x-looker-status": "stable" }, + "CredentialsWorkforce": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "created_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for the creation of this credential", + "nullable": true + }, + "email": { + "type": "string", + "readOnly": true, + "description": "Email address", + "nullable": true + }, + "is_disabled": { + "type": "boolean", + "readOnly": true, + "description": "Has this credential been disabled?", + "nullable": false + }, + "logged_in_at": { + "type": "string", + "readOnly": true, + "description": "Timestamp for most recent login using credential", + "nullable": true + }, + "workforce_user_id": { + "type": "string", + "readOnly": true, + "description": "Workforce Unique ID for this user", + "nullable": true + }, + "type": { + "type": "string", + "readOnly": true, + "description": "Short name for the type of this kind of credential", + "nullable": true + }, + "url": { + "type": "string", + "format": "uri-reference", + "readOnly": true, + "description": "Link to get this item", + "nullable": true + } + }, + "x-looker-status": "stable" + }, "CustomWelcomeEmail": { "properties": { "enabled": { @@ -47770,6 +48567,11 @@ "description": "Enables alerts to keep in sync with dashboard filter changes", "nullable": false }, + "chat_enabled": { + "type": "boolean", + "description": "Whether chat is enabled for this dashboard", + "nullable": false + }, "background_color": { "type": "string", "description": "Background color", @@ -47974,6 +48776,11 @@ "description": "Relative URL of the dashboard", "nullable": true }, + "preserve_desktop_layout": { + "type": "boolean", + "description": "Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile.", + "nullable": false + }, "download_settings": { "$ref": "#/components/schemas/DashboardDownloadSettings" } @@ -49263,6 +50070,16 @@ "description": "When true, removes navigation to Looks from embedded dashboards and explores.", "nullable": false }, + "permissions": { + "type": "object", + "additionalProperties": { + "type": "any", + "format": "any" + }, + "readOnly": true, + "description": "Tree of allowed embed permissions", + "nullable": true + }, "embed_enabled": { "type": "boolean", "readOnly": true, @@ -50914,6 +51731,80 @@ }, "x-looker-status": "stable" }, + "GoldenQuery": { + "properties": { + "can": { + "type": "object", + "additionalProperties": { + "type": "boolean" + }, + "readOnly": true, + "description": "Operations the current user is able to perform on this object", + "nullable": false + }, + "id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "Unique identifier for the golden question", + "nullable": false + }, + "query_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the associated Looker Query resolved from the answer", + "nullable": true + }, + "questions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Variations of the golden question text", + "nullable": false + }, + "answer": { + "type": "string", + "description": "The Explore URL representing the answer to the question", + "nullable": false + }, + "is_active": { + "type": "boolean", + "description": "Whether this golden question should be utilized by the agent", + "nullable": false + }, + "created_by_user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the user who created the question", + "nullable": true + }, + "last_updated_by_user_id": { + "type": "integer", + "format": "int64", + "readOnly": true, + "description": "ID of the user who last updated the question", + "nullable": true + }, + "created_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time when the question was created", + "nullable": false + }, + "last_updated_at": { + "type": "string", + "format": "date-time", + "readOnly": true, + "description": "Time when the question was last updated", + "nullable": true + } + }, + "x-looker-status": "beta" + }, "GroupIdForGroupInclusion": { "properties": { "group_id": { @@ -53549,6 +54440,12 @@ "description": "Connection name", "nullable": true }, + "dialect_name": { + "type": "string", + "readOnly": true, + "description": "Dialect name", + "nullable": true + }, "null_sort_treatment": { "type": "string", "readOnly": true, @@ -55081,9 +55978,6 @@ }, "create_view_from_table": { "$ref": "#/components/schemas/McpToolSetting" - }, - "project_git_branch": { - "$ref": "#/components/schemas/McpToolSetting" } }, "x-looker-status": "stable" @@ -56065,6 +56959,40 @@ }, "x-looker-status": "stable" }, + "AsyncDeployResponse": { + "properties": { + "status": { + "type": "string", + "readOnly": true, + "description": "Status of the async deploy request (e.g., 'queued')", + "nullable": false + } + }, + "x-looker-status": "beta" + }, + "DeployStatusResponse": { + "properties": { + "status": { + "type": "string", + "readOnly": true, + "description": "Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED')", + "nullable": false + }, + "error": { + "type": "string", + "readOnly": true, + "description": "Error message if the deploy failed", + "nullable": true + }, + "commit_sha": { + "type": "string", + "readOnly": true, + "description": "Commit SHA of the deployment", + "nullable": true + } + }, + "x-looker-status": "beta" + }, "ProjectRun": { "properties": { "run": { @@ -60992,6 +61920,9 @@ "credentials_totp": { "$ref": "#/components/schemas/CredentialsTotp" }, + "credentials_workforce": { + "$ref": "#/components/schemas/CredentialsWorkforce" + }, "display_name": { "type": "string", "readOnly": true, diff --git a/swift/looker/rtl/constants.swift b/swift/looker/rtl/constants.swift index 8dac23295..e2b5b12dd 100644 --- a/swift/looker/rtl/constants.swift +++ b/swift/looker/rtl/constants.swift @@ -51,7 +51,7 @@ extension String { } public struct Constants { - public static let lookerVersion = "26.8" + public static let lookerVersion = "26.10" public static let apiVersion = "4.0" public static let defaultApiVersion = "4.0" // Swift requires API 4.0 public static let sdkVersion = #"\#(apiVersion).\#(lookerVersion)"# diff --git a/swift/looker/sdk/methods.swift b/swift/looker/sdk/methods.swift index 70120aa6a..bad738093 100644 --- a/swift/looker/sdk/methods.swift +++ b/swift/looker/sdk/methods.swift @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ @@ -4231,10 +4231,14 @@ open class LookerSDK: APIMethods { * @param {Bool} deleted Filter on soft deleted agents. */ deleted: Bool? = nil, + /** + * @param {String} primary_agent_id Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. + */ + primary_agent_id: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse<[Agent], SDKError> { let result: SDKResponse<[Agent], SDKError> = self.get("/agents/search", - ["id": id, "name": name, "description": description, "created_by_user_id": created_by_user_id, "fields": fields, "limit": limit, "category": category, "offset": offset, "sorts": sorts, "filter_or": filter_or as Any?, "not_owned_by": not_owned_by as Any?, "deleted": deleted as Any?], nil, options) + ["id": id, "name": name, "description": description, "created_by_user_id": created_by_user_id, "fields": fields, "limit": limit, "category": category, "offset": offset, "sorts": sorts, "filter_or": filter_or as Any?, "not_owned_by": not_owned_by as Any?, "deleted": deleted as Any?, "primary_agent_id": primary_agent_id], nil, options) return result } @@ -4659,6 +4663,66 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * POST /golden_queries -> GoldenQuery + */ + public func create_golden_query( + /** + * @param {WriteGoldenQuery} body + */ + _ body: WriteGoldenQuery, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.post("/golden_queries", nil, try! self.encode(body), options) + return result + } + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * PATCH /golden_queries/{golden_query_id} -> GoldenQuery + */ + public func update_golden_query( + /** + * @param {Int64} golden_query_id Golden Query ID + */ + _ golden_query_id: Int64, + /** + * @param {WriteGoldenQuery} body + */ + _ body: WriteGoldenQuery, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_golden_query_id = encodeParam(golden_query_id) + let result: SDKResponse = self.patch("/golden_queries/\(path_golden_query_id)", nil, try! self.encode(body), options) + return result + } + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * DELETE /golden_queries/{golden_query_id} -> String + */ + public func delete_golden_query( + /** + * @param {Int64} golden_query_id Golden Query ID + */ + _ golden_query_id: Int64, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_golden_query_id = encodeParam(golden_query_id) + let result: SDKResponse = self.delete("/golden_queries/\(path_golden_query_id)", nil, nil, options) + return result + } + // MARK Dashboard: Manage Dashboards @@ -5711,6 +5775,41 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * GET /dashboard_filter_state/{guid} -> String + */ + public func dashboard_filter_state( + /** + * @param {String} guid GUID of the filter state + */ + _ guid: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_guid = encodeParam(guid) + let result: SDKResponse = self.get("/dashboard_filter_state/\(path_guid)", nil, nil, options) + return result + } + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * POST /dashboard_filter_state -> Dashboard + */ + public func create_dashboard_filter_state( + /** + * @param {String} body + */ + _ body: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.post("/dashboard_filter_state", nil, try! self.encode(body), options) + return result + } + // MARK DataAction: Run Data Actions @@ -8337,6 +8436,60 @@ open class LookerSDK: APIMethods { return result } + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> AsyncDeployResponse + */ + public func async_deploy_ref_to_production( + /** + * @param {String} project_id Id of project + */ + _ project_id: String, + /** + * @param {String} branch Branch to deploy to production + */ + branch: String? = nil, + /** + * @param {String} ref Ref to deploy to production + */ + ref: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/async_deploy_ref_to_production", + ["branch": branch, "ref": ref], nil, options) + return result + } + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> DeployStatusResponse + */ + public func async_deploy_status( + /** + * @param {String} project_id Id of project + */ + _ project_id: String, + /** + * @param {Int64} deployment_id Id of deployment + */ + _ deployment_id: Int64, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_deployment_id = encodeParam(deployment_id) + let result: SDKResponse = self.get("/projects/\(path_project_id)/deploy_status/\(path_deployment_id)", nil, nil, options) + return result + } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -11244,6 +11397,26 @@ open class LookerSDK: APIMethods { // MARK SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * GET /self_service_models/allowed_connections -> [String] + */ + public func get_self_service_model_allowed_connections( + /** + * @param {Bool} google_sheets Include connections allowed for Google Sheets. + */ + google_sheets: Bool? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse<[String], SDKError> { + let result: SDKResponse<[String], SDKError> = self.get("/self_service_models/allowed_connections", + ["google_sheets": google_sheets as Any?], nil, options) + return result + } + /** * ### Update certification for a Self Service Explore * @@ -11530,10 +11703,14 @@ open class LookerSDK: APIMethods { * @param {Bool} filter_or Combine given search criteria in a boolean OR expression */ filter_or: Bool? = nil, + /** + * @param {String} theme_type Match theme type ('internal', 'embed', or 'all'). + */ + theme_type: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse<[Theme], SDKError> { let result: SDKResponse<[Theme], SDKError> = self.get("/themes/search", - ["id": id, "name": name, "begin_at": begin_at as Any?, "end_at": end_at as Any?, "limit": limit, "offset": offset, "sorts": sorts, "fields": fields, "filter_or": filter_or as Any?], nil, options) + ["id": id, "name": name, "begin_at": begin_at as Any?, "end_at": end_at as Any?, "limit": limit, "offset": offset, "sorts": sorts, "fields": fields, "filter_or": filter_or as Any?, "theme_type": theme_type], nil, options) return result } diff --git a/swift/looker/sdk/models.swift b/swift/looker/sdk/models.swift index b0bb5de0c..050d24e73 100644 --- a/swift/looker/sdk/models.swift +++ b/swift/looker/sdk/models.swift @@ -25,7 +25,7 @@ */ /** - * 451 API models: 355 Spec, 0 Request, 70 Write, 26 Enum + * 458 API models: 361 Spec, 0 Request, 71 Write, 26 Enum */ @@ -101,6 +101,8 @@ public struct Agent: SDKModel { case _category = "category" case sources case has_inaccessible_source + case golden_queries + case _golden_query_ids = "golden_query_ids" case context case deleted case created_at @@ -108,6 +110,7 @@ public struct Agent: SDKModel { case _content_metadata_id = "content_metadata_id" case code_interpreter case _studio_agent_id = "studio_agent_id" + case workflow_params } /** * Operations the current user is able to perform on this object (read-only) @@ -125,7 +128,7 @@ public struct Agent: SDKModel { private var _created_by_user_id: AnyString? /** - * User that created the Agent (read-only) + * User that created the Agent */ public var created_by_user_id: String? { get { _created_by_user_id?.value } @@ -205,6 +208,20 @@ public struct Agent: SDKModel { */ public var has_inaccessible_source: Bool? + /** + * Agent golden questions (read-only) + */ + public var golden_queries: [GoldenQuery]? + + private var _golden_query_ids: [AnyInt]? + /** + * IDs of golden queries linked to the agent + */ + public var golden_query_ids: [Int64]? { + get { if let v = _golden_query_ids { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _golden_query_ids = v.map { AnyInt.init($0) } } else { _golden_query_ids = nil } } + } + public var context: Context? /** @@ -245,7 +262,9 @@ public struct Agent: SDKModel { set { _studio_agent_id = newValue.map(AnyString.init) } } - public init(can: StringDictionary? = nil, id: String? = nil, created_by_user_id: String? = nil, created_by_name: String? = nil, created_by_first_name: String? = nil, created_by_last_name: String? = nil, created_by_avatar_url: String? = nil, name: String? = nil, description: String? = nil, category: String? = nil, sources: [Source]? = nil, has_inaccessible_source: Bool? = nil, context: Context? = nil, deleted: Bool? = nil, created_at: Date? = nil, updated_at: Date? = nil, content_metadata_id: String? = nil, code_interpreter: Bool? = nil, studio_agent_id: String? = nil) { + public var workflow_params: WorkflowParams? + + public init(can: StringDictionary? = nil, id: String? = nil, created_by_user_id: String? = nil, created_by_name: String? = nil, created_by_first_name: String? = nil, created_by_last_name: String? = nil, created_by_avatar_url: String? = nil, name: String? = nil, description: String? = nil, category: String? = nil, sources: [Source]? = nil, has_inaccessible_source: Bool? = nil, golden_queries: [GoldenQuery]? = nil, golden_query_ids: [Int64]? = nil, context: Context? = nil, deleted: Bool? = nil, created_at: Date? = nil, updated_at: Date? = nil, content_metadata_id: String? = nil, code_interpreter: Bool? = nil, studio_agent_id: String? = nil, workflow_params: WorkflowParams? = nil) { self.can = can self._id = id.map(AnyString.init) self._created_by_user_id = created_by_user_id.map(AnyString.init) @@ -258,6 +277,8 @@ public struct Agent: SDKModel { self._category = category.map(AnyString.init) self.sources = sources self.has_inaccessible_source = has_inaccessible_source + self.golden_queries = golden_queries + if let v = golden_query_ids { _golden_query_ids = v.map { AnyInt.init($0) } } else { _golden_query_ids = nil } self.context = context self.deleted = deleted self.created_at = created_at @@ -265,6 +286,7 @@ public struct Agent: SDKModel { self._content_metadata_id = content_metadata_id.map(AnyString.init) self.code_interpreter = code_interpreter self._studio_agent_id = studio_agent_id.map(AnyString.init) + self.workflow_params = workflow_params } } @@ -1660,6 +1682,26 @@ public struct AssertValidatorTestSuccess: SDKModel { } +public struct AsyncDeployResponse: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _status = "status" + } + private var _status: AnyString? + /** + * Status of the async deploy request (e.g., 'queued') (read-only) + */ + public var status: String? { + get { _status?.value } + set { _status = newValue.map(AnyString.init) } + } + + public init(status: String? = nil) { + self._status = status.map(AnyString.init) + } + +} + public struct BackupConfiguration: SDKModel { private enum CodingKeys : String, CodingKey { @@ -1957,7 +1999,7 @@ public struct Board: SDKModel { private var _user_id: AnyString? /** - * User id of board creator (read-only) + * User id of board creator */ public var user_id: String? { get { _user_id?.value } @@ -8431,6 +8473,95 @@ public struct CredentialsTotp: SDKModel { } +public struct CredentialsWorkforce: SDKModel { + + private enum CodingKeys : String, CodingKey { + case can + case _created_at = "created_at" + case _email = "email" + case is_disabled + case _logged_in_at = "logged_in_at" + case _workforce_user_id = "workforce_user_id" + case _type = "type" + case _url = "url" + } + /** + * Operations the current user is able to perform on this object (read-only) + */ + public var can: StringDictionary? + + private var _created_at: AnyString? + /** + * Timestamp for the creation of this credential (read-only) + */ + public var created_at: String? { + get { _created_at?.value } + set { _created_at = newValue.map(AnyString.init) } + } + + private var _email: AnyString? + /** + * Email address (read-only) + */ + public var email: String? { + get { _email?.value } + set { _email = newValue.map(AnyString.init) } + } + + /** + * Has this credential been disabled? (read-only) + */ + public var is_disabled: Bool? + + private var _logged_in_at: AnyString? + /** + * Timestamp for most recent login using credential (read-only) + */ + public var logged_in_at: String? { + get { _logged_in_at?.value } + set { _logged_in_at = newValue.map(AnyString.init) } + } + + private var _workforce_user_id: AnyString? + /** + * Workforce Unique ID for this user (read-only) + */ + public var workforce_user_id: String? { + get { _workforce_user_id?.value } + set { _workforce_user_id = newValue.map(AnyString.init) } + } + + private var _type: AnyString? + /** + * Short name for the type of this kind of credential (read-only) + */ + public var type: String? { + get { _type?.value } + set { _type = newValue.map(AnyString.init) } + } + + private var _url: AnyString? + /** + * Link to get this item (read-only) + */ + public var url: String? { + get { _url?.value } + set { _url = newValue.map(AnyString.init) } + } + + public init(can: StringDictionary? = nil, created_at: String? = nil, email: String? = nil, is_disabled: Bool? = nil, logged_in_at: String? = nil, workforce_user_id: String? = nil, type: String? = nil, url: String? = nil) { + self.can = can + self._created_at = created_at.map(AnyString.init) + self._email = email.map(AnyString.init) + self.is_disabled = is_disabled + self._logged_in_at = logged_in_at.map(AnyString.init) + self._workforce_user_id = workforce_user_id.map(AnyString.init) + self._type = type.map(AnyString.init) + self._url = url.map(AnyString.init) + } + +} + public struct CustomWelcomeEmail: SDKModel { private enum CodingKeys : String, CodingKey { @@ -8501,6 +8632,7 @@ public struct Dashboard: SDKModel { case _preferred_viewer = "preferred_viewer" case certification_metadata case alert_sync_with_dashboard_filter_enabled + case chat_enabled case _background_color = "background_color" case created_at case crossfilter_enabled @@ -8535,6 +8667,7 @@ public struct Dashboard: SDKModel { case _usage_count = "usage_count" case is_owner_disabled case _url = "url" + case preserve_desktop_layout case download_settings } /** @@ -8662,6 +8795,11 @@ public struct Dashboard: SDKModel { */ public var alert_sync_with_dashboard_filter_enabled: Bool? + /** + * Whether chat is enabled for this dashboard + */ + public var chat_enabled: Bool? + private var _background_color: AnyString? /** * Background color @@ -8897,9 +9035,14 @@ public struct Dashboard: SDKModel { set { _url = newValue.map(AnyString.init) } } + /** + * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. + */ + public var preserve_desktop_layout: Bool? + public var download_settings: DashboardDownloadSettings? - public init(can: StringDictionary? = nil, content_favorite_id: String? = nil, content_metadata_id: String? = nil, description: String? = nil, hidden: Bool? = nil, id: String? = nil, model: LookModel? = nil, query_timezone: String? = nil, readonly: Bool? = nil, refresh_interval: String? = nil, refresh_interval_to_i: Int64? = nil, folder: FolderBase? = nil, title: String? = nil, user_id: String? = nil, slug: String? = nil, preferred_viewer: String? = nil, certification_metadata: Certification? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, background_color: String? = nil, created_at: Date? = nil, crossfilter_enabled: Bool? = nil, dashboard_elements: [DashboardElement]? = nil, dashboard_filters: [DashboardFilter]? = nil, dashboard_layouts: [DashboardLayout]? = nil, deleted: Bool? = nil, deleted_at: Date? = nil, deleter_id: String? = nil, edit_uri: String? = nil, enable_viz_full_screen: Bool? = nil, favorite_count: Int64? = nil, filters_bar_collapsed: Bool? = nil, filters_location_top: Bool? = nil, last_accessed_at: Date? = nil, last_viewed_at: Date? = nil, updated_at: Date? = nil, last_updater_id: String? = nil, last_updater_name: String? = nil, user_name: String? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, view_count: Int64? = nil, appearance: DashboardAppearance? = nil, usage_count: Int64? = nil, is_owner_disabled: Bool? = nil, url: String? = nil, download_settings: DashboardDownloadSettings? = nil) { + public init(can: StringDictionary? = nil, content_favorite_id: String? = nil, content_metadata_id: String? = nil, description: String? = nil, hidden: Bool? = nil, id: String? = nil, model: LookModel? = nil, query_timezone: String? = nil, readonly: Bool? = nil, refresh_interval: String? = nil, refresh_interval_to_i: Int64? = nil, folder: FolderBase? = nil, title: String? = nil, user_id: String? = nil, slug: String? = nil, preferred_viewer: String? = nil, certification_metadata: Certification? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, chat_enabled: Bool? = nil, background_color: String? = nil, created_at: Date? = nil, crossfilter_enabled: Bool? = nil, dashboard_elements: [DashboardElement]? = nil, dashboard_filters: [DashboardFilter]? = nil, dashboard_layouts: [DashboardLayout]? = nil, deleted: Bool? = nil, deleted_at: Date? = nil, deleter_id: String? = nil, edit_uri: String? = nil, enable_viz_full_screen: Bool? = nil, favorite_count: Int64? = nil, filters_bar_collapsed: Bool? = nil, filters_location_top: Bool? = nil, last_accessed_at: Date? = nil, last_viewed_at: Date? = nil, updated_at: Date? = nil, last_updater_id: String? = nil, last_updater_name: String? = nil, user_name: String? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, view_count: Int64? = nil, appearance: DashboardAppearance? = nil, usage_count: Int64? = nil, is_owner_disabled: Bool? = nil, url: String? = nil, preserve_desktop_layout: Bool? = nil, download_settings: DashboardDownloadSettings? = nil) { self.can = can self._content_favorite_id = content_favorite_id.map(AnyString.init) self._content_metadata_id = content_metadata_id.map(AnyString.init) @@ -8918,6 +9061,7 @@ public struct Dashboard: SDKModel { self._preferred_viewer = preferred_viewer.map(AnyString.init) self.certification_metadata = certification_metadata self.alert_sync_with_dashboard_filter_enabled = alert_sync_with_dashboard_filter_enabled + self.chat_enabled = chat_enabled self._background_color = background_color.map(AnyString.init) self.created_at = created_at self.crossfilter_enabled = crossfilter_enabled @@ -8952,6 +9096,7 @@ public struct Dashboard: SDKModel { self._usage_count = usage_count.map(AnyInt.init) self.is_owner_disabled = is_owner_disabled self._url = url.map(AnyString.init) + self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings } @@ -11828,6 +11973,48 @@ public enum DependencyStatus: String, Codable { case install_none = "install_none" } +public struct DeployStatusResponse: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _status = "status" + case _error = "error" + case _commit_sha = "commit_sha" + } + private var _status: AnyString? + /** + * Status of the deploy (e.g., 'PENDING', 'COMPILING', 'SUCCESS', 'FAILED') (read-only) + */ + public var status: String? { + get { _status?.value } + set { _status = newValue.map(AnyString.init) } + } + + private var _error: AnyString? + /** + * Error message if the deploy failed (read-only) + */ + public var error: String? { + get { _error?.value } + set { _error = newValue.map(AnyString.init) } + } + + private var _commit_sha: AnyString? + /** + * Commit SHA of the deployment (read-only) + */ + public var commit_sha: String? { + get { _commit_sha?.value } + set { _commit_sha = newValue.map(AnyString.init) } + } + + public init(status: String? = nil, error: String? = nil, commit_sha: String? = nil) { + self._status = status.map(AnyString.init) + self._error = error.map(AnyString.init) + self._commit_sha = commit_sha.map(AnyString.init) + } + +} + /** * Type of destination that the alert will be sent to Valid values are: "EMAIL", "ACTION_HUB". (Enum defined in AlertDestination) */ @@ -12404,6 +12591,7 @@ public struct EmbedConfig: SDKModel { case strict_sameorigin_for_login case look_filters case hide_look_navigation + case permissions case embed_enabled } private var _domain_allowlist: [AnyString]? @@ -12477,12 +12665,17 @@ public struct EmbedConfig: SDKModel { */ public var hide_look_navigation: Bool? + /** + * Tree of allowed embed permissions (read-only) + */ + public var permissions: StringDictionary? + /** * True if embedding is licensed for this Looker instance. (read-only) */ public var embed_enabled: Bool? - public init(domain_allowlist: [String]? = nil, alert_url_allowlist: [String]? = nil, alert_url_param_owner: String? = nil, alert_url_label: String? = nil, sso_auth_enabled: Bool? = nil, embed_cookieless_v2: Bool? = nil, embed_content_navigation: Bool? = nil, embed_content_management: Bool? = nil, strict_sameorigin_for_login: Bool? = nil, look_filters: Bool? = nil, hide_look_navigation: Bool? = nil, embed_enabled: Bool? = nil) { + public init(domain_allowlist: [String]? = nil, alert_url_allowlist: [String]? = nil, alert_url_param_owner: String? = nil, alert_url_label: String? = nil, sso_auth_enabled: Bool? = nil, embed_cookieless_v2: Bool? = nil, embed_content_navigation: Bool? = nil, embed_content_management: Bool? = nil, strict_sameorigin_for_login: Bool? = nil, look_filters: Bool? = nil, hide_look_navigation: Bool? = nil, permissions: StringDictionary? = nil, embed_enabled: Bool? = nil) { if let v = domain_allowlist { _domain_allowlist = v.map { AnyString.init($0) } } else { _domain_allowlist = nil } if let v = alert_url_allowlist { _alert_url_allowlist = v.map { AnyString.init($0) } } else { _alert_url_allowlist = nil } self._alert_url_param_owner = alert_url_param_owner.map(AnyString.init) @@ -12494,6 +12687,7 @@ public struct EmbedConfig: SDKModel { self.strict_sameorigin_for_login = strict_sameorigin_for_login self.look_filters = look_filters self.hide_look_navigation = hide_look_navigation + self.permissions = permissions self.embed_enabled = embed_enabled } @@ -14185,6 +14379,109 @@ public struct GitStatus: SDKModel { } +public struct GoldenQuery: SDKModel { + + private enum CodingKeys : String, CodingKey { + case can + case _id = "id" + case _query_id = "query_id" + case _questions = "questions" + case _answer = "answer" + case is_active + case _created_by_user_id = "created_by_user_id" + case _last_updated_by_user_id = "last_updated_by_user_id" + case created_at + case last_updated_at + } + /** + * Operations the current user is able to perform on this object (read-only) + */ + public var can: StringDictionary? + + private var _id: AnyInt? + /** + * Unique identifier for the golden question (read-only) + */ + public var id: Int64? { + get { _id?.value } + set { _id = newValue.map(AnyInt.init) } + } + + private var _query_id: AnyInt? + /** + * ID of the associated Looker Query resolved from the answer (read-only) + */ + public var query_id: Int64? { + get { _query_id?.value } + set { _query_id = newValue.map(AnyInt.init) } + } + + private var _questions: [AnyString]? + /** + * Variations of the golden question text + */ + public var questions: [String]? { + get { if let v = _questions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _questions = v.map { AnyString.init($0) } } else { _questions = nil } } + } + + private var _answer: AnyString? + /** + * The Explore URL representing the answer to the question + */ + public var answer: String? { + get { _answer?.value } + set { _answer = newValue.map(AnyString.init) } + } + + /** + * Whether this golden question should be utilized by the agent + */ + public var is_active: Bool? + + private var _created_by_user_id: AnyInt? + /** + * ID of the user who created the question (read-only) + */ + public var created_by_user_id: Int64? { + get { _created_by_user_id?.value } + set { _created_by_user_id = newValue.map(AnyInt.init) } + } + + private var _last_updated_by_user_id: AnyInt? + /** + * ID of the user who last updated the question (read-only) + */ + public var last_updated_by_user_id: Int64? { + get { _last_updated_by_user_id?.value } + set { _last_updated_by_user_id = newValue.map(AnyInt.init) } + } + + /** + * Time when the question was created (read-only) + */ + public var created_at: Date? + + /** + * Time when the question was last updated (read-only) + */ + public var last_updated_at: Date? + + public init(can: StringDictionary? = nil, id: Int64? = nil, query_id: Int64? = nil, questions: [String]? = nil, answer: String? = nil, is_active: Bool? = nil, created_by_user_id: Int64? = nil, last_updated_by_user_id: Int64? = nil, created_at: Date? = nil, last_updated_at: Date? = nil) { + self.can = can + self._id = id.map(AnyInt.init) + self._query_id = query_id.map(AnyInt.init) + if let v = questions { _questions = v.map { AnyString.init($0) } } else { _questions = nil } + self._answer = answer.map(AnyString.init) + self.is_active = is_active + self._created_by_user_id = created_by_user_id.map(AnyInt.init) + self._last_updated_by_user_id = last_updated_by_user_id.map(AnyInt.init) + self.created_at = created_at + self.last_updated_at = last_updated_at + } + +} + public struct LkGroup: SDKModel { private enum CodingKeys : String, CodingKey { @@ -17782,6 +18079,7 @@ public struct LookmlModelExplore: SDKModel { case self_service_explore_data case supports_cost_estimate case _connection_name = "connection_name" + case _dialect_name = "dialect_name" case _null_sort_treatment = "null_sort_treatment" case _files = "files" case _source_file = "source_file" @@ -17924,6 +18222,15 @@ public struct LookmlModelExplore: SDKModel { set { _connection_name = newValue.map(AnyString.init) } } + private var _dialect_name: AnyString? + /** + * Dialect name (read-only) + */ + public var dialect_name: String? { + get { _dialect_name?.value } + set { _dialect_name = newValue.map(AnyString.init) } + } + private var _null_sort_treatment: AnyString? /** * How nulls are sorted, possible values are "low", "high", "first" and "last" (read-only) @@ -18079,7 +18386,7 @@ public struct LookmlModelExplore: SDKModel { set { if let v = newValue { _always_join = v.map { AnyString.init($0) } } else { _always_join = nil } } } - public init(id: String? = nil, name: String? = nil, description: String? = nil, label: String? = nil, title: String? = nil, scopes: [String]? = nil, can_total: Bool? = nil, can_develop: Bool? = nil, can_see_lookml: Bool? = nil, lookml_link: String? = nil, can_save: Bool? = nil, can_explain: Bool? = nil, can_pivot_in_db: Bool? = nil, can_subtotal: Bool? = nil, has_timezone_support: Bool? = nil, self_service_explore_data: SelfServiceModelUploadData? = nil, supports_cost_estimate: Bool? = nil, connection_name: String? = nil, null_sort_treatment: String? = nil, files: [String]? = nil, source_file: String? = nil, project_name: String? = nil, model_name: String? = nil, view_name: String? = nil, hidden: Bool? = nil, sql_table_name: String? = nil, access_filter_fields: [String]? = nil, access_filters: [LookmlModelExploreAccessFilter]? = nil, aliases: [LookmlModelExploreAlias]? = nil, always_filter: [LookmlModelExploreAlwaysFilter]? = nil, conditionally_filter: [LookmlModelExploreConditionallyFilter]? = nil, index_fields: [String]? = nil, sets: [LookmlModelExploreSet]? = nil, tags: [String]? = nil, errors: [LookmlModelExploreError]? = nil, fields: LookmlModelExploreFieldset? = nil, joins: [LookmlModelExploreJoins]? = nil, group_label: String? = nil, supported_measure_types: [LookmlModelExploreSupportedMeasureType]? = nil, always_join: [String]? = nil) { + public init(id: String? = nil, name: String? = nil, description: String? = nil, label: String? = nil, title: String? = nil, scopes: [String]? = nil, can_total: Bool? = nil, can_develop: Bool? = nil, can_see_lookml: Bool? = nil, lookml_link: String? = nil, can_save: Bool? = nil, can_explain: Bool? = nil, can_pivot_in_db: Bool? = nil, can_subtotal: Bool? = nil, has_timezone_support: Bool? = nil, self_service_explore_data: SelfServiceModelUploadData? = nil, supports_cost_estimate: Bool? = nil, connection_name: String? = nil, dialect_name: String? = nil, null_sort_treatment: String? = nil, files: [String]? = nil, source_file: String? = nil, project_name: String? = nil, model_name: String? = nil, view_name: String? = nil, hidden: Bool? = nil, sql_table_name: String? = nil, access_filter_fields: [String]? = nil, access_filters: [LookmlModelExploreAccessFilter]? = nil, aliases: [LookmlModelExploreAlias]? = nil, always_filter: [LookmlModelExploreAlwaysFilter]? = nil, conditionally_filter: [LookmlModelExploreConditionallyFilter]? = nil, index_fields: [String]? = nil, sets: [LookmlModelExploreSet]? = nil, tags: [String]? = nil, errors: [LookmlModelExploreError]? = nil, fields: LookmlModelExploreFieldset? = nil, joins: [LookmlModelExploreJoins]? = nil, group_label: String? = nil, supported_measure_types: [LookmlModelExploreSupportedMeasureType]? = nil, always_join: [String]? = nil) { self._id = id.map(AnyString.init) self._name = name.map(AnyString.init) self._description = description.map(AnyString.init) @@ -18098,6 +18405,7 @@ public struct LookmlModelExplore: SDKModel { self.self_service_explore_data = self_service_explore_data self.supports_cost_estimate = supports_cost_estimate self._connection_name = connection_name.map(AnyString.init) + self._dialect_name = dialect_name.map(AnyString.init) self._null_sort_treatment = null_sort_treatment.map(AnyString.init) if let v = files { _files = v.map { AnyString.init($0) } } else { _files = nil } self._source_file = source_file.map(AnyString.init) @@ -20697,9 +21005,7 @@ public struct McpTools: SDKModel { public var create_view_from_table: McpToolSetting? - public var project_git_branch: McpToolSetting? - - public init(enable_all: Bool? = nil, add_dashboard_element: McpToolSetting? = nil, add_dashboard_filter: McpToolSetting? = nil, create_project_file: McpToolSetting? = nil, delete_project_file: McpToolSetting? = nil, dev_mode: McpToolSetting? = nil, generate_embed_url: McpToolSetting? = nil, get_connection_databases: McpToolSetting? = nil, get_connection_schemas: McpToolSetting? = nil, get_connection_table_columns: McpToolSetting? = nil, get_connection_tables: McpToolSetting? = nil, get_connections: McpToolSetting? = nil, get_dashboards: McpToolSetting? = nil, get_dimensions: McpToolSetting? = nil, get_explores: McpToolSetting? = nil, get_filters: McpToolSetting? = nil, get_looks: McpToolSetting? = nil, get_measures: McpToolSetting? = nil, get_models: McpToolSetting? = nil, get_parameters: McpToolSetting? = nil, get_project_file: McpToolSetting? = nil, get_project_files: McpToolSetting? = nil, get_projects: McpToolSetting? = nil, health_analyze: McpToolSetting? = nil, health_pulse: McpToolSetting? = nil, health_vacuum: McpToolSetting? = nil, make_dashboard: McpToolSetting? = nil, make_look: McpToolSetting? = nil, query: McpToolSetting? = nil, query_sql: McpToolSetting? = nil, query_url: McpToolSetting? = nil, run_dashboard: McpToolSetting? = nil, run_look: McpToolSetting? = nil, update_project_file: McpToolSetting? = nil, validate_project: McpToolSetting? = nil, get_project_directories: McpToolSetting? = nil, create_project_directory: McpToolSetting? = nil, delete_project_directory: McpToolSetting? = nil, get_lookml_tests: McpToolSetting? = nil, run_lookml_tests: McpToolSetting? = nil, create_view_from_table: McpToolSetting? = nil, project_git_branch: McpToolSetting? = nil) { + public init(enable_all: Bool? = nil, add_dashboard_element: McpToolSetting? = nil, add_dashboard_filter: McpToolSetting? = nil, create_project_file: McpToolSetting? = nil, delete_project_file: McpToolSetting? = nil, dev_mode: McpToolSetting? = nil, generate_embed_url: McpToolSetting? = nil, get_connection_databases: McpToolSetting? = nil, get_connection_schemas: McpToolSetting? = nil, get_connection_table_columns: McpToolSetting? = nil, get_connection_tables: McpToolSetting? = nil, get_connections: McpToolSetting? = nil, get_dashboards: McpToolSetting? = nil, get_dimensions: McpToolSetting? = nil, get_explores: McpToolSetting? = nil, get_filters: McpToolSetting? = nil, get_looks: McpToolSetting? = nil, get_measures: McpToolSetting? = nil, get_models: McpToolSetting? = nil, get_parameters: McpToolSetting? = nil, get_project_file: McpToolSetting? = nil, get_project_files: McpToolSetting? = nil, get_projects: McpToolSetting? = nil, health_analyze: McpToolSetting? = nil, health_pulse: McpToolSetting? = nil, health_vacuum: McpToolSetting? = nil, make_dashboard: McpToolSetting? = nil, make_look: McpToolSetting? = nil, query: McpToolSetting? = nil, query_sql: McpToolSetting? = nil, query_url: McpToolSetting? = nil, run_dashboard: McpToolSetting? = nil, run_look: McpToolSetting? = nil, update_project_file: McpToolSetting? = nil, validate_project: McpToolSetting? = nil, get_project_directories: McpToolSetting? = nil, create_project_directory: McpToolSetting? = nil, delete_project_directory: McpToolSetting? = nil, get_lookml_tests: McpToolSetting? = nil, run_lookml_tests: McpToolSetting? = nil, create_view_from_table: McpToolSetting? = nil) { self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element self.add_dashboard_filter = add_dashboard_filter @@ -20741,7 +21047,6 @@ public struct McpTools: SDKModel { self.get_lookml_tests = get_lookml_tests self.run_lookml_tests = run_lookml_tests self.create_view_from_table = create_view_from_table - self.project_git_branch = project_git_branch } } @@ -28864,6 +29169,7 @@ public struct User: SDKModel { case credentials_oidc case credentials_saml case credentials_totp + case credentials_workforce case _display_name = "display_name" case _email = "email" case _embed_group_space_id = "embed_group_space_id" @@ -28940,6 +29246,8 @@ public struct User: SDKModel { public var credentials_totp: CredentialsTotp? + public var credentials_workforce: CredentialsWorkforce? + private var _display_name: AnyString? /** * Full name for display (available only if both first_name and last_name are set) (read-only) @@ -29140,7 +29448,7 @@ public struct User: SDKModel { set { _url = newValue.map(AnyString.init) } } - public init(can: StringDictionary? = nil, avatar_url: String? = nil, avatar_url_without_sizing: String? = nil, credentials_api3: [CredentialsApi3]? = nil, credentials_email: CredentialsEmail? = nil, credentials_embed: [CredentialsEmbed]? = nil, credentials_google: CredentialsGoogle? = nil, credentials_ldap: CredentialsLDAP? = nil, credentials_looker_openid: CredentialsLookerOpenid? = nil, credentials_oidc: CredentialsOIDC? = nil, credentials_saml: CredentialsSaml? = nil, credentials_totp: CredentialsTotp? = nil, display_name: String? = nil, email: String? = nil, embed_group_space_id: String? = nil, first_name: String? = nil, group_ids: [String]? = nil, home_folder_id: String? = nil, id: String? = nil, is_disabled: Bool? = nil, last_name: String? = nil, locale: String? = nil, looker_versions: [String]? = nil, models_dir_validated: Bool? = nil, personal_folder_id: String? = nil, presumed_looker_employee: Bool? = nil, role_ids: [String]? = nil, sessions: [Session]? = nil, ui_state: StringDictionary? = nil, verified_looker_employee: Bool? = nil, roles_externally_managed: Bool? = nil, allow_direct_roles: Bool? = nil, allow_normal_group_membership: Bool? = nil, allow_roles_from_normal_groups: Bool? = nil, embed_group_folder_id: String? = nil, is_iam_admin: Bool? = nil, can_manage_api3_creds: Bool? = nil, is_service_account: Bool? = nil, service_account_name: String? = nil, url: String? = nil) { + public init(can: StringDictionary? = nil, avatar_url: String? = nil, avatar_url_without_sizing: String? = nil, credentials_api3: [CredentialsApi3]? = nil, credentials_email: CredentialsEmail? = nil, credentials_embed: [CredentialsEmbed]? = nil, credentials_google: CredentialsGoogle? = nil, credentials_ldap: CredentialsLDAP? = nil, credentials_looker_openid: CredentialsLookerOpenid? = nil, credentials_oidc: CredentialsOIDC? = nil, credentials_saml: CredentialsSaml? = nil, credentials_totp: CredentialsTotp? = nil, credentials_workforce: CredentialsWorkforce? = nil, display_name: String? = nil, email: String? = nil, embed_group_space_id: String? = nil, first_name: String? = nil, group_ids: [String]? = nil, home_folder_id: String? = nil, id: String? = nil, is_disabled: Bool? = nil, last_name: String? = nil, locale: String? = nil, looker_versions: [String]? = nil, models_dir_validated: Bool? = nil, personal_folder_id: String? = nil, presumed_looker_employee: Bool? = nil, role_ids: [String]? = nil, sessions: [Session]? = nil, ui_state: StringDictionary? = nil, verified_looker_employee: Bool? = nil, roles_externally_managed: Bool? = nil, allow_direct_roles: Bool? = nil, allow_normal_group_membership: Bool? = nil, allow_roles_from_normal_groups: Bool? = nil, embed_group_folder_id: String? = nil, is_iam_admin: Bool? = nil, can_manage_api3_creds: Bool? = nil, is_service_account: Bool? = nil, service_account_name: String? = nil, url: String? = nil) { self.can = can self._avatar_url = avatar_url.map(AnyString.init) self._avatar_url_without_sizing = avatar_url_without_sizing.map(AnyString.init) @@ -29153,6 +29461,7 @@ public struct User: SDKModel { self.credentials_oidc = credentials_oidc self.credentials_saml = credentials_saml self.credentials_totp = credentials_totp + self.credentials_workforce = credentials_workforce self._display_name = display_name.map(AnyString.init) self._email = email.map(AnyString.init) self._embed_group_space_id = embed_group_space_id.map(AnyString.init) @@ -30105,6 +30414,72 @@ public struct WhitelabelConfiguration: SDKModel { } +public struct WorkflowDestination: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _type = "type" + case _parameters = "parameters" + } + private var _type: AnyString? + /** + * Defines the delivery mechanism ('email' or 'action_hub'). + */ + public var type: String? { + get { _type?.value } + set { _type = newValue.map(AnyString.init) } + } + + private var _parameters: AnyString? + /** + * The routing configuration. + */ + public var parameters: String? { + get { _parameters?.value } + set { _parameters = newValue.map(AnyString.init) } + } + + public init(type: String? = nil, parameters: String? = nil) { + self._type = type.map(AnyString.init) + self._parameters = parameters.map(AnyString.init) + } + +} + +public struct WorkflowParams: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _primary_agent = "primary_agent" + case _polling_frequency_cron = "polling_frequency_cron" + case destination + } + private var _primary_agent: AnyString? + /** + * The ID of the primary parent agent + */ + public var primary_agent: String? { + get { _primary_agent?.value } + set { _primary_agent = newValue.map(AnyString.init) } + } + + private var _polling_frequency_cron: AnyString? + /** + * Crontab specifying the execution frequency + */ + public var polling_frequency_cron: String? { + get { _polling_frequency_cron?.value } + set { _polling_frequency_cron = newValue.map(AnyString.init) } + } + + public var destination: WorkflowDestination? + + public init(primary_agent: String? = nil, polling_frequency_cron: String? = nil, destination: WorkflowDestination? = nil) { + self._primary_agent = primary_agent.map(AnyString.init) + self._polling_frequency_cron = polling_frequency_cron.map(AnyString.init) + self.destination = destination + } + +} + public struct Workspace: SDKModel { private enum CodingKeys : String, CodingKey { @@ -30141,19 +30516,31 @@ public struct Workspace: SDKModel { /** * Dynamic writeable type for Agent removes: - * can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + * can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id */ public struct WriteAgent: SDKModel { private enum CodingKeys : String, CodingKey { + case _created_by_user_id = "created_by_user_id" case _name = "name" case _description = "description" case _category = "category" case sources + case _golden_query_ids = "golden_query_ids" case context case deleted case code_interpreter + case workflow_params + } + private var _created_by_user_id: AnyString? + /** + * User that created the Agent + */ + public var created_by_user_id: String? { + get { _created_by_user_id?.value } + set { _created_by_user_id = newValue.map(AnyString.init) } } + private var _name: AnyString? /** * Agent name @@ -30186,6 +30573,15 @@ public struct WriteAgent: SDKModel { */ public var sources: [Source]? + private var _golden_query_ids: [AnyInt]? + /** + * IDs of golden queries linked to the agent + */ + public var golden_query_ids: [Int64]? { + get { if let v = _golden_query_ids { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _golden_query_ids = v.map { AnyInt.init($0) } } else { _golden_query_ids = nil } } + } + public var context: Context? /** @@ -30198,14 +30594,19 @@ public struct WriteAgent: SDKModel { */ public var code_interpreter: Bool? - public init(name: String? = nil, description: String? = nil, category: String? = nil, sources: [Source]? = nil, context: Context? = nil, deleted: Bool? = nil, code_interpreter: Bool? = nil) { + public var workflow_params: WorkflowParams? + + public init(created_by_user_id: String? = nil, name: String? = nil, description: String? = nil, category: String? = nil, sources: [Source]? = nil, golden_query_ids: [Int64]? = nil, context: Context? = nil, deleted: Bool? = nil, code_interpreter: Bool? = nil, workflow_params: WorkflowParams? = nil) { + self._created_by_user_id = created_by_user_id.map(AnyString.init) self._name = name.map(AnyString.init) self._description = description.map(AnyString.init) self._category = category.map(AnyString.init) self.sources = sources + if let v = golden_query_ids { _golden_query_ids = v.map { AnyInt.init($0) } } else { _golden_query_ids = nil } self.context = context self.deleted = deleted self.code_interpreter = code_interpreter + self.workflow_params = workflow_params } } @@ -30535,7 +30936,7 @@ public struct WriteBackupConfiguration: SDKModel { /** * Dynamic writeable type for Board removes: - * can, content_metadata_id, created_at, board_sections, id, updated_at, user_id, primary_homepage + * can, content_metadata_id, created_at, board_sections, id, updated_at, primary_homepage */ public struct WriteBoard: SDKModel { @@ -30544,6 +30945,7 @@ public struct WriteBoard: SDKModel { case _description = "description" case _section_order = "section_order" case _title = "title" + case _user_id = "user_id" } /** * Date of board deletion @@ -30577,11 +30979,21 @@ public struct WriteBoard: SDKModel { set { _title = newValue.map(AnyString.init) } } - public init(deleted_at: Date? = nil, description: String? = nil, section_order: [String]? = nil, title: String? = nil) { + private var _user_id: AnyString? + /** + * User id of board creator + */ + public var user_id: String? { + get { _user_id?.value } + set { _user_id = newValue.map(AnyString.init) } + } + + public init(deleted_at: Date? = nil, description: String? = nil, section_order: [String]? = nil, title: String? = nil, user_id: String? = nil) { self.deleted_at = deleted_at self._description = description.map(AnyString.init) if let v = section_order { _section_order = v.map { AnyString.init($0) } } else { _section_order = nil } self._title = title.map(AnyString.init) + self._user_id = user_id.map(AnyString.init) } } @@ -30994,7 +31406,7 @@ public struct WriteConversation: SDKModel { /** * Dynamic writeable type for Agent removes: - * can, id, created_by_user_id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, created_at, updated_at, content_metadata_id, studio_agent_id + * can, id, created_by_name, created_by_first_name, created_by_last_name, created_by_avatar_url, has_inaccessible_source, golden_queries, created_at, updated_at, content_metadata_id, studio_agent_id */ public var conversation_agent: WriteAgent? @@ -31348,6 +31760,7 @@ public struct WriteDashboard: SDKModel { case _preferred_viewer = "preferred_viewer" case certification_metadata case alert_sync_with_dashboard_filter_enabled + case chat_enabled case _background_color = "background_color" case crossfilter_enabled case deleted @@ -31364,6 +31777,7 @@ public struct WriteDashboard: SDKModel { case _tile_text_color = "tile_text_color" case _title_color = "title_color" case appearance + case preserve_desktop_layout case download_settings } private var _description: AnyString? @@ -31451,6 +31865,11 @@ public struct WriteDashboard: SDKModel { */ public var alert_sync_with_dashboard_filter_enabled: Bool? + /** + * Whether chat is enabled for this dashboard + */ + public var chat_enabled: Bool? + private var _background_color: AnyString? /** * Background color @@ -31560,9 +31979,14 @@ public struct WriteDashboard: SDKModel { public var appearance: DashboardAppearance? + /** + * Whether to preserve the desktop layout on mobile viewports. i.e. don't force a single column layout on mobile. + */ + public var preserve_desktop_layout: Bool? + public var download_settings: DashboardDownloadSettings? - public init(description: String? = nil, hidden: Bool? = nil, query_timezone: String? = nil, refresh_interval: String? = nil, folder: WriteFolderBase? = nil, title: String? = nil, user_id: String? = nil, slug: String? = nil, preferred_viewer: String? = nil, certification_metadata: WriteCertification? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, background_color: String? = nil, crossfilter_enabled: Bool? = nil, deleted: Bool? = nil, enable_viz_full_screen: Bool? = nil, filters_bar_collapsed: Bool? = nil, filters_location_top: Bool? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, appearance: DashboardAppearance? = nil, download_settings: DashboardDownloadSettings? = nil) { + public init(description: String? = nil, hidden: Bool? = nil, query_timezone: String? = nil, refresh_interval: String? = nil, folder: WriteFolderBase? = nil, title: String? = nil, user_id: String? = nil, slug: String? = nil, preferred_viewer: String? = nil, certification_metadata: WriteCertification? = nil, alert_sync_with_dashboard_filter_enabled: Bool? = nil, chat_enabled: Bool? = nil, background_color: String? = nil, crossfilter_enabled: Bool? = nil, deleted: Bool? = nil, enable_viz_full_screen: Bool? = nil, filters_bar_collapsed: Bool? = nil, filters_location_top: Bool? = nil, load_configuration: String? = nil, lookml_link_id: String? = nil, show_filters_bar: Bool? = nil, show_title: Bool? = nil, folder_id: String? = nil, text_tile_text_color: String? = nil, tile_background_color: String? = nil, tile_text_color: String? = nil, title_color: String? = nil, appearance: DashboardAppearance? = nil, preserve_desktop_layout: Bool? = nil, download_settings: DashboardDownloadSettings? = nil) { self._description = description.map(AnyString.init) self.hidden = hidden self._query_timezone = query_timezone.map(AnyString.init) @@ -31574,6 +31998,7 @@ public struct WriteDashboard: SDKModel { self._preferred_viewer = preferred_viewer.map(AnyString.init) self.certification_metadata = certification_metadata self.alert_sync_with_dashboard_filter_enabled = alert_sync_with_dashboard_filter_enabled + self.chat_enabled = chat_enabled self._background_color = background_color.map(AnyString.init) self.crossfilter_enabled = crossfilter_enabled self.deleted = deleted @@ -31590,6 +32015,7 @@ public struct WriteDashboard: SDKModel { self._tile_text_color = tile_text_color.map(AnyString.init) self._title_color = title_color.map(AnyString.init) self.appearance = appearance + self.preserve_desktop_layout = preserve_desktop_layout self.download_settings = download_settings } @@ -33045,7 +33471,7 @@ public struct WriteDBConnectionOverride: SDKModel { /** * Dynamic writeable type for EmbedConfig removes: - * embed_enabled + * permissions, embed_enabled */ public struct WriteEmbedConfig: SDKModel { @@ -33336,6 +33762,48 @@ public struct WriteGitBranch: SDKModel { } +/** + * Dynamic writeable type for GoldenQuery removes: + * can, id, query_id, created_by_user_id, last_updated_by_user_id, created_at, last_updated_at + */ +public struct WriteGoldenQuery: SDKModel { + + private enum CodingKeys : String, CodingKey { + case _questions = "questions" + case _answer = "answer" + case is_active + } + private var _questions: [AnyString]? + /** + * Variations of the golden question text + */ + public var questions: [String]? { + get { if let v = _questions { return v.map { $0.value } } else { return nil } } + set { if let v = newValue { _questions = v.map { AnyString.init($0) } } else { _questions = nil } } + } + + private var _answer: AnyString? + /** + * The Explore URL representing the answer to the question + */ + public var answer: String? { + get { _answer?.value } + set { _answer = newValue.map(AnyString.init) } + } + + /** + * Whether this golden question should be utilized by the agent + */ + public var is_active: Bool? + + public init(questions: [String]? = nil, answer: String? = nil, is_active: Bool? = nil) { + if let v = questions { _questions = v.map { AnyString.init($0) } } else { _questions = nil } + self._answer = answer.map(AnyString.init) + self.is_active = is_active + } + +} + /** * Dynamic writeable type for Group removes: * can, contains_current_user, external_group_id, externally_managed, id, include_by_default, user_count @@ -34289,13 +34757,7 @@ public struct WriteMcpTools: SDKModel { */ public var create_view_from_table: WriteMcpToolSetting? - /** - * Dynamic writeable type for McpToolSetting removes: - * description, category, access_level - */ - public var project_git_branch: WriteMcpToolSetting? - - public init(enable_all: Bool? = nil, add_dashboard_element: WriteMcpToolSetting? = nil, add_dashboard_filter: WriteMcpToolSetting? = nil, create_project_file: WriteMcpToolSetting? = nil, delete_project_file: WriteMcpToolSetting? = nil, dev_mode: WriteMcpToolSetting? = nil, generate_embed_url: WriteMcpToolSetting? = nil, get_connection_databases: WriteMcpToolSetting? = nil, get_connection_schemas: WriteMcpToolSetting? = nil, get_connection_table_columns: WriteMcpToolSetting? = nil, get_connection_tables: WriteMcpToolSetting? = nil, get_connections: WriteMcpToolSetting? = nil, get_dashboards: WriteMcpToolSetting? = nil, get_dimensions: WriteMcpToolSetting? = nil, get_explores: WriteMcpToolSetting? = nil, get_filters: WriteMcpToolSetting? = nil, get_looks: WriteMcpToolSetting? = nil, get_measures: WriteMcpToolSetting? = nil, get_models: WriteMcpToolSetting? = nil, get_parameters: WriteMcpToolSetting? = nil, get_project_file: WriteMcpToolSetting? = nil, get_project_files: WriteMcpToolSetting? = nil, get_projects: WriteMcpToolSetting? = nil, health_analyze: WriteMcpToolSetting? = nil, health_pulse: WriteMcpToolSetting? = nil, health_vacuum: WriteMcpToolSetting? = nil, make_dashboard: WriteMcpToolSetting? = nil, make_look: WriteMcpToolSetting? = nil, query: WriteMcpToolSetting? = nil, query_sql: WriteMcpToolSetting? = nil, query_url: WriteMcpToolSetting? = nil, run_dashboard: WriteMcpToolSetting? = nil, run_look: WriteMcpToolSetting? = nil, update_project_file: WriteMcpToolSetting? = nil, validate_project: WriteMcpToolSetting? = nil, get_project_directories: WriteMcpToolSetting? = nil, create_project_directory: WriteMcpToolSetting? = nil, delete_project_directory: WriteMcpToolSetting? = nil, get_lookml_tests: WriteMcpToolSetting? = nil, run_lookml_tests: WriteMcpToolSetting? = nil, create_view_from_table: WriteMcpToolSetting? = nil, project_git_branch: WriteMcpToolSetting? = nil) { + public init(enable_all: Bool? = nil, add_dashboard_element: WriteMcpToolSetting? = nil, add_dashboard_filter: WriteMcpToolSetting? = nil, create_project_file: WriteMcpToolSetting? = nil, delete_project_file: WriteMcpToolSetting? = nil, dev_mode: WriteMcpToolSetting? = nil, generate_embed_url: WriteMcpToolSetting? = nil, get_connection_databases: WriteMcpToolSetting? = nil, get_connection_schemas: WriteMcpToolSetting? = nil, get_connection_table_columns: WriteMcpToolSetting? = nil, get_connection_tables: WriteMcpToolSetting? = nil, get_connections: WriteMcpToolSetting? = nil, get_dashboards: WriteMcpToolSetting? = nil, get_dimensions: WriteMcpToolSetting? = nil, get_explores: WriteMcpToolSetting? = nil, get_filters: WriteMcpToolSetting? = nil, get_looks: WriteMcpToolSetting? = nil, get_measures: WriteMcpToolSetting? = nil, get_models: WriteMcpToolSetting? = nil, get_parameters: WriteMcpToolSetting? = nil, get_project_file: WriteMcpToolSetting? = nil, get_project_files: WriteMcpToolSetting? = nil, get_projects: WriteMcpToolSetting? = nil, health_analyze: WriteMcpToolSetting? = nil, health_pulse: WriteMcpToolSetting? = nil, health_vacuum: WriteMcpToolSetting? = nil, make_dashboard: WriteMcpToolSetting? = nil, make_look: WriteMcpToolSetting? = nil, query: WriteMcpToolSetting? = nil, query_sql: WriteMcpToolSetting? = nil, query_url: WriteMcpToolSetting? = nil, run_dashboard: WriteMcpToolSetting? = nil, run_look: WriteMcpToolSetting? = nil, update_project_file: WriteMcpToolSetting? = nil, validate_project: WriteMcpToolSetting? = nil, get_project_directories: WriteMcpToolSetting? = nil, create_project_directory: WriteMcpToolSetting? = nil, delete_project_directory: WriteMcpToolSetting? = nil, get_lookml_tests: WriteMcpToolSetting? = nil, run_lookml_tests: WriteMcpToolSetting? = nil, create_view_from_table: WriteMcpToolSetting? = nil) { self.enable_all = enable_all self.add_dashboard_element = add_dashboard_element self.add_dashboard_filter = add_dashboard_filter @@ -34337,7 +34799,6 @@ public struct WriteMcpTools: SDKModel { self.get_lookml_tests = get_lookml_tests self.run_lookml_tests = run_lookml_tests self.create_view_from_table = create_view_from_table - self.project_git_branch = project_git_branch } } @@ -36384,7 +36845,7 @@ public struct WriteSetting: SDKModel { /** * Dynamic writeable type for EmbedConfig removes: - * embed_enabled + * permissions, embed_enabled */ public var embed_config: WriteEmbedConfig? @@ -36669,7 +37130,7 @@ public struct WriteTheme: SDKModel { /** * Dynamic writeable type for User removes: - * can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url + * can, avatar_url, avatar_url_without_sizing, credentials_api3, credentials_embed, credentials_google, credentials_ldap, credentials_looker_openid, credentials_oidc, credentials_saml, credentials_totp, credentials_workforce, display_name, email, embed_group_space_id, group_ids, id, looker_versions, personal_folder_id, presumed_looker_employee, role_ids, sessions, verified_looker_employee, roles_externally_managed, allow_direct_roles, allow_normal_group_membership, allow_roles_from_normal_groups, embed_group_folder_id, is_iam_admin, is_service_account, service_account_name, url */ public struct WriteUser: SDKModel { diff --git a/swift/looker/sdk/streams.swift b/swift/looker/sdk/streams.swift index c01425501..0e260052d 100644 --- a/swift/looker/sdk/streams.swift +++ b/swift/looker/sdk/streams.swift @@ -25,7 +25,7 @@ */ /** - * 504 API methods + * 512 API methods */ @@ -4229,10 +4229,14 @@ open class LookerSDKStream: APIMethods { * @param {Bool} deleted Filter on soft deleted agents. */ deleted: Bool? = nil, + /** + * @param {String} primary_agent_id Match workflow agents with a particular primary agent (parent). Pass "null" to find agents with no primary agent. + */ + primary_agent_id: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let result: SDKResponse = self.get("/agents/search", - ["id": id, "name": name, "description": description, "created_by_user_id": created_by_user_id, "fields": fields, "limit": limit, "category": category, "offset": offset, "sorts": sorts, "filter_or": filter_or as Any?, "not_owned_by": not_owned_by as Any?, "deleted": deleted as Any?], nil, options) + ["id": id, "name": name, "description": description, "created_by_user_id": created_by_user_id, "fields": fields, "limit": limit, "category": category, "offset": offset, "sorts": sorts, "filter_or": filter_or as Any?, "not_owned_by": not_owned_by as Any?, "deleted": deleted as Any?, "primary_agent_id": primary_agent_id], nil, options) return result } @@ -4657,6 +4661,66 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Create Golden Query + * + * Creates a golden query. + * + * POST /golden_queries -> GoldenQuery + */ + public func create_golden_query( + /** + * @param {WriteGoldenQuery} body + */ + _ body: WriteGoldenQuery, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.post("/golden_queries", nil, try! self.encode(body), options) + return result + } + + /** + * ### Update Golden Query + * + * Updates a golden query. + * + * PATCH /golden_queries/{golden_query_id} -> GoldenQuery + */ + public func update_golden_query( + /** + * @param {Int64} golden_query_id Golden Query ID + */ + _ golden_query_id: Int64, + /** + * @param {WriteGoldenQuery} body + */ + _ body: WriteGoldenQuery, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_golden_query_id = encodeParam(golden_query_id) + let result: SDKResponse = self.patch("/golden_queries/\(path_golden_query_id)", nil, try! self.encode(body), options) + return result + } + + /** + * ### Delete Golden Query + * + * Deletes a golden query by ID. + * + * DELETE /golden_queries/{golden_query_id} -> String + */ + public func delete_golden_query( + /** + * @param {Int64} golden_query_id Golden Query ID + */ + _ golden_query_id: Int64, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_golden_query_id = encodeParam(golden_query_id) + let result: SDKResponse = self.delete("/golden_queries/\(path_golden_query_id)", nil, nil, options) + return result + } + // MARK Dashboard: Manage Dashboards @@ -5709,6 +5773,41 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Get Dashboard Filter State + * Returns the stored filter state for a given GUID. + * + * GET /dashboard_filter_state/{guid} -> String + */ + public func dashboard_filter_state( + /** + * @param {String} guid GUID of the filter state + */ + _ guid: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_guid = encodeParam(guid) + let result: SDKResponse = self.get("/dashboard_filter_state/\(path_guid)", nil, nil, options) + return result + } + + /** + * ### Create Dashboard Filter State + * Saves the filter state and returns a GUID. + * + * POST /dashboard_filter_state -> Dashboard + */ + public func create_dashboard_filter_state( + /** + * @param {String} body + */ + _ body: String, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.post("/dashboard_filter_state", nil, try! self.encode(body), options) + return result + } + // MARK DataAction: Run Data Actions @@ -8335,6 +8434,60 @@ open class LookerSDKStream: APIMethods { return result } + /** + * ### Asynchronously Deploy a Remote Branch or Ref to Production + * + * Git must have been configured and deploy permission required. + * This endpoint kicks off the deploy process and returns immediately. + * + * Can only specify either a branch or a ref. + * + * POST /projects/{project_id}/async_deploy_ref_to_production -> AsyncDeployResponse + */ + public func async_deploy_ref_to_production( + /** + * @param {String} project_id Id of project + */ + _ project_id: String, + /** + * @param {String} branch Branch to deploy to production + */ + branch: String? = nil, + /** + * @param {String} ref Ref to deploy to production + */ + ref: String? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let result: SDKResponse = self.post("/projects/\(path_project_id)/async_deploy_ref_to_production", + ["branch": branch, "ref": ref], nil, options) + return result + } + + /** + * ### Check Status of Asynchronous Deploy + * Get the status of an asynchronous deploy operation. + * + * GET /projects/{project_id}/deploy_status/{deployment_id} -> DeployStatusResponse + */ + public func async_deploy_status( + /** + * @param {String} project_id Id of project + */ + _ project_id: String, + /** + * @param {Int64} deployment_id Id of deployment + */ + _ deployment_id: Int64, + options: ITransportSettings? = nil + ) -> SDKResponse { + let path_project_id = encodeParam(project_id) + let path_deployment_id = encodeParam(deployment_id) + let result: SDKResponse = self.get("/projects/\(path_project_id)/deploy_status/\(path_deployment_id)", nil, nil, options) + return result + } + /** * ### Deploy LookML from this Development Mode Project to Production * @@ -11242,6 +11395,26 @@ open class LookerSDKStream: APIMethods { // MARK SelfService: Self Service Models + /** + * ### Get Allowed Connections under advanced connection governance + * + * This endpoint returns the list of allowed connection names for self-service models + * when advanced connection governance is enabled. + * + * GET /self_service_models/allowed_connections -> [String] + */ + public func get_self_service_model_allowed_connections( + /** + * @param {Bool} google_sheets Include connections allowed for Google Sheets. + */ + google_sheets: Bool? = nil, + options: ITransportSettings? = nil + ) -> SDKResponse { + let result: SDKResponse = self.get("/self_service_models/allowed_connections", + ["google_sheets": google_sheets as Any?], nil, options) + return result + } + /** * ### Update certification for a Self Service Explore * @@ -11528,10 +11701,14 @@ open class LookerSDKStream: APIMethods { * @param {Bool} filter_or Combine given search criteria in a boolean OR expression */ filter_or: Bool? = nil, + /** + * @param {String} theme_type Match theme type ('internal', 'embed', or 'all'). + */ + theme_type: String? = nil, options: ITransportSettings? = nil ) -> SDKResponse { let result: SDKResponse = self.get("/themes/search", - ["id": id, "name": name, "begin_at": begin_at as Any?, "end_at": end_at as Any?, "limit": limit, "offset": offset, "sorts": sorts, "fields": fields, "filter_or": filter_or as Any?], nil, options) + ["id": id, "name": name, "begin_at": begin_at as Any?, "end_at": end_at as Any?, "limit": limit, "offset": offset, "sorts": sorts, "fields": fields, "filter_or": filter_or as Any?, "theme_type": theme_type], nil, options) return result }